tech.chakapoko.com
Home / Serverless

[AWS][Node.js]ServerlessでDynamoDBを使う

テスト用DynamoDB

テスト用にusersというテーブルを作り、一件データを入れておきます。

dynamo

dynamo

aws-sdkのインストール

DynamoDBにアクセスするのに必要なのでaws-sdkをインストールします。

$ npm install --save aws-sdk

サンプルコード

LambdaからDynamoDBにアクセスするために serverless.yml に iamRoleStatementss の設定が必要になります。

serverless.yml

service: dynamo-test

provider:
  name: aws
  runtime: nodejs10.x
  stage: dev
  region: ap-northeast-1
  iamRoleStatements:
    - Effect: Allow
      Action:
        - dynamodb:Query
        - dynamodb:Scan
        - dynamodb:GetItem
        - dynamodb:PutItem
        - dynamodb:UpdateItem
        - dynamodb:DeleteItem
      Resource:
        Fn::Join:
          - ":"
          - - "arn:aws:dynamodb"
            - Ref: AWS::Region
            - Ref: AWS::AccountId
            - "table/users"

functions:
  hello:
    handler: handler.hello
    events:
      - http: GET /

handler.js

'use strict';

const AWS = require('aws-sdk');

AWS.config.update({
    region: 'ap-northeast-1'
});

const docClient = new AWS.DynamoDB.DocumentClient();

const docClientGet = (params) => {
    return new Promise((resolve, reject) => {
        docClient.get(params, (err, data) => {
            if (err) {
                reject(err);
            } else {
                resolve(data);
            }
        });
    });
}

module.exports.hello = async (event) => {
    const data = await docClientGet({
        TableName: 'users',
        Key: { 'id': 1 }
    });

    const user = data.Item;

    return {
        statusCode: 200,
        body: JSON.stringify({
            id: user.id,
            name: user.name
        })
    };
};

デプロイ

$ serverless deploy

動作確認

エンドポイントにアクセスすると次のようなレスポンスが返ってくるのを確認できます。

{"id":1,"name":"John"}