初期デプロイのスタックが削除された後に CDK コードを再デプロイしたときに表示される「Already Exists」(既に存在します) というエラーを解決する方法を教えてください。

所要時間2分
0

AWS Cloud Development Kit (AWS CDK) コードを再デプロイするときに表示される「Already Exists」(既に存在します) というエラーを解決したいのですが。

簡単な説明

AWS CDK コンストラクトライブラリのほとんどのステートフルリソースは、デフォルトとして RETAIN を指定した removalPolicy プロパティを受け入れます。removalPolicy が設定されていないリソースは孤立リソースとなり、スタックが削除された後もアカウントに残ります。これは、スタックが DELETE\ _COMPLETE 状態に移行したときに発生します。対応するスタックの更新中に、類似リソースのリソース定義がコードから削除されても、動作は同じままです。保持されているリソースにカスタム名が付けられている場合、同じコードを再デプロイすると「Already Exists」(既に存在します) というエラーが表示されます。

このエラーを解決するには、ユースケースに応じて以下のアクションを実行してください。

  • 意図せずにリソースを保持してしまった場合は、リソースを手動で削除してください。
  • リソースを意図的に保持する場合は、AWS CDK コード内のリソースの名前を一意の値に変更してください。
  • リソースを意図的に保持するもう 1 つの方法は、AWS CDK コードからリソース名を削除して AWS CDK に新しい名前を自動生成させることです。
  • スタックを削除する前に、removalPolicy がリソースから DESTROY に設定されていることを確認してください。

解決策

**注記:**以下のステップでは、AWS CDK の [S3.bucket] クラスで表される Amazon Simple Storage Service (Amazon S3) バケットリソースの例を使用します。AWS CDK 内のこのソースの removalPolicy は、デフォルトで RETAIN に設定されています。このリソースは、それぞれのスタックが削除されるか、スタックの更新中にリソースが削除されても、アカウントに保持されます。

例:

const s3Bucket = new s3.Bucket(this, 's3-bucket', {
 bucketName: ‘DOC-EXAMPLE-BUCKET1’,
 versioned: false,
 encryption: s3.BucketEncryption.S3_MANAGED
 });

保持しているリソースを手動で削除する

1.    AWS マネジメントコンソールにサインインし、保持したくないリソースの対応するサービスにアクセスします。

2.    保持したくないリソースは手動で削除します。

**注記:**この例では、Amazon S3 バケットを削除して s3.bucket リソースを削除します。

3.    AWS CDK コードを再デプロイします。

cdk deploy

保持しているリソースの名前を変更

1.    名前を変更したいリソースの AWS CDK コードにアクセスします。

2.    リソースの名前を、保持しているリソースの名前と競合しない一意の値に更新します。

**注記:**この例では、bucketName パラメータを更新して S3.bucket リソースの名前を変更します。

例:

const s3Bucket = new s3.Bucket(this, 's3-bucket', {
 bucketName: ‘EXAMPLE-NEW-NAME-S3-BUCKET’,
 versioned: false,
 encryption: s3.BucketEncryption.S3_MANAGED
 });

AWS CDK が固有の名前を自動生成できるようにするには、リソース名を削除してください

1.    AWS CDK からリソース名を削除します。

**注記:**この例では、‏bucketName プロパティを削除して AWS CDK が新しい名前を自動生成できるようにしています。

例:

const s3Bucket = new s3.Bucket(this, 's3-bucket', {
 versioned: false,
 encryption: s3.BucketEncryption.S3_MANAGED
 });

2.    AWS CDK コードを再デプロイします。

cdk deploy

removalPolicy を DESTROY に設定する

1.    保持したくないリソースの AWS CDK コードにアクセスします。

2.    removalPolicy プロパティを DESTROY に設定します。

const s3Bucket = new s3.Bucket(this, 's3-bucket', {
 bucketName: ‘EXAMPLE-S3-BUCKET’,
 removalPolicy: RemovalPolicy.DESTROY
 });

3.    cdk synth を実行して AWS CloudFormation テンプレートにアクセスし、DeletionPolicyUpdateReplacePolicyDelete に設定されていることを確認します。

cdk synth
AWS公式
AWS公式更新しました 1年前
コメントはありません

関連するコンテンツ