Lambda 함수 콜드 스타트 문제를 해결하려면 어떻게 해야 하나요?

4분 분량
0

AWS Lambda 함수에서 콜드 스타트 지속 시간이 오래 걸립니다.

해결 방법


환경 및 코드에 대한 Lambda 함수 요청의 초기 설정을 콜드 스타트 시간 또는 시작 지연 시간이라고 합니다. Lambda 함수의 콜드 스타트 시간과 지연 시간을 최소화하려면 사용 사례에 맞는 다음 지침을 따르세요.

Lambda 함수 코드 및 구성 모범 사례

  • Lambda 함수에 할당된 메모리를 늘립니다. 콜드 스타트 범위는 함수의 크기, 할당한 메모리의 양, 코드의 복잡성에 따라 달라집니다. 메모리를 추가하면 그에 비례하여 CPU 용량이 늘어나 사용 가능한 전체 계산 성능이 향상됩니다. 자세한 내용은 메모리 및 컴퓨팅 성능을 참조하세요.
  • 배포 패키지의 크기를 최소화하세요. 배포 패키지가 작을수록 함수가 더 빨리 시작됩니다. 함수에서 가져오는 종속성 및 외부 라이브러리 수를 최소화하고 배포 패키지 크기를 50MB 미만으로 유지하세요. 자세한 내용은 Lambda 배포 패키지를 참조하세요.
  • Lambda 함수 코드를 최적화하여 초기화에 걸리는 시간을 최소화하세요. 함수가 가져오는 종속성 및 외부 라이브러리의 수를 줄이세요. 초기화 중에 실행되는 코드의 양을 줄이세요.
  • 시작 시 복잡한 계산을 피하세요. 함수를 시작할 때 큰 데이터세트를 로드하는 등 복잡한 계산이 필요한 경우 백그라운드에서 이 작업을 수행할 수 있습니다. Init 단계에서 백그라운드 스레드에서 계산을 실행합니다. 그런 다음 후속 호출에 대한 결과를 캐싱합니다. 결과를 캐싱하면 시작 시 복잡한 계산에 필요한 시간을 줄일 수 있습니다.
  • Amazon Relational Database Service(RDS) 데이터베이스 연결을 재사용합니다. 함수가 Amazon RDS 데이터베이스에 연결된 경우 함수에 대한 Amazon RDS 프록시 데이터베이스 프록시를 생성할 수 있습니다. 데이터베이스 프록시는 데이터베이스 연결 풀을 관리합니다. Amazon RDS 데이터베이스 연결을 재사용하면 함수가 호출될 때마다 연결을 설정하는 데 걸리는 시간이 줄어듭니다.
  • 프로비저닝된 동시성을 설정합니다. 프로비저닝된 동시성을 사용하는 함수는 실행 환경이 호출 전에 준비되므로 콜드 스타트 동작을 표시하지 않습니다. 보온을 유지하고 트래픽을 관리할 함수 인스턴스 수를 지정할 수 있습니다.
  • 종속성의 복잡성을 최소화하세요. 실행 환경 시작 시 빠르게 로드되는 간단한 프레임워크를 사용합니다.
  • Lambda가 Java로 작성된 배포 패키지를 압축 해제하는 데 걸리는 시간을 줄이려면 종속성 .jar 파일을 별도의 /lib 디렉터리에 저장하세요. .jar 파일을 분리하는 것이 많은 수의 .class 파일이 있는 단일 jar에 모든 함수 코드를 넣는 것보다 빠릅니다. 자세한 내용은 .zip 또는 JAR 파일 아카이브를 사용한 Java Lambda 함수 배포를 참조하세요.
  • 모니터링을 통해 문제를 발견하고 관측성을 통해 그 이유를 찾아낼 수 있습니다. 함수의 콜드 스타트 성능을 모니터링하고 Amazon CloudWatch의 Lambda Insights를 사용하여 성능 문제를 해결하세요.

자세한 내용은 Lambda 함수 사용 모범 사례를 참조하세요.

프로비저닝된 동시 실행 시 긴 INIT 지속 시간

온디맨드 Lambda 함수에서 정적 이니셜라이저는 요청이 수신된 후 핸들러가 호출되기 전에 실행됩니다. 이로 인해 요청자에게 지연 시간이 발생하고 전체 콜드 스타트 지속 시간이 늘어납니다.

  • 함수 동시성이 구성된 프로비저닝된 동시성 수준을 초과하는지 확인하세요. ProvisionedConcurrencySpilloverInvocations CloudWatch 지표를 사용하여 함수가 호출되는 횟수를 확인할 수 있습니다. 0이 아닌 값은 프로비저닝된 모든 동시성이 사용 중이고 콜드 스타트 시 일부 호출이 발생했음을 나타냅니다.
  • 호출 빈도(초당 요청 수)를 확인하세요. 프로비저닝된 동시성을 사용하는 함수의 최대 속도는 프로비저닝된 동시성당 초당 10개의 요청(Lambda API 요청)입니다. 예를 들어 100개의 프로비저닝된 동시 실행으로 구성된 함수는 초당 1000개의 요청을 처리할 수 있습니다. 호출 속도가 초당 1000개 요청을 초과하는 경우 일부 콜드 스타트가 발생할 수 있습니다. 자세한 내용은 Lambda: 프로비저닝된 동시성이 있는 콜드 스타트를 참조하세요.

자세한 내용은 Lambda 함수에서 프로비저닝된 동시성 문제를 해결하려면 어떻게 해야 하나요?를 참조하세요.

Lambda와 통합된 Amazon API 게이트웨이 요청

API Gateway와 함께 Lambda를 사용하고 있는데 IntegrationLatency 지표가 높은 경우 Lambda 함수의 CloudWatch 로그를 검토하세요. Lambda 함수와 통합된 API 엔드포인트가 클라이언트에 응답을 보내는 데 너무 오래 걸리는 경우 높은 지연 시간을 해결해야 합니다. Lambda 함수의 콜드 스타트는 함수의 지속 시간 지표에 기록되지 않으므로 API의 통합 지연 시간이 함수의 지속 시간보다 길 수 있습니다. 콜드 스타트가 포함된 함수의 지속 시간을 확인하려면 AWS X-Ray를 사용하세요.

자세한 내용은 Lambda와 통합된 API Gateway 요청의 지연 시간이 긴 문제를 해결하려면 어떻게 해야 하나요?를 참조하세요.

관련 정보

Java Lambda 함수의 초기화 및 호출 기간 지연 시간을 줄이려면 어떻게 해야 하나요?

Java 11 런타임용 Lambda SnapStart를 통한 시작 성능 개선

Lambda 작동: 성능 최적화 – 1부

AWS 공식
AWS 공식업데이트됨 일 년 전
댓글 없음