

# チュートリアル: 開発エンドポイントで PyCharm Professional をセットアップする
<a name="dev-endpoint-tutorial-pycharm"></a>

このチュートリアルでは、ローカルマシンで実行中の [PyCharm Professional](https://www.jetbrains.com/pycharm/) 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](https://aws.amazon.com/blogs/security/securely-connect-to-linux-instances-running-in-a-private-amazon-vpc/)」を参照してください。

**Topics**
+ [PyCharm Professional を開発エンドポイントに接続する](#dev-endpoint-tutorial-pycharm-connect)
+ [開発エンドポイントにスクリプトをデプロイする](#dev-endpoint-tutorial-pycharm-deploy)
+ [リモートインタープリタの設定](#dev-endpoint-tutorial-pycharm-interpreter)
+ [開発エンドポイントでスクリプトを実行する](#dev-endpoint-tutorial-pycharm-debug-run)

## PyCharm Professional を開発エンドポイントに接続する
<a name="dev-endpoint-tutorial-pycharm-connect"></a>

1. PyCharm に `legislators` という名前の新しい純粋な Python プロジェクトを作成します。

1. プロジェクトに `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()
   ```

1. 次のいずれかを行います。
   + AWS Glue バージョン 0.9 の場合、AWS Glue Python ライブラリファイル `PyGlue.zip` を `https://s3.amazonaws.com/aws-glue-jes-prod-us-east-1-assets/etl/python/PyGlue.zip` から、ローカルマシンの便利な場所にダウンロードします。
   + AWS Glue バージョン 1.0 以降の場合、AWS Glue Python ライブラリファイル `PyGlue.zip` を `https://s3.amazonaws.com/aws-glue-jes-prod-us-east-1-assets/etl-1.0/python/PyGlue.zip` から、ローカルマシンの便利な場所にダウンロードします。

1. PyCharm のプロジェクトのコンテンツルートとして `PyGlue.zip` を追加します。
   + PyCharm で、[**File**] (ファイル)、[**Settings**] (設定) の順に選択し、[**Settings**] (設定) ダイアログボックスを開きます。(`Ctrl+Alt+S` キーを押す方法もあります。)
   + `legislators` プロジェクトを展開し、[**Project Structure**] (プロジェクト構造) を選択します。次に、右ペインで [**\$1Add Content Root**] (\$1 コンテンツルートの追加) を選択します。
   + `PyGlue.zip` を保存した場所に移動して選択し、[**Apply**] (適用) を選択します。

    [**Settings**] (設定) 画面は以下のようになります。  
![\[PyGlue.zip がコンテンツルートとして追加された PyCharm 設定画面。\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/PyCharm_AddContentRoot.png)

   [**Apply**] (適用) を選択した後は、[**Settings**] (設定) ダイアログボックスを開いたままにします。

1. デプロイオプションを設定し、SFTP を使用してローカルスクリプトを開発エンドポイントにアップロードします (この機能は、PyCharm Professional でのみ使用できます)。
   + [**Settings**] (設定) ダイアログボックスで、[**Build, Execution, Deployment**] (ビルド、実行、デプロイ) セクションを展開します。[**Deployment**] (デプロイ) サブセクションを選択します。
   + 中央のペインの一番上にある [**\$1**] アイコンを選択し、新しいサーバーを追加します。[**タイプ**] を `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 設定画面。\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/PyCharm_SFTP.png)

   再び、[**Apply**] (適用) を選択した後は、[**Settings**] (設定) ダイアログボックスを開いたままにします。

1. ローカルディレクトリをデプロイ用のリモートディレクトリにマッピングします。
   + 右のペインの [**Deployment**] (デプロイ) ページで、[**Mappings**] (マッピング) と書かれた中央上部のタブを選択します。
   + [**Deployment Path**] (デプロイパス) 列で、プロジェクトパスのデプロイ用に `/home/glue/scripts/` の下にパスを入力します。例: `/home/glue/scripts/legislators`。
   + **[Apply]** (適用) を選択します。

    [**Settings**] (設定) 画面は以下のようになります。  
![\[デプロイマッピング後の PyCharm 設定画面。\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/PyCharm_Mapping.png)

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

## 開発エンドポイントにスクリプトをデプロイする
<a name="dev-endpoint-tutorial-pycharm-deploy"></a>

1. [**Tools (ツール)**]、[**Deployment (デプロイ)**] の順に選択した後、次の図に示すように、開発エンドポイントをセットアップする名前を選択します。  
![\[スクリプトをデプロイするためのメニュー項目。\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/PyCharm_Deploy.png)

   スクリプトがデプロイされた後、画面の下部は、次のようになります。  
![\[デプロイが成功した後の PyCharm 画面の下部。\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/PyCharm_Deployed.png)

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

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

## リモートインタープリタの設定
<a name="dev-endpoint-tutorial-pycharm-interpreter"></a>

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

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

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

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

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

1. [**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 設定に移動する)] という選択項目があります。\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/PyCharm_Interpreter1.png)

1. [**Move this server to IDE settings (このサーバーを IDE 設定に移動する)**] を選択し、[**次へ**] を選択します。

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

## 開発エンドポイントでスクリプトを実行する
<a name="dev-endpoint-tutorial-pycharm-debug-run"></a>

スクリプティングを実行するには:
+ 左ペインでファイル名を右クリックし、[***<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
  ```

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