Craig가 AWS Lambda 기반
CloudFormation 리소스를 구현할 수 있도록
도와 줍니다

craig

AWS Lambda 기반 사용자 지정 CloudFormation 리소스를 구현할 때의 모범 사례는 무엇입니까?

CloudFormation 스택에서 Lambda 기반 사용자 지정 리소스를 구현할 때 다음과 같은 모범 사례를 고려하십시오.

사용자 지정 리소스를 빌드하여 실패를 정상적으로 보고, 기록 및 처리

예외로 인해 함수 코드가 응답을 보내지 않고 종료될 수 있습니다. CloudFormation에는 작업의 성공 또는 실패를 확인하는 HTTPS 응답이 필요하므로, 보고되지 않은 예외 발생 시 스택 롤백을 시작하기 전에 작업 시간이 초과될 때까지 CloudFormation이 대기하게 됩니다. 롤백 시 예외가 다시 발생하면 CloudFormation은 결국 롤백이 실패로 끝나기 전까지 다시 시간 초과를 기다립니다. 이 시간 동안 스택을 사용할 수 없으며, 시간 초과 문제는 해결하는 데 많은 시간이 소요될 수 있습니다.

이 문제를 방지하려면 함수의 코드에 예외를 처리하는 로직, 문제를 해결할 수 있도록 실패를 기록하는 기능, 그리고 필요할 경우 작업이 실패했음을 확인하는 HTTPS 응답으로 CloudFormation에 다시 응답하는 기능이 있어야 합니다.

합리적인 제한 시간 기간을 설정하고, 이 기간을 초과하려고 할 경우 보고

작업이 정의된 제한 시간 기간 내에 실행되지 않으면, 함수가 예외를 발생시키고 CloudFormation에 응답이 전송되지 않습니다.

이 문제를 방지하려면 Lambda 함수의 제한 시간 값을 처리 시간 및 네트워크 조건의 변수를 처리할 수 있을 만큼 충분히 높게 설정해야 합니다. 또한 함수가 제한 시간을 초과하려고 하면 CloudFormation에 오류로 응답하도록 함수의 타이머를 설정하는 방법도 고려하십시오. 이렇게 하면 함수 시간 초과로 인해 사용자 지정 리소스의 시간 초과 및 지연이 발생하는 것을 방지할 수 있습니다.

Create, Update 및 Delete 이벤트 이해 및 구축

스택 작업에 따라 CloudFormation는 함수에 Create, Update 또는 Delete 이벤트를 보냅니다. 각 이벤트는 구별하여 처리되므로 세 이벤트 유형 중 하나를 수신할 때 예상치 못한 동작이 없는지 확인해야 합니다.

자세한 내용은 사용자 지정 리소스 요청 유형을 참조하십시오.

CloudFormation이 리소스를 식별 및 교체하는 방법 이해

업데이트가 물리적 리소스 교체를 트리거하면 CloudFormation은 Lambda 함수가 반환한 PhysicalResourceId를 이전 PhysicalResourceId와 비교합니다. 두 ID가 다르면 CloudFormation은 리소스가 새 물리적 리소스로 교체되었다고 가정합니다.

그러나 필요한 경우 롤백할 수 있도록 이전 리소스는 암시적으로 제거되지 않습니다. 스택 업데이트가 완료되면 이전 ID를 식별자로 하여 Delete 이벤트 요청이 전송됩니다. 스택 업데이트가 실패하고 롤백이 발생하면 새 물리적 ID가 Delete 이벤트를 통해 전송됩니다.

이를 고려했을 때 새 PhysicalResourceId 반환은 주의해서 수행되어야 하며, delete 이벤트는 교체가 필요한 업데이트가 올바르게 처리되도록 입력 PhysicalId를 고려해야 합니다.

함수가 멱등성을 고려하여 설계되었는지 확인

멱등 함수는 동일한 입력으로 여러 번 반복할 수 있으며, 결과는 한 번만 수행한 경우와 같습니다. 멱등성은 재시도, 업데이트 및 롤백으로 인해 중복 리소스 생성, 롤백 또는 삭제 시 오류, 기타 예상치 못한 결과를 발생시키지 않도록 CloudFormation을 사용할 때 유용합니다.

예를 들어 CloudFormation이 함수를 호출하여 리소스를 생성하지만 리소스가 생성되지 않았다는 응답을 수신하지 못한 경우, CloudFormation은 함수를 다시 호출할 수 있으며 이로 인해 두 번째 리소스가 생성되고 첫 번째 리소스는 분리될 수 있습니다.

이를 해결하는 방법은 함수가 수행하려는 작업에 따라 다를 수 있지만, CloudFormation이 기존 리소스를 검사하는 데 사용할 수 있는 고유 토큰을 사용하는 것이 일반적입니다. 예를 들어 StackId 및 LogicalResourceId의 해시는 리소스의 메타데이터 또는 DynamoDB 테이블에 저장될 수 있습니다.

롤백

스택 작업이 실패하면 CloudFormation은 모든 리소스를 이전 상태로 되돌리려고 롤백을 시도합니다. 그 결과 업데이트로 인해 리소스 교체가 발생했는지 여부에 따라 다른 동작이 발생합니다.

교체가 올바르게 처리되고 delete 이벤트가 수신될 때까지 이전 리소스가 암시적으로 제거되지 않게 함으로써 롤백이 원활하게 실행되도록 보장합니다.

사용자 지정 리소스를 사용할 때 모범 사례를 구현할 수 있도록 awslabs에서 제공하는 Custom Resource Helper를 사용해 보십시오. 예외 및 시간 초과 트래핑, CloudFormation에 응답 전송 및 로깅에 도움이 될 수 있습니다.

CloudFormation, Lambda, 사용자 지정 리소스, 시간 초과 트래핑, 예외 트래핑


페이지 내용이 도움이 되었습니까? | 아니요

AWS 지원 지식 센터로 돌아가기

도움이 필요하십니까? AWS 지원 센터를 방문하십시오.

게시 날짜: 2017-01-09