はじめに
こんにちは、そしてこんばんは。
クラウドインテグレーション事業部の大嵩です。
今回は私がTerraformでRDSインスタンスを構築しようとした際に
沼ってしまったポイントに関して紹介したいと思います。
この投稿がどなたかの役に立ちますと幸いです。
何で沼ったのか
ずばり、RDSインスタンスを構築する際の「db_name」の指定で沼ってしまいました。
今回使用するDBエンジンはMySQLなのですが、お恥ずかしながらMySQLのデータベース名に命名規則があることを認識しておらず、エラーを発生させてしまいました。
エラー発生時のコード
以下のようにterrafomのコードを作成していました。
resource "aws_db_instance" "test_db" { identifier = "terraform-test-db" db_name = "terraform-test-db" engine = "mysql" engine_version = "8.0.35" instance_class = "db.t3.micro" allocated_storage = 20 username = "admin" password = "hogehoge" #テストなので直書き apply_immediately = true backup_retention_period = 0 skip_final_snapshot = true db_subnet_group_name = aws_db_subnet_group.test_db_subnet.name vpc_security_group_ids = [ aws_security_group.test_rds_sg.id ] }
terraform apply後 にエラーが発生
terraform applyが通るかと思いきや、下記のエラーが発生。InvalidParameterValue: DBName must begin with a letter and contain only alphanumeric characters.
こちらのエラーは、「DBName は文字で始まり、英数字のみを含む必要があります」とのことで、
特にdb_nameで指定した「terraform-test-db」は問題なさそうですが、AWSのドキュメントから調査を開始。
aws_db_instance.test_db: Creating... ╷ │ Error: creating RDS DB Instance (terraform-test-db): InvalidParameterValue: DBName must begin with a letter and contain only alphanumeric characters. │ status code: 400, request id: XXXXXXXX │ │ with aws_db_instance.test_db, │ on rds.tf line 1, in resource "aws_db_instance" "test_db": │ 1: resource "aws_db_instance" "test_db" { │ ╵
結論
AWSドキュメント(DBNameの項目)によると、
英数字・アンダースコア(_) のみが使用可能とのことでした。。。
インスタンス名はハイフンでも指定が可能ですが、データベース名は不可とのことです。
※ ブラウザの翻訳機能使用
対策
最後に、対策としては以下が適切かと思われます。
- db_name をインタンス構築時に指定しない
- 指定する場合の名前のつなぎは、ハイフンではなくアンダースコアにする
- 例: 「 terraform_test_db 」
TerraformでRDSインスタンスを構築する際はぜひ参考にしてください!