Terraform 0.11 无法为AWS EC2实例添加动态安全组的问题问询
Terraform 0.11.x EC2安全组ID显式列表转换解决方案
报错原因说明
tostring函数为Terraform 0.12及以上版本新增的类型转换函数,你当前使用的0.11.x版本不存在该函数,因此format4写法直接报错。- format2报错是Terraform 0.11的类型推断限制导致:当
list()函数同时传入资源的computed动态属性(此处为模块内新建安全组的id,资源创建完成后才会生成的未知值)和静态输入变量时,Terraform无法自动推断返回值为字符串列表类型,触发should be a list的校验错误。
正确显式列表写法
将list()函数的每个入参都先单独做字符串插值,强制所有元素类型统一为字符串,即可让Terraform 0.11正确识别返回值类型:
resource "aws_instance" "instance" { // ... 其他实例配置 # 显式列表写法,兼容后续列表拼接 vpc_security_group_ids = "${list("${aws_security_group.secGrp_1.id}", "${var.secGrp_2}")}" }
后续新增安全组的拼接方法
如果需要在引用模块时追加外部传入的安全组列表,直接使用concat函数拼接即可,示例如下(假设你新增了输入变量var.extra_security_group_ids用来接收外部安全组列表):
vpc_security_group_ids = "${concat( list("${aws_security_group.secGrp_1.id}", "${var.secGrp_2}"), var.extra_security_group_ids )}"
内容的提问来源于stack exchange,提问作者rvk_user
相关产品推荐
相关产品推荐

