AWS Glue에서 테스트 연결 실패 문제를 해결하고 싶습니다.
해결 방법
다음과 같은 일반적인 문제가 있는지 확인하세요.
네트워킹 문제
-
JDBC 데이터 저장소에 대한 연결을 확인합니다. AWS Glue는 연결의 서브넷에 사설 IP 주소를 사용하여 탄력적 네트워크 인터페이스를 생성합니다. 즉, AWS Glue는 공용 인터넷을 사용하여 데이터 저장소에 연결할 수 없습니다.
-
데이터 저장소가 Amazon Virtual Private Cloud(VPC) 외부에 있는 경우 서브넷의 라우팅 테이블에 공용 서브넷의 NAT 게이트웨이에 대한 경로가 있어야 합니다. 그렇지 않으면 연결 시간이 초과됩니다.
참고: Amazon VPC 외부의 데이터 저장소는 온프레미스 데이터 저장소이거나 공용 호스트 이름을 가진 Amazon Relational Database Service(RDS) 리소스일 수 있습니다.
-
데이터 저장소가 Amazon VPC에 있는 경우 연결의 보안 그룹 및 네트워크 액세스 제어 목록(네트워크 ACL)이 데이터 저장소에 대한 트래픽을 허용하는지 확인합니다.
-
연결의 보안 그룹을 확인합니다. 연결과 연결된 보안 그룹 중 하나에는 모든 TCP 포트에 열려 있는 자체 참조 인바운드 규칙이 있어야 합니다. 마찬가지로 보안 그룹 중 하나도 모든 아웃바운드 트래픽에 대해 열려 있어야 합니다. 자체 참조 규칙을 사용하여 Amazon VPC에 대한 아웃바운드 트래픽을 제한할 수 있습니다. 자세한 내용을 보려면 JDBC 데이터 스토어에 연결하도록 VPC 설정을 참조하세요.
-
사용 가능한 IP 주소 수를 확인합니다. 서브넷의 사용 가능한 IP 주소 수는 작업에 지정된 DPU(데이터 처리 장치) 수보다 많아야 합니다. 이렇게 해야 AWS Glue가 지정된 서브넷에서 탄력적 네트워크 인터페이스를 생성할 수 있습니다.
-
서브넷이 Amazon Simple Storage Service(S3)에 액세스할 수 있는지 확인합니다. Amazon S3 엔드포인트를 제공하거나 서브넷의 라우트 테이블에서 NAT 게이트웨이에 대한 경로를 제공하세요. 자세한 내용을 보려면 오류: VPC에서 subnetId에 대한 S3 엔드포인트 또는 NAT 게이트웨이를 찾을 수 없습니다를 참조하세요.
-
AWS KMS VPC 엔드포인트가 있는지 확인하세요. AWS Glue 데이터 카탈로그가 연결을 암호화하는 경우, AWS KMS에 대한 경로가 있는지 확인하세요. 예를 들어, 이 경로는 AWS KMS VPC 인터페이스 엔드포인트일 수 있습니다. 자세한 내용을 보려면 VPC 엔드포인트를 통해 AWS KMS에 연결을 참조하세요.
-
AWS Glue 연결과 데이터베이스가 서로 다른 VPC를 사용하는지 확인하세요. 다음 조건에 해당하는 경우 테스트 연결이 시간 초과 오류와 함께 실패합니다.
데이터베이스에 공개적으로 액세스할 수 없습니다.
AWS Glue 작업이 VPC 피어링 없이 다른 VPC를 사용하는 연결에 연결되어 있습니다.
이 문제는 전용 AWS Glue VPC를 만들고 필요에 따라 다른 VPC와 해당 VPC 피어링을 설정하여 해결할 수 있습니다. 자세한 내용을 보려면 전용 AWS Glue VPC를 사용하여 여러 VPC에서 ETL 작업 연결 및 실행을 참조하세요.
-
온프레미스 데이터 저장소에 대한 연결을 확인합니다: 온프레미스 데이터베이스에 대한 AWS Glue 연결을 테스트하는 경우, 연결에 사용된 것과 동일한 VPC, 서브넷 및 보안 그룹에 있는 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스에 연결하는 것이 가장 좋습니다. 그런 다음 Amazon EC2 인스턴스에서 다음 테스트를 실행합니다. 명령을 실행하는 데 문제가 있는 경우, VPN과 VPC, 서브넷, 보안 그룹, 네트워크 액세스 제어 목록(ACL)의 구성을 확인하세요. 이러한 구성이 VPC에서 온프레미스 데이터베이스로의 연결을 차단하거나 온프레미스 데이터베이스에서 방화벽 문제를 일으키지 않는지 확인하세요. 자세한 내용을 보려면 AWS Glue를 사용하여 온프레미스 데이터 저장소에 액세스하고 분석하는 방법을 참조하세요.
$ telnet hostname port
$ nc -zv hostname port
$ dig hostname
$ traceroute -AnT -p IP port
인증 문제
- 올바른 IAM 역할을 선택하세요. 테스트 연결을 위해 선택하는AWS Identity and Access Management(AWS IAM) 역할은 AWS Glue와 신뢰 관계를 가져야 합니다. 이를 위한 쉬운 방법은 AWSGlueServiceRole 정책이 첨부된 서비스 연결 역할을 선택하는 것입니다.
- 연결의 IAM 역할을 확인합니다. 연결 암호가 AWS Key Management Service(AWS KMS)로 암호화된 경우 연결의 IAM 역할이 키에 대해 kms:Decrypt 작업을 허용하는지 확인합니다. 자세한 내용을 보려면 AWS Glue에서 암호화 설정하기를 참조하세요.
- 연결 로그를 확인합니다. 테스트 연결의 로그는 Amazon CloudWatch 로그의 /aws-glue/testconnection/output 아래에 있습니다. 로그에서 오류 메시지를 확인하세요.
- SQL 설정을 확인합니다. 데이터 저장소에 지정된 사용자에 대한 SSL 연결이 필요한 경우 콘솔에서 연결을 만들 때 SSL 연결 필요을 선택해야 합니다. 데이터 저장소가 SSL을 지원하지 않는 경우 이 옵션을 선택하지 마세요.
- JDBC 사용자 이름 및 비밀번호를 확인합니다. JDBC 데이터 스토어에 액세스하는 사용자에게 충분한 액세스 권한이 있어야 합니다. 예를 들어 AWS Glue 크롤러에는 SELECT 권한이 필요합니다. 데이터 저장소에 쓰는 작업에는 INSERT, UPDATE 및 DELETE 권한이 필요합니다.
- JDBC URL 구문을 확인하세요. 구문 요구 사항은 데이터베이스 엔진에 따라 다릅니다. 자세한 내용을 보려면 AWS Glue 연결 추가를 참조하고 JDBC URL 아래의 예제를 검토하세요.
추가 문제 해결
-
연결 유형 확인:
-
올바른 연결 유형을 선택했는지 확인하세요. 연결 유형에 대해 Amazon RDS 또는 Amazon Redshift를 선택하면 AWS Glue가 VPC, 서브넷, 보안 그룹을 자동으로 채웁니다.
-
MySQL에 연결해야 하는 경우, 테스트 연결 기능은 MySQL 5.x 버전에서만 작동한다는 점에 유의하세요. MySQL 버전 8은 기본 제공 AWS Glue JDBC 드라이버에서 지원되지 않습니다. 5.x 버전보다 최신 MySQL 버전에 대해 연결을 테스트하는 경우 연결 시간 초과 오류가 발생할 수 있습니다. 그러나 해결 방법을 통해 AWS Glue 연결을 사용하여 MySQL 버전 8에 연결할 수 있습니다. MySQL 버전 8 이상에 호환되는 드라이버 JAR을 수동으로 제공하여 추출, 로드 및 변환(ETL) 작업에서 연결을 사용하세요. 그런 다음, Spark 작업에서 JDBC 드라이버를 로드하는 방법과 유사하게 이 JAR 파일을 작업에 로드하세요. 자세한 내용을 보려면 AWS Glue의 ETL 연결 유형 및 옵션을 참조하세요.
-
DNS 문제를 배제하세요. DNS 문제를 배제하려면 데이터 저장소의 퍼블릭 또는 프라이빗 IP 주소를 AWS Glue 연결의 JDBC URL로 사용하세요. 이 경우 더 이상 도메인 이름을 사용하지 않으므로 SQL 연결 필요를 선택 취소해야 합니다.
-
드라이버가 호환되지 않는지 확인하세요. 호환되지 않는 드라이버로 인해 연결에 실패한 경우 작업 속성에서 실패한 연결 이름과 함께 올바른 드라이버를 추가 JAR 파일로 제공하세요. (연결 이름을 작업 속성으로 지정하면 AWS Glue는 VPC 및 서브넷과 같은 연결의 네트워킹 설정을 사용합니다.) 그런 다음 작업 속성에서 제공한 JAR 파일을 사용하여 Apache Spark 데이터 프레임을 수동으로 생성하여 기본 AWS Glue 데이터 저장소 드라이버를 재정의합니다. 데이터 프레임을 생성한 후 선택적으로 AWS Glue DynamicFrame으로 변환할 수 있습니다. 자세한 내용을 보려면 fromDF를 참조하세요.
-
JDBC 데이터 저장소에 공개적으로 액세스할 수 있는지 확인합니다. MySQL 워크벤치 및 JDBC URL을 사용하여 데이터 저장소에 연결합니다. 또는 연결에 사용된 것과 동일한 서브넷 및 보안 그룹에 대한 SSH 액세스 권한이 있는 Amazon EC2 인스턴스를 시작합니다. 그런 다음 SSH를 사용하여 인스턴스에 연결하고 다음 명령을 실행하여 연결을 테스트합니다.
$ dig hostname
$ nc -zv hostname port
관련 정보
AWS Glue 데이터 카탈로그에서 연결 정의하기
AWS Glue에서 오류 해결