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_stack
dé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_name
combo:
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 apply
lorsque le build_name
nom 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_name
sous 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"]
}