プログラマーのメモ書き

伊勢在住のプログラマーが気になることを気ままにメモったブログです

WSL 上に Lambda のローカル実行環境を作る:実行環境を作る (1/3)

久しぶりに Lambda を触ることになりました。

以前に Lambda を触っていた時とは違っていろいろと変わっているようです。今どき Lambda のエミュレーション環境をローカルに作れるっぽいので、まずはそれを作ってみます。最終的には、 aws 上にデプロイまでしてみようと思います。

基本は下記の公式の記事を参考にして、

サーバーレスのローカル開発環境を整備する ~前編 - 変化を求めるデベロッパーを応援するウェブマガジン | AWS

進めながら、その他の記事も参考にして行いました。

環境は以下の通りです。

  • Windows 11 Pro, 23H2
  • WSL2, Ubuntu 24.04
  • AWS CLI 2.2.42

準備

OS は WIndows 11 なんですが、実行環境は WSL 上に作ります。まずは、SAM (Serverless Application Model) CLI インストールに必要なものをインストールします。

  • docker

参照した記事には Homebrew もインストールするようなことが書いてありますが、

AWS SAM CLI のインストール - AWS Serverless Application Model

こちらの AWS SAM CLI のドキュメントによると、もう現在は Homebrew のインストーラはメンテナンスされていないようです。なので、こちらはインストールしません。

docker のインストール

こちらの記事に WSL2 での docker のインストール方法について触れていたので、リンク先のドキュメント

Ubuntu | Docker Docs

に従ってインストールします。なお、こちらなども参考にしました。

Windows11 WSL2でDockerの環境を構築する

ざっと読むと、 docker の公式パッケージは、ディストリビューションの標準のリポジトリから apt でインストールするんじゃなくて、 docker のリポジトリを設定して、そちらから apt でインストールするんですね。早速やってみます。

mor@DESKTOP-DE7IL4F:~$ sudo apt update
mor@DESKTOP-DE7IL4F:~$ ls -laF /etc/apt/keyrings/
合計 8
drwxr-xr-x 2 root root 4096  929  2022 ./
drwxr-xr-x 8 root root 4096 1211 13:09 ../
mor@DESKTOP-DE7IL4F:~$
mor@DESKTOP-DE7IL4F:~$ sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
mor@DESKTOP-DE7IL4F:~$ ls -laF /etc/apt/keyrings/
合計 12
drwxr-xr-x 2 root root 4096 1211 15:16 ./
drwxr-xr-x 8 root root 4096 1211 13:09 ../
-rw-r--r-- 1 root root 3817 1211 15:16 docker.asc
mor@DESKTOP-DE7IL4F:~$ sudo chmod a+r /etc/apt/keyrings/docker.asc

パッケージ ca-certificates と curl はインストール済みでした。あと、 /etc/apt/keyrings も既にあったので作ってません。

リポジトリを apt の取得元に追加します。

mor@DESKTOP-DE7IL4F:~$ echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

追加した結果

mor@DESKTOP-DE7IL4F:~$ cat /etc/apt/sources.list.d/docker.list
deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu noble stable
mor@DESKTOP-DE7IL4F:~$

ここまで準備ができたら、もう一度 apt update してから、 docker のパッケージをインストールします。

mor@DESKTOP-DE7IL4F:~$ sudo apt update
取得:1 https://download.docker.com/linux/ubuntu noble InRelease [48.8 kB]
取得:2 https://download.docker.com/linux/ubuntu noble/stable amd64 Packages [16.6 kB]
ヒット:3 http://security.ubuntu.com/ubuntu noble-security InRelease
(略)
65.4 kB を 2秒 で取得しました (39.7 kB/s)
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了
状態情報を読み取っています... 完了
パッケージはすべて最新です。
mor@DESKTOP-DE7IL4F:~$ sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了
状態情報を読み取っています... 完了
(略)
mor@DESKTOP-DE7IL4F:~$

docker の設定

公式ドキュメントのここに従って、インストール後の設定をしておきます。

Post-installation steps | Docker Docs

まずは、一般ユーザーが docker を起動できるようにします。

mor@DESKTOP-DE7IL4F:/etc$ sudo usermod -aG docker $USER

dockerインストール時点で、 docker グループが作られていたので、ユーザーをそれに追加するだけで OK です。

ということで、試してみます。

mor@DESKTOP-DE7IL4F:~$ docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
c1ec31eb5944: Pull complete
Digest: sha256:305243c734571da2d100c8c8b3c3167a098cab6049c9a5b066b6021a60fcb966
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.
(略)

問題ないですね。

AWS SAM CLI のインストール

準備ができたので、 SAM CLI のインストールに進みます。ただ、 Homebrew がないので、最初の記事の手順ではなく、下記の SAM CLI の公式の説明に従ってインストールします。

AWS SAM CLI のインストール - AWS Serverless Application Model

mor@DESKTOP-DE7IL4F:~/tmp$ wget https://github.com/aws/aws-sam-cli/releases/latest/download/aws-sam-cli-linux-x86_64.zip
mor@DESKTOP-DE7IL4F:~/tmp$ unzip aws-sam-cli-linux-x86_64.zip -d aws_sam
mor@DESKTOP-DE7IL4F:~/tmp$ sudo ./aws_sam/install
[sudo] mor のパスワード:
You can now run: /usr/local/bin/sam --version
mor@DESKTOP-DE7IL4F:~/tmp$

確認してみます。

mor@DESKTOP-DE7IL4F:~/tmp$ sam --version
SAM CLI, version 1.131.0
mor@DESKTOP-DE7IL4F:~/tmp$

問題なさそうですね。

VSCode 用の AWS Toolkit のインストール

次は、開発環境用の AWS Toolkit をインストールします。

WSL へのリモート接続を切った状態で VSCode を開いて、『拡張機能』タブで、『aws』と検索すると、

のように表示されるので、『インストール』をクリックしてしばらく待てばインストール完了です。

次に、一度 VSCode を終了して、再度 VSCode を立ち上げて、 WSL に接続します。先ほどと同様に、『拡張機能』を開くと、

のように、『AWS Toolkit』のところに、『WSL: Ubuntu にインストールする』というボタンが表示されるので、これをクリックして、インストールしておきます。

これで、インストールは完了ですね。

認証情報の準備と AWS Toolkit での設定

VSCode に AWS Toolkit をインストールすると、左のタブに『aws』のロゴのボタンが表示されます。

ここをクリックすると、認証情報の設定画面になります。『IAM Credentials』を選択すると、 WSL に設定済みのプロファイルの選択肢が表示されるので、そこから利用するものを選びます(この時プロファイルには以前 AWS CLI を使って作成したものが表示されていました)。

もしくは、『aws』のロゴをクリックした際に、

のように、複数のペインが表示される場合は、『Explorer』の『Select a connection...』をクリックすると、上記と同様にプロファイル選択ができるようになります。

既存のプロファイルを使うのであれば、このリストから選択すればOKです。今回は新規にユーザーを作成して追加することにします。

IAM ユーザーの新規作成

aws のコンソールにログインし、 IAM を開いて新規のユーザーを作成します。今回の場合、

  • コンソールログインは行わない
  • 権限は、 PowerUserAccess とする

として作成しましたが、このあたりは適切なものを設定するようにしてください(今回はサンプルなので結構大きい権限にしています)。ユーザー作成後、アクセスキーを作成しておきます。

IAM ユーザーを作成したら、 VSCode 側に戻って、『Add New Connection』を選択します。

上記のような画面が表示されるので、プロファイル名、アクセスキー、シークレットアクセスキーを入力します。問題が無ければ、これで設定完了です。

なお、この時 VSCode を使わなくても、 aws configure コマンドで設定することも、直接 ~/.aws/credentials ファイルを編集することでも設定できます。

設定したら、『Select a connection』を選ぶとプロファイル一覧が出てくるので、作成したものを選択します。

まとめ

これで必要なツールはインストールできました。次は実際に試してみようと思います。