【问题标题】:AWS Lambda calling SNSAWS Lambda 调用 SNS
【发布时间】:2016-02-11 20:35:41
【问题描述】:

我正在使用我的 Amazon Echo 并编写了一个小函数,希望在我女儿回复后给我发短信。代码执行得很好——但 sns.publish 永远不会发生。它静默失败 - 我不能引发错误。我相信我拥有适当的 IAM 权限和主题订阅。有人可以帮忙吗?

function textMom(kindOfDay){
    var message = "Test";
    var sns = new AWS.SNS();
    console.log("textMethod")

    sns.publish({
        TopicArn: "arn:aws:sns:us-east-1:",
        Message: message
    }, function(err, data) {
        if(err) {
            console.log('error publishing to SNS');
            context.fail(err);
        } else {
            console.log('message published to SNS');
            context.done(null, data);
        }
        console.log(data);
    });
}

【问题讨论】:

  • 打印出来的内容是什么?
  • 它会在 CloudWatch 中记录“textMethod”,但之后什么也没有。这就像 sns.publish 函数只是默默地失败了。
  • 它不会打印出message published to SNS?
  • 那么它并没有真正默默地失败。你确定函数调用返回并且它没有抛出异常吗?
  • 我没有看到异常。我正在使用 CloudWatch - 我看到的最后一件事是返回 RequestID。我如何看到异常?

标签: amazon-sns aws-lambda amazon-echo


【解决方案1】:

我也遇到了同样的问题,把发布参数改成下面解决了,

sns.publish(params, context.done);

这有助于我在所有调用完成之前检查我的功能是否完成。试试吧!

【讨论】:

  • 我希望......它不起作用。你真的能够让它工作吗?让 aws lamdba 发布到 sns 主题?
  • 是的,我可以通过 AWS IoT 调用 Lambda,然后通过 Lambda 代码发送 SNS,您是否尝试删除“exports.handler”,只通过“nodejs index.js”运行您的代码?这种方式更容易调试。
  • 我试试看。
  • 好吧,我确实通过 Node 运行它并解决了一些权限问题(因为节点)。我立即收到短信。通过 Lambda 运行相同的代码 - 没有消息。需要明确的是 - 这是一个 Alexa Skill 配置。
  • 引用aws.amazon.com/blogs/compute/container-reuse-in-lambda,Lambda 函数可以通过以下三种方式之一完成:超时、受控终止、默认终止。因此,如果您的回调以正确的方式完成,也许您可​​以尝试增加 lambda 函数的超时时间。 (默认是3s,我设置为30s)
猜你喜欢
  • 2022-01-27
  • 2020-10-24
  • 2016-05-02
  • 2016-12-25
  • 2017-12-01
  • 2015-11-16
  • 2016-05-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多