EC2 の作成
マネジメントコンソールのEC2作成ウィザードではどのようなコマンドでEC2を作成するか確認することができます。
インスタンスを起動
ボタンの下にあるコマンドを確認
のリンクをクリックします。
このようなJSONが表示されます。
{
"MaxCount": 1,
"MinCount": 1,
"ImageId": "ami-04beabd6a4fb6ab6f",
"InstanceType": "t2.micro",
"EbsOptimized": false,
"NetworkInterfaces": [
{
"SubnetId": "subnet-0d728b2e102c1a825",
"AssociatePublicIpAddress": true,
"DeviceIndex": 0,
"Groups": [
"sg-014aefcc7694e413a"
]
}
],
"TagSpecifications": [
{
"ResourceType": "instance",
"Tags": [
{
"Key": "Name",
"Value": "webserver#1-user1"
}
]
}
],
"PrivateDnsNameOptions": {
"HostnameType": "ip-name",
"EnableResourceNameDnsARecord": false,
"EnableResourceNameDnsAAAARecord": false
}
}
この設定に合わせてEC2インスタンスを作成します。
定義
Type: AWS::EC2::Instance
Properties:
AdditionalInfo: String
Affinity: String
AvailabilityZone: String
BlockDeviceMappings:
- BlockDeviceMapping
CpuOptions:
CpuOptions
CreditSpecification:
CreditSpecification
DisableApiTermination: Boolean
EbsOptimized: Boolean
ElasticGpuSpecifications:
- ElasticGpuSpecification
ElasticInferenceAccelerators:
- ElasticInferenceAccelerator
EnclaveOptions:
EnclaveOptions
HibernationOptions:
HibernationOptions
HostId: String
HostResourceGroupArn: String
IamInstanceProfile: String
ImageId: String
InstanceInitiatedShutdownBehavior: String
InstanceType: String
Ipv6AddressCount: Integer
Ipv6Addresses:
- InstanceIpv6Address
KernelId: String
KeyName: String
LaunchTemplate:
LaunchTemplateSpecification
LicenseSpecifications:
- LicenseSpecification
Monitoring: Boolean
NetworkInterfaces:
- NetworkInterface
PlacementGroupName: String
PrivateDnsNameOptions:
PrivateDnsNameOptions
PrivateIpAddress: String
PropagateTagsToVolumeOnCreation: Boolean
RamdiskId: String
SecurityGroupIds:
- String
SecurityGroups:
- String
SourceDestCheck: Boolean
SsmAssociations:
- SsmAssociation
SubnetId: String
Tags:
- Tag
Tenancy: String
UserData: String
Volumes:
- Volume
マネジメントコンソールで出力されたJSONのうち、MaxCountとMinCountはCloudFormationでの指定には不要です。それ以外の項目を指定するとこのようになります。
EC2Instance:
Type: AWS::EC2::Instance
Properties:
ImageId: "ami-04beabd6a4fb6ab6f"
InstanceType: "t2.micro"
EbsOptimized: false
NetworkInterfaces:
- SubnetId: !Ref PublicSubnet1
AssociatePublicIpAddress: true
DeviceIndex: "0"
GroupSet:
- !Ref Ec2SecurityGroup
PrivateDnsNameOptions:
HostnameType: ip-name
EnableResourceNameDnsARecord: false
EnableResourceNameDnsAAAARecord: false
Tags:
- Key: Name
Value: webserver#1-user1
テンプレートファイル
課題
ストレージの設定をデフォルトの8GBから16GBに変更したテンプレートを作成してください。
回答
ストレージ設定を変更した状態でマネジメントでコマンドを確認
を行うとBlockDeviceMappings
の設定が追加されていることがわかります。
{
"MaxCount": 1,
"MinCount": 1,
"ImageId": "ami-04beabd6a4fb6ab6f",
"InstanceType": "t2.micro",
"EbsOptimized": false,
"BlockDeviceMappings": [
{
"DeviceName": "/dev/xvda",
"Ebs": {
"Encrypted": false,
"DeleteOnTermination": true,
"Iops": 3000,
"SnapshotId": "snap-088dbe5044ee12f1f",
"VolumeSize": 16,
"VolumeType": "gp3",
"Throughput": 125
}
}
],
"NetworkInterfaces": [
{
"SubnetId": "subnet-0d728b2e102c1a825",
"AssociatePublicIpAddress": true,
"DeviceIndex": 0,
"Groups": [
"sg-014aefcc7694e413a"
]
}
],
"TagSpecifications": [
{
"ResourceType": "instance",
"Tags": [
{
"Key": "Name",
"Value": "webserver#1-user1"
}
]
}
],
"PrivateDnsNameOptions": {
"HostnameType": "ip-name",
"EnableResourceNameDnsARecord": false,
"EnableResourceNameDnsAAAARecord": false
}
}
これを反映するとこのようになります。
template.yaml
EC2Instance:
Type: AWS::EC2::Instance
Properties:
ImageId: "ami-04beabd6a4fb6ab6f"
InstanceType: "t2.micro"
EbsOptimized: false
BlockDeviceMappings:
DeviceName: /dev/xvda
Ebs:
Encrypted: false
DeleteOnTermination: true
Iops: 3000
VolumeSize: 16
VolumeType: gp3
NetworkInterfaces:
- SubnetId: !Ref PublicSubnet1
AssociatePublicIpAddress: true
DeviceIndex: "0"
GroupSet:
- !Ref Ec2SecurityGroup
PrivateDnsNameOptions:
HostnameType: ip-name
EnableResourceNameDnsARecord: false
EnableResourceNameDnsAAAARecord: false
Tags:
- Key: Name
Value: webserver#1-user1
一度デフォルトの8GBのストレージ容量でEC2を起動したあと、16GBに変更した場合は置換
がTrue
となりリソースが再作成されます。そのため、ディスク内に作成したファイルは削除されますので注意してください。
インスタンスが新しく作成され、古いインスタンスが終了される様子
テンプレートファイル