从本地系统而不是S3上运行的node.js应用程序调用AWS Lambda
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从本地系统而不是S3上运行的node.js应用程序调用AWS Lambda相关的知识,希望对你有一定的参考价值。
我想从我的系统上后退的node.js文件中调用AWS Lambda。我关注Invoking a Lambda Function in a Browser Script并为未经身份验证的用户创建了一个Congnito Identity Pool,并将IdentityPoolId嵌入到节点js文件中,如下所示:
let AWS = require('aws-sdk');
AWS.config.region = '<my-region>';
let lambda = new AWS.Lambda();
AWS.config.credentials = new AWS.CognitoIdentityCredentials({
IdentityPoolId: '<my-identity-pool-id>'
});
let params = {
FunctionName: '<my-lambda-function>',
InvocationType: 'RequestResponse',
LogType: 'Tail',
Payload: '{ "name" : "my-name" }'
}
lambda.invoke(params, (err, data) => {
if (err) {
console.log(err);
}
else {
if (data.Payload) {
console.log('my-lambda-function said: ' + data.Payload);
}
}
});
我的Lambda功能:
exports.handler = function(event, context) {
context.succeed('Hello ' + event.name);
};
我创建了一个IAM角色,附带了AWSLambdaExecute,AWSLambdaBasicExecutionRole和AmazonCognitoReadOnly策略,我在创建Lambda时使用了相同的角色,并且我在Cognito中为未授权访问创建的身份池中更新了相同的角色。
当我运行节点app.js时,我得到的是错误:UnrecognizedClientException:请求中包含的安全令牌无效。
有人可以通过在我的本地系统上编写一个简单的NodeJS文件来指向我正确的方向来调用AWS lambda,而无需在S3 Bucket中上传任何html / CSS / JS文件,也不使用AccessKeyID,SecretKeyId,只使用与Lambda相关联的角色。
提前致谢。
有许多方法可以调用Lambda函数。
- AWS服务事件(例如:触发SNS)
- 通过AWS API Gateway创建的API。
- Amazon CloudWatch cron作业
- API调用利用AWS Lambda API。
如果你的目标是使用你的函数作为API,它可以发送和接收请求和响应,你可能应该去API Gateway Integration。
使用API网关非常容易。
- 准备好Lambda功能。
- 设置API的IAM角色和策略以调用Lambda函数
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "lambda:InvokeFunction", "Resource": "*" } ] }
- 为Lambda函数创建API资源 在API网关控制台中,创建API。 从API的根创建/ ResourceName资源。 根据您的要求创建GET或POST方法。 选择AWS Service for Integration类型并选择您在相应区域中创建的Lambda函数。
- 现在,您可以根据您的要求使用正文映射模板自定义集成请求。
- 您可以查看API Gateway Integration with Lambda的详细文档: 在本节中,我们将引导您完成使用AWS Service和Lambda Function集成类型将API与Lambda函数集成的步骤。
- 一旦您的测试调用成功,您就可以使用API_NAME / Dashboard中的API调用URL,其类似于: https:// ### ****。execute-api.us-west-2.amazonaws.com/{APIStageName}/
它可以用作REST端点,可以从本地的Node js函数调用。不要忘记使用API密钥为您的API启用身份验证。
此外,如果您打算在此类环境中使用它,请查看生产清单。
以上是关于从本地系统而不是S3上运行的node.js应用程序调用AWS Lambda的主要内容,如果未能解决你的问题,请参考以下文章
将存储在 S3 存储桶中的文件直接下载到 React 客户端,而不是通过 Node.js 服务器