Get Hands-on with Amazon EKS - Workshop Event Series
Whether you're taking your first steps with Kubernetes or you're an experienced practitioner looking to sharpen your skills, our Amazon EKS workshop series delivers practical, real-world experience that moves you forward. Learn directly from AWS solutions architects and EKS specialists through hands-on sessions designed to build your confidence with Kubernetes. Register now and start building with Amazon EKS!
CloudFormation でステータスが DELETE_FAILED または DELETE_IN_PROGRESS で止まっている Lambda ベースのカスタムリソースを削除する方法を教えてください。
AWS CloudFormation で、Lambda ベースのカスタムリソースが DELETE_FAILED ステータスまたは DELETE_IN_PROGRESS ステータスで止まっています。カスタムリソースを削除したいです。
解決策
リソースの状態に応じて、次の解決策のいずれかを選択してください。
DELETE_FAILED ステータスのままになっているカスタムリソースを削除する
削除リクエストを処理するロジックがない Lambda ベースのカスタムリソースでスタックを削除しようとすると、エラーメッセージが表示されます。カスタムリソースに誤った削除ロジックが含まれている場合も、次のエラーメッセージが表示される場合があります: "CloudFormation did not receive a response from your Custom Resource. Please check your logs for requestId [652961ca-f24e-42e0-8f74-3f4846ba282d]. If you use the Python cfn-response module, you might need to update your Lambda function code so that CloudFormation can attach the updated version."
スタックのステータスが DELETE_FAILED に変わり、次のエラーメッセージが表示されます: "Custom Resource failed to stabilize in expected time."
スタックを削除するには、次の手順を実行します。
- CloudFormation コンソールを開きます。
- DELETE_FAILED ステータスのままになっているカスタムリソースを含むスタックを選択します。
- [アクション] を選択し、[スタックを削除] を選択します。
- 保持するリソースのリストが表示されたポップアップウィンドウで、DELETE_FAILED ステータスから移行できないカスタムリソースを選択します。次に、[削除] を選択します。
- [アクション] を選択し、[スタックを削除] を選択します。
スタックのステータスが DELETE_COMPLETE に変わります。
注: カスタムリソースは物理リソースではないため、スタックの削除後にカスタムリソースをクリーンアップする必要はありません。
DELETE_IN_PROGRESS ステータスのままになっているカスタムリソースを削除する
スタックがカスタムリソースを削除すると DELETE_IN_PROGRESS ステータスから進まなくなった場合、そのスタックに削除リクエストを処理するロジックがない可能性があります。または、スタックに誤った削除ロジックが含まれている可能性があります。
スタックを強制的に削除するには、SUCCESS シグナルを手動で送信する必要があります。シグナルには、CloudFormation から Lambda に送信されるイベントに含まれている ResponseURL 値と RequestId 値が必要です。
-
CloudFormation テンプレートで、カスタムリソースがリクエストを送信している Lambda 関数の名前を特定します。関数名は、AWS::CloudFormation::CustomResource または Custom::String リソースの ServiceToken プロパティにあります。
例を次に示します。
MyCustomResource: Type: "Custom::PingTester" Properties: ServiceToken: !Sub | arn:aws:lambda:us-east-1:111122223333:function:awsexamplelambdafunction -
Lambda コンソールを開きます。
-
ナビゲーションペインで [関数] を選択し、ステップ 1 で特定した関数を選択します。たとえば、上記のコード例では、awsexamplelambdafunction が関数名です。
-
Lambda 関数が、イベントの詳細を /aws/lambda/function_name という Amazon CloudWatch ロググループに記録していることを確認します。
ロジックの例:exports.handler = function(event, context) { console.log("REQUEST RECEIVED:\n" + JSON.stringify(event)); ... }注: Lambda 関数にイベントを CloudWatch ログに出力するロジックが含まれていない場合、 ResponseURL と RequestId の値を取得することはできません。手動でシグナルを送信するには、これらの値が必要です。CloudFormation スタックがタイムアウトし、DELETE_FAILED 状態に移行するまで約 1 時間待機します。その後、「DELETE_FAILED ステータスで止まっているカスタムリソースを削除する」セクションの手順を実行してスタックを削除します。
-
[モニタリング] タブを選択し、[CloudWatch でログを表示] を選択します。
-
Amazon CloudWatch コンソールで、最新のログを選択します。
注: 関数がログストリーム用の Amazon CloudWatch Logs にアクセスできる場合のみ、CloudWatch ログが表示されます。
-
最新のログ内の RequestType が Delete に設定されているイベントを特定し、RequestId、ResponseURL、StackId、LogicalResourceId、PhysicalResourceId の値をコピーします。例を次に示します。
Received event: { "RequestType": "Delete", "ServiceToken": "arn:aws:lambda:us-east-1:111122223333:function:awsexamplelambdafunction", "ResponseURL": "https://cloudformation-custom-resource-response-useast1.s3.us-east-1.amazonaws.com/arn%3Aaws%3Acloudformation%3Aus-east-1%3A111122223333%3Astack/awsexamplecloudformation/33ad60e0-5f25-11e9-a734-0aa6b80efab2%7CMyCustomResource%7Ce2fc8f5c-0391-4a65-a645-7c695646739?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20170313T0212304Z&X-Amz-SignedHeaders=host&X-Amz-Expires=7200&X-Amz-Credential=QWERTYUIOLASDFGBHNZCV%2F20190415%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Signature=dgvg36bh23mk44nj454bjb54689bg43r8v011uerehiubrjrug5689ghg94hb", "StackId": "arn:aws:cloudformation:us-east-1:111122223333:stack/awsexamplecloudformation/33ad60e0-5f25-11e9-a734-0aa6b80efab2", "RequestId": "e2fc8f5c-0391-4a65-a645-7c695646739", "LogicalResourceId": "MyCustomResource", "PhysicalResourceId": "test-MyCustomResource-1URTEVUHSKSKDFF", "ResourceType": "Custom::PingTester" -
応答オブジェクトの SUCCESS 応答シグナルを削除リクエストに送信するには、ローカルのコマンドラインインターフェイスで次のコマンドを実行します。ステップ 7 でコピーした値を含める必要があります。
curl -H "Content-Type: ''" -X PUT -d "{\"Status\": \"SUCCESS\",\"PhysicalResourceId\": \"test-CloudWatchtrigger-1URTEVUHSKSKDFF\",\"StackId\": \"arn:aws:cloudformation:us-west-2:111122223333:stack/CRStack/5105e4b0-4a29-11ef-8c42-067744df1edb\",\"RequestId\": \"dca731ad-18ad-496c-8c77-459d904fd36b\",\"LogicalResourceId\": \"MyCustomResource\"}" "https://cloudformation-custom-resource-response-uswest2.s3-us-west-2.amazonaws.com/arn%3Aaws%3Acloudformation%3Aus-west-2%3A111122223333%3Astack/CRStack/5105e4b0-4a29-11ef-8c42-067744df1edb%7CCustomResource%7Cdca731ad-18ad-496c-8c77-459d904fd36b?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20240725T020141Z&X-Amz-SignedHeaders=host&X-Amz-Expires=7200&X-Amz-Credential=AKIA54RCMT6SJPHCTM4H%2F20240725%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Signature=3b1567adb5ec9415526251a26bac3a6c861ac77aa090a3ada0a4a4d109a7273d"
CloudFormation スタックイベントで、カスタムリソースのステータスが DELETE_COMPLETE に変わります。
関連情報
カスタムリソースを使用してカスタムプロビジョニングロジックを作成する
AWS::CloudFormation::CustomResource
AWS CloudFormation を使用して AWS Lambda ベースのカスタムリソースを実装するうえでのベストプラクティスを教えてください
- 言語
- 日本語

関連するコンテンツ
- 質問済み 7年前
- 質問済み 8年前
