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] (出力) セクションの値と一致させます。その後、スタックを再度更新します。