如何在不使用 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<AWS::EC2::Subnet::Id>
类型)指定子网。
您可以使用!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 实例的主要内容,如果未能解决你的问题,请参考以下文章
如何在不使用   的情况下在行内元素之间添加空格 [重复]
如何在不使用 Segue 的情况下在单独的 UIViewController 中选择实例变量
如何在不安装的情况下在应用程序中使用 Berkeley DB