내용으로 건너뛰기

CloudFormation에서 사용자 지정 리소스 문제를 해결하려면 어떻게 해야 합니까?

4분 분량
0

AWS CloudFormation에서 사용자 지정 리소스 오류를 해결하려고 합니다.

간략한 설명

사용자 지정 리소스 오류는 리소스와 연결된 AWS Lambda 함수를 실행할 때 문제가 발생했기 때문에 발생합니다. 그러면 사용자 지정 리소스가 CloudFormation에 FAILED 상태를 보냅니다.

CloudFormation이 예상 기간 내에 사용자 지정 리소스로부터 응답을 받지 못하여 제한 시간이 초과되는 경우에도 사용자 지정 리소스 오류가 발생할 수 있습니다.

사용자 지정 리소스 문제를 해결하려면 AWSSupport-TroubleshootCFNCustomResource 런북을 실행하거나 CloudFormation 스택의 문제를 수동으로 해결하십시오.

Lambda 사용자 지정 리소스의 경우 런북은 Lambda가 Amazon Simple Storage Service(Amazon S3)에 연결되어 CloudFormation에 응답을 전송하는지 확인합니다. CloudFormation에 대한 응답에서는 Lambda 네트워크 구성 및 보안 그룹을 확인합니다.

해결 방법

AWSSupport-TroubleshootCFNCustomResource 런북 실행

시작하기 전에 AWS Identity and Access Management(IAM) 사용자 또는 역할에 필요한 IAM 권한이 있는지 확인하십시오.

자동화를 실행하려면 다음 단계를 완료하십시오.

  1. AWS Systems Manager 콘솔을 엽니다.
  2. 탐색 창에서 문서를 선택합니다.
  3. 검색 창에 AWSSupport-TroubleshootCfnCustomResource를 입력합니다.
  4. AWSSupport-TroubleshootCfnCustomResource 문서를 선택합니다.
  5. 자동화 실행을 선택합니다.
  6. 입력 파라미터에 다음을 입력합니다.
    (선택 사항) AutomationAssumeRole. AWS Systems Manager의 기능인 Automation이 사용자 대신 작업을 수행할 수 있도록 허용하는 IAM 역할의 ARN을 입력합니다. 역할을 지정하지 않으면 Automation에서는 런북을 시작하는 사용자의 권한을 사용합니다.
    StackName. 사용자 지정 리소스가 실패한 CloudFormation 스택의 이름을 입력합니다.
  7. 실행을 선택합니다.
  8. 출력 섹션에서 다음과 같은 세부 결과를 검토합니다.
    validateCloudFormationStack 단계에서는 CloudFormation 스택이 동일한 AWS 계정 및 AWS 리전에 존재하는지 확인합니다.
    checkCustomResource 단계에서는 CloudFormation 스택을 분석하고, 실패한 사용자 지정 리소스를 확인하고, 실패한 사용자 지정 리소스의 문제를 해결하는 방법에 대한 정보를 제공합니다.

CloudFormation 스택 문제 수동 해결

Amazon CloudWatch 로그 확인

다음 단계를 완료하십시오.

  1. CloudFormation 콘솔을 엽니다.
  2. 실패한 스택을 선택한 다음, 리소스 탭을 선택하여 사용자 지정 리소스와 연결된 Lambda 함수의 물리적 ID를 가져옵니다.
  3. Lambda 함수를 선택합니다.
  4. 모니터링 탭을 선택한 다음, CloudWatch 로그 보기를 선택합니다.

CloudFormation 롤백 중에 Lambda 함수가 삭제된 경우, 로그 그룹에 여전히 CloudWatch 로그가 포함되어 있을 수 있습니다.

로그를 가져오려면 다음 단계를 완료하십시오.

  1. CloudWatch 콘솔을 엽니다.
  2. 탐색 창에서 로그 그룹을 선택합니다.
  3. 검색 필드에서 다음 명령을 실행합니다.
    /aws/lambda/LambdaPhysicalName

참고: LambdaPhysicalName을 해당 Lambda 함수 이름으로 바꾸십시오.

로그를 찾을 수 없는 경우 롤백 기능을 끄고 스택을 재배포하여 Lambda 함수의 동작 문제를 해결하십시오.

잠재적 장애 원인 해결

FAILED 상태 해결

다음과 같은 오류 메시지가 표시될 수 있습니다. 

"Received response status FAILED from custom resource. Message returned: <reason here>."

사용자 지정 리소스와 연결된 Lambda 함수에 문제가 발생한 경우 예외 처리 로직이 제대로 작동하면 위의 오류 메시지가 표시됩니다.

이 문제를 해결하려면 오류 메시지 및 Lambda에 대한 CloudWatch 로그에 포함된 오류 원인을 검토하십시오.

CloudFormation이 응답을 받지 못함

CloudFormation이 사용자 지정 리소스로부터 응답을 받지 못하기 때문에 스택이 실패합니다. 

이 문제를 해결하려면 다음 작업을 수행하십시오.

  • 사용자 지정 리소스의 Lambda 함수에서 cfn-response 모듈을 올바르게 사용하여 CloudFormation 스택에 응답을 전송하고 있는지 확인합니다. 

  • CloudWatch 로그를 검토하여 코드 실행 시 오류가 발생하는지 여부를 확인합니다. 

  • Lambda 함수의 제한 시간 설정을 늘려 함수가 작업을 완료하는 데 충분한 시간을 확보할 수 있도록 합니다. 설정할 수 있는 최대 시간은 15분입니다.

  • Lambda 함수가 가상 프라이빗 클라우드(VPC) 내에 있는 경우 서브넷에 있는지 확인합니다. 서브넷은 NAT 게이트웨이를 통한 아웃바운드 트래픽을 허용해야 합니다. 또한 서브넷은 사용자 지정 리소스가 미리 서명된 Amazon S3 URL에 액세스할 수 있도록 Amazon S3 엔드포인트 액세스로 라우팅해야 합니다.

  • 제한 시간 이후에 응답이 전송된 경우, 동일한 리전에 많은 수의 동시 함수 실행이 있는지 Lambda 지표를 확인합니다. 시간 초과를 줄이려면 함수에 대해 예약된 동시성을 사용하십시오.

  • 사용자 지정 리소스 제한 시간이 초과될 때까지 스택이 IN PROGRESS 상태로 유지되는 경우, cURL을 사용하여 직접 HTTP 요청을 생성합니다. 직접 요청을 생성하면 잠재적으로 시간 초과를 방지할 수 있습니다.
    curl 명령의 예:

    curl -H 'Content-Type: ''' -X PUT -d '{    "Status": "SUCCESS",    "PhysicalResourceId": "test-CloudWatchtrigger-1URTEVUHSKSKDFF",
        "StackId": "arn:aws:cloudformation:us-east-1:111122223333:stack/awsexamplecloudformation/33ad60e0-5f25-11e9-a734-0aa6b80efab2
      ",
        "RequestId": "e2fc8f5c-0391-4a65-a645-7c695646739",
        "LogicalResourceId": "CloudWatchtrigger"
      }' '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
      '

    참고: 요청하려면 요청 객체의 세부 정보를 포함해야 합니다. RequestID와 Amazon S3에서 미리 서명된 URL을 CloudWatch 로그에서 찾을 수 있습니다. 자세한 내용은 CloudFormation에서 DELETE_FAILED 상태 또는 DELETE_IN_PROGRESS 상태로 멈춘 Lambda 지원 사용자 지정 리소스를 삭제하려면 어떻게 해야 합니까?를 참조하십시오.

관련 정보

간단한 자동화 실행(콘솔)

자동화 설정

Systems Manager Automation 런북 참조

CloudFormation을 사용하여 Lambda 지원 사용자 지정 리소스를 구현하는 모범 사례에는 어떤 것이 있습니까?

댓글 없음

관련 콘텐츠