如何使用Terraform上传带全量标签的参数及指定标签值到AWS Parameter Store
Terraform上传AMI标签到AWS Parameter Store实现方法
现有代码修正
你提供的初始配置存在两处笔误,修正后可用的AMI ID参数配置如下:
resource "aws_ssm_parameter" "ami_id" { name = "ami_id" # 字符串值需要用引号包裹 type = "String" value = data.aws_ami.centos_ami.id provider = aws.us-west-2 # 原代码拼写错误,缺少字符r overwrite = true }
标签参数创建方案
你通过data.aws_ami获取到的AMI信息中,所有标签都存储在data.aws_ami.centos_ami.tags的map类型属性中,可按需取用:
- 上传所有AMI标签为单个SSM参数
可以把标签集合序列化为JSON字符串存储,后续使用时直接解析即可,示例代码:resource "aws_ssm_parameter" "ami_all_tags" { name = "/ami/tags/all" type = "String" value = jsonencode(data.aws_ami.centos_ami.tags) provider = aws.us-west-2 overwrite = true } - 单独上传指定标签的参数
直接从标签map中取对应键的值即可,以提取名为os_version的标签为例,用lookup函数可以处理标签不存在的场景,避免执行报错:resource "aws_ssm_parameter" "ami_tag_os_version" { name = "/ami/tags/os_version" type = "String" value = lookup(data.aws_ami.centos_ami.tags, "os_version", "undefined") provider = aws.us-west-2 overwrite = true } - 批量为所有标签单独生成SSM参数
如果需要把每个AMI标签都独立存储为SSM参数,可以用for_each遍历标签map实现:resource "aws_ssm_parameter" "ami_single_tags" { for_each = data.aws_ami.centos_ami.tags name = "/ami/tags/${each.key}" type = "String" value = each.value provider = aws.us-west-2 overwrite = true }
注意事项
- SSM参数命名建议遵循AWS的路径风格,方便后续按路径批量查询管理
- 如果标签值属于敏感信息,可将
type字段改为SecureString实现加密存储
内容的提问来源于stack exchange,提问作者setup
相关产品推荐
相关产品推荐

