AWS CloudFormation テンプレートを使用して作成した Amazon EC2 インスタンスのルートボリュームのプロパティを設定する方法を教えてください。

最終更新日: 2020 年 5 月 22 日

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 設定のみを変更できます。

解決方法

AMI のルートボリュームのデバイス名を特定する

デバイス名を確認するには、Amazon EC2 コンソールまたは AWS コマンドラインインターフェイス (AWS CLI) で以下のステップを実行します。

Amazon EC2 コンソールを使って以下を実行します。

1.    Amazon EC2 コンソールを開きます。

2.    ナビゲーションバーから、インスタンスを起動する AWS リージョンを選択します。

3.    ナビゲーションペインで [AMI] を選択します。

4.    [フィルター] オプションを使用して AMI を見つけ、お客様の AMI を選択します。

5.    [詳細] タブで、[ルートデバイス名] を見つけます。これは、ルートデバイス名が表示される場所です。

AWS CLI のコマンドを使用して、以下のとおり操作します。

AWS CLI で、次の describe-images コマンドを実行します。

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 を、先ほど特定したルートデバイス名のプロパティの値に置き換えます。次に、要件に基づいてテンプレートの 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'

この記事はお役に立ちましたか?

改善できることはありますか?


さらにサポートが必要な場合