Terraform के साथ पैरामीट्रिक नाम पर आधारित कई aws_cloudformation_stack बनाएं
क्या Paradrized aws_cloudformation_stack
नाम के आधार पर, टेराफॉर्म में एक संसाधन परिभाषा के साथ कई CloutFormation स्टैक बनाना संभव है ? मैं निम्न संसाधनों परिभाषित किया गया है और मैं प्रति एक ढेर करना चाहते हैं 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
नाम परिवर्तन, पुराने ढेर हट जाता है और एक नया बनाया एक, तथापि मैं पुराने ढेर रखने के लिए और एक नया बना चाहते हैं
जवाब
एक तरह से 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"]
}