Lambda 내구성 함수(Durable Functions) 모범 사례

Lambda 내구성 함수(Durable Functions) 모범 사례

내구성 함수(durable functions)는 기존 Lambda 함수와 다른 프로그래밍 방식을 요구하는 재생(replay) 기반 실행 모델을 사용해요. 내구성 워크플로 코드를 작성하고 테스트하는 방법에 대한 지침은 AWS Durable Execution SDK 개발자 안내서의 모범 사례를 참고하세요.

다음은 Lambda 내구성 함수를 배포·호출·모니터링하기 위한 모범 사례 권장 사항이에요.

출처: AWS Lambda 개발자 안내서

본문

함수 버전 및 별칭

버전 번호나 별칭으로 함수를 호출해서 실행을 특정 코드 버전에 고정해요. 새 코드 버전이 이전 버전의 상태를 처리할 수 있는지 확인하세요. 스텝(step) 이름을 바꾸거나 재생을 깨뜨리는 방식으로 스텝의 동작을 변경하지 마세요. 실행이 진행 중인 동안 스텝 이름을 바꾸거나 동작을 변경하면 해당 실행이 재개되지 않거나 잘못된 결과를 만들 수 있어요. 이는 런타임이 저장된 상태를 기대하는 스텝 정의와 더 이상 일치시킬 수 없기 때문이에요.

모니터링

실행 ID와 스텝 이름으로 구조화 로깅을 활성화해요. 오류율과 실행 기간에 대한 CloudWatch 알람을 설정해요. 병목 현상을 식별하려면 트레이싱을 사용해요. 자세한 지침은 모니터링 및 디버깅을 참고하세요.

오류 처리

일시적 실패에 대한 재시도 전략을 구성하는 것 외에도, 내구성 함수에 데드 레터 큐(DLQ)를 구성해서 영구적으로 실패한 실행의 이벤트를 캡처하세요. 비동기 호출 후 내구성 실행이 종료 상태(FAILED, STOPPED, TIMED_OUT)에 도달하면 Lambda가 원래 트리거 이벤트를 DLQ로 보내요. 이렇게 하면 실패한 이벤트를 잃지 않고 검사·디버그·필요 시 재처리할 수 있어요.

DLQ를 구성하려면 함수의 DeadLetterConfig 속성을 Amazon SQS 큐 또는 Amazon SNS 토픽 ARN으로 설정하세요. 자세한 내용은 데드 레터 큐를 참고하세요.

내구성 함수 오류 처리 시 다음 모범 사례를 따르세요.

  • 비동기 호출에 DLQ 구성 – 내구성 함수를 비동기로 호출할 때는 항상 데드 레터 큐를 연결하세요. 표준 Lambda 함수와 달리 서비스는 실패 시 내구성 실행을 자동으로 재시도하지 않아요. 올바르게 구성된 DLQ는 영구적으로 실패한 실행으로 이어진 이벤트를 캡처해요. DLQ에 올바른 권한과 메시지 수신에 충분한 용량이 있는지 확인하세요.
  • 스텝 내 재시도 전략 사용 – 일시적 실패에 대해 적절한 백오프가 있는 명시적 재시도 전략을 구성하세요. 재시도 구성에 대한 지침은 내구성 함수 재시도를 참고하세요.
  • DLQ와 EventBridge 알림 결합 – EventBridge 규칙을 사용해서 FAILED, STOPPED, TIMED_OUT 상태 변경에 대한 실시간 가시성을 확보하고, DLQ를 사용해서 원래 이벤트 페이로드를 보존해 나중에 분석하거나 재처리하세요.
  • DLQ 깊이 모니터링 – DLQ의 ApproximateNumberOfMessagesVisible 지표에 대해 CloudWatch 알람을 만들어 실패가 누적될 때 감지하세요.

관련 리소스

더 알아보기 (Learn more)

내구성 함수 시작하기는 Lambda 내구성 함수를 참고하세요.