如何在 AWS-SAM 中为每个阶段类型指定不同的环境变量 template.yml

How to specify different environment variables for each stage type in AWS-SAM template.yml

我希望在 template.yml

中为每个构建阶段设置不同的环境变量

我会想象这样的事情:

Globals:
  Function:
    Environment:
      Variables:
        SomeHost: x.amazonaws.com
        DBName: somename
        DBPort: 5430
        DBUsername: ${var1}
        API_BASE_URL: ${var2}

Parameters:
  paramEnvironment:
    Type: String
    AllowedValues:
    - stage
    - prod
    Default: stage

哪里可以设置

stage:
  var1: user1
  API_BASE_URL: https://baseurl1.com
prod:
  var1: user2
  API_BASE_URL: https://baseurl2.com

当我 运行 使用 paramEnvironment 部署时,环境将获得所有基于阶段的变量

处理不同环境(尤其是无服务器环境)的理想方式是在同一组织下拥有多个 AWS 账户 (AWS Organizations),其中您有一个单独的账户用于暂存,另一个账户用于生产。

因此,如果您想在单个帐户中解决此问题,您可以使用 SSM 参数或 SAM 模板中的映射

引用现有系统管理器参数

Parameters:
  ApiBaseUrl :
    Type : 'AWS::SSM::Parameter::Value<String>'
    Default:  /${paramEnvironment}/apiBaseUrl

通过 SAM 模板中的映射

Mappings:
    EnvVariables:
        stage:
           var1: user1
           API_BASE_URL: https://baseurl1.com
        prod:
           var1: user2
           API_BASE_URL: https://baseurl2.com

并参考地图使用,

!FindInMap [ EnvVariables, ${paramEnvironment}, API_BASE_URL ]