久しぶりに Lambda を触ることになりました。
以前に Lambda を触っていた時とは違っていろいろと変わっているようです。今どき Lambda のエミュレーション環境をローカルに作れるっぽいので、まずはそれを作ってみます。最終的には、 aws 上にデプロイまでしてみようと思います。
- WSL 上に Lambda のローカル実行環境を作る:実行環境を作る (1/3) <- いまここ
- WSL 上に Lambda のローカル実行環境を作る:ローカルでデバッグ (2/3)
- WSL 上に Lambda のローカル実行環境を作る:aws にデプロイ (3/3)
基本は下記の公式の記事を参考にして、
サーバーレスのローカル開発環境を整備する ~前編 - 変化を求めるデベロッパーを応援するウェブマガジン | AWS
進めながら、その他の記事も参考にして行いました。
- AWS SAM を使って、Lambda のローカル実行環境を試してみる #AWS - Qiita
- ローカルでAWS Lambdaの開発環境を構築した話 - ADXC CRM Official Page
環境は以下の通りです。
- 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 のインストール方法について触れていたので、リンク先のドキュメント
に従ってインストールします。なお、こちらなども参考にしました。
ざっと読むと、 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 9月 29 2022 ./ drwxr-xr-x 8 root root 4096 12月 11 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 12月 11 15:16 ./ drwxr-xr-x 8 root root 4096 12月 11 13:09 ../ -rw-r--r-- 1 root root 3817 12月 11 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』を選ぶとプロファイル一覧が出てくるので、作成したものを選択します。
まとめ
これで必要なツールはインストールできました。次は実際に試してみようと思います。