🐕

Lambda 関数 URL をローカル環境でエミュレートするツールを作った

2024/12/26に公開

Lambda 関数 URL をローカル環境でエミュレートするツールを作りました。
AWS 公式の開発ツールである AWS Lambda Runtime Interface Emulator (RIE) と連携して動作します。

https://github.com/daido1976/aws-lambda-function-url-emulator

主なユースケースとしてコンテナで動かすことを想定しているので、Docker Hub にイメージを公開しています。

https://hub.docker.com/r/daido1976/aws-lambda-function-url-emulator

なぜ作ったか

結論から言うと Lambda 関数 URL + コンテナイメージを利用した Lambda 関数のローカル環境での動作確認を無料で行いたかったからです。

ローカル環境で AWS のサービス群をエミュレートするツールとして LocalStack があり、Lambda 関数 URL もサポートされています。

https://docs.localstack.cloud/user-guide/aws/lambda/#create-a-function-url

ただし、LocalStack では .zip ファイルアーカイブを利用した Lambda 関数 を動かすのは無料版でいけますが、コンテナイメージを利用した Lambda 関数 を動かすには有料版が必要でした。(Lambda 自体は無料だが、コンテナイメージを使うための ECR が有料)

https://docs.localstack.cloud/tutorials/lambda-ecr-container-images/

そのため、Lambda 関数 URL + コンテナイメージを利用した Lambda 関数のローカル環境での動作確認を無料で行うには自前で Lambda 関数 URL のエミュレータを作る必要がありました。

使い方

使い方は GitHub の README をご覧ください。
特に Docker Compose を使って RIE と連携させるのが便利で良いと思います。

Docker Compose を使った例は example ディレクトリ にあります

実装について

Go で書かれており、初期実装はほぼ標準ライブラリだけで 100 行程度のコードです。

https://github.com/daido1976/aws-lambda-function-url-emulator/blob/v1.0.0/main.go

以下の公式ドキュメントの Lambda 関数 URL のリクエスト・レスポンスのペイロード形式や LocalStack の Lambda 関数 URL 部分のコードを参考に実装しました。

https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/urls-invocation.html#urls-payloads

https://github.com/localstack/localstack/blob/v4.0.3/localstack-core/localstack/services/lambda_/urlrouter.py

自分の用途に必要な仕様を実装しただけなので、足りない仕様や不備があれば Issue などで教えていただけると嬉しいです。

まとめ

Lambda 関数 URL をローカル環境で動かしたい時、

  • .zip ファイルアーカイブを利用する場合は無料なので LocalStack を使うと良いでしょう
  • コンテナイメージを利用して、有料でもいい場合は LocalStack を使うと良いでしょう
  • コンテナイメージを利用して、無料にしたい場合は本記事で紹介したツールをお試しください

Discussion