VSCodeからAWSへSSH接続してRemoteContainerを起動してみる
Contents
はじめに
VSCodeのRemoteContainerを利用してよく開発しているが、稀にPCのスペック的に動作が不安定になることがある。
WSLにアクセスして開発をしている場合でも、Dockerコンテナを複数立ち上げるなどするとPCにかなりの負荷をかけてしまっていることがある。
WSLへSSHのように接続しているのであれば、AWSのEC2のような外部LinuxにSSH接続しても同じように開発できるのでは?と思ったので、色んな知見を調べながら環境構築してみた。
VSCodeの設定を変える
VSCodeからDocker接続する上で少し設定が必要になるので、先に済ませておく。
(RemoteSSH、Dockerなどの拡張機能は必須条件なので割愛)
VSCodeの設定 (Settings or settings.json) で『DOCKER_HOST』を設定しておく。
# settings.json
"docker.environment": {
"DOCKER_HOST": "ssh://your-remote-user@your-remote-machine-fqdn-or-ip-here"
}
EC2でインスタンスを起動する
AWSのEC2からインスタンスを作成、起動してみる。
インスタンスタイプは無料枠だと少し厳しかったので、今回は『t3.medium』にして作成してみる。
※無料枠の『t2.micro』でも起動は確認できたが、開発が進められる状況ではなかったので諦めた。
VSCodeからSSH接続する
インスタンスを起動できれば、以降はSSH接続して設定を変えていく。
まずはVSCodeからSSH接続できるようconfigファイルを書き換えていく。
# .ssh/config
Host AWS接続(任意)
HostName (IPアドレス)
User ec2-user
IdentityFile (鍵のpemファイル)
Port 22
本当はSSH接続のポートは変えておいた方がいいかもしれないが、今回は割愛。
ユーザ名が『ec2-user』となるので注意。
設定できればVSCodeからSSHで接続しておく。
インスタンス内の環境を整える
Dockerを実行できる環境を整える。ついでにGitもインストールしておく。
# In Instance
# パッケージのアップデート
$ sudo yum -y update
# Docker、Gitのインストール
sudo yum -y install docker git
# Dockerのスタート
$ sudo service docker start
# Dockerの自動起動の設定もあったが忘れたので、思い出せば追記する
# 思い出したので追記 (2023-12-11)
$ sudo systemctl enable docker
# Dockerの起動確認
$ sudo docker info
# ユーザの追加
$ sudo usermod -a -G docker ec2-user
##### ##### #####
# 一度インスタンスの再起動する
##### ##### #####
# Dockerの起動確認 (docker infoはsudoを使わない)
$ sudo service docker start
$ docker info
# Docker Composeのインストール (公式の通り)
$ DOCKER_CONFIG=${DOCKER_CONFIG:-$HOME/.docker}
$ mkdir -p $DOCKER_CONFIG/cli-plugins
$ curl -SL https://github.com/docker/compose/releases/download/v2.15.1/docker-compose-linux-x86_64 -o $DOCKER_CONFIG/cli-plugins/docker-compose
$ chmod +x $DOCKER_CONFIG/cli-plugins/docker-compose
$ docker compose version
まとめ
上記設定が済めば、あらかじめRemoteContainerを想定したGitリポジトリをクローンするなどすれば、そのまま開発へ移行できる。
(自分のプロジェクトだが、https://github.com/PONzu-0529/python-selenium-container など)
これで開発側のPCスペックを気にせず開発できるようになった。
その他
後日再度アクセスしようとすると『プロセスが存在しないパイプに書き込もうとしました』のエラーでVSCodeからSSH接続できないということが発生した。
調べてみると、接続元のIPアドレスが変わってしまっていたことが原因だった。
AWS側で自PCのIPアドレスからのみアクセスを許可する設定にしていたため、旧IPアドレスを許容して新IPアドレスが弾かれてしまっていた。
AWS側で新IPアドレスを許容するよう変更することで解消。
参考
- 『[AWS]EC2内でDockerコンテナを起動して、ブラウザからアクセスする』, WESEEK Tech Blog, https://weseek.co.jp/tech/2196/, 2023-01-20
- 『Develop a container on a remote Docker host』, Visual Studio Code, https://code.visualstudio.com/remote/advancedcontainers/develop-remote-host, 2023-01-20
- 『Install the Compose plugin』, Docker Documentation, https://docs.docker.com/compose/install/linux/#install-the-plugin-manually, 2023-01-20