자습서: 개발 엔드포인트로 PyCharm Professional 설치하기 - AWS Glue

자습서: 개발 엔드포인트로 PyCharm Professional 설치하기

이 자습서를 통해 로컬 시스템에서 실행되는 PyCharm Professional Python IDE를 개발 엔드포인트로 연결하여 AWS Glue ETL(추출, 변환 및 로드) 스크립트를 배치하기 전에 상호적으로 실행, 디버깅, 및 테스트할 수 있습니다. 자습서의 지침 및 화면 캡처는 PyCharm Professional 버전 2019.3을 기반으로 합니다.

상호적으로 개발 엔드포인트를 연결하기 위해서 PyCharm Professional이 설치되어 있어야 합니다. 무료 에디션을 사용하면 아무것도 할 수 없습니다.

이 자습서에서는 자습서 사전 요구 사항의 단계를 이미 완료했다고 가정합니다.

참고

이 튜토리얼에서는 Amazon S3를 데이터 원본으로 사용합니다. 대신 JDBC 데이터 원본을 사용하려면 Virtual Private Cloud(VPC)에서 개발 엔드포인트를 실행해야 합니다. SSH를 사용하여 VPC의 개발 엔드포인트에 연결하려면 SSH 터널을 생성해야 합니다. 이 자습서에는 SSH 터널을 생성하는 지침이 포함되어 있지 않습니다. SSH를 사용하여 VPC의 개발 엔드포인트에 연결하는 방법에 대한 자세한 내용은 AWS 보안 블로그의 Securely Connect to Linux Instances Running in a Private Amazon VPC를 참조하세요.

PyCharm Professional을 개발 엔드포인트에 연결

  1. legislators라는 PyCharm에서 새로운 순수 Python 프로젝트를 생성합니다.

  2. get_person_schema.py라는 파일을 다음 내용으로 프로젝트에 생성합니다.

    from pyspark.context import SparkContext from awsglue.context import GlueContext def main(): # Create a Glue context glueContext = GlueContext(SparkContext.getOrCreate()) # Create a DynamicFrame using the 'persons_json' table persons_DyF = glueContext.create_dynamic_frame.from_catalog(database="legislators", table_name="persons_json") # Print out information about this data print("Count: ", persons_DyF.count()) persons_DyF.printSchema() if __name__ == "__main__": main()
  3. 다음 중 하나를 수행하세요.

    • AWS Glue 버전 0.9의 경우, AWS Glue Python 라이브러리 파일 PyGlue.ziphttps://s3.amazonaws.com/aws-glue-jes-prod-us-east-1-assets/etl/python/PyGlue.zip에서 로컬 시스템의 편리한 위치로 다운로드합니다.

    • AWS Glue 버전 1.0 이상의 경우, AWS Glue Python 라이브러리 파일 PyGlue.ziphttps://s3.amazonaws.com/aws-glue-jes-prod-us-east-1-assets/etl-1.0/python/PyGlue.zip에서 로컬 시스템의 편리한 위치로 다운로드합니다.

  4. PyGlue.zip을 PyCharm의 프로젝트 내용 루트로써 추가합니다.

    • PyCharm에서 [Settings(설정)] 대화 상자를 열기 위해서 [File(파일)]과 [Settings(설정)]를 선택합니다. (Ctrl+Alt+S를 눌러도 됩니다.)

    • legislators 프로젝트를 확장하고 Project Structure(프로젝트 구조)를 선택합니다. 오른쪽 창에서 [+ Add Content Root(내용 루트 추가)]를 선택합니다.

    • PyGlue.zip을 저장한 위치로 이동하여 선택한 다음 [Apply(적용)]를 선택합니다.

    [Settings(설정)] 스크린은 다음과 비슷해야 합니다.

    
            내용 루트로 PyGlue.zip이 추가된 PyCharm 설정 스크린

    [적용(Apply)]을 선택한 다음 [설정(Settings)] 대화 상자를 열어 둡니다.

  5. 개발 옵션을 구성하여 로컬 스크립트를 SFTP(이 기능은 PyCharm Professional에서만 사용 가능합니다)를 사용하여 개발 엔드포인트로 업로드합니다.

    • [Settings(설정)] 대화 상자에서 [Build, Execution, Deployment(설계, 실행, 뱇)] 섹션을 확장합니다. Deployment(배치) 부 섹션을 선택합니다.

    • 중간 창의 맨 윗쪽에서 [+] 아이콘을 선택하여 새로운 서버를 추가합니다. 유형SFTP로 설정하고 이름을 지정합니다.

    • SFTP 호스트를 세부 정보 페이지에 나열된 대로 개발 엔드포인트의 퍼블릭 주소로 설정합니다. (AWS Glue 콘솔에서 개발 엔드포인트의 이름을 선택하여 세부 정보 페이지를 표시합니다.) VPC에서 실행 중인 개발 엔드포인트의 경우 SFTP 호스트를 호스트 주소로 설정하고 SSH 터널의 로컬 포트를 개발 엔드포인트로 설정합니다.

    • User name(사용자 이름)을 glue에 설치합니다.

    • Auth type(Auth 유형)을 Key pair (OpenSSH or Putty)(키 페어(OpenSSH 또는 Putty))에 설치합니다. 개발 엔드포인트 프라이빗 키 파일이 위치한 곳을 검색하여 [Private key file(프라이빗 키 파일)]을 설정합니다. PyCharm은 DSA, RSA 및 ECDSA OpenSSH 키 유형만 지원하므로, Putty의 프라이빗 형식의 키는 허용하지 않습니다. ssh-keygen의 업데이트 버전을 사용하여 PyCharm이 허용한 키 페어 유형을 다음과 같은 구문을 사용하여 생성합니다.

      ssh-keygen -t rsa -f <key_file_name> -C "<your_email_address>"
    • [Test connection(연결 테스트)]을 선택하고 연결을 테스트하도록 허용합니다. 연결이 성공하면 [Apply(적용)]를 선택합니다.

    [Settings(설정)] 스크린은 이제 다음과 비슷해야 합니다.

    
            정의된 SFTP를 통한 PyCharm 설정 스크린

    다시 한 번, [적용(Apply)]을 선택한 다음 [설정Settings)] 대화 상자를 열어 둡니다.

  6. 로컬 디렉터리를 원격 디렉터리로 매핑하여 개발합니다.

    • [Deployment(배치)] 페이지의 오른쪽 화면에서 [Mappings(매핑)]d이라는 윗쪽 중간 탭을 선택합니다.

    • [Deployment Path(배치 경로)] 열에서 /home/glue/scripts/의 경로를 입력하여 프로젝트 경로를 배치합니다. 예: /home/glue/scripts/legislators.

    • 적용(Apply)을 선택합니다.

    [Settings(설정)] 스크린은 이제 다음과 비슷해야 합니다.

    
            배치 매핑을 통한 PyCharm 설정 스크린

    [OK(확인)]를 선택하여 [Settings(설정)] 대화 상자를 닫습니다.

스크린을 개발 엔드포인트에 배포

  1. 다음 그림과 같이 [Tools(도구)], [Deployment(배포)]를 선택한 다음 개발 엔드포인트를 설정할 이름을 선택합니다.

    
            스크립트를 배치할 메뉴 항목

    스크린이 배치된 후 스크린 아래는 다음과 유사하게 보입니다.

    
            성공적인 배치 후 PyCharm 아래면
  2. 메뉴 모음에서 [Tools(도구)], [Deployment(배포)], [Automatic Upload (always)(자동 업데이트(항상))]를 선택합니다. [Automatic Upload (always)(자동 업데이트(항상))] 옆에 확인 표시가 나타나는지 확인합니다.

    이 옵션을 활성화하면 PyCharm은 변경된 파일을 개발 엔드포인트에 자동으로 업로드합니다.

원격 인터프리터 구성

개발 엔드포인트에서 Python 인터프리터를 사용하도록 PyCharm을 구성합니다.

  1. [File(파일)] 메뉴에서 [Settings(설정)]를 선택합니다.

  2. 프로젝트 [legislators(제정자)]를 확장하고 [Project Interpreter(프로젝트 인터프리터)]를 선택합니다.

  3. [Project Interpreter(프로젝트 인터프리터)] 목록 옆에 있는 톱니바퀴 아이콘을 선택한 다음 [Add(추가)]를 선택합니다.

  4. [Add Python Interpreter(Python 인터프리터 추가)] 대화 상자의 왼쪽 창에서 [SSH Interpreter(SSH 인터프리터)]를 선택합니다.

  5. [Existing server configuration(기존 서버 구성)]을 선택하고 [Deployment configuration(배포 구성)] 목록에서 구성을 선택합니다.

    스크린은 다음과 비슷해야 합니다.

    
            왼쪽 창에서 SSH 인터프리터가 선택되고 오른쪽 창에서 기존 서버 구성 라디오 버튼이 선택됩니다. 배포 구성 필드에는 구성 이름과 “Remote SDK is saved in IDE settings, so it needs the deployment server to be saved there too. Which do you prefer?(원격 SDK가 IDE 설정에 저장되므로 배포 서버도 여기에 저장해야 합니다. 어느 쪽을 선호하십니까?)”라는 메시지가 포함됩니다. “Create copy of this deployment server in IDE settings(IDE 설정에서 이 배포 서버의 복사본 생성)” 및 “Move this server to IDE settings(이 서버를 IDE 설정으로 이동)” 메시지 아래의 선택 사항입니다.
  6. [Move this server to IDE settings(이 서버를 IDE 설정으로 이동)]를 선택하고 [Next(다음)]를 선택합니다.

  7. [Interpreter(인터프리터)] 필드에서 Python 2를 사용하는 경우 경로를 /usr/bin/gluepython으로 변경하고 Python 3을 사용하는 경우 /usr/bin/gluepython3로 변경합니다. 그런 다음 Finish(완료)를 선택합니다.

스크립트를 개발 엔드포인트에서 실행

스크립트를 실행하려면

  • 왼쪽 창에서 파일 이름을 마우스 오른쪽 버튼으로 클릭하고 [Run ‘<filename>'(‘<filename>’ 실행)]을 선택합니다.

    일련의 메시지 후에 최종 출력에는 개수와 스키마가 표시되어야 합니다.

    Count: 1961 root |-- family_name: string |-- name: string |-- links: array | |-- element: struct | | |-- note: string | | |-- url: string |-- gender: string |-- image: string |-- identifiers: array | |-- element: struct | | |-- scheme: string | | |-- identifier: string |-- other_names: array | |-- element: struct | | |-- lang: string | | |-- note: string | | |-- name: string |-- sort_name: string |-- images: array | |-- element: struct | | |-- url: string |-- given_name: string |-- birth_date: string |-- id: string |-- contact_details: array | |-- element: struct | | |-- type: string | | |-- value: string |-- death_date: string Process finished with exit code 0

그런 다음 원격으로 개발 엔드포인트에 스크립트를 디버깅하도록 설정합니다.