Windows 上で AWS をローカル開発できる環境を構築する(2)
この記事では、前回構築した環境を使って LocalStack 上で AWS Lambda を実行する最小サンプル を動かします。
1. 起動設定
ファイルを作成する。
docker-compose.yaml
services:
localstack:
image: localstack/localstack:3.0.2
ports:
- "4566:4566"
environment:
- SERVICES=lambda
- DEBUG=1
volumes:
- "/var/run/docker.sock:/var/run/docker.sock"
起動 (バックエンドで実行)
$ docker compose up -d
起動時のログを見る場合
$ docker compose logs -f
起動しているか確認
localstack/localstack:3.0.2が出力されていれば正常に起動しています。
$ docker ps
停止
$ docker compose down -v
2. Lambda のコードを作成
hello/handler.mjs
export const handler = async () => {
return {
statusCode: 200,
body: JSON.stringify({ message: "Hello Lambda!" })
};
};
3. Vitestのセットアップ
Vitest は ESM(.mjs)に対応しており、Lambda のロジックをローカルでテストできます。
3-1. Nodeのバージョンを Volta で固定
$ npm init -y
$ volta pin node@24
3-2. Vitestをインストール
$ npm install -D vitest
3-3. テストコード作成
hello/test/handler.text.mjs
import { describe, it, expect } from "vitest";
import { handler } from "../handler.mjs";
describe("hello lambda", () => {
it("returns message", async () => {
const result = await handler();
const body = JSON.parse(result.body);
expect(body.message).toBe("Hello Lambda!");
});
});
3-4. テスト実行
ここまでの構成
.
├── hello
│ ├── handler.mjs
│ └── test
│ └── handler.test.mjs
├── package-lock.json
└── package.json
テスト実行
$ npx vitest
補足:
以下のようにテストを指定して実行することもできます。
$ npx vitest ./test/handler.test.mjs
またpackage.jsonを書き換えれば
"scripts": {
"test": "vitest"
}
以下のコマンドで実行できます。
$ npm test
4. LambdaをLocalStackにデプロイ
4-1. Lambda 用コードを ZIP 化する
ファイルを ZIP の直下に置きます。
$ zip -j hello.zip hello/handler.mjs
4-2. Lambda 関数を LocalStack にデプロイする
作成した ZIP を LocalStack に登録します。
$ awslocal lambda create-function \
--function-name hello \
--runtime nodejs20.x \
--handler handler.handler \
--zip-file fileb://hello.zip \
--role arn:aws:iam::000000000000:role/lambda-role
4-3. 状態の確認
$ awslocal lambda get-function --function-name hello
出力を確認し
"State": "Active"
が含まれていれば正常です。
4-4. 実行
$ awslocal lambda invoke --function-name hello out.json
$ cat out.json
出力例
{"statusCode":200,"body":"{\"message\":\"Hello Lambda!\"}"}
補足
Vitest のカバレッジ(coverage)を有効にする
Vitest でコードカバレッジを取得するには、@vitest/coverage-v8 を追加でインストールします。
$ npm install -D @vitest/coverage-v8@latest
カバレッジ付きでテストを実行
$ npx vitest --coverage
レポートはcoverageディレクトリに HTML レポートが生成されます。
次の記事では、LocalStack のS3、SecretManager、パラメータストアを使ってみます。