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

如何基于Stage参数通过AWS CloudFormation按环境条件设置SSM参数值

根据Stage参数动态设置SSM参数Value的两种方案

我来给你两种实用的方案,都能轻松实现根据Stage参数动态设置SSM参数的Value值,适配不同部署环境的需求:

方案一:用Mappings映射表(推荐多环境场景)

如果你的部署环境较多(比如dev、staging、prod等),用Mappings把环境和对应参数值提前映射好,代码会更整洁易维护。

修改后的完整CloudFormation模板示例:

Parameters:
  Stage:
    Type: String
    AllowedValues: [dev, staging, prod]
    Description: Target deployment stage

# 定义环境与Broker名称的映射关系
Mappings:
  EnvironmentBrokerConfig:
    dev:
      BrokerName: "dev-sns-broker"
    staging:
      BrokerName: "staging-sns-broker"
    prod:
      BrokerName: "prod-sns-broker"

Resources:
  SNSTopicName:
    Type: AWS::SSM::Parameter
    Properties:
      Description: SNS Topic Name
      Name: !Sub "${Stage}/broker_name"
      Type: String
      # 通过Stage参数匹配映射表中的对应值
      Value: !FindInMap [EnvironmentBrokerConfig, !Ref Stage, BrokerName]

部署时,只要传入不同的Stage参数,SSM参数的Value就会自动匹配对应的环境名称,后续新增环境只需要在Mappings里追加即可。

方案二:用Conditions条件判断(适合少环境场景)

如果你的环境只有2-3种(比如仅prod和非prod),直接用条件判断会更直观。

示例代码:

Parameters:
  Stage:
    Type: String
    AllowedValues: [dev, prod]
    Description: Target deployment stage

# 定义判断条件:是否为生产环境
Conditions:
  IsProduction: !Equals [!Ref Stage, "prod"]

Resources:
  SNSTopicName:
    Type: AWS::SSM::Parameter
    Properties:
      Description: SNS Topic Name
      Name: !Sub "${Stage}/broker_name"
      Type: String
      # 根据条件选择对应的值
      Value: !If [IsProduction, "prod-sns-broker", "dev-sns-broker"]

这里通过!If函数判断当前是否为生产环境,返回对应的参数值。如果需要新增环境,也可以嵌套!If来扩展,但环境过多时还是推荐用Mappings方案。

注意事项

不管用哪种方案,都要确保Stage参数的AllowedValues和你定义的映射/条件值完全对应,避免部署时出现匹配错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 04:32:40