LambdaをWeb API代わりに使おうとしたけど、ローカルの開発環境はどうしようか悩んでいたらちょうどLambdaをローカルで実行できるSAM Localあるよと教えてもらったので試して見ました。
- AWSのLambda同様にDockerで実行されるので、Dockerをインストールする
[Docker Store](https://store.docker.com/editions/community/docker-ce-desktop-mac)
Get Docker
からダウンロードしてインストールする
- SAM Localをインストール
$ npm install -g aws-sam-local
$ sam — version
sam version 0.2.0
- テンプレート作成
$ mkdir sam_local && cd sam_local
$ vim template.yaml
AWSTemplateFormatVersion : '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Resources:
MyLambdaFunction: # 任意の関数名
Type: "AWS::Serverless::Function"
Properties:
Runtime: nodejs6.10
Handler: index.handler # Lambdaファイル名.handler
Events:
GetResource: # 任意のイベント名
Type: Api
Properties:
Path: /
Method: get
- テンプレートのsyntaxチェック
$ sam validate
Valid!
- Lambda関数を作成する
$ vim index.js
'use strict';exports.handler = (event, context, callback) => {
// statusCode, headers, bodyのいずれかを返却する必要がある
callback(null, {
statusCode: 200,
headers: { "x-my-header" : "my header value" },
body: `Hello, ${event.body}!`
});
}
- API Gatewayを実行する
$ sam local start-api
# -p でポートを指定できる
$ sam local start-api -p 8080
- 動作確認
$ curl -H “Accept: application/json” -H “Content-type: application/json” -X GET http://127.0.0.1:8080 -d ‘local lambda’
Hello, local lambda!
ローカル環境で動作確認ができるため開発がかなり楽になりました。チームでの開発でも環境構築がすぐに行えるのでオススメです!ただ、今のところベータ版なの使う際は注意が必要です。
- 参考