Terraform v1.3.1中LB资源安全组值传递的正确语法咨询
Terraform v1.3.1 对应语法转换
原v0.11.11的代码意图是将两个来源的安全组ID合并为列表:从批量创建的lb_security_group中按当前count.index取对应ID,再加上cloudfront_sg_id变量分割后的ID列表。转换到v1.3.1的正确语法如下:
security_groups = concat( # 从lb_security_group中按索引取对应ID,转为单元素列表 [aws_security_group.lb_security_group[count.index].id], # 分割cloudfront_sg_id变量为ID列表 split(",", var.cloudfront_sg_id) )
关键语法变化说明:
- 移除旧插值语法:新版本Terraform无需用
${}包裹表达式,直接写逻辑即可。 - 资源列表访问:用
[*](splat表达式)替代旧版的.*来获取批量资源的属性列表;如果是按count.index精准访问,直接用[count.index]更简洁(若count值与lb_security_group的count一致,不会出现索引越界)。 - 明确列表合并:原代码的写法在v0.11中依赖隐式列表转换,新版本需用
concat函数明确合并两个列表,确保类型匹配。
如果需要保留原代码中element函数的“索引越界时循环取值”特性,可改为:
security_groups = concat( [element(aws_security_group.lb_security_group[*].id, count.index)], split(",", var.cloudfront_sg_id) )
内容的提问来源于stack exchange,提问作者madhavi
相关产品推荐
相关产品推荐

