未分類nodejsjavascriptITaws

AWS Lambda DynamoDBでauto incrementを実装する【nodejs】

DynamoDBではauto incrementの利用方法が少し難しいです。 おそらく、ソートキーにauto incrementを設定したいパターンが多いと思います。 方法としては、各テーブルのレコード数を管理するテーブルを作成し、その値を更新、取得し利用する感じです。 まずは、レコード数を管理するシーケンステーブルを作成します。 テーブル名は、「sequence」としておきましょう。 primary key(主キー)は、「name」とします。 このカラムには、どのテーブルを管理するか、テーブル名を入れます。 そのため、型はStringとします。 テーブルが作成できたら、レコードを作成します。 name に管理するテーブル名。 current_numberに0を設定します。 こちらには、各テーブルのレコード数を保存します。 準備はこれで終わりです。 次は、lambdaでの処理を記述していきます。

見本

'use strict';
var aws = require('aws-sdk');
var docClient = new aws.DynamoDB.DocumentClient();

exports.handler = function (event, context) {
    
    var table = 'テーブル名';

    sequence(table, function(id) {
        var item = {
               id:id
        };
        var params = {
            TableName: table,
            Item: item
        };
        docClient.put(params, function (err, data) {
            if (err) {
                console.log(err);
            } else {
                console.log(data);
            }
        });
    });
};
  
function sequence(sequenceName, callback) {
    const params = {
        TableName: "sequence",
        Key: {
            name: sequenceName
        },
        UpdateExpression: "set current_number = current_number + :val",
        ExpressionAttributeValues: {
            ":val":1
        },
        ReturnValues: "UPDATED_NEW"
    };
       
    docClient.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);
    });
}

参考:https://qiita.com/naoki\_koreeda/items/4fa3daa7812410c10cf8 こちらの処理を実行することで、管理される側のテーブルのidが1ずつインクリメントされるようになります。 また管理するテーブルを増やす場合には、seaquenceテーブルに管理するテーブルのレコードを追加します。

なぜauto incrementを実装するのか

これは、人にとって理由は様々かと思いますが、ほとんどはソートキーを利用するためなのだと思います。 DynamoDBでは、データを取得した際に、そのデータの順番は決まっておらず、ランダムで取得されてしまいます。 しかし、ソートキーを設定すれば、勝手にその順番にソートしてくれるため、DBの取り扱いがしやすくなります。

関連書籍