AWS Lambda 与 Elasticache 的连接超时
AWS Lambda connection timeout to Elasticache
我正在尝试让无服务器与 Elasticache 一起工作。我基于 serverless-examples/serverless-infrastructure repo 编写了一个自定义 CloudFormation 文件。我设法将 Elasticache 和 Lambda 放在一个子网中(使用 cli 检查)。我从输出中检索主机和端口,但每当我尝试连接 node-redis 时,连接都会超时。以下是相关部分:
正如 Tolbahady 指出的那样,唯一的解决方案是在 VPC 内创建 NAT。
我也 运行 关注这个问题,但是 Python。对我来说,有几个问题需要解决
- lambda 需要 VPC permissions。
- ElastiCache 安全组需要来自 Lambda 安全组的入站规则,以允许在 Redis 端口上进行通信。我以为他们可以在同一个安全组中。
- 真正的问题是:我打开了加密 in-transit。这意味着我需要通过
redis.RedisClient(... ssl=True)
。 redis-py 页面提到需要将 ssl_cert_reqs
设置为 None
才能与 ElastiCache 一起使用,但在我的案例中似乎并非如此。但是我确实需要通过 ssl=True
.
需要设置 ssl=True
是有道理的,但连接只是超时,所以我四处寻找,试图找出 permissions/VPC/SG 设置的问题所在。
我正在尝试让无服务器与 Elasticache 一起工作。我基于 serverless-examples/serverless-infrastructure repo 编写了一个自定义 CloudFormation 文件。我设法将 Elasticache 和 Lambda 放在一个子网中(使用 cli 检查)。我从输出中检索主机和端口,但每当我尝试连接 node-redis 时,连接都会超时。以下是相关部分:
正如 Tolbahady 指出的那样,唯一的解决方案是在 VPC 内创建 NAT。
我也 运行 关注这个问题,但是 Python。对我来说,有几个问题需要解决
- lambda 需要 VPC permissions。
- ElastiCache 安全组需要来自 Lambda 安全组的入站规则,以允许在 Redis 端口上进行通信。我以为他们可以在同一个安全组中。
- 真正的问题是:我打开了加密 in-transit。这意味着我需要通过
redis.RedisClient(... ssl=True)
。 redis-py 页面提到需要将ssl_cert_reqs
设置为None
才能与 ElastiCache 一起使用,但在我的案例中似乎并非如此。但是我确实需要通过ssl=True
.
需要设置 ssl=True
是有道理的,但连接只是超时,所以我四处寻找,试图找出 permissions/VPC/SG 设置的问题所在。