Lamda 함수를 완료하는 데 30 초 이상이 걸리는 경우 API 게이트웨이 시간 초과 처리
당신의 도움이 필요합니다! API Gateway에서 Lambda 함수를 트리거하려고합니다. 이 Lambda 함수는 CloudFormation 스택을 생성하고 스택은 차례로 EC2- 인스턴스를 배포합니다. 다음은 스택 생성을 시작하고 응답을 반환하기 전에 스택 생성 상태가 완료로 설정 될 때까지 기다리는 코드의 일부입니다. 문제는 API Gateway의 하드 코딩 된 시간 제한 값이 30 초이고 스택 생성이 30 초 전에 완료되지 않는다는 것입니다. 이 시나리오에서 API 요청은 내부 서버 오류를 반환하는 시간이 초과되었습니다. 어떻게 처리합니까?
# Create the CloudFormation Stack
StackID = cf_client.create_stack(
StackName=stackname,
TemplateURL='https://s3-bucket/template1.template',
Capabilities=['CAPABILITY_NAMED_IAM']
)
waiter = cf_client.get_waiter('stack_create_complete')
waiter.wait(
StackName=stackname,
WaiterConfig={
'Delay' : 5,
'MaxAttempts' : 50
}
)
답변
아마도 Lambda가 CloudFormation 스택을 직접 생성하는 대신 CloudFormation 스택 을 생성하기 위해서만 Lambda 함수를 사용하여 단계 함수 를 트리거 할 수 있습니다 . 원래 함수는 start_execution 함수 실행 후 반환 될 때 실행 ID를 반환 할 수 있습니다.
이는 두 가지 이점을 제공합니다. 첫 번째는 훨씬 더 빠르다는 것입니다 (단계 함수 실행이 시작되면 SDK에서 응답을 반환하므로 더 빠름). 재시도 또는 오류 알림).
또는 요청 자체가 클라이언트의 HTTP 요청 내에서이 작업을 수행하도록하려면 API 게이트웨이 (최대 컷오프가 있음)가 아닌 Lambda에 트래픽을 제공 하는 ALB 를 살펴 봐야 합니다 . ALB는 최대 4000 초의 긴 시간 제한을 지원할 수 있습니다 .