【问题标题】:DynamoDB ignored in AWS Lambda LocalDynamoDB 在 AWS Lambda Local 中被忽略
【发布时间】:2017-09-04 09:38:45
【问题描述】:

我在本地运行 DynamoDB:

java -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jar -sharedDb

我正在尝试运行lambda-local 示例:

lambda-local -f aws -e event.json

但是,我根本没有从 dynamodb 得到任何输出。 没有错误,看起来对dynamodb.listTables()的调用被跳过/忽略了。怎么了?

我的aws.js如下:

var AWS = require("aws-sdk");

AWS.config.update({
    region: "us-west-2",
    endpoint: "http://localhost:8000",
    accessKeyId: "BLAH",
    secretAccessKey: "BLAH"
});

var dynamodb = new AWS.DynamoDB();

exports.handler = function(event, context) {
    console.log("EVENT: ", event);

    event.int++;

    console.log("LIST TABLES:");
    dynamodb.listTables(function(err, data) {
        if (err) {
            console.log("Error: ", err.code);
        } else {
            console.log("Table names are: ", data.TableNames);
        }
    });


    console.log("---SUCCEED:---");
    context.succeed(event);
};

event.json:

{
    "obj"   : { "a" : "b" },
    "int"   : 1,
    "str"   : "qwerty",
    "arr"   : [ 1, 2, 3, 4 ]
}

输出是:

EVENT:  { obj: { a: 'b' }, int: 1, str: 'qwerty', arr: [ 1, 2, 3, 4 ] }
LIST TABLES:
---SUCCEED:---
OUTPUT
--------------------------------
{
    "obj": {
        "a": "b"
    },
    "int": 2,
    "str": "qwerty",
    "arr": [
        1,
        2,
        3,
        4
    ]
}

我希望至少在 LIST TABLES 和 --SUCCEED 之间看到一些东西:--- 然而没有输出,也没有错误。我还检查了 DynamoDB 日志,那里什么也没有。 event.int++ 行运行良好,我看到所有其他 console.log() 调用。

此外,我从节点运行此代码只是为了证明 DynamoDB 正在工作并且它确实列出了表格:

node ListTables.js

ListTables.js 的内容(与上面的代码基本相同):

var AWS = require("aws-sdk");

AWS.config.update({
  region: "us-west-2",
  endpoint: "http://localhost:8000",
  accessKeyId: "BLAH",
  secretAccessKey: "BLAH"
});

var dynamodb = new AWS.DynamoDB();

dynamodb.listTables(function(err, data) {
  if (err) {
    console.log("Error: ", err.code);
  } else {
    console.log("Table names are: ", data.TableNames);
  }
});

按预期输出: 表名是:['Movies']

我之前创建该表只是为了证明 DynamoDB 确实在运行并接受来自node 的连接。

【问题讨论】:

    标签: node.js amazon-web-services lambda amazon-dynamodb


    【解决方案1】:

    问题和解决方案是DynamoDB函数被异步调用,因此脚本提前完成。

    一旦我将context.succeed(event); 行从末尾移动到dynamodb.listTables(function(err, data) { 内部,那么我的输出就很好了:

    dynamodb.listTables(function(err, data) {
    console.log("INSIDE");
        if (err) {
            console.log("Error: ", err.code);
        } else {
            console.log("Table names are: ", data.TableNames);
        }
        context.succeed(event);
    });
    

    lambda-local -f aws -e event.json

    输出:

    EVENT:  { obj: { a: 'b' }, int: 1, str: 'qwerty', arr: [ 1, 2, 3, 4 ] }
    LIST TABLES:
    ---SUCCEED:---
    INSIDE
    Table names are:  [ 'Image', 'Movies' ]
    OUTPUT
    --------------------------------
    ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多