API Gateway에서 페이로드 응답 스트리밍과 Lambda 프록시 통합 설정
Lambda 함수의 응답을 스트리밍하여 첫 번째 바이트까지의 시간(TTFB) 성능을 개선하고 부분 응답을 사용할 수 있게 되면 클라이언트로 다시 보낼 수 있습니다. API Gateway를 사용하려면 InvokeWithResponseStream Lambda API를 사용하여 Lambda 함수를 간접적으로 호출해야 합니다. API Gateway는 이벤트 객체를 Lambda 함수에 전달합니다. 백엔드 Lambda 함수는 수신되는 요청 데이터를 구문 분석하여 반환하는 응답을 결정합니다. API Gateway가 Lambda 출력을 스트리밍하려면 Lambda 함수가 API Gateway에 필요한 형식을 출력해야 합니다.
스트림과 버퍼링된 응답 전송 모드 간의 Lambda 프록시 통합 차이
다음 목록은 응답 스트리밍을 위한 Lambda 프록시 통합과 Lambda 프록시 통합의 차이점을 설명합니다.
-
API Gateway는 InvokeWithResponseStream API를 사용하여 응답 스트리밍을 위한 Lambda 프록시 통합을 간접적으로 호출합니다. 이렇게 하면 다음과 같은 다른 URI가 생성됩니다.
arn:aws:apigateway:us-west-1:lambda:path/2021-11-15/functions/arn:aws:lambda:us-west-1:111122223333:function:my-function-name/response-streaming-invocations이 ARN은 API 버전에 대해 다른 날짜를 사용하고 Lambda 프록시 통합과는 다른 서비스 작업을 사용합니다.
응답 스트리밍에 API Gateway 콘솔을 사용하는 경우 콘솔은 올바른 URI를 사용합니다.
-
Lambda 프록시 통합에서 API Gateway는 Lambda로부터 전체 응답을 수신한 후에만 클라이언트에 응답을 전송합니다. 응답 스트리밍을 위한 Lambda 프록시 통합에서 API Gateway는 Lambda에서 유효한 메타데이터 및 구분 기호를 수신한 후 페이로드 스트림을 시작합니다.
-
응답 스트리밍을 위한 Lambda 프록시 통합은 프록시 통합과 동일한 입력 형식을 사용하지만 다른 출력 형식이 필요합니다.
응답 스트리밍을 위한 Lambda 프록시 통합 형식
API Gateway가 응답 스트리밍으로 Lambda 함수를 간접적으로 호출하는 경우 입력 형식은 프록시 통합을 위한 Lambda 함수의 입력 형식과 동일합니다. 자세한 내용은 프록시 통합에 대한 Lambda 함수의 입력 형식 섹션을 참조하세요.
Lambda가 API Gateway에 응답을 스트리밍할 때 응답은 다음 형식을 준수해야 합니다. 이 형식은 구분 기호를 사용하여 메타데이터 JSON과 원시 페이로드를 구분합니다. 이 경우 페이로드 데이터는 스트리밍 Lambda 함수에 의해 전송될 때 스트리밍됩니다.
{ "headers": {"headerName": "headerValue", ...}, "multiValueHeaders": { "headerName": ["headerValue", "headerValue2", ...], ... }, "cookies" : ["cookie1", "cookie2"], "statusCode":httpStatusCode}<DELIMITER>PAYLOAD1 | PAYLOAD2 | PAYLOAD3
출력에서:
-
출력에서 추가 응답 헤더가 반환되지 않을 경우
headers,multiValueHeaders,cookies및statusCode키가 비지정 상태일 수 있습니다. -
headers키에는 단일 값 헤더만 있습니다. -
출력에는 헤더에
Transfer-Encoding: chunked또는Content-length:이 포함될 것으로 예상됩니다. 함수가 이러한 헤더 중 하나를 반환하지 않으면 API Gateway는 응답 헤더에numberTransfer-Encoding: chunked를 추가합니다. -
multiValueHeaders키에는 다중 값 헤더와 단일 값 헤더가 있을 수 있습니다.multiValueHeaders키를 사용하여 모든 단일 값 헤더를 포함하는 모든 추가 헤더를 지정할 수 있습니다. -
headers및multiValueHeaders모두에 대해 값을 지정한 경우, API Gateway는 이들 헤더를 단일 목록으로 병합합니다. 동일한 키-값 페어가 양쪽 모두에 지정된 경우,multiValueHeaders의 값만이 병합된 목록에 표시됩니다. -
메타데이터는 유효한 JSON이어야 합니다.
headers,multiValueHeaders,statusCode및cookies키만 지원됩니다. -
메타데이터 JSON 뒤에 구분 기호를 제공해야 합니다. 구분 기호는 8 Null 바이트여야 하며 스트림 데이터의 처음 16KB 내에 나타나야 합니다.
-
API Gateway에는 메서드 응답 페이로드에 대한 특정 형식이 필요하지 않습니다.
함수 URL을 사용하여 Lambda 함수를 스트리밍하는 경우 이러한 요구 사항을 충족하도록 Lambda 함수의 입력 및 출력을 수정해야 합니다.
Lambda 함수 출력이 이 형식의 요구 사항을 준수하지 않는 경우에도 API Gateway는 여전히 Lambda 함수를 간접적으로 호출할 수 있습니다. 다음 표에는 API Gateway에서 지원하는 API 통합 요청 설정과 Lambda 함수 코드의 조합이 나와 있습니다. 여기에는 버퍼링된의 응답 전송 모드에 대해 지원되는 조합이 포함됩니다.
| 응답 전송 모드 | 함수 코드가 필수 형식을 준수합니다. | Lambda API 간접 호출 | API Gateway에서 지원됨 |
|---|---|---|---|
|
스트림 |
예 |
예. API Gateway는 응답을 스트리밍합니다. |
|
|
스트림 |
아니요 |
아니요. API Gateway는 Lambda 함수를 간접적으로 호출하고 500 오류 응답을 반환합니다. |
|
|
스트림 |
예 |
아니요. API Gateway는이 통합 구성을 지원하지 않습니다. |
|
|
스트림 |
아니요 |
아니요. API Gateway는이 통합 구성을 지원하지 않습니다. |
|
|
버퍼링됨 |
예 |
아니요. API Gateway는이 통합 구성을 지원하지 않습니다. |
|
|
버퍼링됨 |
아니요 |
아니요. API Gateway는이 통합 구성을 지원하지 않습니다. |
|
|
버퍼링됨 |
예 |
API Gateway는 HTTP 헤더와 상태 코드를 반환하지만 응답 본문은 반환하지 않습니다. |
|
|
버퍼링됨 |
아니요 |
예. 이는 Lambda 프록시 통합입니다. 자세한 내용은 Lambda 프록시 통합을 참조하세요. |