EC2 インスタンスを置き換えずに、CloudFormation の EBS ボリュームを更新する方法を教えてください。

所要時間2分
0

AWS CloudFormation の Amazon Elastic Block Store (Amazon EBS) ボリュームを更新したいです。しかし、Amazon Elastic Compute Cloud (Amazon EC2) インスタンスを置き換えることは避けたいです。

解決策

インスタンスの置換を防ぐには、CloudFormation で EBS ボリュームを更新する際に、AWS::EC2::Volume リソースタイプを使用することをおすすめします。

インスタンスの置換は、リソースタイプ AWS::EC2::Instance および AWS::EC2::TemplateBlockDeviceMappings プロパティでボリュームを指定する際に発生します。このシナリオでは、retain DeletionPolicy 属性を追加する必要があります。

重要: gp2 から gp3 へのボリューム変更などで、手動でボリュームを変更する場合は、インスタンスにアタッチされているボリュームも変更する必要があります。インスタンスの状態が Optimizing または Modifying ではないことを確認します。ボリュームを gp3 に変更する前に、ボリューム変更の要件に準拠していることを確認してください。

BlockDeviceMappings プロパティで指定したボリュームを変更する際に、インスタンスの置換を防ぐには、次の手順を実行します。

ターゲットの AWS::EC2::Instance テンプレートリソースに retain DeletionPolicy 属性を追加する

次の手順を実行します。

  1. ボリュームのスナップショットを取り、重要なワークロードのバックアップを作成します。

  2. 更新するボリュームのあるインスタンスの CloudFormation スタックで DeletionPolicyRetain に設定します。例

    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
  3. スタックを更新します。

CloudFormation スタックからリソースを削除し、変更を実装する

次の手順を実行します。

  1. テンプレートからインスタンスを削除して CloudFormation スタックからインスタンスを削除します。ただし、基盤リソースは削除しません。次に、EC2 インスタンスを手動で変更します。
    注: テンプレートにリソースが 1 つしかない場合は、別のインスタンスなどのスタンドインリソースを作成する必要があります。EC2 インスタンスをテンプレートにインポートし直した後は、テンプレートからリソースを削除できます。
  2. EBS ボリューム属性を変更します。

リソースを CloudFormation スタックに再度インポートする

次の手順を実行します。

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

  2. ナビゲーションペインで [スタック] を選択します。

  3. [スタックアクション] を選択し、[リソースをスタックにインポート] を選択します。

  4. 更新した CloudFormation テンプレートを入力します。例

    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

    注: リソースをインポートするには、CloudFormation テンプレートでは既存の構成を使用してリソースを記述する必要があります。

  5. [識別子] にインスタンス ID を入力します。

  6. [リソースをインポート] を選択します。

CloudFormation のステータスが IMPORT_COMPLETE に更新されると、インスタンスはスタックに所属しています。

次のエラーメッセージが表示される場合があります。There was an error creating this change set.As part of the import operation, you cannot modify or add [Outputs].この問題を解決するには、最新の CloudFormation テンプレートの Outputs セクションが、スタックが使用するテンプレートと一致していることを確認します。一致していない場合は、最新の CloudFormation テンプレートを更新し、スタックが使用するテンプレートの Outputs セクションの値と一致させます。その後、スタックを再度更新します。

AWS公式
AWS公式更新しました 18日前
コメントはありません

関連するコンテンツ