make testacc PKG=rds TESTS='TestAccRDSClusterInstance_basic'
結合試験は実際のAWS環境にリソースがデプロイされる。 デプロイされるリソースはこのへんで定義されてる
func testAccClusterInstanceConfig_base(rName, engine string) string { return acctest.ConfigCompose( acctest.ConfigAvailableAZsNoOptIn(), testAccClusterInstanceConfig_orderableEngineBase(engine, false), fmt.Sprintf(` resource "aws_rds_cluster" "test" { cluster_identifier = %[2]q availability_zones = [ data.aws_availability_zones.available.names[0], data.aws_availability_zones.available.names[1], data.aws_availability_zones.available.names[2] ] engine = data.aws_rds_engine_version.default.engine engine_version = data.aws_rds_engine_version.default.version database_name = "mydb" master_username = "foo" master_password = "mustbeeightcharacters" skip_final_snapshot = true } `, engine, rName)) }
main ブランチを持ってきているはずなのに。以下のエラーが出てハマった。。。
2024-02-20T18:18:39.014+0900 [ERROR] sdk.helper_resource: Unexpected error: error= | Error running apply: exit status 1 | | Error: creating RDS Cluster (tf-acc-test-xxxxxxxxx): DBSubnetGroupDoesNotCoverEnoughAZs: The DB subnet group doesn't meet Availability Zone (AZ) coverage requirement. Current AZ coverage: us-west-2c. Add subnets to cover at least 2 AZs. | \tstatus code: 400, request id: d4d1ccab-xxx-xxxx-xxxx-xxxxx | | with aws_rds_cluster.test, | on terraform_plugin_test.tf line 31, in resource "aws_rds_cluster" "test": | 31: resource "aws_rds_cluster" "test" {
どうやら前提として、 aws_rds_cluseter
の db_subnet_group
は省略すると以下の動作になるらしい(ドキュメントに明記しておいてほしい・・。多分無いと思う)
- 既存のサブネットグループを(適当に)選択する
- サブネットグループが無かったらサブネットグループを作成するが、その時既存のサブネットを用いる
- その際、サブネット(AZ)の数が足りなかった場合は、エラーになる(サブネットを自動で作ったりはしない)
- Auroraで指定するサブネットグループは最低でも 2AZ またがないといけない
なので、既存のVPCにサブネット(AZ)を3つ作ったら解決した。 ちなみに、リージョンはデフォルトでオレゴン(us-west-2)が選ばれた。 これはテスト中に data ソースで Optin されているリージョンから先頭が自動で選ばれるみたい。これも分かりにくすぎるでしょ・・。