こんにちは!株式会社Photoruction AIグループでエンジニアをしています酒井です。 Photoruction Advent Calendar 2021の23日目の記事です。
導入
APIGateway, LambdaのサーバレスアーキテクチャでWebAPIを開発する際、APIのレスポンス確認のために都度、クラウド上にデプロイするのは手間がかかります。
そこでServerlessFrameworkというフレームワークとserverless-offlineというプラグインを使用してローカルでレスポンスを確認できる環境を整えました。
ServerlessFrameworkとは
serverless-offlineとは
実施内容
クライアントによる「APIGateway」へのPOSTリクエストをトリガーにして、「Lambda」で定義した関数を実行することを想定しローカルでの開発環境を整える。
手順
1. ServerlessFramework、serverless-offlineのインストール
$ npm install serverless $ npm install --save-dev serverless-offline
2. プロジェクトの作成
sls create -t <テンプレート名> -n <プロジェクト名>
でプロジェクトを作成します
ServerlessFrameworkが提供するテンプレートはこちらを参考にしてください
今回は aws-python3
を使用しました。
任意のディレクトリに移動したあと、以下を実行します。
$ sls create -t aws-python3 -n serverless-sample
すると、ディレクトリ内に handler.py
と serverless.yml
が作成されます
$ ls handler.py serverless.yml
3. handler.py
を編集する
- handler.pyにLambda関数を定義します。
- デフォルトでは以下のようにシンプルな関数 helloが定義されています。
import json def hello(event, context): body = { "message": "Go Serverless v1.0! Your function executed successfully!", "input": event } response = { "statusCode": 200, "body": json.dumps(body) } return response
4. serverless.yml
を編集する
以下の設定を行います。
- functionsのhelloにeventsの追加
- 使用するプラグイン(serverless-offline)の記述
service: serverless-sample # プロジェクト名 frameworkVersion: '2' provider: name: aws runtime: python3.8 lambdaHashingVersion: 20201221 functions: hello: handler: handler.hello # handler.pyの関数helloを実行する # 追加 events: - http: path: /test # <- 任意 method: post # <- POSTリクエストをしたので post を指定 # 追加 plugins: - serverless-offline
5. 起動
以下コマンドでプロジェクトを起動すると、エンドポイントが表示されます。
$ sls offline start ┌─────────────────────────────────────────────────────────────────────────┐ │ │ │ POST | http://localhost:3000/dev/test │ │ POST | http://localhost:3000/2015-03-31/functions/hello/invocations │ │ │ └ ────────────────────────────────────────────────────────────────────────┘
レスポンスを確認する
- エンドポイントに対して
{"name": "yamada"}
というデータとともにPOSTリクエストを送ってみます。 - すると
handler.py
に定義したbodyの内容が正しく表示されます。 - データも正しく送信できていることが分かります。
$ curl -X POST -d '{"name": "sample"}' http://localhost:3000/dev/test {"message": "Go Serverless v1.0! Your ...", "input": {"body": "{name: yamada}", ...}
まとめ
ServerlessFrameworkのserverless-offlineというプラグインを使うことでローカル環境でAPIのレスポンスを確認することができました。
開発していく中で挙動を確認するために都度、クラウド上にデプロイする必要がないので時間短縮につながりました。
株式会社フォトラクションでは一緒に働く仲間を募集しています