问题描述
我正在使用cloudformation向AWS预置RDS aurora,并在模板中使用AWS::RDS::DBCluster
和AWS::RDS::DBInstance
资源。我有不同的环境,例如dev
,uat
和prod
。每个环境在群集下具有不同数量的数据库实例。如何在cloudformation模板中将数据库实例的数量设置为变量?
以下是我的AWS::RDS::DBInstance
模板。如您所见,模板中有三个实例。它仅用于生产,不用于开发。如何使用参数指示实例数?例如,在dev
中部署1个实例,在prod
中部署3个实例。
auroraDBFirstInstance:
Type: AWS::RDS::DBInstance
Properties:
DBInstanceClass: ${self:provider.postgresqlInstanceClass}
Engine: aurora-postgresql
EngineVersion: ${self:provider.postgresqlEngineVersion}
DBClusterIdentifier: !Ref auroraDBCluster
PubliclyAccessible: ${self:provider.publiclyAccessible}
auroraDBSecondInstance:
Type: AWS::RDS::DBInstance
Properties:
DBInstanceClass: ${self:provider.postgresqlInstanceClass}
Engine: aurora-postgresql
EngineVersion: ${self:provider.postgresqlEngineVersion}
DBClusterIdentifier: !Ref auroraDBCluster
PubliclyAccessible: ${self:provider.publiclyAccessible}
auroraDBThirdInstance:
Type: AWS::RDS::DBInstance
Properties:
DBInstanceClass: ${self:provider.postgresqlInstanceClass}
Engine: aurora-postgresql
EngineVersion: ${self:provider.postgresqlEngineVersion}
DBClusterIdentifier: !Ref auroraDBCluster
PubliclyAccessible: ${self:provider.publiclyAccessible}
解决方法
您可以将其添加为参数并在运行堆栈时传递,甚至可以进行如下映射:
Environment:
Type: String
AllowedValues:
- dev
- uat
- prod
Mappings:
EnvironmentToDb
dev:
Cluster: 1
uat:
Cluster: 2
prod:
Cluster: 3
然后您可以使用以下命令引用它:
DBClusterIdentifier: !FindInMap [EnvironmentToDb,!Ref 'Environment',Cluster]