Lambda 함수를 동기적으로 호출하기
Lambda 함수를 동기적으로 호출하기 (Invoke a Lambda function synchronously)
출처: AWS Lambda 개발자 안내서 함수를 동기적으로 호출하면 Lambda가 함수를 실행하고 응답을 기다려요. 함수가 완료되면 Lambda는 함수 코드의 응답과 함께, 호출된 함수의 버전 같은 추가 데이터를 반환해요. AWS CLI로 함수를 동기적으로 호출하려면
invoke명령을 사용해요.
aws lambda invoke --function-name my-function \
--cli-binary-format raw-in-base64-out \
--payload '{ "key": "value" }' response.json
cli-binary-format 옵션은 AWS CLI 버전 2를 사용할 때 필요해요. 기본 설정으로 만들려면 aws configure set cli-binary-format raw-in-base64-out을 실행하세요.
다음과 같은 출력이 보여야 해요.
{
"ExecutedVersion": "$LATEST",
"StatusCode": 200
}
payload는 JSON 형식의 이벤트를 담은 문자열이에요. AWS CLI가 함수의 응답을 쓰는 파일 이름은 response.json이에요. 함수가 객체나 오류를 반환하면 응답 본문은 JSON 형식의 객체나 오류예요. 함수가 오류 없이 종료되면 응답 본문은 null이에요.
참고
Lambda는 응답을 보내기 전에 외부 확장(extension)이 완료되는 것을 기다리지 않아요. 외부 확장은 실행 환경의 독립 프로세스로 실행되며 함수 호출이 완료된 후에도 계속 실행돼요.
터미널에 표시되는 명령의 출력에는 Lambda 응답의 헤더 정보가 포함돼요. 이벤트를 처리한 버전(별칭을 사용할 때 유용해요)과 Lambda가 반환한 상태 코드가 포함돼요. Lambda가 함수를 실행할 수 있었다면, 함수가 오류를 반환해도 상태 코드는 200이에요.
참고
타임아웃이 긴 함수의 경우 동기 호출 중에 클라이언트가 응답을 기다리는 동안 연결이 끊어질 수 있어요. 긴 연결을 허용하도록 HTTP 클라이언트, SDK, 방화벽, 프록시, 운영 체제를 타임아웃 또는 keep-alive 설정으로 구성하세요.
Lambda가 함수를 실행할 수 없다면 오류가 출력에 표시돼요.
aws lambda invoke --function-name my-function \
--cli-binary-format raw-in-base64-out \
--payload value response.json
다음과 같은 출력이 보여야 해요.
An error occurred (InvalidRequestContentException) when calling the Invoke operation: Could not parse request body into json: Unrecognized token 'value': was expecting ('true', 'false' or 'null')
at [Source: (byte[])"value"; line: 1, column: 11]
AWS CLI는 명령줄 셸의 명령으로 AWS 서비스와 상호작용할 수 있는 오픈소스 도구예요. 이 섹션의 단계를 완료하려면 AWS CLI 버전 2가 있어야 해요.
AWS CLI로 --log-type 명령 옵션을 사용해 호출의 로그를 검색할 수 있어요. 응답에는 호출에서 최대 4KB의 base64로 인코딩된 로그가 담긴 LogResult 필드가 포함돼요.
예제 — 로그 ID 검색
다음 예시는 my-function이라는 함수의 LogResult 필드에서 로그 ID를 검색하는 방법을 보여줘요.
aws lambda invoke --function-name my-function out --log-type Tail
다음과 같은 출력이 보여야 해요.
{
"StatusCode": 200,
"LogResult": "U1RBUlQgUmVxdWVzdElkOiA4N2QwNDRiOC1mMTU0LTExZTgtOGNkYS0yOTc0YzVlNGZiMjEgVmVyc2lvb...",
"ExecutedVersion": "$LATEST"
}
예제 — 로그 디코딩
같은 명령 프롬프트에서 base64 유틸리티로 로그를 디코딩해요. 다음 예시는 my-function의 base64 인코딩 로그를 검색하는 방법을 보여줘요.
aws lambda invoke --function-name my-function out --log-type Tail \
--query 'LogResult' --output text --cli-binary-format raw-in-base64-out | base64 --decode
다음과 같은 출력이 보여야 해요.
START RequestId: 57f231fb-1730-4395-85cb-4f71bd2b87b8 Version: $LATEST
"AWS_SESSION_TOKEN": "AgoJb3JpZ2luX2VjELj...", "_X_AMZN_TRACE_ID": "Root=1-5d02e5ca-f5792818b6fe8368e5b51d50;Parent=191db58857df8395;Sampled=0"",ask/lib:/opt/lib",
END RequestId: 57f231fb-1730-4395-85cb-4f71bd2b87b8
REPORT RequestId: 57f231fb-1730-4395-85cb-4f71bd2b87b8 Duration: 79.67 ms Billed Duration: 80 ms Memory Size: 128 MB Max Memory Used: 73 MB
base64 유틸리티는 Linux, macOS, Ubuntu on Windows에서 사용할 수 있어요. macOS 사용자는 base64 -D가 필요할 수 있어요.
함수를 직접 호출할 때는 응답에서 오류를 확인하고 재시도할 수 있어요. AWS CLI와 AWS SDK도 클라이언트 타임아웃, 스로틀링, 서비스 오류에서 자동으로 재시도해요.