Amazon EC2 인스턴스 또는 AWS 인스턴스 스케줄러에서 Lambda 함수가 올바르게 작동하도록 하려면 어떻게 가져와야 합니까?

최종 업데이트 날짜: 2021년 9월 8일

AWS Lambda 함수와 함께 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스 또는 AWS 인스턴스 스케줄러를 사용합니다. 하지만 Lambda 함수가 시간 초과, 호출 실패 또는 오류가 발생합니다.

간략한 설명

AWS 인스턴스 스케줄러로 인해 Lambda 함수가 잘못 작동할 수 있으며 이유는 다음과 같습니다.

  • SDK 시간 초과가 발생합니다. 이 문제를 해결하려면 SDK 시간 초과 수정 섹션의 단계를 완료하세요.
  • 함수 시간 초과가 발생합니다. 이 문제를 해결하려면 함수 시간 초과 방지 섹션의 단계를 완료하세요.
  • Amazon CloudWatch Events 규칙이 트리거되지 않았습니다. 이 문제를 해결하려면 예약된 규칙이 호출되었는지 확인 섹션의 단계를 완료하세요.
  • 함수가 제한되어 있습니다. 이 문제를 해결하려면 함수 제한 방지 섹션의 단계를 완료하세요.
  • Lambda 호출이 중복됩니다. 이 문제를 해결하려면 멱등성을 사용하여 오류 방지 섹션의 단계를 완료하세요.

참고: AWS 인스턴스 스케줄러는 Lambda 함수를 예약하기 위해 CloudWatch Events 규칙을 사용하여 설정된 간격으로 Lambda 함수를 실행합니다. 그 결과 Lambda 함수의 비동기 호출이 발생하여 함수 오류를 처리하는 방법에 영향을 줍니다. 실행 중 오류로 인해 함수가 실패하면 기본적으로 동일한 이벤트가 최대 두 번 더 재시도됩니다. 그런 다음 이벤트가 삭제됩니다. 스로틀이 발생할 경우 이벤트가 삭제되기 전에 최대 6시간 동안 이벤트를 대기시킬 수 있습니다.

해결 방법

SDK 시간 초과 수정

기본 SDK 시간 초과는 이전 버전의 AWS 인스턴스 스케줄러에서 재정의되지 않습니다. 인스턴스를 시작하거나 중지하는 API 호출이 이전 버전에서 응답하는 데 60초 이상 걸리는 경우 요청 시간이 초과됩니다.

이 문제를 해결하려면 최신 버전의 AWS 인스턴스 스케줄러를 다운로드하거나 Boto3 Config 객체read_timeout 값을 수정합니다(Boto3 웹 사이트에서 수정). 예:

import boto3
from botocore.config import Config

client_config = Config(read_timeout=890)

ec2 = boto3.client('ec2', config=client_config)

함수 시간 초과 방지

Lambda 함수가 시간 초과된 경우 함수가 EC2 인스턴스가 시작되었는지 확인하기 위해 대기 중인지 확인합니다. 자세한 내용은 EC2 인스턴스를 시작하거나 시작할 수 없는 이유는 무엇입니까?를 참조하세요.

인스턴스가 RUNNING 상태에 도달하는 데 몇 분 정도 걸릴 수 있습니다. RUNNING 상태에 도달하는 시간이 함수에 대해 구성된 제한 시간보다 길면 함수가 시간 초과될 수 있습니다. 이 문제를 해결하려면 AWS CloudFormation 템플릿에서 시간 초과 값인 300(5분)을 수정하여 함수의 시간 초과를 늘립니다. 함수가 시간 초과되기 전에 인스턴스를 시작할 수 있는 충분한 시간이 있어야 합니다. 예:

"Runtime": "python3.7",
"Timeout": 300,
"TracingConfig": {
    "Mode": "Active"
}

참고: Lambda 함수의 최대 구성 가능한 시간 초과 값은 15분입니다.

함수가 가상 프라이빗 클라우드에 있는 경우 함수가 인터넷에 액세스하여 Amazon EC2 API를 호출할 수 있도록 허용해야 합니다.

예약된 규칙이 호출되었는지 확인합니다.

CloudWatch Events에 의해 호출되지 않는 Lambda 함수의 문제를 해결하려면 CloudWatch Events 규칙에 의해 Lambda 함수가 트리거되지 않은 이유는 무엇인가요?를 참조하세요.

기능 제한 방지

함수 제한을 방지하려면 "Rate exceeded" 및 429 "TooManyRequestsException" 오류가 발생한 Lambda 함수 조절 문제를 해결하려면 어떻게 해야 합니까?를 참조하세요.

비동기 호출의 경우 계정의 Lambda 제한이 함수 호출 기능에 영향을 줄 수 있습니다. 모든 비동기 호출은 호출되기 전에 이벤트 대기열로 전송됩니다. 다른 함수도 많은 수의 비동기 호출을 수신하면 이벤트 대기열이 백로깅 될 수 있습니다. 이 백로그는 함수가 호출하지 못했음을 의미하지는 않습니다. 이 백로그는 이벤트가 지연되었음을 의미합니다. 이벤트 대기열 백로그가 지워진 후 여러 호출을 볼 수 있습니다. 기본적으로 비동기 이벤트 대기열의 이벤트는 최대 6시간 동안 비동기 이벤트 대기열에 남아 있습니다.

멱등성을 사용하여 오류 방지

중복 호출로 인한 오류를 방지하려면 Lambda 함수가 비동기 호출로 구성된 경우 멱등성으로 만듭니다.

비동기 Lambda 호출은 이벤트 대기열과의 최종 일관성으로 인해 두 번 이상 발생할 수 있습니다.


이 문서가 도움이 되었나요?


결제 또는 기술 지원이 필요하세요?