メインコンテンツまでスキップ

EC2 の作成

マネジメントコンソールのEC2作成ウィザードではどのようなコマンドでEC2を作成するか確認することができます。

インスタンスを起動ボタンの下にあるコマンドを確認のリンクをクリックします。

image.png

image.png

このような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となりリソースが再作成されます。そのため、ディスク内に作成したファイルは削除されますので注意してください。

image.png

インスタンスが新しく作成され、古いインスタンスが終了される様子

image.png

テンプレートファイル