서버리스 패키지가 너무 큰 오류 문제 해결

이 가이드는 “Code uncompressed size is greater than max allowed size of 272629760.” 오류를 해결하는 데 도움이 됩니다. 이 오류는 Datadog 서버리스 플러그인을 사용하여 Node.js 서버리스 애플리케이션을 계측할 때 일반적으로 발생합니다. 다른 언어나 배포 방법에서도 동일한 오류가 발생하는 경우 문제 해결 전략이 적용될 수 있습니다.

이 오류는 함수의 압축되지 않은 코드 크기가 250MB 제한을 초과함을 나타냅니다. 함수 패키지(함수 코드 및 종속성을 포함하는 .zip아티팩트)와 함수에 설정된 Lambda 레이어 모두 이 제한에 포함됩니다. 두 가지 모두를 조사하여 원인을 찾아보세요.

레이어

일반적으로 Datadog은 계측를 위해 두 개의 Lambda 레이어를 추가합니다:

  • 함수 코드를 계측하는 언어별 라이브러리, 그리고
  • 관찰 가능한 데이터를 집계, 버퍼링 및 Datadog 백엔드로 전달하는 확장 프로그램입니다.

AWS CLI 명령 aws lambda get-layer-version을 사용하여 Datadog 람다 레이어의 콘텐츠와 크기를 검사합니다. 예를 들어 다음 명령을 실행하면 _Datadog-Node20-x 버전 113 및 _Datadog-Extension 버전 60에 대한 람다(Lambda) 레이어를 다운로드하고 압축되지 않은 크기(약 30MB 합산)를 검사할 수 있는 링크가 표시됩니다. 압축되지 않은 크기는 레이어와 버전에 따라 다릅니다. 다음 예제의 레이어 이름과 버전 번호를 애플리케이션에서 사용하는 레이어 이름과 버전 번호로 바꾸세요:

AWS lambda get-layer-version \
  --layer-name arn:AWS:lambda:us-east-1:464622532012:layer:Datadog-Node20-x \
  --version-number 113

AWS lambda get-layer-version \
  --layer-name arn:AWS:lambda:us-east-1:464622532012:layer:Datadog-Extension \
  --version-number 60

Datadog 람다 레이어 외에도 기능/함수에 추가된(또는 추가될) 다른 람다 레이어도 검사하세요. 서버리스 프레임워크]4를 사용하는 경우, deploy 또는 package 명령을 실행한 후 숨겨진 .serverless 폴더에서 CloudFormation 템플릿을, Layers 섹션에서 람다 레이어 목록을 찾을 수 있습니다.

패키지

함수 배포 패키지에는 필요 없는 큰 파일이나 코드가 포함될 수 있습니다. 서버리스 프레임워크를 사용하는 경우 deploy 또는 package 명령을 실행한 후 숨겨진 .serverless 폴더에서 배포 패키지(.zip 파일)을 찾을 수 있습니다.

배포 크기( 패키지 )와 레이어의 합이 한도를 초과하지 않는 경우 AWS 지원팀에 문의하여 조사를 요청하세요. 총 크기가 한도를 초과하는 경우 배포 패키지를 검사하고 패키지 옵션을 사용하여 런타임에 필요하지 않은 대용량 파일을 제외하세요.

종속성

Datadog Lambda 레이어는 계측 라이브러리를 패키지화하여 Lambda 실행 환경에서 사용할 수 있기 때문에datadog-lambda-jsdd-tracepackage.json에서 종속성으로 지정할 필요가 없습니다. 로컬 빌드 또는 테스트에 Datadog 라이브러리가 필요한 경우 배포 패키지에서 제외되도록 devDependencies로 지정합니다. 마찬가지로 serverless-plugin-datadog는 개발에만 필요하며 devDependencies 아래에 지정해야 합니다.

또한, 배포 패키지에 포함된 다른 종속성 (node_modules폴더)을 검사하고 dependencies에서 필요한 종속성만 보관합니다.

번들러

웹팩 또는 에스빌드(esbuild)와 같은 번들러를 사용하면 사용되는 코드만 포함시켜 배포 패키지 크기를 줄일 수 있습니다. 필요한 웹팩 설정은 Node.js Lambda 추적 및 번들러 호환성을 참조하세요.

Datadog-ci

사용 사례에 따라 패키지 크기와 관련된 문제를 해결하기 위해 datadog-ci lambda instrument 명령을 사용하는 것이 더 쉬울 수 있습니다. datadog-ci lambda instrument 명령은 서버리스-플러그인-Datadog과 동일한 계측을 설정합니다. 자세한 내용은 datadog-ci repo를 참조하세요.

지원 요청

Datadog 지원팀의 지원이 필요한 경우 티켓에 다음 정보를 포함하세요:

  1. 함수에 설정된 Lambda 레이어 (이름 및 버전 또는 ARN).
  2. AWS에 업로드할 함수의 배포 패키지 (또는 압축되지 않은 패키지의 내용과 크기를 보여주는 스크린샷).
  3. 수정된 하드코딩 기밀이 포함된 프로젝트 설정 파일: serverless.yaml, package.json,package-lock.json, yarn.lock, tsconfig.json, webpack.config.json.

참고 자료

Additional helpful documentation, links, and articles: