AWS Glue에서 pg8000 driver를 사용하여 PostgreSQL의 RDS 인스턴스에 연결

Overview



AWS Glue의 스크립트에서 DynamicFrameWriter를 사용하여 할 수 있는 것보다 좀 더 세세한 일을 하고 싶었기 때문에, PostgreSQL의 RDS 인스턴스에 Python의 라이브러리로 접속하고 싶었다.

그 절차 참고.

Glue에서는 pure-Python 라이브러리 만 사용할 수 있습니다. 예를 들어 pandas와 같은 C 라이브러리는 지원되지 않습니다. 그래서 pg8000을 사용한다.

절차



절차
  • pg8000, scramp (의존에 필요)의 tar 파일을 다운로드
  • tar를 압축 해제하고 zip을 만듭니다
  • zip을 s3에 넣습니다
  • Glue job 설정, Python library path에 s3 경로를 입력

  • 자세한 내용은

    1. pg8000, scramp (의존에 필요) tar 파일 다운로드



    pypi에서 tar를 다운로드 할 수 있기 때문에 로컬로 떨어집니다.

    (pypi > "다운로드 파일")

    이하 직접 링크
  • pg8000
  • 스크램프

  • 2. tar의 압축을 풀고 zip 만들기



    떨어뜨린 tar 를 해동하면(자) , 안에 라이브러리 본체의 소스 코드가 있으므로 그것을 뽑아 zip 으로 한다.

    pg8000
    $ tar xzf pg8000-1.16.5.tar.gz --strip-components 1 pg8000-1.16.5/pg8000/
    $ zip -r pg8000.zip pg8000
      adding: pg8000/ (stored 0%)
      adding: pg8000/_version.py (deflated 31%)
      adding: pg8000/__init__.py (deflated 58%)
      adding: pg8000/core.py (deflated 76%)
      adding: pg8000/exceptions.py (deflated 77%)
      adding: pg8000/converters.py (deflated 74%)
    

    스크램프
    $ tar xzf scramp-1.2.0.tar.gz --strip-components 1 scramp-1.2.0/scramp/
    $ zip -r scramp.zip scramp
      adding: scramp/ (stored 0%)
      adding: scramp/_version.py (deflated 31%)
      adding: scramp/__init__.py (deflated 41%)
      adding: scramp/core.py (deflated 75%)
      adding: scramp/utils.py (deflated 56%)
    

    3. zip을 s3에 넣습니다.



    여기에서는 만일 이하의 장소에 두었다고 한다.
  • s3://tommarute/python/lib/pg8000.zip
  • s3://tommarute/python/lib/scramp.zip

  • 4. Glue job 설정, Python library path에 s3 경로 입력



    아래에 입력.



    여러이므로 쉼표로 구분합니다.
    s3://tommarute/python/lib/pg8000.zip,s3://tommarute/python/lib/scramp.zip
    이것으로 설정 완료

    사용



    후에는 보통 import 하고 사용하면 OK

    예를 들면 이런 느낌
    import pg8000
    
    DSN = {
        'host': 'postgres.xxxx.us-east-1.rds.amazonaws.com',
        'port': 5432,
        'database': 'ec',
        'user': 'tommarute',
        'password': 'secret'
    }
    
    table = 'my_contact'
    
    with pg8000.connect(**DSN) as con:
        res = con.run("SELECT count(*) FROM information_schema.tables WHERE table_name = :table", table=table)
        table_count = res[0][0]
        print(f'table_count of {table} = {table_count}')
    

    사용법의 샘플은 pg8000의 Github 저장소에 풍부하게 실려 있다.

    또한, Glue의 jupyter notebook에서 사용하고 싶은 경우는, Dev endpoints의 설정으로 상기 4로 실시한 설정을 하면 된다.

    참고


  • h tps : // s t c ゔ ぇ rf ぉ w. 코 m / 쿠에 s 치온 s / 47081088 / 아 ws-g ぅ t 룬 카테에서 s 치나 치 온 뽀 stg 레 s-b ぇp 리오 r와 - 엔세 rt
  • htps : // / cs. 아 ws. 아마존. 이 m/gぅ에/ぁ st/dg/아 ws-gぅ에-p로g 라민gpy 쵸-ぃb라리 s. HTML
  • 좋은 웹페이지 즐겨찾기