AWS CloudFormation テンプレートを使用して作成した Amazon EC2 インスタンスのルートボリュームのプロパティを設定する方法を教えてください。
最終更新日: 2022 年 7 月 19 日
AWS CloudFormation テンプレートを使用して作成した Amazon Elastic Compute Cloud (Amazon EC2) インスタンスのルートボリュームのプロパティを設定したいと考えています。例えば、ルートボリュームのサイズを変更したり、ルートボリュームの暗号化を有効にしたりしたいと考えています。
簡単な説明
EC2 インスタンスのルートボリュームのプロパティを設定するには、Amazon マシンイメージ (AMI) のルートボリュームのデバイス名を指定する必要があります。次に、AWS::EC2::Instance リソースの BlockDeviceMapping プロパティを使用して、ルートボリュームのプロパティを設定できます。
注: デフォルトでは、AMI のブロックデバイスマッピングで指定されたブロックデバイスが EC2 インスタンスによって使用されます。AMI ブロックデバイスマッピングを上書きするには、インスタンスブロックデバイスマッピングを使用します。ルートボリュームの場合、ボリュームサイズ、ボリュームタイプ、DeleteOnTermination 設定のみを上書きできます。インスタンスの実行後は、アタッチされた Amazon Elastic Block Store (Amazon EBS) ボリュームの DeleteOnTermination 設定のみを変更できます。
注: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、最新の AWS CLI バージョンを使用していることを確認してください。
解決方法
AMI のルートボリュームのデバイス名を特定する
デバイス名を確認するには、Amazon EC2 コンソールまたは AWS CLI で以下のステップを実行します。
Amazon EC2 コンソールを使って以下を実行します。
1. Amazon EC2 コンソールを開きます。
2. ナビゲーションバーから、インスタンスを起動する AWS リージョンを選択します。
3. ナビゲーションペインで [AMI] を選択します。
4. [フィルター] オプションを使用して AMI を見つけ、お客様の AMI を選択します。
5. [詳細] タブで、[ルートデバイス名] を見つけます。これは、ルートデバイス名が表示される場所です。
AWS CLI のコマンドを使用して、以下のとおり操作します。
AWS CLI で、次のコマンドを実行します。
aws ec2 describe-images \
--region us-east-1 \
--image-ids ami-1234567890AWSEXAMPLE
注: us-east-1 をお客様のリージョンに置き換えます。ami-1234567890AWSEXAMPLE をお客様の AMI に置き換えます。
前述のコマンドの出力は、ルートボリュームのデバイス名を示す RootDeviceName フィールドを返します。
EC2 インスタンスのルートボリュームのプロパティを設定する
AWS::EC2::Instance リソースの BlockDeviceMapping プロパティを使用して、EC2 インスタンスのルートボリュームのプロパティを設定します。
次の JSON および YAML の例では、AWS CloudFormation によって、ルートボリュームのサイズが 30 GB に設定された EC2 インスタンスが作成されます。
JSON および YAML テンプレートでは、ルートボリュームの DeleteOnTermination プロパティが trueに設定されます。指定した AMI が Amazon Linux 2 AMI であるため、DeviceName は /dev/xvda に設定されます。最後に、Encrypted プロパティが true に設定され、ルートボリュームのデフォルトの暗号化が有効になります。
重要: テンプレートで、/dev/xvda を、先ほど特定した Root Device Name プロパティの値に置き換えます。その後、要件に基づいてテンプレートの Ebs プロパティを変更します。
JSON テンプレート:
{
"AWSTemplateFormatVersion": "2010-09-09",
"Description": "AWS CloudFormation Sample Template that shows how to increase the size of the root volume. **WARNING** This template creates an Amazon EC2 instance. You will be billed for the AWS resource used if you create a stack from this template.",
"Parameters": {
"KeyName": {
"Type": "AWS::EC2::KeyPair::KeyName",
"Description": "Name of an existing EC2 KeyPair to enable SSH access to the EC2 instance."
},
"InstanceType": {
"Description": "EC2 instance type",
"Type": "String",
"Default": "t2.micro",
"ConstraintDescription": "Please choose a valid instance type."
},
"AMIID": {
"Description": "The Latest Amazon Linux 2 AMI taken from the public AWS Systems Manager Parameter Store",
"Type": "AWS::SSM::Parameter::Value<String>",
"Default": "/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2"
}
},
"Resources": {
"LinuxInstance": {
"Type": "AWS::EC2::Instance",
"Properties": {
"ImageId": {
"Ref": "AMIID"
},
"InstanceType": {
"Ref": "InstanceType"
},
"KeyName": {
"Ref": "KeyName"
},
"BlockDeviceMappings": [
{
"DeviceName": "/dev/xvda",
"Ebs": {
"VolumeType": "gp2",
"VolumeSize": "30",
"DeleteOnTermination":"false",
"Encrypted": "true"
}
}
]
}
}
}
}
YAML テンプレート:
AWSTemplateFormatVersion: 2010-09-09
Description: >-
AWS CloudFormation Sample Template that shows how to increase the size of the root volume. **WARNING** This template creates an Amazon EC2 instance. You will be billed for the AWS resource used if you create a stack from this template.
Parameters:
KeyName:
Type: 'AWS::EC2::KeyPair::KeyName'
Description: Name of an existing EC2 KeyPair to enable SSH access to the EC2 instance.
InstanceType:
Description: EC2 instance type
Type: String
Default: t2.micro
ConstraintDescription: Please choose a valid instance type.
AMIID:
Description: >-
The Latest Amazon Linux 2 AMI taken from the public Systems Manager
Parameter Store
Type: 'AWS::SSM::Parameter::Value<String>'
Default: /aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2
Resources:
LinuxInstance:
Type: 'AWS::EC2::Instance'
Properties:
ImageId: !Ref AMIID
InstanceType: !Ref InstanceType
KeyName: !Ref KeyName
BlockDeviceMappings:
- DeviceName: /dev/xvda
Ebs:
VolumeType: gp2
VolumeSize: '30'
DeleteOnTermination: 'false'
Encrypted: 'true'