AWS SAMのための開発環境をDockerで構築する
最近AWS SAMを使い始めたので開発環境構築について書いてみたいと思います。
今回作成する環境はこんな感じです。
- lambda実行環境であるamazonlinux環境をDockerで作る
- docker-composeしてVSCodeのRemote Containerでアクセスする
実際のサーバーレスアプリは次回作成してみるとして、今回はここまで作ってみます。
なお、macの環境で作っていますが、docker volumeを使うのでwindowsでも同じように作れるはずです。
ローカルにDockerの準備をする
Docker for macはインストール済みという前提で進めます。インストールしていない人は先にインストールしてください。インストール後、ローカルの自分の好きなディレクトリで以下コマンドを打ってください。
$ mkdir amznlinux $ mkdir amznlinux/.devcontainer $ touch amznlinux/docker-compose.yml $ touch amznlinux/Dockerfile $ touch amznlinux/.devcontainer/devcontainer.json
こんな感じのツリー構造になっているでしょうか。
├── amznlinux │ ├── .devcontainer │ │ └── devcontainer.json │ ├── Dockerfile │ └── docker-compose.yml
続いて、それぞれのファイルの中を記述していきます。
まずDockerfileにはユーザーを作成し、aws-cli、aws-sam-cliのインストールをしていきます。
また、インストールにあたりlinuxbrewを使っていますので、まずそれをインストールします。
そのあたりの手順は公式に書いてありますので、それをベースに作っています。
FROM amazonlinux:2 RUN yum update -y RUN yum install -y git tree tar sudo bzip2 gcc-c++ make wget e4fsprogs RUN yum clean all # ユーザを作成 RUN useradd awsuser && \ echo "awsuser ALL=(ALL) ALL" >> /etc/sudoers && \ echo "%wheel ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers && \ gpasswd -a awsuser wheel #localeとタイムゾーンの設定 RUN yum reinstall -y glibc-common RUN cp /usr/share/zoneinfo/Japan /etc/localtime RUN echo "export LANG=ja_JP.UTF-8" >> /home/awsuser/.bash_profile #Docker install RUN amazon-linux-extras install docker # Linuxbrewのインストール USER awsuser RUN sh -c "$(curl -fsSL https://raw.githubusercontent.com/Linuxbrew/install/master/install.sh)" RUN eval $(/home/linuxbrew/.linuxbrew/bin/brew shellenv) RUN echo "eval \$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)" >>~/.bash_profile ENV PATH $PATH:/home/linuxbrew/.linuxbrew/bin # awscliとaws-sam-cliのインストール RUN brew install awscli RUN brew tap aws/tap RUN brew install aws-sam-cli USER root
docker-composeファイルは非常にシンプルな構成です。
なお、冒頭でもあったようにdocker volumeを使っていますので、volumesを定義します。
version: '3.7' services: amznlinux: build: . command: /sbin/init privileged: true volumes: - amznlinux:/home volumes: amznlinux: external: true
最後にVSCodeのRemote Containerを使用するための設定ファイルになります。
lambdaの開発にはpythonを使う想定なので、pythonの拡張機能を追加しておくと良いと思います。それ以外はお好みで必要な拡張機能を追加してください。
{ "name": "AmazonLinux", "dockerComposeFile": [ "../docker-compose.yml" ], "service": "amznlinux", "workspaceFolder": "/home", "extensions": [ "ms-python.python" ] }
Dockerの事前設定
ファイルの準備ができたら実際にDockerを構築していきましょう。
まずはdocker pullでイメージを取得します。そして、amznlinuxというdocker volumeを作成し、そこにデータを永続化するようにします。
docker pull amazonlinux:2 docker volume create amznlinux
完了したら、先ほど作成したDockerfileとdocker-composeファイルを使ってdocker-compose buildをします。
docker-composeするときはdocker-compose.yml配下のディレクトリに移動することに注意。
cd amznlinux docker-compose build
5分くらいかかると思います。
Successfully built
と表示されたら完成です。
VSCodeのRemote Container準備
続いてVSCodeを開き、拡張機能で「ms-vscode-remote.remote-containers」と検索してください。
これをインストールします。
インストールが完了したら左下に以下のボタンが表示されていると思います。
緑のところをクリックすると、画面上部に以下のコンソールが出ますので、
「Remote-Conteiners: Open Folder in Conteiner...」をクリックします。
出てきたファインダーで、amznlinuxのディレクトリを選択して、開くをクリック。
すると自動的にリモート接続されます。うまくいけば以下のような画面になるはず!
あとはVSCode上のターミナルで、AWS CLIとAWS SAM CLIがインストールされているか確認してみてください。
su - awsuser aws --version sam --version
以上で開発環境の構築は完了です。あとはsam initなり、git cloneなりして開発を始められると思います。