【问题标题】:AWS SNS publish 404 errorAWS SNS 发布 404 错误
【发布时间】:2017-06-03 15:25:14
【问题描述】:

我有一个 lambda 函数,我试图将消息发布到 SNS 主题:

代码如下:

var params = {
    Message: origmessage,
    Subject: "Retrying posting URL",
    TopicArn: "arn:aws:sns:us-west-2:<acctid>:SampleTopic"
};
sns.publish(params, function(err, data) {
    if (err) {
        console.log("SNS publish error")
        console.log(err, err.stack)
        console.log(data, data)
        console.log("RETRY PARAMS:" + params);
        context.fail(err);
    }
});

SNS 发布错误很神秘,因为我无法找到根本原因。感谢有人可以帮助我展示一种调试方法。

这是错误:

2017-01-19T00:41:13.947Z d440064d-dddf-11e6-abad-8de6d2739d36 {
  [404: null]
  message: null,
  code: 404,
  time: Thu Jan 19 2017 00:41:13 GMT+0000 (UTC),
  requestId: '0ENTKJ09RT82VE0SFEUJKT75NVVV4KQNSO5AEMVJF66Q9ASUAAJG',
  statusCode: 404,
  retryable: false,
  retryDelay: 26.97333029936999
}
'404: null
at Request.extractError (/var/task/node_modules/aws-sdk/lib/protocol/query.js:45:29)
at Request.callListeners (/var/task/node_modules/aws-sdk/lib/sequential_executor.js:105:20)
at Request.emit (/var/task/node_modules/aws-sdk/lib/sequential_executor.js:77:10)
at Request.emit (/var/task/node_modules/aws-sdk/lib/request.js:668:14)
at Request.transition (/var/task/node_modules/aws-sdk/lib/request.js:22:10)
at AcceptorStateMachine.runTo (/var/task/node_modules/aws-sdk/lib/state_machine.js:14:12)
at /var/task/node_modules/aws-sdk/lib/state_machine.js:26:10
at Request.<anonymous> (/var/task/node_modules/aws-sdk/lib/request.js:38:9)
at Request.<anonymous> (/var/task/node_modules/aws-sdk/lib/request.js:670:12)
at Request.callListeners (/var/task/node_modules/aws-sdk/lib/sequential_executor.js:115:18)'

【问题讨论】:

  • 该消息很神秘,但它真正告诉您的是您有一个 404。该主题是否存在..?该函数是否有权向其发布?
  • 是的。主题存在且函数具有发布权限。我有一个类似的功能可以发布。该消息为空,因此不知道该怎么做。

标签: node.js amazon-web-services publish aws-lambda amazon-sns


【解决方案1】:

根据您的 cmets,当您使用 AWS.config.update 时,它会影响所有服务。

通过将 endpoint 参数设置为 dynamodb 端点,您正在为所有服务(包括 SNS)设置该端点。

这是一个有问题的示例,它说要为 dynamodb 指定 endpoint

http://docs.aws.amazon.com/amazondynamodb/latest/gettingstartedguide/GettingStarted.NodeJs.Summary.html

相反,端点应该从AWS.config.update 中取出,并以某种方式在每个服务的构造函数中指定。

【讨论】:

  • 是的。 // AWS 配置 var AWS = require("aws-sdk"); AWS.config.update({ region: "us-west-2", endpoint: "dynamodb.us-west-2.amazonaws.com" }); var docClient = new AWS.DynamoDB.DocumentClient(); var sns = new AWS.SNS({apiVersion: '2010-03-31'});
  • 我想知道它是否与您的endpoint参数有关update。如果您尝试删除它怎么办?
【解决方案2】:

马特 - 就是这样。 Dynamodb 配置是导致此问题的原因。感谢您的所有帮助。 谢谢

【讨论】:

    猜你喜欢
    • 2015-11-16
    • 1970-01-01
    • 2021-10-18
    • 1970-01-01
    • 2018-11-26
    • 2019-01-28
    • 2019-03-19
    • 1970-01-01
    • 2011-05-21
    相关资源
    最近更新 更多