web-dev-qa-db-ja.com

if、else、elsifステートメントでTerraformを作成する方法は?

オーロラクラスターを作成するためにterraformモジュールを設定しています。
クロスリージョンレプリケーションのオプションが必要なため、ソースリージョンに関連してレプリカのリージョンを決定する必要があります。
テラフォームで条件付きで複数のオプションを実行する方法はありますか?

3
Matan

maplookupを使用してみてください。例:

/* 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を返します。

これを必要に応じて調整してください。

1
Esteban Garcia

あなたは本当にこれが必要だとは思わない。

一般に、入力として挿入できる変数があり、この変数に値を与えることができます。ロジック/意思決定が必要な場合、最善の方法は、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
0
libik