需要使用一个 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】:

您可以将 MappingsParameters 结合使用,如下所示:

"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 网关?

需要功能:[CAPABILITY_IAM] Cloudformation AWS 控制台

AWS Cloudformation - Designer 的使用