DynamoDB查询不返回Lambda函数中的任何项

时间:2017-01-11 22:03:47

标签: node.js amazon-dynamodb aws-lambda

基本上,我在Lambda函数中有一个DynamoDB连接。将在下面发布代码。此DynamoDB连接似乎表现正常 - 它能够成功调用listTable和describeTable函数,这意味着它具有正确的配置 - 但查询它不返回任何内容,甚至我知道的查询是正确的,并在Dynamo控制台上进行了测试。

更新:能够在单独的索引上使用字符串成功查询,但仍然无法基于二进制查询...

这是Lambda函数的一部分:

const AWS = require('aws-sdk');

const SNS = new AWS.SNS({ apiVersion: '2010-03-31', region: 'sa-east-1' });
const DDB = new AWS.DynamoDB({ apiVersion: '2012-08-10', region: 'sa-east-1' })
const Lambda = new AWS.Lambda({ apiVersion: '2015-03-31' });

const async = require('async');

const CREATE_NOTIFICATIONS = 'create-notifications'
const QUERY_TOKENS = 'query-tokens'

function getUsers(functionName, message, callback) {
    var msg = JSON.parse(message);
    var users = [];
    console.log(DDB);
    async.forEachOf(msg.targetsb64, function(value, index, cb) {
        console.log("getUsers b64: ", value)
        console.log(typeof(value))
        DDB.describeTable({
            TableName: 'tsGroups'
        }, function(err, data) {
            console.log(err)
            console.log(data.Table.KeySchema)
        })
        DDB.query({
            TableName: 'tsGroups',
            KeyConditionExpression: "identifier = :v_user",
            ExpressionAttributeValues: {
                ":v_user": {"B": value}
            }
        }, function(err, data) {
            if (err) {
                cb(err)
            } else {
                console.log("data: ", data)
                console.log("items: ", data.Items)
                data.Items.forEach(function(item) {
                    users.push.apply(users, item.users.BS)
                })
                cb()
            }
        })
    }, function(err) {
        if (err) {
            callback(err)
        } else {
            console.log("getUsers users: ", users);
            const promises = users.map((user) => invokeQueryTokens(functionName, msg, user));
            Promise.all(promises).then(() => {
                const result = `Users messaged: ${users.length}`;
                console.log(result);
                callback(null, result);
            });
        }
    })
}

我尝试过使用KeyConditions代替KeyConditionExpression,但无济于事。值是指从早期的Lambda函数传递的base64标识符字符串 - 我试过硬编码正确的值,没有帮助。 describeTable函数仅用于详细说明DynamoDB正确连接并且位于正确的区域。

TL; DR:上面代码片段中的data.Items值总是一个空数组,即使在我知道应该返回一些查询时也是如此。我的错误是什么?

谢谢,欢呼!

0 个答案:

没有答案