สร้าง aws_cloudformation_stack หลายรายการโดยใช้ชื่อที่เป็นพารามิเตอร์ด้วย Terraform
เป็นไปได้หรือไม่ที่จะสร้างสแต็ก CloutFormation หลายรายการโดยมีaws_cloudformation_stack
นิยามทรัพยากรเดียวในรูปแบบพื้นดินโดยใช้ชื่อที่เป็นพารามิเตอร์ ฉันมีทรัพยากรต่อไปนี้กำหนดไว้และฉันต้องการที่จะมีต่อสแต็คapp_name
, app_env
build_name
คำสั่งผสม:
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}"
}
เมื่อฉันเรียกใช้terraform apply
เมื่อbuild_name
เปลี่ยนชื่อสแต็กเก่าจะถูกลบและสร้างสแต็กใหม่อย่างไรก็ตามฉันต้องการเก็บสแต็กเก่าไว้และสร้างใหม่
คำตอบ
1 Marcin
วิธีหนึ่งคือกำหนดตัวแปรของคุณbuild_name
เป็นรายการ จากนั้นเมื่อคุณสร้างบิลด์ใหม่คุณเพียงแค่ผนวกเข้ากับรายการและสร้างสแต็กด้วยความช่วยเหลือของfor_eachเพื่อวนซ้ำเหนือชื่อบิลด์
ตัวอย่างเช่นหากคุณมีสิ่งต่อไปนี้:
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}"
}
จากนั้นถ้าคุณต้องการสร้างที่สองสำหรับสแต็กคุณเพียงแค่ขยายvariable "build_name"
:
variable "build_name" {
default = ["test3", "new_build"]
}