AWSのLambda(Node.js)でDynamoDBを操作_レコードの取得・挿入・更新・上書き・削除
Scan, Query, PutItem, UpdateItem, DeleteItem
AWSのLambda(Node.js)からDynamoDBのデータを取得したり、削除したり、またDynamoDBにデータを書き込んだりする方法をまとめて記載します。
できるだけコピペすればOKの状態にしてます。
1. 全レコードの取得 ⇒ Scan
Scanは、テーブル内の全てのアイテムにアクセスし全レコードを返します。
var aws = require('aws-sdk');
var dynamo = new aws.DynamoDB();
exports.handler = async (event) => {
let res= await dynamoscan();//データスキャン
return res;
};
function dynamoscan(){
return new Promise((resolve, reject) => {
let params = {
"TableName": "TableName",//テーブル名を指定
"ReturnConsumedCapacity": "NONE"
};
dynamo.scan(params,function(err, data) {
if (err) {
reject(err, err);
} else {
//console.log("data count:",data.Count);
resolve(data.Items);
}
});
});
}
2. 特定のレコードを取得 ⇒ Query
パーティションキー(pk)やソートキー(sk)を使って、条件に合致したレコードを絞り込んで返します。
ここではpkとskの値が分かってる場合の使い方を記載します。
検索方法はいろいろあるので別記事で紹介します。
var aws = require('aws-sdk');
var dynamo = new aws.DynamoDB();
exports.handler = async (event) => {
let prm={
tablename:"tablename",//テーブル名
pk_name:"pk_name",//pkの名称
pk_prm:{S:"pk_prm"},//検索pkの指定
sk_name:"sk_name",//skの名称
sk_prm:{S:"sk_prm"},//検索skの指定
};
let res= await dynamoquery_pksk(prm);
return res;
};
function dynamoquery_pksk(obj){
return new Promise((resolve, reject) => {
let params = {
"TableName": obj.tablename,
"KeyConditionExpression": "#pk_name = :pk_prm and #sk_name = :sk_prm",//検索条件
"ExpressionAttributeNames":{
"#pk_name": obj.pk_name,
"#sk_name": obj.sk_name,
},
"ExpressionAttributeValues": {
":pk_prm": obj.pk_prm,
":sk_prm": obj.sk_prm,
}
};
dynamo.query(params,function(err, data) {
if (err) {
reject(err, err);
} else {
resolve(data.Items);
}
});
});
}
3. レコードの作成・上書き ⇒ PutItem
新しいレコードを作成するか、古いレコードを新しいレコードに上書きします。
新しいレコードと同じ主キーを持つレコードが指定テーブルに既にある場合、新しいレコードは既存のレコードに上書きします。
既存レコードにカラムを追加したい場合はUpdateItemを使います。
var aws = require('aws-sdk');
var dynamo = new aws.DynamoDB();
exports.handler = async (event) => {
let Item_row = {
column1:{S:"column1"},
column2:{S:"column2"},
column3:{S:"column3"}
};
let prm={
"TableName":"tablename",//テーブル名
"Item":Item_row//書き込みアイテム
};
let res= await dynamoPutItem(prm);
return res;
};
function dynamoPutItem(obj){
return new Promise((resolve, reject) => {
let params = obj;
dynamo.putItem(params,function(err, data) {
if (err) {
reject(err, err);
} else {
resolve("updated");
}
});
});
}
4. レコードの作成・更新 ⇒ UpdateItem
既存のレコードがある場合は編集・新しいカラムの追加などが行えます。
既存のレコードがない場合はPutItem同様、新しいレコードを作成します。
var aws = require('aws-sdk');
var dynamo = new aws.DynamoDB();
exports.handler = async (event) => {
let prm = {
TableName: "tablename",
Key: {
pk_name:{S:"pk_prm"},
sk_name:{S:"sk_prm"},
},
UpdateExpression: "set #v1=:v1,#v2=:v2",
ExpressionAttributeNames:{
"#v1":"datetime",//カラム名
"#v2":"value",//カラム名
},
ExpressionAttributeValues: {
":v1": {S:"2021-03-10T10:10:10"},//カラムの値
":v2": {N:"2.34"},//カラムの値
}
};
let res= await dynamo_update(prm);
return res;
};
function dynamo_update(params){
return new Promise((resolve, reject) => {
dynamo.updateItem(params,function(err, data) {
if (err) {
reject(err, err);
} else {
//console.log(data);
resolve("updated");
}
});
});
}
5. レコードの削除 ⇒ DeleteItem
プライマリーキーpk、(ソートキーsk)を指定して、レコードを削除します。
var aws = require('aws-sdk');
var dynamo = new aws.DynamoDB();
exports.handler = async (event) => {
let prm={
TableName:"tablename",
Key:{
pk_name: {S: "pk_prm"},
sk_name: {S: "sk_prm"}
}
};
let res= await dynamoDeleteItem(prm);
return res;
};
function dynamoDeleteItem(params){
return new Promise((resolve, reject) => {
dynamo.deleteItem(params,function(err, data) {
if (err) {
reject(err, err);
} else {
resolve("deleted");
}
});
});
}
ディスカッション
コメント一覧
まだ、コメントがありません