需要使用一个 AWS CloudFormation 模板为不同的环境启动多个实例
Posted
技术标签:
【中文标题】需要使用一个 AWS CloudFormation 模板为不同的环境启动多个实例【英文标题】:Need Multiple instances to be launched for different environments using one AWS CloudFormation Template 【发布时间】:2019-10-03 21:40:08 【问题描述】:我需要构建 3 种不同类型的环境,每种环境都有不同数量的实例,以使用 JSON 中的单个 CF 模板启动。例如:第一个 ENV 需要 2 个实例,第二个 ENV 需要 4 个实例,第三个 ENV 需要 8 个实例。请指教
我正在从用户那里获得输入以选择 ENV 类型,并基于该数量应该启动实例。
无法在 EC2 属性下提及实例计数,也无法使用 Fn::If 更改条件
【问题讨论】:
您为什么不能使用 cloudformation 参数作为实例计数? 您也可以使用 env 到实例计数的映射来解决这个问题。 这是一道面试题?如果没有,为什么要限制? 【参考方案1】:您可以将 Mappings 与 Parameters 结合使用,如下所示:
"AWSTemplateFormatVersion": "2010-09-09",
"Description": "ALB and ASG",
"Mappings":
"Environment":
"i":
"InstanceType": "t2.small",
"Count": 2
,
"s":
"InstanceType": "t3.small",
"Count": 3
,
"p":
"InstanceType": "m1.small",
"Count": 4
,
"Parameters":
"ShortEnv":
"AllowedValues": [
"i",
"p",
"s"
],
"ConstraintDescription": "must define the current environment",
"Description": "Environment type",
"Type": "String"
然后可以在相关资源属性中使用如下:
"InstanceType":
"Fn::FindInMap": [
"Environment",
"Ref": "ShortEnv"
,
"InstanceType"
]
,
"DesiredCapacity":
"Fn::FindInMap": [
"Environment",
"Ref": "ShortEnv"
,
"InstanceType"
]
【讨论】:
嘿@gopi-r 如果此答案解决了您的问题,请考虑通过单击复选标记接受它。这向更广泛的社区表明您找到了解决方案,并为回答者和您自己赢得了一些声誉。以上是关于需要使用一个 AWS CloudFormation 模板为不同的环境启动多个实例的主要内容,如果未能解决你的问题,请参考以下文章
使用CloudFormation模板更新AWS Athena工作组
是否可以在 AWS::OpsWorks::Instance 资源中使用 AWS::CloudFormation::Init 和元数据?
使用 AWS CloudFormation 引用创建 yaml
如何使用 cloudformation 创建私有 AWS Api 网关?