PyCharmでAmazon EC2上のPythonコードをデバッグする
今まで、Amazon EC2(Amazon Linux)上に格納されているPythonのアプリケーションコードを、Visual Studio Codeを使用して修正していました。
Visual Studio Codeでも問題ないのですが、他のエディタやIDEも使ってみたくなったので、今回はPyCharmを使ってEC2上のPythonコードをデバッグできるか試してみることにしました。
※ 以下2024年6月の情報で、macで操作しています。
PyCharmの価格
2024年6月時点では、学生・教員・コミュニティは無料、
個人利用の場合、PyCharm Professionalは年間(1年目)税込 14,157 JPYのようでした。初回30日間は体験版を無料で使えるようです。
詳細は以下公式サイトをご覧ください。
Amazon EC2へSSH接続する
では、早速PyCharmをmacへインストールします。
インストール後、PyCharmを開くと以下の画面が表示されます。
Remote Development機能はBeta版でした。

左側のRemote Developmentの下のSSHを選択し、New Projectを選択します。

Connection欄の右側の歯車マークを選択します。

開いたSSH Configurations画面の左側の+を選択すると以下の画面が表示されます。

Hostに、対象のEC2インスタンスのパブリック DNSをコピーして貼り付けます。


Usernameにec2-user、Authentication typeにKey pairを選択して、SSHのキーペアの秘密鍵の格納場所を選択します。

Test Connectionボタンを押して接続テストしてみます。

成功しました。
SSH Configurations画面で、Authentication typeにOpenSSH config and authentication agentを選択する場合、
~/.ssh/configの設定ファイルに以下を記載し、
SSH Configurations画面のHostに、対象のEC2インスタンスのパブリック DNSの値を設定すると、接続できました。(UsernameやPortは、設定ファイルに記載済みのため、自動で設定されました。)
Host <パブリック DNS>
User ec2-user
Port 22
IdentityFile <秘密鍵のパス>

OKボタンを押して、次の画面のConnection欄を上記で設定したものに変更し、Check Connection and Continueボタンを押して、EC2インスタンスへ接続してみます。

EC2のインスタンスタイプがt2.microだったので、以下の警告メッセージが表示されました。

以下の公式サイトにリモート開発のシステム要件が記載されてました。
最小要件は、
- x86_64 または arm64 アーキテクチャの 4 つの vCPU。また、コア数を増やすよりも、クロック周波数を高くすることをお勧めします。
- 8GB の RAM。
- IDE がすでにインストールされている場合でも、少なくとも 500MB の空きディスク容量。
とのことなので、(上記以外にも要件があるため、詳細は公式サイトをご覧ください。)
EC2インスタンスタイプをt2.xlargeに変更して、改めて接続してみます。
※ 私の環境はElastic IP アドレスを割り当てていないので、EC2インスタンスを停止するとパブリック DNSが変わります。SSH Configurations画面でAuthentication typeがKey pairの場合、Hostを変更後のパブリック DNSに変更して再接続しています。

接続に成功しました。
Project directoryを選択して、Start IDE and Connectボタンを押します。

無事、Amazon EC2へSSH接続できました。
PyCharmでAmazon EC2へSSH接続すると、初回はmain.pyのsample Python scriptが自動で生成されるようです。
デバッグしてみる
任意の場所にブレイクポイントを付与してデバッグ実行してみます。


デバッグ実行することができました。
まとめ
今回は、PyCharmでAmazon EC2へSSH接続して、EC2上のPythonコードをデバッグできるか試してみました。
まだBeta版とのことですが、リモート開発のシステム要件を満たしていれば、問題なくEC2インスタンスへSSH接続し、EC2上のPythonコードをデバッグすることができました。
PyCharmで、EC2上のDockerコンテナ内のPythonコードをデバッグできるか確認できていないので、引き続き試していこうと思います。
Discussion