Terraform中如何构造包含map键名的逗号分隔字符串
解决方案
该需求完全可以实现,你不需要让for表达式直接返回字符串,搭配Terraform内置的join()函数即可完成目标格式字符串的生成。
实现逻辑
- for表达式的作用是遍历
aws_s3_object.app_files资源映射,提取所有上传到S3的文件路径,生成字符串列表 - 调用
join()函数将列表元素按指定分隔符拼接,就能得到你需要的逗号分隔字符串 - Terraform会自动识别资源间的依赖关系,等所有S3对象的属性计算完成后再生成字符串、创建SSM参数,无需手动配置依赖
具体代码
在你现有S3对象资源的基础上,添加如下SSM参数资源即可:
resource "aws_ssm_parameter" "app_uploaded_files" { name = "/app/s3/uploaded-file-list" # 替换为你实际需要的SSM参数路径 type = "String" # 第一个参数为分隔符,和示例格式保持一致使用", ";第二个参数为for表达式生成的路径列表 value = join(", ", [for file in aws_s3_object.app_files : file.key]) }
如果你需要的路径格式不是S3实际存储的key(比如要匹配你示例中
scripts/app/xxx.py的前缀格式),只需要修改for表达式内的取值逻辑即可,例如替换为[for local_path, file in aws_s3_object.app_files : "scripts/app/${local_path}"],其中local_path就是fileset()函数返回的本地脚本相对路径。
结果验证
如果需要提前确认生成的字符串格式是否符合预期,可以添加输出块:
output "uploaded_file_list" { value = aws_ssm_parameter.app_uploaded_files.value }
执行terraform plan时就会在输出中打印拼接完成的字符串,确认格式正确再执行应用即可。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

