AWS自習 7日目「Lambdaチュートリアル DynamoDB.DocumentClient put」

AWS SDK for JavaScriptの AWS.DynamoDB.DocumentClient を使って、DynamoDBに書き込みします。

DocumentClient put

AWS SDK のDocumentClientを使うと、putitemより簡単なパラメーター指定で利用できるので、今回のようなkintoneのJSONをそのまま登録するには適していると思います。

putリクエストのコードです。

const AWS = require('aws-sdk');
const VERSION = '2012-08-10';
const REGION = 'ap-northeast-1';
const ddbDocClient = new AWS.DynamoDB.DocumentClient({
  apiVersion: VERSION,
  region: REGION 
});
・・・・
const ddbDocput = async (params) => {
  try {
    const results = await ddbDocClient.put(params).promise();
    return results;
  } catch (error) {
    console.log("Error", error);
    return error;
  }
};

app.js

下記のように変更します。

const { fetchRecords } = require('./restapi');
const { ddbDocput, generatePutRequestParam } = require('./ddbDoc');

exports.handler = async (event) => {
  try {
    const {records, totalCount} = await fetchRecords();
    console.log(`result totalCount: ${JSON.stringify(totalCount)}`);
    const ddbReturnParam = {
      ReturnValues: "ALL_OLD",
      ReturnItemCollectionMetrics: "SIZE"
    };
    const results = await Promise.all(
      records.map(async record => {
        const putParam = await generatePutRequestParam(record);
        const putParamSpread = await {TableName: 'samSimpleTable', ...putParam, ...ddbReturnParam};
        const result = await ddbDocput(putParamSpread);
        console.log(`DynamoDB put result: ${JSON.stringify(result)}`);
      })
    );
    console.log(`Promise.all results: ${JSON.stringify(results)}`);
  } catch(error) {
    console.log(error);
  }
};

ReturnValues等の解説は、下記のputItemを参照。
https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB.html#putItem-property

template.yaml 変更

Lambdaが標準の3秒ではタイムアウトしたので、タイムアウトを10秒に設定します。

Resources:
  SamSampleFunction:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: sam-sample/
      Handler: app.handler
      Runtime: nodejs14.x
      Policies: AmazonDynamoDBFullAccess
      Timeout: 10
      Events:
・・・

テスト

ビルド、デプロイし、Lambdaコンソールからテスト実行します。

参考:


いいなと思ったら応援しよう!