[AWS] vpc 내에 위치한 데이터베이스와 glue crawler 연동 시 에러가 발생합니다.
문의 사항
안녕하세요.
Athena를 통해 데이터를 통합조회 하기위해 Glue Data Crawler로 postgres 데이터베이스를 연동하고 싶습니다.
만약 AWS RDS가 대신 VPC내의 EC2에 설치된 postgres 데이터베이스에 Glue Data Crawler 를 연동하려면 어떻게 해야하나요?
이미 해당 데이터베이스를 Glue Job을 위한 Connection 으로는 연동해두고 사용하고 있습니다.
그래서 Glue Data Crawler 등록을 시도해봤는데, 등록은 잘 되지만 crawler run 이 잘 되지 않았습니다.
Test connection failed for connection 'EC2 Postgresql14 connection' 가 발생합니다.
VPC에 위치한 EC2의 문제인것 같긴 한데, SecurityGroup에 어떤 주소로부터의 접근을 허용하거나 IAM역할을 추가해주어야 하는지 궁금합니다.
답변
안녕하세요.
결론을 먼저 말씀드리면 Custom Jdbc Driver를 사용하시면 됩니다. Custom Jdbc Driver을 사용하시면 Crawl 작업전에 Test connection을 하지 않게 되어 해당 에러가 발생하지 않습니다. [1][2]
제 환경에서 EC2로 Postgresql14을 설치하여 테스트 한 결과 고객님과 동일하게 Glue ETL Job은 성공하지만 Crawler는 "Test connection failed for connection 'EC2 Postgresql14 connection'" 에러가 발생하였습니다.
Test connection 실패 에러가 발생하는 원인은 Crawler에서 작업을 수행시 Connection에 대해 Test connection작업을 수행하게 됩니다. 이로 인해 불편을 끼쳐드려 죄송합니다.
Postgresql14버전의 Connection에 대해 Test Connection 작업 수행시 다음과 같은 에러가 발생하는 것을 CloudWatch 로그를 통해 알 수 있습니다.
------------
ERROR StatusLogger Unrecognized format specifier [d]
ERROR StatusLogger Unrecognized conversion specifier [d] starting at position 16 in conversion pattern.
ERROR StatusLogger Unrecognized format specifier [thread]
ERROR StatusLogger Unrecognized conversion specifier [thread] starting at position 25 in conversion pattern.
ERROR StatusLogger Unrecognized format specifier [level]
ERROR StatusLogger Unrecognized conversion specifier [level] starting at position 35 in conversion pattern.
ERROR StatusLogger Unrecognized format specifier [logger]
ERROR StatusLogger Unrecognized conversion specifier [logger] starting at position 47 in conversion pattern.
ERROR StatusLogger Unrecognized format specifier [msg]
ERROR StatusLogger Unrecognized conversion specifier [msg] starting at position 54 in conversion pattern.
ERROR StatusLogger Unrecognized format specifier [n]
ERROR StatusLogger Unrecognized conversion specifier [n] starting at position 56 in conversion pattern.
ERROR StatusLogger Unrecognized format specifier [d]
ERROR StatusLogger Unrecognized conversion specifier [d] starting at position 16 in conversion pattern.
ERROR StatusLogger Unrecognized format specifier [thread]
ERROR StatusLogger Unrecognized conversion specifier [thread] starting at position 25 in conversion pattern.
ERROR StatusLogger Unrecognized format specifier [level]
ERROR StatusLogger Unrecognized conversion specifier [level] starting at position 35 in conversion pattern.
ERROR StatusLogger Unrecognized format specifier [logger]
ERROR StatusLogger Unrecognized conversion specifier [logger] starting at position 47 in conversion pattern.
ERROR StatusLogger Unrecognized format specifier [msg]
ERROR StatusLogger Unrecognized conversion specifier [msg] starting at position 54 in conversion pattern.
ERROR StatusLogger Unrecognized format specifier [n]
ERROR StatusLogger Unrecognized conversion specifier [n] starting at position 56 in conversion pattern.
------------
위 에러 로그는 Log4j의 버전 및 설정에 따라 발생하는 에러로 Crawler에서 사용하는 내장 드라이버 자체의 문제라고 볼 수 있습니다.
이는 현재 Crawler에서 기본 Postgres Jdbc Driver로 v42.2.1 사용하고 있기 때문인데요, Crawl 작업시 먼저 Test connection 작업을 하게 되는데 이 때 에러가 발생하면 바로 실패하게 됩니다.
문제를 해결하기 위해서는 Custom Jdbc Driver를 사용하시면 됩니다. Custom Jdbc Driver을 사용하시면 Crawl 작업전에 Test connection을 하지 않게 되어 해당 에러가 발생하지 않습니다. [1][2]
Glue ETL Job이 성공한 이유는 사용하는 기본 내장 드라이버 버전이 다르며, 작업 실행 전 Test connection을 따로 하지 않기 때문입니다. [3]
제 환경에서 최신 드라이버 버전인 postgresql-42.7.1.jar을 통해 테스트를 진행 해보았고, Crawl에 성공하는 것을 확인할 수 있었습니다. [4]
--------------
JDBC Driver Class name : org.postgresql.Driver
JDBC Driver S3 Path : s3://<S3 Path>/postgresql-42.7.1.jar
--------------
고객님 환경에서 내장 드라이버가 아닌 Custom Jdbc Driver의 사용을 부탁드립니다. 다시 한 번 불편을 끼쳐 드려 사과 드립니다.
참조:
[1] https://docs.aws.amazon.com/ko_kr/glue/latest/dg/console-connections-jdbc-drivers.html
[2] https://repost.aws/questions/QUpkrhcfkYQtS2adbjpQ7quQ/cannot-connect-from-glue-to-rds-postgres
[3] https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-connect-jdbc-home.html
[4] https://jdbc.postgresql.org/download/