【问题标题】:AWS Lambda connection timeout to ElasticacheAWS Lambda 与 Elasticache 的连接超时
【发布时间】:2017-05-23 11:47:17
【问题描述】:

我正在尝试使无服务器与 Elasticache 一起工作。我基于 serverless-examples/serverless-infrastructure 存储库编写了一个自定义 CloudFormation 文件。我设法将 Elasticache 和 Lambda 放在一个子网中(使用 cli 检查)。我从输出中检索主机和端口,但是每当我尝试连接 node-redis 时,连接就会超时。以下是相关部分:

【问题讨论】:

  • 在一个子网中不会自动允许连接。你没有提到安全组设置。
  • Redis 的默认入站 tcp 端口是 6379:docs.aws.amazon.com/AmazonElastiCache/latest/UserGuide/…
  • 你的代码除了连接ec还有什么作用?它是否使用 dynamodb、s3 或其他 aws 资源?如果确实如此,那可能就是超时了,因为您没有 NAT

标签: amazon-web-services aws-lambda amazon-elasticache serverless-framework


【解决方案1】:

正如 Tolbahady 指出的那样,唯一的解决方案是在 VPC 内创建一个 NAT。

【讨论】:

  • 你能详细说明一下吗?如果有一个链接会更感激。
  • 您好,很抱歉回复晚了。我不再有 CF 文件,但您必须创建一个 VPC 并将 Elasticache 与 Lambda 一起放在一个子网中进行通信。你还必须有一个网关,除非你要与世界交流。我相信关于 Lambda 和 VPC 的标准教程提供了足够的入门信息。
  • Lambda 连接到 ElasticCache 不需要 NAT 网关,只需要调用 Internet 或 AWS 服务端点(除非您使用 vpc 网关或端点进行所述服务)。
【解决方案2】:

我也遇到了这个问题,但使用的是 Python。对我来说,有一些问题需要解决

  • lambda 需要VPC permissions
  • ElastiCache 安全组需要来自 Lambda 安全组的入站规则,以允许在 Redis 端口上进行通信。我认为他们可能只是在同一个安全组中。
  • 真正的关键:我打开了传输中的加密。这意味着我需要通过redis.RedisClient(... ssl=True)redis-py 页面提到 ssl_cert_reqs 需要设置为 None 才能与 ElastiCache 一起使用,但在我的情况下似乎并非如此。不过我确实需要通过ssl=True

ssl=True 需要设置是有道理的,但连接只是超时,所以我四处寻找权限/VPC/SG 设置的问题。

【讨论】:

  • 我刚刚测试过——Lambda和Redis集群可以在同一个安全组中,你只需要在其入站/出站规则中指定安全组本身即可。
  • 是的,我的回答应该更清楚。我想说的是,我认为所需要的只是让他们在同一个安全组中,而实际上需要做的只是入站规则。无论是通过self reference 还是通过单独的安全组来完成都无关紧要。
猜你喜欢
  • 2020-11-01
  • 2021-07-23
  • 2020-11-14
  • 2022-01-02
  • 2020-10-26
  • 2021-06-12
  • 2021-11-08
  • 2017-07-25
  • 1970-01-01
相关资源
最近更新 更多