

Lambda + DynamoDBでアトミックカウンターのついたPOSTを開発しています。  
①sequenceテーブル②licenseテーブルあるのですが、シーケンス発行後に値を②licenseテーブルに入れたいです。  
`"id": table.id`で定義しているのですが入らないようで。。もしやり方をご存じの方いらっしゃれば教えていただきたいです。

[code]

    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": "osaka@school.co.jp",
            "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;
        });
    };
    
[/code]


CC BY-SA 4.0
2019-12-03T08:50:35.473
61059
2020-07-24T05:38:37.357
2020-07-24T05:38:37.357
19110
36901
question
aws amazon-dynamodb
DynamoDBでシーケンス発行後に値を取得したい


アトミックカウンターの値を取得後にputするデータにidをセットしてputする必要があるので、put後のfunctionでsequenceを呼ぶのでは値は設定されません。

[code]

    sequence(sequenceTable, function(id){
      //ここでidをparamsのItem.idに設定して、putを呼ぶ。
    
[/code]

とすれば良いかと思います。


CC BY-SA 4.0
2020-03-20T15:08:31.633
64002
2020-03-21T09:13:23.047
2020-03-21T09:13:23.047
32986
38303
61059
answer