如何将可用区(AZ)列表从Terraform传递到CloudFormation模板?
报错根因
- Terraform 的
aws_cloudformation_stack资源的parameters属性强制要求所有参数值为字符串类型,该限制和 CloudFormation 模板内定义的参数类型无关,所以直接传入列表类型的var.aws_azs会触发类型校验错误。 - CloudFormation 自身的
List类型参数原生支持接收逗号分隔的字符串形式输入,会自动将其解析为列表使用,无需额外调整CloudFormation模板。
解决方法
修改 aws_cloudformation_stack 资源中 AvailabilityZones 参数的赋值逻辑,使用 Terraform 内置的 join 函数将 AZ 列表转换为逗号分隔的字符串即可,修改后的代码如下:
resource "aws_cloudformation_stack" "xxx" { name = "xxx-stack" template_body = file("../cloudformation/xxx_CloudFormation_template_2.1.1.json") parameters = { VpcId = aws_vpc.xxxvpc.id SubnetCidrBlock = var.aws_vpc_cidr # 将列表转换为逗号分隔的字符串传入 AvailabilityZones = join(",", var.aws_azs) InstanceType = "m5.4xlarge" ExternalNet = "0.0.0.0/0" .... } on_failure = "DELETE" }
修改后重新执行terraform apply即可正常传递AZ列表参数。
内容的提问来源于stack exchange,提问作者Nathan Sowatskey
相关产品推荐
相关产品推荐

