HTTP API Lambda 통합 관련 문제 해결 - Amazon API Gateway

HTTP API Lambda 통합 관련 문제 해결

다음은 AWS Lambda 통합를 HTTP API와 함께 사용할 때 발생할 수 있는 오류 및 문제에 대한 문제 해결 조언을 제공합니다.

문제: Lambda 통합이 있는 내 API가 {"message":"Internal Server Error"}를 반환합니다.

내부 서버 오류 문제를 해결하려면 로그 형식에 $context.integrationErrorMessage 로깅 변수를 추가하고 HTTP API의 로그를 봅니다. 이를 위해 다음을 수행합니다.

을 사용하여 로그 그룹 생성AWS Management Console
  1. https://console.aws.amazon.com/cloudwatch/에서 CloudWatch 콘솔을 엽니다.

  2. 로그 그룹을 선택합니다.

  3. 로그 그룹 생성을 선택합니다.

  4. 로그 그룹 이름을 입력한 다음 생성을 선택합니다.

  5. 로그 그룹의 Amazon 리소스 이름(ARN)을 기록해 둡니다. ARN 형식은 arn:aws:logs:region: account-id:log-group:log-group-name입니다. HTTP API에 대한 액세스 로깅을 활성화하려면 로그 그룹 ARN이 필요합니다.

$context.integrationErrorMessage 로깅 변수를 추가하려면
  1. https://console.aws.amazon.com/apigateway에서 API Gateway 콘솔에 로그인합니다.

  2. HTTP API를 선택합니다.

  3. 모니터에서 로깅을 선택합니다.

  4. API의 단계를 선택합니다.

  5. 편집을 선택한 다음 액세스 로깅을 활성화합니다.

  6. 로그 대상에 이전 단계에서 생성한 로그 그룹의 ARN을 입력합니다.

  7. 로그 형식에서 CLF를 선택합니다. API Gateway는 예제 로그 형식을 생성합니다.

  8. 로그 형식의 끝에 $context.integrationErrorMessage를 추가합니다.

  9. 저장을 선택합니다.

API 로그를 보려면
  1. 로그를 생성합니다. 브라우저 또는 curl을 사용하여 API를 호출합니다.

    $curl https://api-id.execute-api.us-west-2.amazonaws.com/route
  2. https://console.aws.amazon.com/apigateway에서 API Gateway 콘솔에 로그인합니다.

  3. HTTP API를 선택합니다.

  4. 모니터에서 로깅을 선택합니다.

  5. 로깅을 활성화한 API의 단계를 선택합니다.

  6. CloudWatch에서 로그 보기를 선택합니다.

  7. 최신 로그 스트림을 선택하여 HTTP API의 로그를 확인합니다.

  8. 로그 항목은 다음과 같아야 합니다.

    Lambda의 통합 오류 메시지를 보여주는 CloudWatch Logs 로그 항목입니다.

$context.integrationErrorMessage가 로그 형식에 추가되었으므로 문제를 요약해서 보여주는 오류 메시지가 로그에 표시됩니다.

Lambda 함수 코드에 문제가 있음을 나타내는 다른 오류 메시지가 로그에 포함될 수 있습니다. 이 경우 Lambda 함수 코드를 확인하고 Lambda 함수가 필수 형식으로 응답을 반환하는지 확인합니다. 로그에 오류 메시지가 포함되어 있지 않은 경우 $context.error.message$context.error.responseType를 로그 형식에 추가하여 문제를 해결하는 데 도움이 되는 자세한 내용을 확인하세요.

이 경우 API Gateway에 Lambda 함수를 호출하는 데 필요한 권한이 없는 것으로 로그에 표시됩니다.

API Gateway 콘솔에서 Lambda 통합을 생성하면 API Gateway가 Lambda 함수를 호출할 권한을 자동으로 구성합니다. AWS CLI, AWS CloudFormation 또는 SDK를 사용하여 Lambda 통합을 생성하는 경우 API Gateway에 함수를 호출할 권한을 부여해야 합니다. 다음 예제 AWS CLI 명령은 다양한 HTTP API 경로에 Lambda 함수를 간접 호출할 수 있는 권한을 부여합니다.

예 — HTTP API의 $default 스테이지 및 $default 라우트의 경우
aws lambda add-permission \ --function-name my-function \ --statement-id apigateway-invoke-permissions \ --action lambda:InvokeFunction \ --principal apigateway.amazonaws.com \ --source-arn "arn:aws:execute-api:us-west-2:123456789012:api-id/\$default/\$default"
예 — HTTP API의 prod 스테이지 및 test 라우트의 경우
aws lambda add-permission \ --function-name my-function \ --statement-id apigateway-invoke-permissions \ --action lambda:InvokeFunction \ --principal apigateway.amazonaws.com \ --source-arn "arn:aws:execute-api:us-west-2:123456789012:api-id/prod/*/test"

Lambda 콘솔의 권한 탭에서 함수 정책을 확인합니다.

API를 다시 호출해 보십시오. Lambda 함수의 응답이 표시되어야 합니다.