1
0

CloudFormationでEC2にEBSボリュームをアタッチする際に詰まったこと

Posted at

AWS::EC2::Instance上でEBSボリュームを定義すると・・・

例えば以下のようにAWS::EC2::Instanceテンプレートで定義したEBSボリュームが
一部不要になったので削除しようとした。

EC2Instance:
    Type: "AWS::EC2::Instance"
    Properties:
      ...
      BlockDeviceMappings:
        ## 以下ボリュームをコメントアウトで削除
        # - DeviceName: /dev/sdb
        #   Ebs:
        #     VolumeSize: 30
        #     VolumeType: gp3
        #     DeleteOnTermination: "true"
        #     Encrypted: "true"
        - DeviceName: /dev/sdc
          Ebs:
            VolumeSize: 5
            VolumeType: gp3
            DeleteOnTermination: "true"
            Encrypted: "true"

これでスタック更新しようとしたら、ReplacementがTrueになってしまった。

EBS-replacement.png

公式レファレンス見ると、このテンプレートで作成したEBSボリュームに少しでも変更加えると強制的にインスタンスが置き換えられるという罠があった。

After the instance is running, you can modify only the DeleteOnTermination parameter for the attached volumes without interrupting the instance. Modifying any other parameter results in instance replacement.

https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-instance.html#cfn-ec2-instance-blockdevicemappings

勝手に置き換えられない方法がないかと調べたところ、AWS::EC2::Volumeという
テンプレートが用意されていた。
AWS::EC2::Volume

これとAWS::EC2::VolumeAttachmentを使ってEC2にアタッチすると、ボリュームサイズ変更や
ボリューム削除したい場合などに強制置換されずに設定変更を行えそう。

今後は、ボリュームを変更できるように、AWS::EC2::Volumeで別途定義したほうがよさそう。

ルートボリューム用EBSをアタッチする場合

EC2作成時、デフォルトでアタッチされたいるルートボリュームは暗号化されていない。
暗号化したかったので、暗号化済みのルートボリューム用EBSを別途作成してEC2にアタッチしようとした。

これも以下のようにCloudFormationテンプレートで作成したアタッチしようとした。

  EC2Instance:
    Type: "AWS::EC2::Instance"
  ...
  RootVolume:
    Type: AWS::EC2::Volume
    Properties:
      ...
  RootMountPoint:
    Type: AWS::EC2::VolumeAttachment
    Properties:
      InstanceId: !Ref EC2Instance
      VolumeId: !Ref RootVolume
      Device: /dev/sda1

が、ルートボリュームだけ、いつまで経ってもアタッチ完了しない。。。

rootvol-attaching.png

調べてみたが、原因は判明せず、仕方ないのでChatGPT先生に質問。
すると、ルートボリュームをアタッチしたい場合は、一旦EC2インスタンスを停止する必要があるらしい。

[Question]
EC2インスタンス(amazon linux)に作成したEBS /dev/sda1 をルートボリュームとしてアタッチ できないのですが、なぜですか。

[Answer]
Amazon Linux インスタンスにEBSボリュームをルートボリュームとしてアタッチする場合、いくつかの手順や考慮すべきポイントがあります。以下の点を確認してください:
...
インスタンスの停止: インスタンスのルートボリュームを変更するには、インスタンスを停止する必要があります。
...

試しにインスタンスを停止してしばらくすると、ルートボリュームがアタッチされた。
rootvol-attached.png

また、ルートボリュームとして外付けボリュームを使用する場合は、特定のデバイス名を使用する必要がある。
(OSによって名付け方は異なる)

Linux インスタンスでのデバイス名

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0