gpt4 book ai didi

node.js - AWS Lambda 函数总是返回空值( Node/Javascript)?

转载 作者:搜寻专家 更新时间:2023-10-31 22:30:47 25 4
gpt4 key购买 nike

我有一个简单的 Lambda 函数,它应该获取事件数据并将消息发送到 SNS 主题。

运行时是 Node.js 8.10。

这是我的完整 Lambda 代码:

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

exports.handler = async (event) => {

const sns = new AWS.SNS();

const emailBody =
`
New Message

From: ${event.name}
Contact: ${event.contact}

Message: ${event.message}
`;

const snsMessageParams = {
TopicArn: process.env.snsTopicArn,
Message: emailBody
};

sns.publish(snsMessageParams, (err, data) => {
if(err) {
return err;
} else {
return data;
}
});
};

每次我运行该函数时,我总是得到 null 作为响应。没有返回错误,但我从未在我的电子邮件中收到来自 SNS 的消息,所以这里有问题。我就是想不通是什么。

我能够从 SNS 控制台和本地计算机上的 Node SDK 成功向我的 SNS 主题发布消息。这些工作完美。我已通过直接从我成功的本地代码和 SNS 控制台复制并粘贴它来检查我的 env 变量中的 snsTopicArn 是否正确。

我在我的 Lambda 函数上有一个执行角色,它应该允许我就我账户中的任何主题发布到 SNS。在为 Lambda 配置角色时,我选择了默认的“SNSPublish”选项,只是为了测试所有内容。但作为引用,这里是我的执行角色的政策:

{
"roleName": <MyRoleName>,
"policies": [
{
"document": {
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"sns:Publish"
],
"Resource": "arn:aws:sns:*:*:*"
}
]
}
...
}

这里出了什么问题?非常感谢任何帮助。

最佳答案

好吧,我想通了。

有两个问题。首先是我没有使用 Lambda 为 Node 隐式使用的“回调”参数。第二个是默认情况下该函数是异步的,因此它期待稍后某个地方的“等待”。我决定只删除“async”并让它同步运行,因为它只是一个简单的函数而且根本不需要它。

这是我更新后的工作代码:

const AWS = require("aws-sdk");
const sns = new AWS.SNS();

exports.handler = (event, context, callback) => {

const emailBody =
`
Message

From: ${event.name}
Contact: ${event.contact}

Message: ${event.message}
`;

const snsMessageParams = {
TopicArn: process.env.snsTopicArn,
Message: emailBody
};

sns.publish(snsMessageParams, (err, data) => {
if(err) {
return err;
} else {
callback(null, JSON.stringify(data));
}
});
};

关于node.js - AWS Lambda 函数总是返回空值( Node/Javascript)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51459783/

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