Skip to main content

AWS SAM

AWS SAMでLambda + API Gateway環境のローカルテスト

AWS SAM 概要

SAM…Serverless Application Modelの略 サーバレスアプリケーション構築用オープンソースフレームワーク リソース定義はYAMLを使用 リファレンス

Lambda関数がlocalでテストできない煩わしさ

作成したLambda関数の動作確認は、実際にデプロイして確認する必要があり、 即時確認できないことに煩わしさを感じていました。 そこで見つけたのが、AWS SAMというフレームワークです。 Lambdaの動作確認をローカルで完結させることができます。 今回は「AWS SAM」のローカルテストを試していきたいと思います。

SAMベースのアプリケーションを構築するには

AWS SAM CLIを使用する。 SAM CLIによりLambdaに似た実行環境が提供され、SAMテンプレートによって、またはAWS Cloud Development Kit (CDK) を通じて定義されたアプリケーションの構築、テスト、デバッグをローカルで実行できます。

AWS SAMの利点

  • 設計したサーバレスアプリケーションをローカルのDockerコンテナー上で動作させ、テストできる。
  • API Gateway等の周辺リソースも同時に構築できる。
  • SAMで構築したリソースをCloudFormationを介してデプロイできる。
  • DynamoDB Local等を併用することで、それらのリソース含めた動作確認ができる。

Serverless FrameworkとSAMを比較してみる

AWSでサーバレスアーキテクチャ構築するときに代表的なフレームワークであるServerless FrameworkとSAMを比較してみたよ 筆者の判定だとServerless Frameworkに軍配かな SAMはプラグインがやや少ないのと癖が強いから今後に期待!

Serverless Frameworkとの違いは色々あるのですが、開発したAPIをローカルで実行する場合の最大の違いは

リクエストをローカルで受け取る Dockerプロセスが立ち上がる Lambdaが実行される という三段階にあると考えています。 とくに2番が曲者で、上記の記事では

DynamoDBをDockerでローカルに構築する DynamoDBが起動するネットワークを作成 Lambda実行のDockerプロセスが機動するネットワークを指定 という流れで、LambdaがDynamoDBにアクセスできるようにしています。

……これ、デバッグが難しいです…… DynamoDBが動いているネットワークが指定されちゃってるので、逆にローカル実行した際にネックになっちゃってるみたいでアクセスが上手くできなかったです。