チュートリアル: 開発エンドポイントで 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. PyCharm に legislators という名前の新しい純粋な 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. PyCharm のプロジェクトのコンテンツルートとして PyGlue.zip を追加します。

    • PyCharm で、[File] (ファイル)、[Settings] (設定) の順に選択し、[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] (認証タイプ) を [Key pair (OpenSSH or Putty)] (キーペア、OpenSSH または Putty) に設定します。開発エンドポイントのプライベートキーファイルがある場所を参照し、プライベートキーファイルを設定します。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] (マッピング) と書かれた中央上部のタブを選択します。

    • [Deployment Path] (デプロイパス) 列で、プロジェクトパスのデプロイ用に /home/glue/scripts/ の下にパスを入力します。例: /home/glue/scripts/legislators

    • [Apply] を選択します。

    [Settings] (設定) 画面は以下のようになります。

    
            デプロイマッピング後の PyCharm 設定画面。

    [OK] を選択し、[設定] ダイアログボックスを閉じます。

開発エンドポイントにスクリプトをデプロイする

  1. [Tools (ツール)]、[Deployment (デプロイ)] の順に選択した後、次の図に示すように、開発エンドポイントをセットアップする名前を選択します。

    
            スクリプトをデプロイするためのメニュー項目。

    スクリプトがデプロイされた後、画面の下部は、次のようになります。

    
            デプロイが成功した後の PyCharm 画面の下部。
  2. メニューバーで、[Tools (ツール)]、[Deployment (デプロイ)]、[Automatic Upload (always) (自動アップロード (常時))] の順に選択します。[Automatic Upload (always) (自動アップロード (常時))] の横にチェックマークが表示されていることを確認します。

    このオプションを有効にすると、PyCharm は変更されたファイルを開発エンドポイントに自動的にアップロードします。

リモートインタープリタの設定

開発エンドポイントで Python インタプリタを使用するように PyCharm を設定します。

  1. [ファイル] メニューの [設定] を選択します。

  2. プロジェクトの [legislators (立法者)] を展開し、[Project Interpreter (プロジェクトインタープリタ)] を選択します。

  3. [Project Interpreter (プロジェクトインタープリタ)] リストの横にある歯車アイコンを選択し、[追加] を選択します。

  4. [Add Python Interpreter (Python インタープリタを追加)] ダイアログボックスの左ペインで、[SSH Interpreter (SSH インタープリタ)] を選択します。

  5. [Existing server configuration (既存のサーバー設定)] を選択し、[Deployment configuration (展開設定)] リストで設定を選択します。

    これで、画面は以下の図のようになります。

    
            左側のペインで [SSH Interpreter (SSH インタープリタ)] が選択され、右側のペインで [Existing server configuration (既存のサーバー設定)] ラジオボタンが選択されています。[Deployment configuration (デプロイ設定)] フィールドには、設定名と「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 設定に移動する)] を選択し、[次へ] を選択します。

  7. [Interpreter (インタプリタ)] フィールドで、Python 2 を使用している場合は、パスを /usr/bin/gluepython に変更し、Python 3 を使用している場合は /usr/bin/gluepython3 に変更します。次に、[完了] を選択します。

開発エンドポイントでスクリプトを実行する

スクリプトを実行するには:

  • 左ペインでファイル名を右クリックし、[<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

これで開発エンドポイントでスクリプトをリモートでデバッグするためのセットアップができました。