結論
環境
AmazonLinux2
Terraform 1.3.5
registry.terraform.io/hashicorp/aws v3.75.2
やりたいこと
Aurora構築をTerraformから行う際に、はじめに作成されるinstanceを確実にWriterで作成できるようにしたい。
その後作成されるinstanceはReaderで複数AZにまたがるようにする。
想定
これまでcountで複数のinstanceを作成していたのをmaster
とreplica
としてリソースを分けてreplica
のcluster_identifier
はoutputから取得した値を設定することでmaster
instanceはWriter、replica
はReaderで作成されるのでは?
先にシングルインスタンスとしてAuroraが作成されるだろうからもちろんWriterinstanceができる、その後はReaderinstanceができて、そこでAZを分散させることで指定したAuroraが構築できるはず!!
ディレクトリ構成
.
├── environment
│ ├── main.tf
│ ├── output.tf
│ └── valiavles.tf
├── shared
│ └── modules
│ └── aurora
│ ├── main.tf
│ └── valiavles.tf
countでの作成
resource "aws_rds_cluster" "example_cluster" {
cluster_identifier = var.example_identifier
~
}
resource "aws_rds_cluster_instance" "example_instance" {
count = 3
cluster_identifier = aws_rds_cluster.example_cluster.cluster_identifier
~
}
outputから値を取得
resource "aws_rds_cluster" "example_cluster" {
cluster_identifier = var.example_identifier
~
}
resource "aws_rds_cluster_instance" "example_master_instance" {
cluster_identifier = aws_rds_cluster.example_cluster.cluster_identifier
~
}
resource "aws_rds_cluster_instance" "example_replica_instance" {
// environmentで取得したoutputを設定する
cluster_identifier = var.cluster_identifier
~
}
// environment/output.tf
output "cluster_identifier" {
value = aws_rds_cluster.example.cluster_identifier
}
結果
// 1回目 お!できたのか!?
cluster
- instanceA:Writer:1a
- instanceB:Reader:1c
- instanceC:Reader:1a
// 2回目 いいじゃん!!
cluster
- instanceA:Writer:1a
- instanceB:Reader:1c
- instanceC:Reader:1a
// 3回目 だめじゃん、、。
cluster
- instanceA:Reader:1a
- instanceB:Reader:1a
- instanceC:Writer:1c
結果としてやりたいことはできませんでした。
AWS側でよしなにやってくれるっぽいのでそこだよりなのかな。
何も成果を得られないと言いましたが、outputを使ったのは初めてだったので勉強になりました。
おまけ
CLI上でproviderのversionを確認する
terraform providers -version
Terraform v1.0.5
on linux_amd64
+ provider registry.terraform.io/hashicorp/aws v3.28.0
Your version of Terraform is out of date! The latest version