スタック・オーバーフロー Asked by Saya on December 24, 2021
Lambda + DynamoDBでアトミックカウンターのついたPOSTを開発しています。
①sequenceテーブル②licenseテーブルあるのですが、シーケンス発行後に値を②licenseテーブルに入れたいです。
"id": table.id
で定義しているのですが入らないようで。。もしやり方をご存じの方いらっしゃれば教えていただきたいです。
const aws = require('aws-sdk');
aws.config.update({region: 'ap-northeast-1'});
const dynamodb = new aws.DynamoDB.DocumentClient({apiVersion: '2012-08-10'});
const table = 'license';
const sequenceTable = 'sequences';
// Sequence 処理
function sequence(license_id, callback) {
const params = {
TableName: "sequences",
Key: {
name: "license"
},
UpdateExpression: "ADD current_number :val",
ExpressionAttributeValues: {
":val":1
},
ReturnValues: "UPDATED_NEW"
};
dynamodb.update(params, function(err, data) {
let id;
if (err) {
console.error('Unable to update item. Error JSON:', JSON.stringify(err, null, 2));
} else {
console.log('UpdateItem succeeded:', JSON.stringify(data, null, 2));
id = data.Attributes.current_number;
}
callback(id);
});
}
//POST 処理
const params = {
Item: {
"licensekey": "dapfddd4daaaf",
"status": "未登録",
"staff_mail": "[email protected]",
"license_create_date": Date.now(),
"id": table.id
},
ReturnConsumedCapacity: "TOTAL",
TableName: "license"
};
//let responseData = {};
exports.handler = function(event, context, callback) {
dynamodb.put(params, function(err, data) {
console.log("callback response " + JSON.stringify(event['body-json']));
sequence(sequenceTable, function(id) {
console.log("sequence:" + id);
});
callback(null, {"message":"成功"});
if (err) console.log(err, err.stack);
else return data;
});
};
アトミックカウンターの値を取得後にputするデータにidをセットしてputする必要があるので、put後のfunctionでsequenceを呼ぶのでは値は設定されません。
sequence(sequenceTable, function(id){
//ここでidをparamsのItem.idに設定して、putを呼ぶ。
とすれば良いかと思います。
Answered by nazozen on December 24, 2021
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP