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

CloudFormation模板通过动态参数为EC2实例加标签报错排查

CloudFormation动态传递EC2标签参数报错解决方案

问题说明

需将CloudFormation模板中的动态参数作为EC2实例标签传递,标签格式示例为[{"Key":"Environment","Value":"Test"},{"Key":"Application","Value":"Web"}],但部署时触发错误:「Tags必须是列表而非字符串」。将参数类型改为List后问题仍未解决,仅静态指定Key和Value时可成功添加标签。

现有配置

参数定义

pTags:
    Type: String
    Description: List of tags for the Ec2
    Default: ''

EC2资源配置

Tags: !Ref pTags

解决方法

问题核心在于直接引用字符串/List类型参数时,CloudFormation会将其视为纯文本或字符串列表,无法匹配Tags所需的键值对对象列表结构。以下是两种可行的修复方案:

方案1:使用!FromJson解析JSON字符串参数

保持参数为String类型,传递合法的JSON格式标签字符串,通过!FromJson将字符串转换为标签对象列表:

  1. 调整参数定义(明确格式要求):
pTags:
    Type: String
    Description: List of tags in JSON format, e.g. '[{"Key":"Environment","Value":"Test"},{"Key":"Application","Value":"Web"}]'
    Default: '[]'
  1. 修改EC2的Tags配置:
Tags: !FromJson !Ref pTags

方案2:用CommaDelimitedList配合!ForEach拆分键值对

若不想传递完整JSON字符串,可将参数定义为CommaDelimitedList,每个元素格式为Key=Value,再通过CloudFormation语言扩展转换为标签列表:

  1. 参数定义:
pTags:
    Type: CommaDelimitedList
    Description: List of tags in Key=Value format, e.g. 'Environment=Test,Application=Web'
    Default: []
  1. 启用语言扩展并配置Tags:
Transform: AWS::LanguageExtensions

Resources:
  MyEC2Instance:
    Type: AWS::EC2::Instance
    Properties:
      # 其他EC2配置项...
      Tags:
        !ForEach TagPair in !Ref pTags:
          - Key: !Select [0, !Split ['=', !Ref TagPair]]
            Value: !Select [1, !Split ['=', !Ref TagPair]]

注意事项

  • 使用!FromJson时,传递的参数必须是合法JSON字符串,控制台输入无需转义,CLI传递时需注意引号转义。
  • !ForEach依赖CloudFormation语言扩展,需确保模板启用AWS::LanguageExtensions转换。

内容的提问来源于stack exchange,提问作者Yogesh Toraskar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 09:32:47