web-dev-qa-db-fra.com

Comment créer une Terraform avec l'instruction if, else, elsif?

Je mets en place un module terraform pour créer un cluster aurora.
Je dois avoir une option pour la réplication entre régions, donc je dois décider de la région de la réplique par rapport à la région source.
Existe-t-il un moyen de faire une option multiple conditionnelle dans terraform?

3
Matan

Vous pouvez essayer d'utiliser simplement un map et lookup. Exemple:

/* 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)}"
}

Si var.region est l'endroit où vous avez déployé votre cluster actuel et sa valeur est par exemple us-east-1, la recherche renverra us-east-2 comme région dans laquelle vous devez déployer votre réplique.

Adaptez cela à vos besoins.

1
Esteban Garcia

Je ne pense pas que vous en ayez vraiment besoin.

En général, il existe des variables que vous pouvez insérer en entrée et vous pouvez alimenter ces variables avec des valeurs. Si vous avez besoin d'une logique/prise de décision, le mieux est d'avoir dans vos variables CI/CD differenet differenet (c'est-à-dire la région et la région source) ou de faire de la logique dans les scripts avant d'exécuter terraform.

Donc dans mon cas, nous avons dans le bambou différentes variables dans le plan de déploiement et chacune a son propre environnement (dev-test-stag-prod) et région (c'est-à-dire us-east-1). Lorsqu'il est exécuté, il définit la variable terraform sur l'environnement et la région donnés.

Jusque-là, nous avons deux comptes, l'un est sandbox et l'autre est "production one", mais sur "production one" il y a ce dev, test, stag, prod, donc QA et une certaine intégration y sont également testés. Au début, nous utilisons simplement le bac à sable pour essayer notre déploiement. Comme je ne souhaite pas configurer les accès AWS dans chaque build, j'ai utilisé cette solution de travail avant d'exécuter 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