AWS Glue에서 ‘Unable to execute HTTP request... connect timed out’ 오류를 해결하려면 어떻게 해야 하나요?

4분 분량
0

AWS Glue 작업이 ‘Unable to execute HTTP request... connect timed out’ 오류와 함께 실패합니다.

간략한 설명

연결이 연결된 상태로 AWS Glue 작업을 실행하면 작업에서 다른 서비스 엔드포인트에 연결하려고 할 때 작업이 실패할 수 있습니다. 예를 들어 Amazon Simple Storage Service(S3) 및 AWS Key Management Service(AWS KMS)와 같은 서비스 엔드포인트에 연결을 시도할 수 있습니다. AWS Glue 연결에 사용되는 서브넷에 이 서비스 엔드포인트에 대한 네트워킹 경로가 없으면 작업이 실패합니다. AWS Glue 작업 로그에 ‘Unable to execute HTTP request’ 또는 ‘failed: connect timed out’ 오류 메시지가 나타납니다.

이 오류는 다음과 같은 이유로 발생할 수 있습니다.

  • AWS Glue 연결에 구성된 서브넷에 인터넷 게이트웨이가 포함되어 있거나 장애가 발생한 서비스 엔드포인트 경로가 라우팅 테이블에 없습니다.
  • AWS Glue 작업을 실행할 때 해당 작업은 AWS Glue API와 상호 작용합니다. 이는 AWS Glue 데이터 카탈로그의 테이블을 나열하거나, 새 테이블을 생성하거나, 테이블에서 읽어야 하는 작업을 사용하는 경우 발생합니다. 작업에서 AWS Glue API에 액세스해야 하는 경우에는 HTTP REST API 요청을 보냅니다. 마찬가지로 Amazon S3, Amazon Simple Notification Service(SNS) 또는 AWS Secret Manager에 대한 다른 서비스 API 호출이 필요할 수도 있습니다. API 호출을 실행하면 작업이 이러한 서비스 엔드포인트에 연결을 시도하고 시간 초과 오류와 함께 요청이 실패합니다. 이 오류는 작업에서 요청을 보낼 수 있지만 시간 제한 내에 응답을 받지 못했기 때문에 발생합니다.

AWS Glue가 AWS Glue 연결에 지정된 서브넷에서 탄력적 네트워크 인터페이스를 생성합니다. 자세한 내용은 데이터 스토어에 대한 네트워크 액세스 설정을 참조하세요.

AWS Glue 작업의 리소스에 프라이빗 IP 주소만 있습니다. 즉, 작업에서 인터넷 게이트웨이를 사용하여 다른 리소스에 연결할 수 없습니다. AWS Glue 작업에서 퍼블릭 AWS 서비스 엔드포인트로 요청을 전송하려고 해도 프라이빗 IP 주소에서 요청이 전송됩니다. 따라서 엔드포인트에서 응답을 다시 보내지 못하고 ‘connect timed out’ 오류 메시지와 함께 작업이 실패합니다.

해결 방법

로그에 표시되는 오류 메시지는 사용 사례에 따라 다음 중 하나와 유사합니다.

AWS Glue REST API:

AnalysisException: org.apache.hadoop.hive.ql.metadata.HiveException: com.amazonaws.SdkClientException: Unable to execute HTTP request: Connect to glue.ap-southeast-1.amazonaws.com:443

Amazon S3 요청:

Unable to execute HTTP request: Connect to s3BucketName.us-east-1.amazonaws.com:443 [s3BucketName.s3.us-east-1.amazonaws.com/xx.xxx.xx.xxx ] failed: connect timed out

AWS KMS 요청:

Unable to execute HTTP request: Connect to kms.us-east-1.amazonaws.com:443 [kms.us-east-1.amazonaws.com/xx.xxx.xx.xxx ] failed: connect timed out

AWS Glue 작업과 해당 작업에서 API 요청을 보내려는 서비스 간에 트래픽이 허용되는지 확인합니다. Virtual Private Cloud(VPC) 엔드포인트를 사용하거나 NAT 게이트웨이를 사용하여 확인할 수 있습니다.

VPC 엔드포인트 사용

Amazon Virtual Private Cloud(VPC) 콘솔을 사용하여 오류가 발생한 서비스에 대한 인터페이스 VPC 엔드포인트를 생성합니다. 예를 들어 AWS Glue 작업에서 AWS Glue API에 액세스하려고 시도하는 동안 작업이 실패하고 오류가 발생할 수 있습니다. AWS Glue 연결에 구성된 것과 동일한 VPC 서브넷에 AWS Glue용 인터페이스 엔드포인트를 생성합니다. 이렇게 하면 AWS Glue 엔드포인트에 연결되어야 할 트래픽이 이 인터페이스를 사용하여 연결되는지 확인할 수 있습니다.

  1. Amazon VPC 콘솔을 엽니다.
  2. 탐색 창에서 Endpoints(엔드포인트)를 선택합니다.
  3. Create endpoint(엔드포인트 생성)를 선택합니다.
  4. Service category(서비스 카테고리)에서 AWS services(AWS 서비스)를 선택합니다.
  5. Service name(서비스 이름)에서 연결하려는 서비스를 선택합니다. 자세한 내용은 AWS PrivateLink와 통합되는 AWS 서비스를 참조하세요.
  6. VPC에서 AWS 서비스에 액세스할 때 사용할 VPC를 선택합니다.
  7. Amazon S3에 대한 인터페이스 엔드포인트를 생성하려면 Additional settings(추가 설정) 및 Enable DNS name(DNS 이름 사용)을 선택 취소해야 합니다. Amazon S3는 인터페이스 VPC 엔드포인트에 대해 프라이빗 DNS를 지원하지 않기 때문입니다.
  8. Subnets(서브넷)에서 AWS 서비스에 액세스할 때 사용할 가용 영역(AZ)당 1개의 서브넷을 선택합니다.
  9. Security group(보안 그룹)에서 엔드포인트 네트워크 인터페이스에 연결할 보안 그룹을 선택합니다. 보안 그룹 규칙은 VPC 엔드포인트를 사용할 리소스를 허용해야 합니다. VPC 엔드포인트는 AWS 서비스와 통신한 다음 엔드포인트 네트워크 인터페이스와 통신합니다.
  10. Policy(정책)에서 Full access(전체 액세스)를 선택합니다. 이렇게 하면 VPC 엔드포인트를 통해 모든 리소스에서 모든 주체가 모든 작업을 수행할 수 있습니다. 또는 Custom(사용자 지정)을 선택하여 VPC 엔드포인트 정책을 연결합니다. 이 정책은 보안 주체가 VPC 엔드포인트를 통해 리소스에 대한 작업을 수행하는 데 필요한 권한을 제어합니다. 이 옵션은 서비스에서 VPC 엔드포인트 정책을 지원하는 경우에만 사용할 수 있습니다. 자세한 내용은 VPC 엔드포인트 정책을 참조하세요.
  11. (선택 사항) 태그를 추가하려면 Add new tag(새 태그 추가)를 선택한 다음 태그 키와 태그 값을 입력합니다.
  12. Create endpoint(엔드포인트 생성)를 선택합니다.

NAT 게이트웨이 사용

AWS NAT 게이트웨이는 프라이빗 인터넷을 사용하여 리소스를 비공개로 안전하게 연결합니다. 프라이빗 서브넷을 생성하고 AWS Glue 연결에서 프라이빗 서브넷을 가리킵니다. 동시에 AWS Glue VPC의 퍼블릭 서브넷 중 하나에 NAT 게이트웨이를 생성합니다. 트래픽이 인터넷으로 라우팅되는 경우 이 NAT 게이트웨이를 사용하여 라우팅되도록 AWS Glue 연결 서브넷의 라우팅 테이블을 구성합니다. 자세한 내용은 Amazon VPC의 프라이빗 서브넷에 NAT 게이트웨이를 설정하려면 어떻게 해야 하나요?NAT 게이트웨이를 참조하세요.

참고: NAT 게이트웨이를 사용하는 경우 서비스에 대한 트래픽은 인터넷을 통해 전달됩니다.

추가 문제 해결

  1. 연결 보안 그룹과 서브넷 네트워크 ACL이 API 요청 시 AWS Glue의 트래픽 전송을 허용하는지 확인합니다.
  2. 연결 문제를 테스트하려면 AWS Glue 연결을 생성할 때 사용한 것과 동일한 VPC, 서브넷 및 보안 그룹에서 EC2 인스턴스를 시작합니다. 그리고 다음 명령을 실행하여 서비스 엔드포인트와의 연결을 확인합니다.
telnet <glue endpoint url> 443
dig <glue endpoint url>

예시:

$ telnet glue.us-east-1.amazonaws.com 443
$ dig glue.us-east-1.amazonaws.com

관련 정보

AWS Glue의 오류 해결

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