我试图从 node 调用lambda函数.

var aws = require('aws-sdk');
var lambda = new aws.Lambda({
    accessKeyId: 'id',
    secretAccessKey: 'key',
    region: 'us-west-2'
});

lambda.invoke({
    FunctionName: 'test1',
    Payload: JSON.stringify({
        key1: 'Arjun',
        key2: 'kom',
        key3: 'ath'
    })
}, function(err, data) {
    if (err) console.log(err, err.stack);
    else     console.log(data);
});

这些密钥是针对IAM用户的.用户附带了AWSLambdaExecuteAWSLambdaBasicExecutionRole个策略.

我收到一个权限错误:

我阅读了文档和几个博客,但我无法授权该用户调用lambda函数.如何让这个用户调用lambda?

推荐答案

AWSLambdaExecuteAWSLambdaBasicExecutionRole不提供错误中表示的权限.这两个托管策略都是为连接到Lambda函数本身而设计的,因此使用这些策略是非常必要的.

错误是说运行nodejs程序的用户没有启动Lambda函数的权限.

您需要向IAM用户授予lambda:InvokeFunction权限:

  1. 在IAM管理控制台中找到您的用户并单击它.
  2. 在"权限"选项卡上,展开"内联策略"部分,然后单击"单击此处"链接添加策略.
  3. Select "自定义策略".
  4. 给你的保单起个名字.它可以是任何东西.
  5. 将此策略放入策略文档字段.

示例策略:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Stmt1464440182000",
            "Effect": "Allow",
            "Action": [
                "lambda:InvokeAsync",
                "lambda:InvokeFunction"
            ],
            "Resource": [
                "*"
            ]
        }
    ]
}

在这个策略中,我包含了两种方法来调用lambda方法.

Update:

现在还有一个名为AWSLambdaRole的IAM管理策略,您可以将其分配给IAM用户或IAM角色.这将为您提供所需的权限.

Node.js相关问答推荐

无法在我的 node 项目中转让Google Drive v3 API中的所有权

如何修复PayPal Node.js Webhook中Webhook签名验证失败?''

如何使用NodeJS在mongodb中更新文档

安装样式组件时出现react 错误

如何获取文件的中间值?

我如何在 Raku 的供应中注册不同的事件?

express app.post的多个参数在Node.js中的定义是什么

Next.js 在我的电脑上没有构建错误,但它们在使用 Vercel 部署时发生

为什么 FastAPI 需要 Web 服务器(即 Nginx)而不是 Express API?

在 nodejs 中使用 multer 上传文件返回未定义的 req.file 和空的 req.body

强制 TypeScript 生成带有.js扩展名的导出/导入;运行 node 16?

无法通过谷歌Electron 表格 api( node js)中的服务帐户访问写入

aws cdk 2.0 init 应用程序无法构建更漂亮的问题,这来自 jest-snapshot

如何在 cypress 测试中进行计算

突然 React 无法执行create-react-app命令.为什么会发生这种情况,我该如何解决?

如何使用 superagent/supertest 链接 http 调用?

我可以通过 JNI 从 Node.js 调用 Java 吗?如何?

安装Node.js 安装n 安装Node.js?

在 react-router v4 中使用 React IndexRoute

将 Heroku App 连接到 Atlas MongoDB 云服务