VPC内で動くGlue開発エンドポイントでPyCharmを使用する方法
Kazuki Moriyama (森山 和樹)
基本は以下の記事に従う。
チュートリアル: 開発エンドポイントで PyCharm Professional をセットアップする
しかしこの記事はVPCの外で動く開発エンドポイントを想定しているためVPC内で動くエンドポイントの場合は大きく手順が違ってくる。
VPC内のエンドポイントを扱う際に気をつけること
- プライベートなVPC内にいるので直接触れない
- SFTPでコネクションを貼るために踏み台サーバーを作成する必要がある
- さらにPyCharmで接続するためにローカルでsshトンネルを作る必要がある
そもそもVPC内にエンドポイントを作る理由
GlueがデータソースとしてS3だけを相手する場合は別にVPCの外でいいが、JDBC系をデータソースとして扱う際にはVPCの中に置く必要がある。
構成図
環境・前提
- Mac OS
- PyCharm Professional
- チュートリアルの前提条件 がJDBC用のVPCでの開発エンドポイントまで終わっていること
- チュートリアルの前提で作成したエンドポイントに公開鍵を設定しておく
実装
1. 踏み台サーバーの作成
- よくある方法で踏み台サーバーの作成
- sshキーだけ忘れないように取得
- 開発エンドポイントと同じVPCに作成
- 開発エンドポイントが属しているVPCは開発エンドポイントをクリックしたら出てくるエンドポイントの詳細で確認可能
2. private subnetのSSHセキュリティグループの設定
- private subnetのセキュリティグループで踏み台が置かれているpublic subnetからだけsshを許可する
3. SSHトンネルの作成
- 以下の様にSSHトンネルを作成
ssh -i <踏み台サーバーのpem> ec2-user@<踏み台サーバーのpublic dns> -L <設定したいローカルポート>:<開発エンドポイントのプライベートアドレス>:22 -N
- うまく行かなくてデバッグをしたいときなどはvオプションを付与する
- 開発エンドポイントのプライベートアドレスは詳細で確認可能
4. PyCharmの設定
- コードとライブラリをチュートリアルに書かれているようにセットアップする
- デプロイの部分が大きくチュートリアルと違う
Host
はローカルホストを指定Port
はトンネルで設定したローカルポートを指定User name
はglueAuthentication
はKey pair OpenSSHPrivate key path
は開発エンドポイントに設定した公開鍵の秘密鍵のパス(EC2の秘密鍵ではない)Test Connection
して成功すればOK
あとはチュートリアルと同じ用にやればOK。
その他
- 開発エンドポイントには公開鍵を複数設定することができるので、鍵の共有をする必要がない
- PyCharmで開発しているときはSSHトンネルが生きている必要がある
参考
チュートリアル: 開発エンドポイントで PyCharm Professional をセットアップする
Securely Connect to Linux Instances Running in a Private Amazon VPC | AWS Security Blog
AWS GlueでSpark開発をする - おおたの物置
リモート PyCharmによるデバッグ - ヘルプ | PyCharm