AWS SAM Localを使ってローカルでAPI Gateway + Lambdaを試してみた

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!

ローカル環境で動作確認ができるため開発がかなり楽になりました。チームでの開発でも環境構築がすぐに行えるのでオススメです!ただ、今のところベータ版なの使う際は注意が必要です。

  • 参考
Show your support

Clapping shows how much you appreciated ルク’s story.