Tạo nhiều aws_cloudformation_stack dựa trên tên được tham số hóa với Terraform
Có thể tạo nhiều ngăn xếp CloutFormation với một aws_cloudformation_stack
định nghĩa tài nguyên trong biểu mẫu, dựa trên tên được tham số hóa không? Tôi có các nguồn lực sau đây được xác định và tôi muốn có một chồng mỗi app_name
, app_env
build_name
kết hợp:
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}"
}
Khi tôi chạy terraform apply
khi build_name
tên thay đổi, ngăn xếp cũ sẽ bị xóa và một ngăn xếp mới được tạo, tuy nhiên tôi muốn giữ ngăn xếp cũ và tạo một ngăn xếp mới
Trả lời
Một cách là xác định biến của bạn build_name
dưới dạng danh sách. Sau đó, khi bạn tạo bản dựng mới, bạn chỉ cần nối chúng vào danh sách và tạo ngăn xếp với sự trợ giúp của for_each để lặp lại tên bản dựng.
Ví dụ: nếu bạn có những điều sau:
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}"
}
Sau đó, nếu bạn muốn bản dựng thứ hai cho ngăn xếp, bạn chỉ cần mở rộng variable "build_name"
:
variable "build_name" {
default = ["test3", "new_build"]
}