问题描述
我希望在我的 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
运行 deploy 时,环境将获得所有基于阶段的变量
解决方法
处理不同环境(尤其是无服务器环境)的理想方式是在同一组织 (AWS Organizations) 下拥有多个 AWS 帐户,其中您有一个单独的帐户用于暂存,另一个帐户用于生产。
因此,如果您想在单个帐户中解决此问题,您可以使用 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 ]