AWS CloudFormation 错误“属性 AlarmActions 的值必须是字符串列表类型”

Posted

技术标签:

【中文标题】AWS CloudFormation 错误“属性 AlarmActions 的值必须是字符串列表类型”【英文标题】:AWS CloudFormation Error 'Value of property AlarmActions must be of type List of String' 【发布时间】:2020-07-14 15:27:28 【问题描述】:

我正在尝试更新我的 cf 堆栈并在部署时遇到以下错误: '属性 AlarmActions 的值必须是字符串列表类型'

这是属性 AlarmActions:

 AlarmActions:
                - !Ref SparksTeamSNSTopic
                - !If
                    - CreateProdResources
                    - - !Ref SparksProdAlarmSNSTopic
                      - !ImportValue
                          'Fn::Sub': '$Environment-BMCMajorAlarmTopic'
                    - - !Ref 'AWS::NoValue'                   

【问题讨论】:

您的!If 语法不正确,您能否解释一下!If 的预期结果? 是的,我可以。我希望当我创建产品资源时 SparksProdAlarmSNSTopic 和 $Environment-BMCMajorAlarmTopic 将被添加。否则没有参考 【参考方案1】:

根据 AWS documentation,AlarmActions 属性必须包含值,作为字符串列表。所以如果是 JSON,你应该有这样的东西:

"AlarmActions":[
      "Ref":"ARN of something",
      "Ref":"ARN of something"           
]

但既然你使用过 YAML,你应该有这样的东西:

AlarmActions:
      - !Split [",", !Ref SparksTeamSNSTopic]  <-- make sure SparksTeamSNSTopic contains a list of strings; hence this will split it by comma 

您可以将SparksTeamSNSTopic 定义为

"SparksTeamSNSTopic" : ["topicarn1", "topicarn2"]

【讨论】:

我的主题定义正确。它以前工作得很好......这是我以前的:AlarmActions: - !Ref SparksTeamSNSTopic - !If - CreateProdResources - !Ref SparksProdAlarmSNSTopic - !ImportValue 'Fn::Sub': '$Environment-BMCCriticalAlarmTopic'【参考方案2】:

试试这个,

AlarmActions:
    - !Ref SparksTeamSNSTopic
    - !If
      - CreateProdResources
      - - !Ref SparksProdAlarmSNSTopic
        - !ImportValue
            'Fn::Sub': '$Environment-BMCMajorAlarmTopic'
      - !Ref 'AWS::NoValue'  

【讨论】:

我会试试的。仅据我所知,当条件不满足时,不可能引用字符串列表? 你可以,但不能使用 NoValue。 它有什么问题? AWS::NoValue 就像None

以上是关于AWS CloudFormation 错误“属性 AlarmActions 的值必须是字符串列表类型”的主要内容,如果未能解决你的问题,请参考以下文章

带有 CloudFormation 的 AWS Cognito - 架构属性上的 InvalidParameterException

AWS Cloudformation遇到不受支持的属性类型

AWS CloudFormation:结合 ImportValue 和 Sub 函数会导致错误

AWS - 错误 - 更新 Auto Scaling 组、Amazon CloudFormation、无法部署配置

AWS CloudFormation:Cognito LambdaTrigger CustomEmailSender - 属性“AWS CloudFormation 目前不支持。”和 CDK 的使用

通过 CloudFormation 部署 AWS UserPool 并更新属性