You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 14:09:29