Buat beberapa aws_cloudformation_stack berdasarkan nama parametrized dengan Terraform
Apakah mungkin untuk membuat beberapa tumpukan CloutFormation dengan satu aws_cloudformation_stack
definisi sumber daya di terraform, berdasarkan nama parametrized? Saya memiliki sumber daya berikut yang ditentukan dan saya ingin memiliki tumpukan per app_name
, app_env
build_name
kombo:
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}"
}
Ketika saya menjalankan terraform apply
ketika build_name
nama berubah, tumpukan lama akan dihapus dan yang baru dibuat, namun saya ingin menyimpan tumpukan lama dan membuat yang baru
Jawaban
Salah satu caranya adalah dengan mendefinisikan variabel Anda build_name
sebagai daftar. Kemudian, saat Anda membuat build baru, Anda cukup menambahkannya ke daftar, dan membuat tumpukan dengan bantuan for_each untuk mengulang nama build.
Misalnya, jika Anda memiliki yang berikut ini:
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}"
}
Kemudian jika Anda ingin build kedua untuk tumpukan, Anda cukup memperluas variable "build_name"
:
variable "build_name" {
default = ["test3", "new_build"]
}