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

如何向CloudFormation模板传递键值对列表参数?遇Split函数报错

问题解决:CloudFormation SSM参数Tags属性报错every Fn::Split object requires two parameters

错误原因分析

你遇到的错误有两层核心问题:

  1. Fn::Split参数不合法:要么LinuxSSMParameterTags未传递有效字符串值(比如参数类型设为List<String>而非String,或者值为空),导致Split缺少必要的第二个参数;
  2. Tags属性类型不匹配:即便Split执行成功,它返回的是字符串数组,但AWS::SSM::Parameter的Tags属性要求的是键值对对象列表(格式为[{Key: "标签键", Value: "标签值"}, ...]),字符串数组无法直接赋值给该属性。

解决方案

根据你传递标签参数的格式,选择对应的修正方式:

方式1:参数为键=值,键=值格式的字符串

如果LinuxSSMParameterTags是类似Env=Prod,App=Monitoring的字符串,需要拆分每个键值对后构造符合要求的标签格式。注意需使用CloudFormation 2023-09-01及以上版本(支持!ForEach):

AWSTemplateFormatVersion: 2023-09-01
Resources:
  LinuxCWConfigSSMParameter:
    Type: "AWS::SSM::Parameter"
    Properties:
      Name: !Ref LinuxSSMParameterName
      Tags: !ForEach TagPair in !Split [",", !Ref LinuxSSMParameterTags]
        - Key: !Select [0, !Split ["=", !Ref TagPair]]
          Value: !Select [1, !Split ["=", !Ref TagPair]]
      Type: "String"
      Value: |
        {
          "agent": {
            "metrics_collection_interval": 60
          },
          "metrics": {
            "metrics_collected": {
              "mem": {
                "measurement": [
                  {"name": "mem_active", "rename": "MemoryActive"},
                  {"name": "mem_available", "rename": "MemoryAvailable"},
                  {"name": "mem_available_percent", "rename": "%MemoryAvailable"},
                  {"name": "mem_buffered", "rename": "MemoryBuffered"},
                  {"name": "mem_cached", "rename": "MemoryCached"},
                  {"name": "mem_free", "rename": "MemoryFree"},
                  {"name": "mem_inactive", "rename": "MemoryInactive"},
                  {"name": "mem_total", "rename": "MemoryTotal"},
                  {"name": "mem_used", "rename": "MemoryUsed"},
                  {"name": "mem_used_percent", "rename": "%MemoryUsed"}
                ]
              }
            },
            "append_dimensions": {
              "InstanceId": "${aws:InstanceId}"
            }
          }
        }

方式2:参数为JSON格式的标签数组字符串

如果LinuxSSMParameterTags已经是符合Tags格式的JSON字符串(比如[{"Key":"Env","Value":"Prod"},{"Key":"App","Value":"Monitoring"}]),直接用!FromJson转换即可:

Tags: !FromJson !Ref LinuxSSMParameterTags

额外检查

确保LinuxSSMParameterTags参数的类型设置为String,而非List<String>,因为!Split的第二个参数必须是字符串类型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 15:33:39