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

如何通过条件判断在AWS SSM中创建同键不同值的参数?

CloudFormation模板修正方案:根据环境和区域设置SSM参数

原模板存在的语法问题

  • 参数AccountEnv的Default字段格式错误,注释需用#标识,且字符串需正确包裹
  • Conditions中的区域值未加双引号,CloudFormation要求字符串类型必须用引号包裹
  • Mappings属于模板顶级元素,原模板错误嵌套在Conditions下,缩进层级错误
  • 资源ROSALOGGROUPDev1/ROSALOGGROUPDev2缩进层级错误,需作为顶级资源存在
  • !If函数使用不符合语法规范,需嵌套在Properties属性内部
  • 创建两个同名SSM参数会引发冲突(同一区域内参数名称唯一)
  • !FindInMap函数中存在多余引号,导致语法解析失败

修正后的完整模板

Parameters:
  AccountEnv:
    Type: 'AWS::SSM::Parameter::Value<String>'
    Default: '/account/environment' # 该参数存储环境类型(development/systems-integration/production)

Conditions:  
  IsFirstRegion: !Equals [!Ref "AWS::Region", "us-east-1"]
  IsSecondRegion: !Equals [!Ref "AWS::Region", "us-west-1"]

Mappings:
  DomainMap:
    development:
      firstRegion: "local-application-logs"
      secondRegion: "local-2d-application-logs"    
    systems-integration:
      firstRegion: "local-si-application-logs"
      secondRegion: "local2s-application-logs"
    production:
      firstRegion: "local1p-application-logs"
      secondRegion: "local2p-application-logs"

Resources:
  LogGroupNameSSMParam:
    Type: AWS::SSM::Parameter
    Properties:
      Name: "local/logs/loggroupname"
      Type: "String"
      Value: !If
        - IsFirstRegion
        - !FindInMap [DomainMap, !Ref AccountEnv, firstRegion]
        - !FindInMap [DomainMap, !Ref AccountEnv, secondRegion]
      Description: "存储对应环境和区域的日志组名称"

修正逻辑说明

  1. 修复所有语法错误:调整缩进层级、补全字符串引号、修正注释格式、移除多余引号
  2. 合并为单个SSM参数资源:避免同名参数冲突,通过!If函数根据当前区域动态选择映射值
  3. 保持逻辑完整性:通过Mappings维护不同环境、不同区域对应的日志组名称,便于后续维护
  4. 标准化命名:将IssecondRegion改为IsSecondRegion,保持命名一致性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 22:57:26