AWS CloudFormation으로 AWS Lambda 기반 사용자 지정 리소스를 구현할 때 모범 사례를 따르고 싶습니다.
해결 방법
CloudFormation으로 Lambda 기반 사용자 지정 리소스를 구현할 때는 다음 모범 사례를 사용하십시오.
실패를 보고, 기록하고, 처리하기 위한 사용자 지정 리소스 구축
예외로 인해 응답을 보내지 않고 함수 코드가 종료될 수 있습니다. CloudFormation은 작업의 성공 또는 실패 여부를 확인하기 위해 HTTPS 응답을 필요로 합니다. 보고되지 않은 예외로 인해 CloudFormation은 작업 제한 시간이 초과될 때까지 기다린 후 스택 롤백을 시작합니다. 롤백 중에 예외가 다시 발생하면 CloudFormation은 롤백 실패로 끝나기 전에 타임아웃을 다시 기다립니다. 이 기간에는 스택을 사용할 수 없습니다.
제한 시간 문제를 피하려면 Lambda 함수용으로 생성한 코드에 다음 요소를 넣습니다.
적절한 제한 시간 기간을 설정하고 초과될 가능성이 있는 시기를 보고
정의된 제한 시간 내에 작업이 실행되지 않으면 함수에서 예외가 발생하고 CloudFormation에 응답을 전송하지 않습니다.
이 문제를 방지하려면 다음 작업을 수행하십시오.
- Lambda 함수의 제한 시간 값을 처리 시간 및 네트워크 조건의 변화를 처리할 수 있을 만큼 충분히 높게 설정합니다.
- 함수의 제한 시간이 임박했을 때 CloudFormation에 오류로 응답하도록 함수에 타이머를 설정합니다.
이벤트 생성, 업데이트, 삭제를 중심으로 구축
CloudFormation은 스택 작업에 따라 함수에 생성, 업데이트 또는 삭제 이벤트를 보냅니다. 각 이벤트는 다르게 처리되므로 함수가 세 가지 이벤트 유형 중 하나를 수신할 때 의도하지 않은 동작이 발생하지 않도록 해야 합니다.
자세한 내용은 사용자 지정 리소스 요청 유형을 참조하십시오.
CloudFormation이 리소스를 식별하고 대체하는 방법을 이해
업데이트가 물리적 리소스를 대체하면 CloudFormation은 Lambda 함수가 반환하는 PhysicalResourceId를 이전의 PhysicalResourceId와 비교합니다. ID가 다를 경우 CloudFormation은 리소스가 새 물리적 리소스로 대체된 것으로 가정합니다.
하지만 롤백 가능성을 허용하기 위해 CloudFormation은 이전 리소스를 제거하지 않습니다. 스택 업데이트가 완료되면 CloudFormation은 이전 물리적 ID를 식별자로 사용하여 삭제 이벤트 요청을 보냅니다. 스택 업데이트가 실패하고 롤백이 발생하면 CloudFormation은 삭제 이벤트에서 새 물리적 ID를 전송합니다.
PhysicalResourceId를 사용하여 리소스를 고유하게 식별하면 함수가 삭제 이벤트를 수신할 때 대체 중에 올바른 리소스만 삭제하도록 할 수 있습니다.
멱등성을 활용하여 함수 설계
동일한 입력값을 사용하여 멱등성 함수를 여러 번 반복할 수 있으며, 결과는 한 번만 수행한 것과 같습니다. 멱등성은 재시도, 업데이트 및 롤백으로 인해 리소스가 중복되거나 오류가 발생하지 않도록 합니다.
예를 들어 CloudFormation은 함수를 호출하여 리소스를 생성하지만 리소스가 성공적으로 생성되었다는 응답을 받지 못합니다. CloudFormation은 함수를 다시 호출하여 두 번째 리소스를 생성할 수 있습니다. 그러면 첫 번째 리소스가 고아가 될 수 있습니다.
롤백을 올바르게 처리하도록 핸들러 구현
스택 작업이 실패하면 CloudFormation은 모든 리소스를 이전 상태로 되돌리려고 합니다. 이 작업을 수행하면 업데이트로 인해 리소스가 대체되었는지 여부에 따라 동작이 달라집니다.
CloudFormation이 롤백을 완료할 수 있도록 하려면 다음 작업을 수행하십시오.
관련 정보
사용자 지정 리소스로 사용자 지정 프로비저닝 로직 생성