AWS
SSH
Azure
docker
VSCode

sshfs(+docker)を使ってリモートマシン上のコードをGUI系エディタでいじる

はじめに

AWSやAzureで(お金さえあれば)潤沢なGPU環境を簡単に利用できるようになりましたが、リモートマシンゆえにGUIの利用に制限がかかります。
XForwardingなどがうまく動けばよいですが、重くて使い物にならないことも多いかと思います。

そこで本記事では、リモートマシン上にあるコードをローカルのGUI系エディタ(VSCodeなど)でいじる方法を紹介します。
本番実行はリモートマシン上で行う想定ですが、ローカルでも簡単なデバッグは行いたいので、dockerを使ってリモートとローカルの環境を揃えます(オプションです)。

代替手段

・XForwading
重い

・Remote VSCode
余計なポートを開ける必要があり、会社で使えない(´・ω・`)

主な流れ

  1. ローカルとリモートの両方でdockerコンテナに入る
  2. ローカルでsshfsし、リモートマシンのディレクトリをマウント
  3. ローカルでコーディング

docker

ローカルとリモートの両方でdockerコンテナに入ります。
docker runする際に、--privilegedオプションをつけてください。
これが無いと後述のsshfsでエラーが出ます。
https://github.com/s3fs-fuse/s3fs-fuse/issues/647

なお、dockerコンテナ内でVSCodeを利用する方法については以下の記事を参考にしてください。
https://qiita.com/kanosawa/items/0c83f8d8eaaa4a72e1cd

sshfs

ローカルでsshfsし、リモートマシンのディレクトリ(src)をローカルマシンのディレクトリ(dst)にマウントします。

sshfs [-o IdentityFile=keypath] username@remote_ip:src dst

例)

sshfs -o IdentityFile=~/key.pem ubuntu@12.345.678.901:/home/ubuntu/work ~/work

鍵認証不要なら[]部は不要です。

おわりに

以上の手順で、リモートマシン上にあるコードをローカルのGUI系エディタでいじることができるようになります。

これでTesla V100 8台を気軽にぶん回すこともできますね(24.5ドル/hなり)