🎉
serverless framework + TypeScript +DynamoDB のローカル環境
参考
Serverless アプリケーションをローカルで開発する - Qiita
手順を整理。DynamoDBも使用。
1. sls create
sls create -t aws-nodejs-typescript -p my-api
2. plugin
npm i -D serverless-offline serverless-dynamodb-local
serverless.ts
に追加
plugins: [
'serverless-webpack',
'serverless-dynamodb-local',
'serverless-offline',
]
3. JDKがなければJDKをインストール
dynamodb-localのためにjavaが必要。
Ubuntuなら以下などでインストール。
sudo apt install openjdk-14-jdk
4. sls dynamodb install
以下を実行してインストール。
.dynamodb以下に実行ファイルがダウンロードされる。
sls dynamodb install
5. dynamodb local用に設定
serverless.ts
に以下設定
custom: {
// ...
dynamodb: {
stages: ['dev'],
start: {
port: 8000,
inMemory: true,
migrate: true,
seed: false,
},
},
},
resources: {
Resources: {
JankensTable: {
Type: 'AWS::DynamoDB::Table',
Properties: {
TableName: 'jankens',
AttributeDefinitions: [
{
AttributeName: 'player',
AttributeType: 'S',
},
{
AttributeName: 'unixtime',
AttributeType: 'N',
},
],
KeySchema: [
{
AttributeName: 'player',
KeyType: 'HASH',
},
{
AttributeName: 'unixtime',
KeyType: 'RANGE',
},
],
ProvisionedThroughput: {
ReadCapacityUnits: 1,
WriteCapacityUnits: 1,
},
},
},
},
},
6. sls dynamodb start
dynamodb localが起動してテーブルが登録される
7. npm i -S aws-sdk
npm i -S aws-sdk
8. LambdaでDynamoDBクライアントの初期化を分岐
上記にあるように process.env.IS_OFFLINE
でserverless-offline環境かどうか分岐ができる。
import { DynamoDB } from 'aws-sdk'
const dynamodb = process.env.IS_OFFLINE
? new DynamoDB({
region: 'localhost',
endpoint: 'http://localhost:8000',
})
: new DynamoDB()
などする。
Discussion