Knowledge Center Monthly Newsletter - March 2025
Stay up to date with the latest from the Knowledge Center. See all new and updated Knowledge Center articles published in the last month and re:Post’s top contributors.
CloudFormation에서 DELETE_FAILED 상태 또는 DELETE_IN_PROGRESS 상태로 멈춘 Lambda 지원 사용자 지정 리소스를 삭제하려면 어떻게 해야 합니까?
AWS Lambda 지원 사용자 지정 리소스가 AWS CloudFormation에서 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)); ... }
참고: CloudWatch 로그에 이벤트를 출력하는 로직이 Lambda 함수에 포함되어 있지 않은 경우 ResponseURL 및 RequestId 값을 가져올 수 없습니다. 수동 신호를 보내려면 이들 값이 있어야 합니다. CloudFormation 스택의 제한 시간이 초과되고 DELETE_FAILED 상태가 될 때까지 약 한 시간 정도 기다리십시오. 그런 다음, 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 지원 사용자 지정 리소스를 구현하는 모범 사례에는 어떤 것이 있습니까?

관련 콘텐츠
- 질문됨 일 년 전lg...
- 질문됨 2년 전lg...
- AWS 공식업데이트됨 2달 전
- AWS 공식업데이트됨 2년 전
- AWS 공식업데이트됨 3년 전
- AWS 공식업데이트됨 일 년 전