从NodeJs 8.10 Lambda函数调用时,AWS DynamoDB deleteTable不起作用

布兰登前进

作为Lambda培训工作的一部分,我试图编写一个简单的应用程序,该应用程序通过API网关触发Lambda函数。然后,该Lambda函数通过AWS开发工具包连接到DynamoDB,并尝试删除现有表。

当我POST对API Gateway端点执行时,会触发Lambda函数我得到的响应为{},这意味着它result从未在初始化值之后重新分配过。据我所知,该deleteTable方法永远不会触发。我从没看到回调主体中存在console.log()console.error()

请在下面找到详细信息:

设定

Lambda函数

  • 语言:Node.Js 8.10
  • 触发器:API网关POST端点
  • 执行角色权利:
    • 基本的微服务模板(注意:我也试图为其提供明确的DynamoDB完全访问权限,甚至是完全管理员权限;这无济于事。

这是代码。我参与了很多工作,但是当我无法执行删除操作时,将其缩减为:

exports.handler = async (event) => {
    var aws = require('aws-sdk');
    var dynamodb = new aws.DynamoDB();
    
    var params = {
        TableName: "StudyGuideSections"
    };
    
    var result = {};
    
    dynamodb.deleteTable(params, function(err, data) {
        console.log('Entering deleteTable callback...');
        
       if (err) {
           console.log(err, err.stack);
       } else {
           console.log(data);
           
           result = data;
       }
    });
    
    return {
        statusCode: 200,
        "headers": {
            "Access-Control-Allow-Origin": "*"
        },
        body: JSON.stringify(result)
    };
};

API网关

  • 授权:无
  • 方法:开机自检

客户端

  • 邮递员(用于测试)
  • 简单的Web应用程序执行 $.post

我查看了CloudWatchX-Ray日志,但从未看到错误,也没有从deleteTable()调用主体内部看到console.log()尝试

我现在几乎要拔头发了,因为它阻碍了我的训练。任何帮助将不胜感激。

编辑:为了进一步说明,我可以将返回值的主体更改为类似于“ Hello World!”的内容。我得到了回应。另外,我可以console.log('Attempting to delete table...")deleteTable通话之前添加权限当我这样做时,我会在CloudWatch中看到它。我只是从未从deleteTable方法内部看到日志

布兰登前进

我终于想通了。因为我使用的是Node.js 8.10,所以我需要使用Promise结构而不是Callback结构。

编辑:

作为卡莱弗提到,事实上,我使用的是async用于处理函数就是需要采用的await.promise(),而不是事实,我是如何使用Node.js 8.10,其仍然支持回调结构。

例如,除了我最初尝试的以外,我还需要做更多这样的事情:

var aws = require('aws-sdk');

exports.handler = async (event) => {
    var ddb = new aws.DynamoDB();

    aws.config.update({
      region: "us-east-1"
    });

    var params = {
        TableName: "StudyGuideSections"
    };

    var result = {}

    try
    {
        result = await ddb.deleteTable(params).promise();
    }
    catch(ex) {
        result = ex;
    }

    return {
        statusCode: 200,
        "headers": {
            "Access-Control-Allow-Origin": "*"
        },
        body: JSON.stringify(result)
    };
};

特别要注意,result = await ddb.deleteTable(params).promise();因为那是我搞砸的部分。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在 Nodejs 中从 Dynamodb Steam 调用 AWS Lambda

通过.NET API调用时DynamoDB UpdateItem不起作用

AWS DynamoDB写入权限不起作用

NPM包`pem`在AWS Lambda NodeJS 10.x中似乎不起作用(导致OpenSSL错误)

DynamoDB 流 + Lambda + NodeJS

函数`this`在nodejs模块中不起作用

循环内的 AWS Lambda nodejs mysql 查询不起作用

Lambda 写入 DynamoDB IAM 角色不起作用

dynamodb putItem回调函数不起作用

在Internet Explorer 10中的Windows 8上,onclick javascript函数在输入标签中插入值的功能不起作用

为什么Dynamodb.put在Lambda函数中不起作用?返回null。如何调试?

带参数和回调的 Nodejs 函数不起作用

NodeJs 推入数组在异步函数中不起作用

lambda 函数中的 AWS NodeJS lambda 调用

您如何对NodeJs Lambda函数进行单元测试,该函数向dynamodb写入/读取并通过AWS API Gateway端点调用?

使用AWS NodeJS Lambda读取AWS dynamoDB中的过滤数据

dynamodb nodejs / lambda date.now ()

CONCAT函数在Postgres 10中不起作用

nodejs:在aws lambda中使用子进程来运行python脚本不起作用

Lambda表达式在Java 8中不起作用?

Lambda函数MySQL结果在NodeJs 8.10上不起作用

semanage命令在AWS的RHEL 8中不起作用

.modal()函数在Angular 8中不起作用

Cache::remember() 函数的 Laravel-8 错误不起作用

如何使用AWS DynamoDB请求单个记录?代码示例不起作用

执行函数调用时,Onclick函数不起作用

NodeJS随机不起作用

Browserify + NodeJS:不起作用

为什么我的图标字体仅在Windows 8上的IE10中不起作用?