Créez plusieurs aws_cloudformation_stack en fonction du nom paramétré avec Terraform
Est-il possible de créer plusieurs piles CloutFormation avec une aws_cloudformation_stackdéfinition de ressource dans terraform, en fonction du nom paramétré? Je les ressources suivantes définies et je voudrais avoir une pile par app_name, app_env build_namecombo:
resource "aws_s3_bucket_object" "sam_deploy_object" {
bucket = var.sam_bucket
key = "${var.app_env}/${var.build_name}/sam_template_${timestamp()}.yaml" source = "../.aws-sam/sam_template_output.yaml" etag = filemd5("../.aws-sam/sam_template_output.yaml") } resource "aws_cloudformation_stack" "subscriptions_sam_stack" { name = "${var.app_name}---${var.app_env}--${var.build_name}"
capabilities = ["CAPABILITY_NAMED_IAM", "CAPABILITY_AUTO_EXPAND"]
template_url = "https://${var.sam_bucket}.s3-${data.aws_region.current.name}.amazonaws.com/${aws_s3_bucket_object.sam_deploy_object.id}"
}
Lorsque je cours terraform applylorsque le build_namenom change, l'ancienne pile est supprimée et une nouvelle est créée, mais j'aimerais conserver l'ancienne pile et en créer une nouvelle
Réponses
Une façon serait de définir votre variable build_namesous forme de liste. Ensuite, lorsque vous créez une nouvelle build, vous les ajoutez simplement à la liste et créez des piles à l'aide de for_each pour parcourir les noms de build.
Par exemple, si vous disposez des éléments suivants:
variable "app_name" {
default = "test1"
}
variable "app_env" {
default = "test2"
}
variable "build_name" {
default = ["test3"]
}
resource "aws_cloudformation_stack" "subscriptions_sam_stack" {
for_each = toset(var.build_name)
name = "${var.app_name}---${var.app_env}--${each.value}" capabilities = ["CAPABILITY_NAMED_IAM", "CAPABILITY_AUTO_EXPAND"] template_url = "https://${var.sam_bucket}.s3-${data.aws_region.current.name}.amazonaws.com/${aws_s3_bucket_object.sam_deploy_object.id}"
}
Ensuite, si vous voulez une deuxième construction pour la pile, vous étendez simplement variable "build_name":
variable "build_name" {
default = ["test3", "new_build"]
}