🎉
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