AWS SNS创建超时

joh*_*nny 5 amazon-web-services amazon-sns aws-lambda

调用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);
    }
}
Run Code Online (Sandbox Code Playgroud)

永不返回,没有错误,没有数据,我看不到结果 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 }
Run Code Online (Sandbox Code Playgroud)

joh*_*nny 6

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

  • 我们遇到了同样的事情,私有 VPC 子网有一个 NAT 网关可以与公共子网通信,但公共子网没有配置,因此不允许与 Internet 通信。谢谢! (2认同)

Kar*_*mia 6

使 lambda 函数能够访问互联网(同时还附加到 VPC)

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

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