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コンソールからテスト実行します。