AWS HTTP API용 압축

AWS HTTP APIs은 AWS에서 REST 기반 API를 배포하는 새로운 방법을 제공합니다. 원본REST APIs에 대해 여러 가지 단순화를 제공합니다.

그러나 HTTP API로 작업할 때 what types to use for handler arguments 과 같은 몇 가지 문제를 인식해야 합니다. REST API는 또한 페이로드 압축을 활성화하는 방법을 제공하는 데 사용됩니다. 하지만 HTTP API의 경우 페이로드를 직접 압축해야 합니다.

고맙게도 이것은 비교적 간단하며 아래에서 필요한 각 단계를 설명하겠습니다. 빠른 솔루션을 찾는 사람들을 위해 라이브러리 lambda-compression 를 만들었습니다. 다음과 같이 사용할 수 있습니다.

라이브러리로 압축



lambda-compression 라이브러리는 HTTP API 및 '구조화된' 결과(Lambda function response for format 2.0 참조)에 의해 핸들러 함수로 전달되는 compress 변수를 허용하는 하나의 메서드event만 제공합니다.
compress 함수는 핸들러 함수의 결과로 반환되는 구조화된 결과를 반환합니다.

라이브러리는 노드 종속성으로 설치할 수 있습니다.

npm i lambda-compression

yarn add lambda-compression


다음은 JavaScript를 사용한 구현 예입니다.

import { compress } from 'lambda-compression';

export const handler = async (event, context) => {
  return compress(event, {
    statusCode: 201,
    headers: {
      'Content-Type': 'application/json',
    },
    body: '{"data":"hello"}',
  });
};


다음은 TypeScript를 사용한 구현 예입니다.

import { compress } from 'lambda-compression';

import {
  Handler,
  APIGatewayProxyEventV2,
  APIGatewayProxyResultV2,
} from 'aws-lambda';

type ProxyHandler = Handler<APIGatewayProxyEventV2, APIGatewayProxyResultV2>;

export const handler: ProxyHandler = async (event, context) => {
  return compress(event, {
    statusCode: 201,
    headers: {
      'Content-Type': 'application/json',
    },
    body: '{"data":"hello"}',
  });
};


압축에 필요한 단계



Node.js에서 제공하는 zlib 패키지에 의존할 수 있으므로 압축을 구현하는 데 필요한 논리는 매우 간단합니다.

여기에서 전체 소스 코드 예제를 참조하십시오: lambdaCompression.ts

기본적으로 다음이 필요합니다.
  • accept-encoding 헤더를 쿼리하여 클라이언트가 허용하는 압축 형식을 결정합니다.
  • 클라이언트가 압축을 지원하지 않는 경우 압축되지 않은 페이로드를 반환합니다.
  • 클라이언트가 압축을 지원하는 경우:
  • 지원되는 압축 형식을 적용합니다( br , gzip 또는 deflate ),
  • 결과를 Base64로 인코딩합니다.
  • 결과에 isBase64Encoded 속성을 설정하고
  • Base64로 인코딩된 결과를 반환된 응답의 body로 설정합니다.


  • 마지막 생각들



    압축은 CPU 집약적일 수 있으므로 동일한 결과가 반복적으로 반환될 것으로 예상되는 경우 압축된 결과를 캐시하는 것이 현명할 수 있습니다. 제한된 상황에서 CloudFront Distribution을 처리할 수 있는 compressing payloads 뒤에 API를 배치할 수도 있습니다. 마지막으로 REST API를 사용하도록 되돌리면 built-in compression function 을 사용할 수도 있습니다.

    도서관 개선에 대한 아이디어가 있으시면 issue 🤗을 제출해 주십시오.

    좋은 웹페이지 즐겨찾기