EC2 インスタンスを置き換えずに CloudFormation で EBS ボリュームを更新するにはどうすればよいですか?

最終更新日: 2022 年 4 月 5 日

Amazon Elastic Compute Cloud (Amazon EC2) インスタンスを置き換えることなく、AWS CloudFormation で Amazon Elastic Block Store (Amazon EBS) ボリュームを更新したいと考えています。

簡単な説明

ベストプラクティスとして、CloudFormation で EBS ボリュームを更新するときにインスタンスが置き換えられないように、AWS::EC2::Volume リソースタイプを使用します。

AWS::EC2::Instance および AWS::EC2::Template リソースタイプの BlockDeviceMappings プロパティでボリュームを指定すると、インスタンスの置き換えが行われます。この場合、Retain DeletionPolicy 属性を追加する必要があります。

前提条件: ボリュームを gp2 から gp3 に変更する場合は、インスタンスにアタッチされているボリュームが gp3 に変更されていることを確認します。また、インスタンスが [Optimizing] (最適化中) または [Modifying] (変更中) 状態になっていないことを確認します。ボリュームを gp3 に変更する前に、制限事項を確認してください。

重要: この問題を解決する前に、ボリュームのスナップショットを作成して、重要なワークロードのバックアップを作成してください。

解決方法

1.    ボリュームを更新するインスタンスの CloudFormation スタックに Retain DeletionPolicy を追加してから、スタックを更新します。

AWSTemplateFormatVersion: '2010-09-09'
Resources:
 Myinstance:
  Type: AWS::EC2::Instance
  DeletionPolicy: Retain
  Properties:
   BlockDeviceMappings:
    - DeviceName: /dev/xvda
     Ebs:
      VolumeType: gp2
      VolumeSize: 10
      DeleteOnTermination: true
   EbsOptimized: false
   ImageId: ami-064ff912f78e3e561
   InstanceInitiatedShutdownBehavior: stop
   InstanceType: t2.micro
   Monitoring: false

2.    テンプレートからインスタンスを削除して、CloudFormation スタックを再度更新します。注: テンプレートにリソースが 1 つしかない場合は、別のインスタンスなどのスタンドインリソースを作成する必要があります。完了したら、テンプレートからリソースを削除できます。

3.    要件に合わせて EBS ボリューム属性を変更します。

4.    インスタンスを CloudFormation スタックにインポートし直します。

インスタンスを CloudFormation スタックにインポートし直すには、次の操作を実行します。

1.    [AWS CloudFormation コンソール] を開きます。

2.    スタックページで、[Stack actions] (スタックアクション) を選択し、[Import resources into stack] (スタックへのリソースのインポート) を選択します。

3.    テンプレートを更新します。

AWSTemplateFormatVersion: '2010-09-09'
Resources:
 Myinstance:
  Type: AWS::EC2::Instance
  DeletionPolicy: Retain
  Properties: 
   BlockDeviceMappings:
    - DeviceName: /dev/xvda
      Ebs:
       VolumeType: gp3
       VolumeSize: 100
       DeleteOnTermination: true
    EbsOptimized: false
    ImageId: ami-064ff912f78e3e561
    InstanceInitiatedShutdownBehavior: stop
    InstanceType: t2.micro
    Monitoring: false

4.    [Identifier] (識別子) フィールドにインスタンス ID の値を入力します。

5.    [Import resource] (リソースをインポート) を選択します。

CloudFormation が IMPORT_COMPLETE ステータスに移行すると、インスタンスは再びスタックの一部になります。

注:There was an error creating this change set.As part of the import operation, you cannot modify or add [Outputs]」(この変更セットの作成中にエラーが発生しました。インポートオペレーションの一部として、[Outputs] (出力) を変更または追加することはできません。) というエラーが表示される場合があります。この問題を解決するには、最新の CloudFormation テンプレートの [Outputs] (出力) セクションと、スタックが使用しているテンプレートが同じであることを確認します。同じでない場合は、最新の CloudFormation テンプレートを更新して、スタックが使用しているテンプレートの [Outputs] (出力) セクションの値と一致させます。その後、スタックを再度更新します。


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


請求に関するサポートまたは技術サポートが必要ですか?