⚗️

EC2(Amazon Linux)っぽいコンテナを動かして VSCode Dev Containers で開発環境にする

2023/04/01に公開

この記事の目的

この記事は VSCode の Dev Containers を使ってローカルで EC2(AmazonLinux) っぽいコンテナを動かすことがゴールです。
あくまでも "っぽい" コンテナなので EC2 完全再現とはいきませんが、手元でちょっとした確認がしたいときに使えそうです。

コンテナをつくる

準備

  1. 拡張機能 Remote Development インストール
    VSCode 拡張機能の Remote Development にはコンテナ関連の拡張機能(Dev Containers など)がいろいろ含まれています。
    Remote Development
  2. Docker インストール
    コンテナを動かすために Docker も必要です。
    Install Docker Engine

設定ファイル

まずは Dev Containers の設定ファイルを置く場所として .devcontainer ディレクトリを用意します。
さらに .devcontainer ディレクトリにはコンテナビルド用の Dockerfile と設定ファイルの devcontainer.json を作ります。

mkdir .devcontainer
touch .devcontainer/Dockerfile .devcontainer/devcontainer.json

Dockerfile

Dockerfileamazonlinux:2 をベースに作ります。
AWS CLI などは自分でインストールしないといけないようです。他にも必要なパッケージがあれば適宜追加してください。
また、EC2 っぽさをだすために ec2-user ユーザーも追加しています。

Dockerfile
FROM amazonlinux:2

ARG UID=1000

# python3, awscli インストール
RUN amazon-linux-extras install -y \
      python3.8 \
 && python3.8 -m pip install awscli

# その他ビルドに必要なパッケージ
RUN yum update && yum install -y \
      shadow-utils \
      sudo \
      tar \
 && rm -rf /var/cache/yum/* \
 && yum clean all

# ec2-user ユーザー追加
RUN useradd -u ${UID} ec2-user \
 && echo "ec2-user ALL=NOPASSWD: ALL" >> /etc/sudoers

# python コマンドで python3.8 が実行できるようにエイリアス設定
RUN echo "alias python=python3.8" >> /home/ec2-user/.bashrc

USER ${UID}

devcontainer.json

devcontainer.json には VSCode 拡張機能向けの設定を記述します。
workspaceMount, workspaceFolder でマウントするディレクトリを指定できます。
こちらも "っぽさ" をだすために /home/ec2-user/playground でターミナルを開くようにしました。指定がない場合は /workspaces/[カレントディレクトリ名] になります。

devcontainer.json
{
	"name": "AmazonLinuxPlayground",
	"build": {
		"dockerfile": "Dockerfile"
	},
	// カレントディレクトリをコンテナの /home/ec2-user/playground にマウント
	"workspaceMount": "source=${localWorkspaceFolder},target=/home/ec2-user/playground,type=bind",
	"workspaceFolder": "/home/ec2-user/playground",
	// コンテナ内のユーザー指定
	"remoteUser": "ec2-user",
	"runArgs": [
		"--privileged"
	],
}

コンテナにアクセス

カレントディレクトリに .devcontainer ディレクトリがある状態で Remote Explorer メニューから Open Folder in Container でコンテナを立ち上げることができます。ダイアログが表示されたら OK を選択してください。

# カレントディレクトリに `.devcontainer` がある
ls -a .
.  ..  .devcontainer

コンテナのビルドが終わるまでしばらく待つと、見た目はあまり変わりないですがターミナルの表示が [ec2-user@123456789 playground] のようになっていると思います。
amazon-linux-extras や AWS CLI が使えるようになっていれば成功です。

sudo amazon-linux-extras install -y vim

aws --version

まとめ

サンプルリポジトリがあるのでよかったら手元で確認してみてください。
amazonlinux:2023 イメージも公開されているようなので、ローカルで試してみるのもよさそうです。

参考

amazonlinux
Change the default source code mount
Amazon Linux 2 の Dockerイメージから開発環境を作り Visual Studio Codeで接続してみる

株式会社ROBONの技術ブログ

Discussion