Amazon API Gateway의 VPC 링크 통합 관련 500 오류를 해결하려면 어떻게 해야 하나요?

최종 업데이트 날짜: 2022년 11월 1일

VPC 링크 통합으로 Amazon API Gateway를 구성했습니다. API를 호출하면 HTTP 500 상태 코드와 함께 구성 또는 내부 오류가 발생합니다. 이 문제를 해결하려면 어떻게 해야 하나요?

간략한 설명

AWS API Gateway는 다음과 같은 경우 트래픽을 백엔드 리소스로 전달하지 못하고 VPC 링크가 포함된 HTTP 500 상태 코드가 반환될 수 있습니다. 그럴 경우

  • VPC 링크가 실패됨 상태이거나, 엔드포인트 서비스가 삭제되었거나, 거부됨 상태입니다.
  • 대상 그룹에 등록된 대상이 비정상 상태이거나 사용 중이 아닙니다.
    참고: 60일 동안 VPC 링크를 통해 전송된 트래픽이 없는 경우 INACTIVE 상태가 됩니다. 자세한 내용은 HTTP API용 VPC 링크 사용을 참조하세요.
  • 보안 그룹은 특정 포트의 트래픽을 허용하지 않습니다.
  • 네트워크 액세스 제어 목록(ACL)이 트래픽을 차단하고 있습니다.
  • 대상이 대상 포트에서 수신 대기하고 있지 않습니다.
  • 도메인 이름 인증서가 TLS 지원 Network Load Balancer(NLB) 또는 Application Load Balancer(ALB)와 일치하지 않습니다.

API에 대해 Amazon CloudWatch 로깅이 활성화되면 오류의 원인을 나타내는 오류 메시지가 실행 로그에 나타납니다.

CloudWatch logs의 HTTP 500 오류 메시지 예시

Thu Aug 04 17:48:21 UTC 2022 : Execution failed due to configuration error: There was an internal error while executing your request
Thu Aug 04 17:48:21 UTC 2022 : Method completed with status: 500

-또는-

Thu Aug 04 19:50:21 UTC 2022 : Execution failed due to configuration error: Host name 'domain.com.com' 
does not match the certificate subject provided by the peer (CN=myinstance.com)
Thu Aug 04 19:50:21 UTC 2022 : Method completed with status: 500

해결 방법

오류 원인 확인

아직 설정하지 않은 경우 REST API에 대해 CloudWatch 로깅을 켜세요. 실행 로깅을 구성해야 합니다.

팁: 로깅 설정을 구성할 때 Log level(로그 수준)에서 INFO(정보)를 선택합니다. 그런 다음, 전체 요청 및 응답 데이터 로깅(Log full requests/responses data)을 선택합니다.

CloudWatch에서 REST API의 실행 로그를 확인하여 오류의 원인을 파악합니다.

실행 로그에서 오류 메시지를 확인하고 다음 해결 단계를 따르세요.

"Execution failed due to configuration error: There was an internal error while executing your request(구성 오류로 인한 실행 실패: 요청을 실행하는 동안 내부 오류 발생)"

  • VPC 링크 로드 밸런서가 존재하며 삭제되지 않았는지 확인합니다.
  • VPC 링크가 AVAILABLE 상태인지 확인합니다. VPC 링크가 FAILED 상태인 경우 새 VPC 링크를 만들어 API와 연결해야 합니다. 참고: 통합 요청을 수정한 후에는 API를 배포해야 합니다.
  • VPC 링크 엔드포인트 연결AVAILABLE 상태인지 확인합니다.
  • VPC ID가 단계 변수로 참조되는 경우 VPC 링크 ID가 올바른지 확인하세요.
  • VPC 링크 로드 밸런서가 요청이 구성된 HTTP/HTTPS 포트에서 수신 대기하고 있는지 확인합니다. 리스너가 올바른 포트에 맞게 구성되었는지 확인합니다. 네트워크 ACL이 요청을 차단하고 있지 않은지 확인합니다.
  • 대상 그룹이 요청을 수락하고 있는지 확인합니다. 네트워크 ACL을 확인하여 트래픽이 인바운드 및 아웃바운드로 허용되는지 확인합니다. 보안 그룹을 확인하여 구성된 포트에서 트래픽이 인바운드로 허용되는지 확인합니다.
  • 요청에서 500 오류가 반환되는 경우 연결이 TCP RST 패킷을 수신할 수 있습니다. 백엔드 서버가 가동되어 실행되고 있는지 확인합니다. 백엔드 대상의 서비스가 대상 포트에서 실행되고 있는지 확인합니다. 백엔드 대상이 대상 포트에서 수신 대기하고 있는지 확인합니다.

"Execution failed due to configuration error: Host name 'domain.com.com' does not match the certificate subject provided by the peer (CN=myinstance.com)(구성 오류로 인해 실행 실패: 호스트 이름 'domain.com.com'이 피어(CN=myinstance.com)에서 제공한 인증서 제목과 일치하지 않음)"

엔드포인트 도메인 이름이 TLS 지원 로드 밸런서 대상에서 반환하는 인증서와 일치하는지 확인하세요.

"Execution failed due to configuration error: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target(구성 오류로 인해 실행 실패: PKIX 경로 구축 실패: sun.security.provider.certpath.SunCertPathBuilderException: 요청된 대상에 대한 유효한 인증 경로를 찾을 수 없음)"

이 오류는 API Gateway가 루트 CA를 찾을 수 없음을 의미합니다. 통합 TlsConfig 속성에서 insecureSkipVerificationtrue로 설정되더라도 API Gateway는 다음을 포함한 기본 인증서 검증을 수행합니다.

  • 인증서 만료 날짜.
  • 호스트 이름.
  • 루트 인증 기관의 존재.

"Execution failed due to configuration error: Cannot verify ECDH ServerKeyExchange signature(구성 오류로 인한 실행 실패: ECDH ServerKeyExchange 서명을 확인할 수 없음)"

이 오류는 키와 해당 인증서가 일치하지 않아 TLS 핸드셰이크가 실패함을 의미합니다. 이 문제를 해결하려면 구성된 인증 기관, 인증서 및 키에 사용되는 파일의 내용을 확인하세요.

"Execution failed due to an internal error(내부 오류로 인해 실행 실패)"

이 오류는 로드 밸런서의 대상 재설정으로 인해 Amazon API Gateway가 VPC 링크를 통해 로드 밸런서에 연결할 수 없었기 때문에 발생합니다. 이 문제를 해결하려면 대상의 제한 시간을 로드 밸런서의 기본 제한 시간(350초)보다 높게 설정하세요.

"Execution failed due to configuration error: Not a valid protocol version: {Text of string}(구성 오류로 인한 실행 실패: 올바른 프로토콜 버전이 아님: {Text of string})"

이 오류는 통합이 HTTP 사양을 준수하지 않는 잘못된 HTTP 응답으로 응답했음을 의미합니다. 이는 통합 백엔드가 잘못된 데이터를 Amazon API Gateway로 다시 보내고 있음을 의미할 수 있습니다.

이 오류를 해결하려면 다음을 수행합니다.

  • Amazon API Gateway에서 보낸 요청을 재현합니다. 서비스 엔드포인트 ID에 연결된 VPC 엔드포인트를 만들어 Amazon API Gateway에서 사용하는 서비스 엔드포인트를 테스트합니다. 패킷 캡처를 실행하여 통합 백엔드에서 반환된 응답을 검토할 수도 있습니다.
  • 대상 응답에 따라 로드 밸런서 프로토콜을 TLS 또는 TCP로 변경하여 중복 암호화를 방지하세요.
  • 통합 TlsConfig 속성에서 insecureSkipVerificationtrue로 설정되어 있는지 확인하세요.