【发布时间】:2018-06-25 11:15:39
【问题描述】:
我的 AWS Lambda 函数存在问题,该函数依赖 DynamoDB 和 SQS 才能正常运行。当我尝试运行 lambda 堆栈时,它们在尝试连接到 SQS 服务时超时。 AWS Lambda 函数位于具有以下设置的 VPC 内:
- 具有四个子网的 VPC
- 两个子集是公共的,将它们的 0.0.0.0/16 流量路由到互联网网关
- MySQL 服务器位于公共子网中
- 另外两个包含 lambda,并将其 0.0.0.0/16 流量路由到位于其中一个公共子网中的 NAT。
- 所有路由表都有一个 10.0.0.0/16 到本地规则(这是因为 Lambda 在 VPC 中使用私有 IP 造成的问题吗?)
- 主路由表是带有 NAT 的路由表,但我明确将公共网络与 Internet 网关路由表相关联
- lambdas 和 mysql 服务器共享一个安全组,允许入站内部访问 (10.x/16) 以及不受限制的出站流量 (0.0.0.0/16)。
lambdas和mysql实例之间的流量没有问题(除非我把lambdas放在VPC之外,那么即使我打开所有端口,它们也无法访问服务器)。假设 lambdas 的代码也是正确的,因为它在我试图在私人网络中屏蔽它之前就已经工作了。 lambda 执行角色也已相应设置(或者在将它们移动到私有网络后是否需要调整?)。
添加 dynamodb 端点解决了数据库的问题,但没有可用于某些其他服务的 VPC 端点。在我找到了here、here、here 和公告/教程here 和here 的一些答案之后,我很确定我遵循了所有推荐的步骤。
我将非常感谢和高兴任何提示下一步检查,因为我目前不知道这里可能是什么问题。
编辑:该功能似乎根本无法访问互联网,因为我检查的一个玩具示例也超时了:
import urllib.request
def lambda_handler(event, context):
test = urllib.request.urlopen(url="http://www.google.de")
return test.status
【问题讨论】:
-
这只是为了向读者指出your answer,它强调将不同地方的不正确
0.0.0.0/16更改为0.0.0.0/0是解决方案。
标签: python amazon-web-services lambda nat amazon-vpc