Edited at

AWS SAM CLIで、Lambda関数だけをローカル実行&デプロイするための最小構成

AWSのSAM(AWS Serverless Application Model)のQuick Startって、APIとして稼働させるのが最小構成なんですよね。

つまり、Lambda+API Gatewayがデフォルト。

じゃなくて、Lambda関数だけ、AWS CLIで動かしたかった。


ディレクトリ構成

app/

hello_world/
index.js
package.json
event.json
template.yaml


最小構成テンプレート


template.yaml

AWSTemplateFormatVersion: '2010-09-09'

Transform: 'AWS::Serverless-2016-10-31'
Description: An AWS Serverless Specification template describing your function.
Resources:
FUNCTION_NAME:
Type: 'AWS::Serverless::Function'
Properties:
Handler: index.handler # <- Lambda関数の[exports.handler]に合わせます。index.jsの、handlerってこと
Runtime: nodejs10.x
CodeUri: hello_world/ # Lambda関数のエクスポートからだと . となってるので注意
Description: ''
MemorySize: 128
Timeout: 3


Lambda関数

exports.handler = async (event) => {

return 'hoge';
};

何が言いたいかというと、exports.handlerの部分が、AWSマネジメントコンソールからLambda関数作ったとき、AWS SAM CLIでLambda関数が作成されたとき、handlerの名前が微妙に異なってることに気付くのが少し遅れた。

更に、package.json内のmainが、sam initでアプリを生成してた場合はapp.jsになってるので注意。


テストイベント


event.json

{}


これがないと実行できない。Lambda関数実行時と同じ。


実行、パッケージング、デプロイ


  • ローカルで実行


    • sam local invoke FUNCTION_NAME --event event.json



  • パッケージング


    • sam package --template-file template.yaml --output-template-file packaged.yaml --s3-bucket [バケット名]



  • デプロイ


    • sam deploy --template-file packaged.yaml --stack-name [Lambdaアプリケーション名] --capabilities CAPABILITY_IAM

    • Lambdaアプリケーションとしてデプロイされる



なにもかも慣れてる人にはどうってことない記事です。