オーロラクラスターを作成するためにterraformモジュールを設定しています。
クロスリージョンレプリケーションのオプションが必要なため、ソースリージョンに関連してレプリカのリージョンを決定する必要があります。
テラフォームで条件付きで複数のオプションを実行する方法はありますか?
map
とlookup
を使用してみてください。例:
/* In your variables.tf */
variable "region_mapping" {
description = "mapping for cross-region replication"
default = {
"us-east-1" = "us-east-2",
"us-west-1" = "us-west-2"
}
}
/* Then create use lookup to get the replication region from the deployment region */
resource "example" "example" {
region = "${lookup(var.region_mapping, var.region)}"
}
var.region
が現在のクラスターがデプロイされている場所であり、その値がus-east-1
などの場合、ルックアップはレプリカをデプロイする必要があるリージョンとしてus-east-2
を返します。
これを必要に応じて調整してください。
あなたは本当にこれが必要だとは思わない。
一般に、入力として挿入できる変数があり、この変数に値を与えることができます。ロジック/意思決定が必要な場合、最善の方法は、CI/CD pipleine差分変数(つまり、リージョンとソースリージョン)に含めるか、Teraformを実行する前にスクリプトでロジックを実行することです。
したがって、私の場合、bambooにはデプロイメントプランのさまざまな変数があり、それぞれに独自の環境(dev-test-stag-prod)とリージョン(us-east-1)があります。それが実行されるとき、それは与えられた環境と地域にテラフォーム変数を設定します。
それまでは、2つのアカウントがあり、1つはサンドボックスで、もう1つは「本番用」ですが、「本番用」では、dev、test、stag、prodがあるため、QAと一部の統合もそこでテストされます。最初は、サンドボックスを使用してデプロイメントを試します。各ビルドでAWSアクセスをセットアップしたくないので、terraform apply
を実行する前にこのワークロードを使用しました:
if [ "$PROD_BUILD" = "true" ]
then
echo "PROD build is used, the PROD AWS tokens will be used"
export TF_VAR_CERTIFICATE_DOMAIN=$PROD_TERRAFORM_CERTIFICATE_DOMAIN
export AWS_ACCESS_KEY_ID=${PROD_AWS_ACCESS_KEY_ID}
export AWS_SECRET_ACCESS_KEY=${PROD_AWS_SECRET_ACCESS_KEY}
export S3_TERRAFORM_STATE_BUCKET=$PROD_S3_TERRAFORM_STATE_BUCKET
export S3_TERRAFORM_STATE_REGION=$PROD_S3_TERRAFORM_STATE_REGION
else
echo "DEV build is used, the DEV AWS tokens will be used"
export TF_VAR_CERTIFICATE_DOMAIN=$DEV_TERRAFORM_CERTIFICATE_DOMAIN
export AWS_ACCESS_KEY_ID=${DEV_AWS_ACCESS_KEY_ID}
export AWS_SECRET_ACCESS_KEY=${DEV_AWS_SECRET_ACCESS_KEY}
export S3_TERRAFORM_STATE_BUCKET=$DEV_S3_TERRAFORM_STATE_BUCKET
export S3_TERRAFORM_STATE_REGION=$DEV_S3_TERRAFORM_STATE_REGION
fi