如何在不使用 Auto-scaling 的情况下在一个区域的 3 个不同 AZ 中启动三个相同的 EC2 实例

Posted

技术标签:

【中文标题】如何在不使用 Auto-scaling 的情况下在一个区域的 3 个不同 AZ 中启动三个相同的 EC2 实例【英文标题】:How to launch three same EC2 instance in 3 different AZ in one Region without using Auto-scaling 【发布时间】:2020-05-24 05:05:42 【问题描述】:

如何在不使用 Auto Scaling 的情况下创建 CloudFormation 模板,在同一区域的三个不同 AZ 中启动三个相同的 EC2 实例?

例如:

eu-west-1a 中的实例一 eu-west-1b 中的实例二 eu-west-1c 中的实例三

这是我的模板:

AWSTemplateFormatVersion : 2010-09-09
Description: "simple web layer"
Parameters:
  ImageId:
    Description: 'web Layer'
    Type: 'AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>'
    AllowedPattern: "^[a-zA-Z][-a-zA-Z0-9]*$"
    Default: ami-244333
  Webservercapacity:
    Default: '3'
    Description: number
    Type: Number
    MinValue: '1'
    MaxValue: '4'
  Securitycab:
    Type: String
    Default: 0.0.0.0/0
    Description: enter vpc ip range    
  Subnets:
    Description: enter subnet
    Type: List<AWS::EC2::Subnet::Id>
    Default: subnet-384736383838
  Securitygroup:
    Description: enter sc
    Type: List<AWS::EC2::SecurityGroup::Id>
    Default: sg-237377383773873
  Vpc:
    Description: enter vpc
    Type: List<AWS::EC2::VPC::Id>
Resources:
  MyEC2Instance:
   Type: 'AWS::EC2::Instance'
   Properties:
     ImageId: !Ref ImageId
     InstanceType: t2.large
     VpcId: !Ref Vpc
     SubnetId: !Ref Subnets
     SecurityGroupIds:
       Type: AWS::EC2::SecurityGroup
       Properties:
          VpcId: vpc-1a2b3c4d
          GroupDescription: Sample target security group
          SecurityGroupIngress:    
          - IpProtocol: tcp
            FromPort: 80
            ToPort: 80
            CidrIp: !Ref Securitycab

【问题讨论】:

【参考方案1】:

模板应该启动三个单独的实例。在每个实例的属性中,通过引用您的 Subnets 参数(List&lt;AWS::EC2::Subnet::Id&gt; 类型)指定子网。

您可以使用!Select选择子网:

SubnetId: !Select [ 0, Subnets ]
or
SubnetId: !Select [ 1, Subnets ]
or
SubnetId: !Select [ 2, Subnets ]

所以它看起来像:

  Instance1:
   Type: 'AWS::EC2::Instance'
   Properties:
     SubnetId: !Select [ 0, Subnets ]
     ...

  Instance2:
   Type: 'AWS::EC2::Instance'
   Properties:
     SubnetId: !Select [ 1, Subnets ]
     ...

另外,不要在实例属性中定义安全组,而是定义一个安全组,然后让每个实例通过引用来引用它。

【讨论】:

以上是关于如何在不使用 Auto-scaling 的情况下在一个区域的 3 个不同 AZ 中启动三个相同的 EC2 实例的主要内容,如果未能解决你的问题,请参考以下文章

如何在不使用 &nbsp 的情况下在行内元素之间添加空格 [重复]

如何在不使用 Segue 的情况下在单独的 UIViewController 中选择实例变量

如何在不安装的情况下在应用程序中使用 Berkeley DB

如何在不使用滞后的情况下在偏移量旁边显示一列值

如何在不使用数据透视和反透视的情况下在 SQL Server 中水平显示数据?

如何在不使用模拟位置的情况下在 android 上欺骗位置?