지속성 Lambda 함수 간접 호출
지속성 Lambda 함수는 표준 Lambda 함수와 동일한 간접 호출 방법을 지원합니다. 지속성 함수를 동기식이나 비동기식으로, 또는 이벤트 소스 매핑을 통해 간접 호출할 수 있습니다. 간접 호출 프로세스는 표준 함수와 동일하지만 지속성 함수는 장기 실행 및 자동 상태 관리를 위한 추가 기능을 제공합니다.
간접 호출 방법
동기식 간접 호출: 지속성 함수를 간접 호출하고 응답을 기다립니다. 동기식 간접 호출은 Lambda에 의해 15분(또는 구성된 함수 및 실행 제한 시간에 따라 그 이하)으로 제한됩니다. 즉각적인 결과가 필요하거나 응답을 기대하는 API 및 서비스와 통합할 때는 동기식 간접 호출을 사용합니다. 호출자를 방해하지 않고 효율적인 계산을 위해 대기 작업을 사용할 수 있습니다. 간접 호출은 전체 지속성 실행이 완료될 때까지 기다립니다. 멱등성 실행 시작의 경우 멱등성에 설명된 대로 실행 이름 파라미터를 사용합니다.
aws lambda invoke \ --function-name my-durable-function:1 \ --cli-binary-format raw-in-base64-out \ --payload '{"orderId": "12345"}' \ response.json
비동기식 간접 호출: 응답을 기다리지 않고 처리할 이벤트를 대기열에 등록합니다. Lambda는 이벤트를 대기열에 배치하고 즉시 반환합니다. 비동기식 간접 호출은 최대 1년의 실행 기간을 지원합니다. 실행 후 망각형 시나리오 또는 백그라운드에서 처리가 발생할 수 있는 경우 비동기식 간접 호출을 사용합니다. 멱등성 실행 시작의 경우 멱등성에 설명된 대로 실행 이름 파라미터를 사용합니다.
aws lambda invoke \ --function-name my-durable-function:1 \ --invocation-type Event \ --cli-binary-format raw-in-base64-out \ --payload '{"orderId": "12345"}' \ response.json
이벤트 소스 매핑: Amazon SQS, Kinesis 또는 DynamoDB와 같은 스트림 또는 대기열 기반 서비스에서 레코드를 사용할 수 있을 때 지속성 함수를 자동으로 간접 호출하도록 Lambda를 구성합니다. 이벤트 소스 매핑은 이벤트 소스를 폴링하고 배치 레코드가 있는 함수를 간접 호출합니다. 실행 기간 제한을 포함하여 지속성 함수와 함께 이벤트 소스 매핑을 사용하는 방법에 대한 자세한 내용은 지속성 함수를 사용한 이벤트 소스 매핑을 참조하세요.
각 간접 호출 방법에 대한 자세한 내용은 동기식 간접 호출 및 비동기식 간접 호출을 참조하세요.
참고
지속성 함수는 오류 처리에 Dead Letter Queue(DLQ)를 지원하지만 Lambda 대상은 지원하지 않습니다. 실패한 간접 호출에서 레코드를 캡처하도록 DLQ를 구성합니다.
정규화된 ARN 요구 사항
지속성 함수는 간접 호출에 정규화된 식별자가 필요합니다. 버전 번호, 별칭 또는 $LATEST를 사용하여 지속성 함수를 간접 호출해야 합니다. 정규화된 ARN 또는 함수 이름을 버전/별칭 접미사와 함께 사용할 수 있습니다. 정규화되지 않은 식별자(버전 또는 별칭 접미사 제외)는 사용할 수 없습니다.
유효한 간접 호출:
# Using full ARN with version number arn:aws:lambda:us-east-1:123456789012:function:my-durable-function:1 # Using full ARN with alias arn:aws:lambda:us-east-1:123456789012:function:my-durable-function:prod # Using full ARN with $LATEST arn:aws:lambda:us-east-1:123456789012:function:my-durable-function:$LATEST # Using function name with version number my-durable-function:1 # Using function name with alias my-durable-function:prod
유효하지 않은 간접 호출:
# Unqualified ARN (not allowed) arn:aws:lambda:us-east-1:123456789012:function:my-durable-function # Unqualified function name (not allowed) my-durable-function
이 요구 사항은 수명 주기 동안 지속성 실행이 일관되게 유지되도록 합니다. 지속성 실행이 시작되면 특정 함수 버전에 고정됩니다. 함수가 일시 중지되고 몇 시간 또는 며칠 후에 재개되면 Lambda는 실행을 시작한 것과 동일한 버전을 간접 호출하여 전체 워크플로에서 코드 일관성을 보장합니다.
모범 사례
$LATEST가 아닌 프로덕션 지속성 함수에 번호가 지정된 버전 또는 별칭을 사용합니다. 번호가 지정된 버전은 변경할 수 없으며, 결정론적 재생이 보장됩니다. 선택 사항인 별칭은 간접 호출 코드를 변경하지 않고 새 버전을 가리키도록 업데이트할 수 있는 안정적인 참조의 역할을 합니다. 별칭을 업데이트하면 새 실행은 새 버전을 사용하지만 진행 중인 실행은 원래 버전으로 계속됩니다. $LATEST를 사용하여 프로토타입을 생성하거나 개발 중에 배포 시간을 단축할 수 있습니다. 단, 실행 중에 기본 코드가 변경되면 실행이 올바르게 재생되지 않을 수 있으며, 실패할 수도 있습니다.
실행 수명 주기 이해
지속성 함수를 간접 호출하면 Lambda는 여러 함수 간접 호출에 걸쳐 지속성 실행을 생성합니다.
-
최초 간접 호출: 간접 호출 요청으로 새로운 지속성 실행이 생성됩니다. Lambda는 고유한 실행 ID를 할당하고 처리를 시작합니다.
-
실행 및 체크포인트 지정: 함수가 지속성 작업을 실행하면 SDK는 진행 상황을 추적하는 체크포인트를 생성합니다.
-
일시 중지(필요한 경우): 함수가
wait또는waitForCallback같은 지속성 대기 또는 자동 단계 재시도를 사용하는 경우 Lambda는 실행을 일시 중지하고 컴퓨팅 시간 요금이 발생하지 않게 됩니다. -
재개: 재개(재시도 후 포함)할 시간이 되면 Lambda는 함수를 다시 간접 호출합니다. SDK는 체크포인트 로그를 재생하고 실행이 일시 중지된 위치에서 계속합니다.
-
완료: 함수가 최종 결과를 반환하거나 처리되지 않은 오류를 발생시키면 지속성 실행이 완료됩니다.
동기식 간접 호출의 경우 호출자는 대기 작업을 포함하여 전체 지속성 실행이 완료될 때까지 기다립니다. 실행이 간접 호출 제한 시간(15분 이하)을 초과하면 간접 호출 제한 시간이 초과됩니다. 비동기식 간접 호출의 경우 Lambda는 즉시 반환하고 실행은 독립적으로 계속됩니다. 지속성 실행 API를 사용하여 실행 상태를 추적하고 최종 결과를 검색합니다.
애플리케이션 코드에서 간접 호출
AWS SDK를 사용하여 애플리케이션 코드에서 지속성 함수를 간접 호출합니다. 간접 호출 프로세스는 표준 함수와 동일합니다.
연쇄 간접 호출
지속성 함수는 DurableContext의 invoke 작업을 사용하여 다른 지속성 및 비지속성 함수를 간접 호출할 수 있습니다. 이렇게 하면 함수 직접 호출 시 간접 호출된 함수가 완료될 때까지 대기(일시 중지)하는 연쇄 간접 호출이 생성됩니다.
연쇄 간접 호출은 직접 호출 함수에 체크포인트를 생성합니다. 함수 직접 호출이 중단되면 함수를 다시 간접 호출하지 않고 간접 호출된 함수의 결과와 함께 체크포인트에서 재개됩니다.
참고
교차 계정 연쇄 간접 호출은 지원되지 않습니다. 간접 호출된 함수는 직접 호출 함수와 동일한 AWS 계정에 있어야 합니다.