gpt4 book ai didi

amazon-web-services - 如何从 aws lambda 调用在 ec2 上运行的 grpc 服务

转载 作者:行者123 更新时间:2023-12-04 13:39:35 24 4
gpt4 key购买 nike

我有一个用 python 编写的 grpc 服务,部署在一个 EC2 实例上。我已经编写了一个 nodejs 应用程序并使用该应用程序,我能够从我的本地机器和另一个 EC2 实例调用 grpc 服务。但是,当我将相同的应用程序部署到 Lambda(使用无服务器部署)时,它无法调用相同的 grpc 服务。
我在 package.json 的脚本部分添加了以下行,以便代码能够正确部署到 lambda。

"postinstall": "npm rebuild grpc --target=12.x --target_arch=x64 --target_platform=linux --target_libc=glibc"

最初 lambda 执行时没有任何错误,只是它没有调用 grpc 服务。
之后,我在 serverless.yml 文件中添加了 VPC 端点配置,它返回内部服务器错误并在 cloudwatch 中记录错误“EACCES:权限被拒绝,打开‘/var/task/handler.js’”。

更新:我更新了 IAM 角色,现在没有错误记录,但 lambda 总是响应“Go Serverless v1.0!您的函数执行成功!”。
我尝试登录到 utterQuery 方法的回调中的所有消息均未记录在 cloudwatch 日志中。

这里可能有什么问题。

这是 serverless.yml 文件:
service: myservice

provider:
name: aws
runtime: nodejs12.x
vpc:
securityGroupIds:
- securityGroupid1
subnetIds:
- subnetId1
stage: dev
region: us-east-1
stackTags:
owner: me

functions:
sendMessage:
handler: handler.sendMessage
events:
- http:
path: sendMessage
method: post

这是 lambda 函数代码:
'use strict';
const AWS = require('aws-sdk');
const grpcClient = require('./grpcClient');

module.exports.sendMessage = async (event, context) => {
const timestamp = new Date().getTime();
console.log(event, timestamp);
console.log(event.body);

const message = event.body;

let reply = 'Go Serverless v1.0! Your function executed successfully!';


grpcClient.utterQuery({
query: message,
user_id: 10101,
session_id: 321
}, (error, riaReply) => {
if (error) {
console.error(error)
} else {
console.log('successfully queried grpc service.')
console.log(riaReply.response)
}
});

return {
statusCode: 200,
body: reply
};
};

最佳答案

由于您正在拨打 return在处理程序的末尾,lambda 调用在 utterQuery() 之前结束。调用有机会完成,调用是回调。

https://docs.aws.amazon.com/lambda/latest/dg/nodejs-prog-model-handler.html建议您返回一个 promise ,并且 node.js lambda 运行时将知道在结束 lambda 之前等待该 promise 得到履行。

关于amazon-web-services - 如何从 aws lambda 调用在 ec2 上运行的 grpc 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59407530/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com