株式会社フォトラクション WEBチーム所属 下川原です! Photoruction Advent Calendar 2021の6日目の記事です。
この記事ではAWS Lambda for Node.jsを効率良く開発するためのTipsを紹介します!
まずはじめに必要なもの
目次
- まずはじめに必要なもの
- 目次
- 初期構築
- ディレクトリ構成
- template.yml ※1
- makefile ※2
- jsonファイル ※3
- src ※4
- samconfig.toml ※5
- ローカル実行!
初期構築
インストールしておくべきもの
https://aws.amazon.com/jp/cli/
https://aws.amazon.com/jp/serverless/sam/
https://github.com/99designs/aws-vault#installing
- makeコマンド(それぞれの環境に合ったインストール)下記はapt例
$ sudo apt install make
$ sudo apt install make-guile
ディレクトリ構成
lambdanodejs
├── Makefile ※2
├── [Readme.md](<http://readme.md/>) お好きにどうぞ
├── debug-env.json ※3
├── events
│ └── request-sample.json ※3
├── libs ※4
│ ├── Makefile
│ └── nodejs
│ ├── package-lock.json
│ └── package.json
├── samconfig.toml ※5
├── src ※4
│ └── lambdanodejsMaster
│ ├── lambdanodejsMaster.js
│ └── package.json
└── template.yml ※1
template.yml ※1
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: AWS Lambda Nodejs
Resources:
lambdanodejsMaster:
Type: AWS::Serverless::Function
Properties:
FunctionName: lambdanodejsMaster
Role: ${lambdaを実行するロールのARN}
Handler: lambdanodejsMaster.lambdanodejsHandler
CodeUri: ./src/lambdanodejsMaster
Runtime: nodejs14.x
Timeout: 300
MemorySize: 128
Layers:
- !Ref LibsLayer
Environment:
Variables:
ENV_SAMPLE: SAMPLEDONE
LibsLayer:
Type: AWS::Serverless::LayerVersion
Metadata:
BuildMethod: makefile
Properties:
LayerName: libs
Description: Libraries
ContentUri: ./libs
CompatibleRuntimes:
- nodejs14.x
RetentionPolicy: Retain
参考
AWS Lambda テンプレート Cloud Formation
LambdaのMemorySizeによってCPUのスペックが決まる話
AWS Lambda のリソースモデルでは、お客様が関数に必要なメモリ量を指定すると、それに比例した CPU パワーとその他のリソースが割り当てられます。メモリサイズが増えると、関数で利用可能な CPU にも同等の増加が発生します。
makefile ※2
.PHONY: build clean test
LAYER_ARTIFACTS_DIR=.aws-sam/build/LibsLayer
LAYER_NODE_MODULES=$(LAYER_ARTIFACTS_DIR)/nodejs/node_modules
.aws-sam/build.toml: template.yml samconfig.toml src/*.js libs/nodejs/package-lock.json
sam build
build: .aws-sam/build.toml
deploy:
make clean
make build
sam deploy
clean:
rm -rf .aws-sam
test:
cd libs &&ARTIFACTS_DIR=../$(LAYER_ARTIFACTS_DIR)make build-LibsLayer-test
cd src &&PATH=../$(LAYER_NODE_MODULES)/.bin:${PATH} NODE_PATH=../$(LAYER_NODE_MODULES)npm test
jsonファイル ※3
debug-env.json
ローカル実行時の環境変数ファイル
デプロイするときは必ずtemplate.yamlに記載する
{
"lambdanodejsMaster": {
"ENV_SAMPLE": "SAMPLEDONE"
}
request-sample.json
lambda関数に渡すリクエスト
nodejs内関数Handlerの第一引数で受け取れる(変数名: event)
{
"key": "sample value"
}
src ※4
nodejs本体のディレクトリ 詳しいことはnodejsを参考に
lambdanodejsMaster.js 最低限必要なもの
exports.lambdanodejsHandler = async (event, context, callback) => {
console.log(event);
callback(null,event);
}
samconfig.toml ※5
例)
version = 1.0
[default]
[default.deploy]
[default.deploy.parameters]
stack_name = "stack"
s3_bucket = "${配置するS3のARN}"
s3_prefix = "${配置するS3のprefix}"
region = "ap-northeast-1"
confirm_changeset = true
capabilities = "CAPABILITY_IAM"
ローカル実行!
# nodejsをビルドする
$ sam build
# ローカル実行
# -n envファイルのパス
# -e 関数へ渡す引数のパス
$ sam local invoke lambdanodejsMaster-n ./debug-env.json -e ./events/request-sample.json
# AWS Lambdaへデプロイをする
$ sam deploy
これで、AWS Lambda関数をローカルで快適にガシガシ開発できます!
よいデベロッパーライフを!
株式会社フォトラクションでは一緒に働く仲間を募集しています