参数与映射
Parameters、Mappings、Conditions。
30 分钟
参数与映射
Parameters 让模板可配置;Mappings 按 Region/环境查表;Conditions 按布尔表达式决定是否创建资源。三者合起来实现 dev/prod 分环境,类似 Terraform 的 variable + *.tfvars。
学习目标
- 声明 Parameters 与 AllowedValues
- 用 Mappings 解决 Region 差异(AMI、实例类型)
- 对照 tf-variables
Parameters 示例
Parameters:
Environment:
Type: String
Default: dev
AllowedValues: [dev, staging, prod]
Description: 部署环境
InstanceType:
Type: String
Default: t3.micro
DbPassword:
Type: String
NoEcho: true
MinLength: 8
Description: RDS 主密码(生产应接 Secrets Manager)
部署时可在控制台、CLI 或 CI 传入:
aws cloudformation deploy \
--template-file template.yaml \
--stack-name coderoadmap-dev \
--parameter-overrides Environment=dev InstanceType=t3.micro
Mappings 与 Conditions
Mappings:
RegionMap:
ap-southeast-1:
AMI: ami-0abc111
ap-northeast-1:
AMI: ami-0def222
Conditions:
IsProd: !Equals [!Ref Environment, prod]
Resources:
AppInstance:
Type: AWS::EC2::Instance
Properties:
ImageId: !FindInMap [RegionMap, !Ref 'AWS::Region', AMI]
InstanceType: !Ref InstanceType
# prod 可配合 Condition 创建不同资源(略)
| CFN | Terraform |
|---|---|
Parameters | variable |
--parameter-overrides | -var-file=*.tfvars |
Mappings | locals + map |
Conditions | count / 三元表达式 |
与 Helm values 对照
Parameters 像 Chart 的 values.yaml 键;Outputs 像 helm get notes 暴露的连接信息。CodeRoadMap Helm 管应用、TF/CFN 管 RDS 层——参数不要混进 backend Chart。
练习
- 增加
ProjectNameParameter,用 写入所有资源的 Name 标签