AWS SAM Local とは?
AWS Lambda関数をローカルで実行しテストができるツールです。
S3, Kinesis, DynamoDB, Cloudwatch Scheduled Event, Cloudtrail,API Gatewayなどの関数からの呼び出しにも対応しています。
事前準備
Dokcerのインストール
Macの場合こちら:
Install Docker for Mac | Docker Documentation
AWS CLIのインストール
Macの場合こちら:
macOS で AWS Command Line Interface をインストールする - AWS Command Line Interface
SAM Localのインストール
Macの場合こちら:
$ brew install aws-sam-cli
SAM LocalでHello Worldしてデプロイ
用意するもの
実行したいコード
exports.handler = (event, context, callback) => {
callback(null, "Hello " + event.body);
}
AWS SAM テンプレートファイル
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: AWS Lambda sample.
Resources:
HelloWorld:
Type: AWS::Serverless::Function
Properties:
Handler: index.handler
Runtime: nodejs8.10
sam local実行時に入力するイベントファイル
{"body": "World"}
構文チェック
$ sam validate
で行える。
/Users/hoge/sam-local-test/template.yaml is a valid SAM Template
など、~ is a valid SAM Template
が出ればOK.
実行
$ sam local invoke HelloWorld -e event.json
2019-01-04 13:09:41 Invoking index.handler (nodejs8.10)
Fetching lambci/lambda:nodejs8.10 Docker container image......
2019-01-04 13:09:45 Mounting /Users/hoge/sam-local-test as /var/task:ro inside runtime container
START RequestId: d020b83c-acb1-163c-ecdf-f1f05b72f463 Version: $LATEST
2019-01-04T04:09:46.490Z d020b83c-acb1-163c-ecdf-f1f05b72f463 Loading function
END RequestId: d020b83c-acb1-163c-ecdf-f1f05b72f463
REPORT RequestId: d020b83c-acb1-163c-ecdf-f1f05b72f463 Duration: 8.69 ms Billed Duration: 100 ms Memory Size: 128 MB Max Memory Used: 30 MB
"Hello World"
実際にHello Worldが出力されました。
デプロイ
templateを置くs3のバケットを作成する。
注意: この際デプロイするLambdaと同一リージョンにs3のバケットを置くこと。また、s3のバケットは一意でなければならない。
$ aws s3 mb s3://[バケット名] --region [リージョン] --profile [プロファイル]
パッケージングする。
$ sam package --template-file template.yaml --s3-bucket [上で作ったバケット名] --output-template-file package.yaml --profile [プロファイル]
$ sam deploy --template-file package.yaml --stack-name sam-test-helloworld --capabilities CAPABILITY_IAM --profile personal --region [リージョン]
Waiting for changeset to be created..
Waiting for stack create/update to complete
Successfully created/updated stack - sam-test-helloworld
デプロイ成功。
確認
右上の[テスト]からテストイベントを設定します。

上のように設定して[保存]し、テストを実行します。

上記のように"Hello world"が出力されていれば成功です。