AWS SNS创建超时

时间:2017-03-30 15:13:51

标签: amazon-web-services aws-lambda amazon-sns

我在调用Lambda函数时会创建SNS主题,向其添加订阅者,然后向其发布消息。发布消息后,它会删除主题。要创建的主题的名称和订阅者作为有效负载提供给lambda函数。

有时候它会起作用,有时会失败Task timed out after x seconds我增加了lambda超时并且仍然存在同样的问题。

我挖了一点然后发现了

sns.createTopic(params, function(err, data) {
    if(err) {
        console.log('Error Creating SNS Topic:',err);
    } else {
        console.log('SNS Topic Created Successfully:',data);
    }
}

永远不会返回,没有错误没有数据,我看不到console.log()

的结果

当它工作时,一切都很好但是当它失败时我看不到找到问题。

编辑:

所以我做了一点挖掘,我减少了SNS主题创建的超时,它默认为5分钟,现在是5秒。当失败发生时,我得到了这个“

{ [TimeoutError: Connection timed out after 5000ms]
message: 'Connection timed out after 5000ms',
code: 'NetworkingError',
time: Thu Mar 30 2017 15:35:20 GMT+0000 (UTC),
region: 'us-east-1',
hostname: 'sns.us-east-1.amazonaws.com',
retryable: true }

2 个答案:

答案 0 :(得分:2)

我想我想出了问题,我的Lambada在VPC中,我在Lambada配置下选择了几个子网。一些选定的子网无法访​​问互联网,我认为这是在这些子网(没有互联网)下创建lambda容器时无法访问SNS和超时的原因。删除违规子网后,它开始工作。从那时起我就一直没有看到这个问题。

答案 1 :(得分:2)

要使lambda函数能够访问互联网(同时还连接到VPC)

  • 为lambda函数仅选择专用子网
  • 安全组可以是默认的。
  • 专用子网应附加到路由表,该路由表到NAT网关(X)的路由为0.0.0.0/0
  • 棘手的部分是NAT网关X应该连接到公共子网(AWS控制台在创建时要求一个子网)
  • 棘手的部分是,我们在第4步中刚刚使用的公共子网应该附加到路由表,该路由表具有到IGW的路由0.0.0.0/0。 (此路由的配置使其成为公共子网)

亚马逊上有一个很棒的视频,对于像我这样对所有AWS术语都了解0的人来说非常有帮助。 https://www.youtube.com/watch?v=JcRKdEP94jM#action=share