1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Windows 上で AWS をローカル開発できる環境を構築する(2)

1
Posted at

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、パラメータストアを使ってみます。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?