使用 CloudFormation 创建一个由“Auto Scaling”管理的“容器实例”的 ECS 集群
目标配置
目标是在 VPC 内创建子网,并使用 Auto Scaling 在该子网内创建实例。
Auto Scaling 组具有启动配置,并且根据此启动配置适当地创建实例。
创建网络堆栈
在创建 Auto Scaling Group 堆栈之前,我们首先创建一个 VPC。
教程:查看另一个 AWS CloudFormation 堆栈的资源输出 的步骤 1。 这基于
首先,让我们创建一个如下所示的 yaml 格式文件。
粗略地说,这是一个执行以下操作的模板:
- 创建专有网络
- 切断子网
- 创建互联网网关
- 将互联网网关附加到您的 VPC
- 创建路由表
- 配置上述路由表,使其能够访问Internet。
- 将路由表与子网关联
- 创建仅允许来自特定 IP 地址的 SSH 连接的安全组
- 允许其他堆栈按名称引用创建的资源
AWSTemplateFormatVersion: "2010-09-09" Description: Network Configuration Parameters: VpcCidrBlock: Description: Input Cidr Block of VPC Type: String Default: 10.1.0.0/16 AllowedPattern: (\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})/(\d{1,2}) PublicSubnetACidrBlock: Description: Input Cidr Block of Public Subnet A Type: String Default: 10.1.0.0/18 AllowedPattern: (\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})/(\d{1,2}) Resources: VPC: Type: AWS::EC2::VPC Properties: EnableDnsSupport: true EnableDnsHostnames: true CidrBlock: Ref: VpcCidrBlock PublicSubnetA: Type: AWS::EC2::Subnet Properties: VpcId: Ref: VPC AvailabilityZone: ap-northeast-1a CidrBlock: Ref: PublicSubnetACidrBlock InternetGateway: Type: AWS::EC2::InternetGateway VPCGatewayAttachment: Type: AWS::EC2::VPCGatewayAttachment Properties: VpcId: Ref: VPC InternetGatewayId: Ref: InternetGateway PublicRouteTable: Type: AWS::EC2::RouteTable Properties: VpcId: Ref: VPC PublicRoute: Type: AWS::EC2::Route DependsOn: VPCGatewayAttachment Properties: RouteTableId: Ref: PublicRouteTable DestinationCidrBlock: 0.0.0.0/0 GatewayId: Ref: InternetGateway PublicSubnetRouteTableAssociation: Type: AWS::EC2::SubnetRouteTableAssociation Properties: SubnetId: Ref: PublicSubnetA RouteTableId: Ref: PublicRouteTable SSHSecurityGroup: Type: AWS::EC2::SecurityGroup Properties: GroupDescription: Enable SSH Ingress VpcId: Ref: VPC SecurityGroupIngress: IpProtocol: tcp FromPort: 22 ToPort: 22 CidrIp: xxx.xxx.xxx.xxx/32 # 個人のグローバルIPアドレスなどを入れてください。 Outputs: VPCId: Description: VPC ID Value: Ref: VPC Export: Name: !Sub '${AWS::StackName}-VPCID' PublicSubnetA: Description: SubnetA ID Value: Ref: PublicSubnetA Export: Name: !Sub '${AWS::StackName}-SubnetID' WebServerSecurityGroup: Description: Security Group ID Value: !GetAtt SSHSecurityGroup.GroupId Export: Name: !Sub '${AWS::StackName}-SecurityGroupID'
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
|
AWSTemplateFormatVersion : “2010-09-09″
Description :
Network Configuration
Parameters :
VpcCidrBlock :
Description :
Input Cidr Block of VPC
Type : String
Default : 10.1.0.0/ 16
AllowedPattern : ( \ d { 1 , 3 } ) \ . ( \ d { 1 , 3 } ) \ . ( \ d { 1 , 3 } ) \ . ( \ d { 1 , 3 } )/ ( \ d { 1 , 2 } )
PublicSubnetACidrBlock :
Description :
Input Cidr Block of Public Subnet A
Type : String
Default : 10.1.0.0/ 18
AllowedPattern : ( \ d { 1 , 3 } ) \ . ( \ d { 1 , 3 } ) \ . ( \ d { 1 , 3 } ) \ . ( \ d { 1 , 3 } )/ ( \ d { 1 , 2 } )
Resources :
VPC :
Type : AWS : : EC2 : : VPC
Properties :
EnableDnsSupport : true
EnableDnsHostnames : true
CidrBlock :
Ref : VpcCidrBlock
PublicSubnetA :
Type : AWS : : EC2 : : Subnet
Properties :
VpcId :
Ref : VPC
AvailabilityZone : ap– northeast– 1a
CidrBlock :
Ref : PublicSubnetACidrBlock
InternetGateway :
Type : AWS : : EC2 : : InternetGateway
VPCGatewayAttachment :
Type : AWS : : EC2 : : VPCGatewayAttachment
Properties :
VpcId :
Ref : VPC
InternetGatewayId :
Ref : InternetGateway
PublicRouteTable :
Type : AWS : : EC2 : : RouteTable
Properties :
VpcId :
Ref : VPC
PublicRoute :
Type : AWS : : EC2 : : Route
DependsOn : VPCGatewayAttachment
Properties :
RouteTableId :
Ref : PublicRouteTable
DestinationCidrBlock : 0.0.0.0/ 0
GatewayId :
Ref : InternetGateway
PublicSubnetRouteTableAssociation :
Type : AWS : : EC2 : : SubnetRouteTableAssociation
Properties :
SubnetId :
Ref : PublicSubnetA
RouteTableId :
Ref : PublicRouteTable
SSHSecurityGroup :
Type : AWS : : EC2 : : SecurityGroup
Properties :
GroupDescription : Enable SSH Ingress
VpcId :
Ref : VPC
SecurityGroupIngress :
IpProtocol : tcp
FromPort : 22
ToPort : 22
CidrIp : xxx . xxx . xxx . xxx/ 32 # 個人のグローバルIPアドレスなどを入れてください。
Outputs :
VPCId :
Description :
VPC ID
Value :
Ref : VPC
Export :
Name :
! Sub ‘${AWS::StackName}-VPCID’
PublicSubnetA :
Description :
SubnetA ID
Value :
Ref : PublicSubnetA
Export :
Name :
! Sub ‘${AWS::StackName}-SubnetID’
WebServerSecurityGroup :
Description :
Security Group ID
Value :
! GetAtt SSHSecurityGroup . GroupId
Export :
Name :
! Sub ‘${AWS::StackName}-SecurityGroupID’
|
创建后,转到 AWS 管理控制台中的 CloudFormation > 堆栈,然后选择“创建堆栈”。
在“创建堆栈”中,选择“模板准备”进行模板准备,并上传您创建的上述模板文件以用于模板规范。
接下来,在“指定堆栈详细信息”中,为堆栈命名并设置一些参数。
堆栈的名称可以是您喜欢的任何名称,但请记下它,因为您将在下面的步骤中使用该名称。 在本文中,它将被称为“NetworkStack”。
如果参数与上面显示的配置图匹配,请为 PublicSubnetACidrBlock 指定“10.2.1.0/24”,为 VpcCidrBlock 指定“10.2.0.0/16”。
您所要做的就是单击“下一步”几次。 稍等片刻,网络堆栈就完成了。
创建 Auto Scaling 组堆栈
现在让我们继续主要部分,创建 AutoScalingGroup 堆栈。
步骤是创建启动配置 -> 创建 Auto Scaling 组。
让我们创建一个如下所示的 yaml 格式文件。
粗略地说,这是一个执行以下操作的模板:
- 创建启动配置
- AMI 是亚马逊 Linux AMI
- 实例类型为 t2.micro
- 关联已创建的安全组
- 创建 Auto Scaling 组
- 与创建的子网关联
- 只启动一个实例
- 为创建的实例命名,以便于识别。
AWSTemplateFormatVersion: "2010-09-09" Description: LC and Auto Scaling Group Configuration Parameters: NetworkStackName: Description: Name of the Stack related with network configuration Type: String MinLength: 1 MaxLength: 255 AllowedPattern: ^[a-zA-Z][-a-zA-Z0-9]*$ Default: TestNetworkCrossStack Resources: # 起動設定 LaunchConfiguration: Type: AWS::AutoScaling::LaunchConfiguration Properties: AssociatePublicIpAddress: true ImageId: ami-0ee1410f0644c1cac #Amazon Linux AMI 2018.03.0 (HVM), SSD Volume Type InstanceMonitoring: false InstanceType: t2.micro KeyName: キーペア名 LaunchConfigurationName: 起動設定名 SecurityGroups: - Fn::ImportValue: !Sub '${NetworkStackName}-SecurityGroupID' AutoScalingGroup: Type: AWS::AutoScaling::AutoScalingGroup Properties: AutoScalingGroupName: <AutoScalingGroup名> DesiredCapacity: 1 LaunchConfigurationName: Ref: LaunchConfiguration MaxSize: 1 MinSize: 1 Tags: - Key: Name PropagateAtLaunch: true Value: インスタンスにつけたい名前 VPCZoneIdentifier: - Fn::ImportValue: !Sub '${NetworkStackName}-SubnetID'
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
AWSTemplateFormatVersion : “2010-09-09″
Description :
LC and Auto Scaling Group Configuration
Parameters :
NetworkStackName :
Description :
Name of the Stack related with network configuration
Type : String
MinLength : 1
MaxLength : 255
AllowedPattern : ^ [ a– zA– Z ] [– a– zA– Z0– 9 ]* $
Default : TestNetworkCrossStack
Resources :
# 起動設定
LaunchConfiguration :
Type : AWS : : AutoScaling : : LaunchConfiguration
Properties :
AssociatePublicIpAddress : true
ImageId : ami– 0ee1410f0644c1cac #Amazon Linux AMI 2018.03.0 (HVM), SSD Volume Type
InstanceMonitoring : false
InstanceType : t2 . micro
KeyName : キーペア名
LaunchConfigurationName : 起動設定名
SecurityGroups :
– Fn : : ImportValue :
! Sub ‘${NetworkStackName}-SecurityGroupID’
AutoScalingGroup :
Type : AWS : : AutoScaling : : AutoScalingGroup
Properties :
AutoScalingGroupName : < AutoScalingGroup名 >
DesiredCapacity : 1
LaunchConfigurationName :
Ref : LaunchConfiguration
MaxSize : 1
MinSize : 1
Tags :
– Key : Name
PropagateAtLaunch : true
Value : インスタンスにつけたい名前
VPCZoneIdentifier :
– Fn : : ImportValue :
! Sub ‘${NetworkStackName}-SubnetID’
|
作成したらAWSマネジメントコンソールでCloudFormation > スタックから「スタックの作成」を行いましょう。
ネットワークスタック同様に作成したyamlファイルはアップロードしてください。
高级设置中的堆栈名称可以是您喜欢的任何名称。 另一方面,在设置参数时,需要正确输入之前创建的“网络堆栈”的名称。 在本文中,它是“NetworkStack”。
您所要做的就是单击“下一步”几次。
创建需要一些时间,但一段时间后,将创建 Auto Scaling 组堆栈并启动实例。
连接到您的实例
如果您查看实例列表,您应该会看到 Auto Scaling 创建的实例的公共 IP 地址,因此请尝试使用您最喜欢的 SSH 客户端访问它。
是的,您看到了熟悉的显示屏。 你完成了!