AWS Cognito调用时Zappa Django Rest框架API超时
我正在使用Zappa将一个AWS Cognito调用时Zappa Django Rest框架API超时,django,aws-lambda,aws-api-gateway,amazon-cognito,zappa,Django,Aws Lambda,Aws Api Gateway,Amazon Cognito,Zappa,我正在使用Zappa将一个Django Rest框架API迁移到lambdas 此API也在弹性Beanstalk应用程序上运行,在那里工作良好。 首先,我在尝试连接数据库时收到错误消息, 然后我设置了lambda VPC和安全组,这个错误似乎消失了,但是,对身份验证端点(使用Cognito)的任何调用都会导致超时 我知道API网关硬编码为29秒后超时,但我认为这个端点不应该花费那么长时间 我启用了X射线,但它没有说太多,只是功能超时了 查看Cloudwatch日志,我可以指出它被卡住的时刻
Django Rest框架
API迁移到lambdas
此API也在弹性Beanstalk应用程序上运行,在那里工作良好。
首先,我在尝试连接数据库时收到错误消息,
然后我设置了lambda VPC和安全组,这个错误似乎消失了,但是,对身份验证端点(使用Cognito)的任何调用都会导致超时
我知道API网关硬编码为29秒后超时,但我认为这个端点不应该花费那么长时间
我启用了X射线,但它没有说太多,只是功能超时了
查看Cloudwatch日志,我可以指出它被卡住的时刻
09:10:09
[DEBUG] 2020-03-04T09:10:09.326Z 2e2ba999-a6bf-42e0-a5f1-6b4c70e72981 Starting new HTTPS connection (1): cognito-idp.us-east-1.amazonaws.com:443
[DEBUG] 2020-03-04T09:10:09.326Z 2e2ba999-a6bf-42e0-a5f1-6b4c70e72981 Starting new HTTPS connection (1): cognito-idp.us-east-1.amazonaws.com:443
09:10:10
09:10:30
END RequestId: 2e2ba999-a6bf-42e0-a5f1-6b4c70e72981
END RequestId: 2e2ba999-a6bf-42e0-a5f1-6b4c70e72981
09:10:30
REPORT RequestId: 2e2ba999-a6bf-42e0-a5f1-6b4c70e72981 Duration: 30030.18 ms Billed Duration: 30000 ms Memory Size: 512 MB Max Memory Used: 141 MB Init Duration: 469.61 ms XRAY TraceId: 1-5e5f7067-d06b5ff2aaa8b9c6218f7444 SegmentId: 6ef0fb0d7de15cfe Sampled: true
REPORT RequestId: 2e2ba999-a6bf-42e0-a5f1-6b4c70e72981 Duration: 30030.18 ms Billed Duration: 30000 ms Memory Size: 512 MB Max Memory Used: 141 MB Init Duration: 469.61 ms
XRAY TraceId: 1-5e5f7067-d06b5ff2aaa8b9c6218f7444 SegmentId: 6ef0fb0d7de15cfe Sampled: true
09:10:30
2020-03-04T09:10:30.369Z 2e2ba999-a6bf-42e0-a5f1-6b4c70e72981 Task timed out after 30.03 seconds
正如你所看到的,这个电话似乎被卡住了
[DEBUG] 2020-03-04T09:10:09.326Z 2e2ba999-a6bf-42e0-a5f1-6b4c70e72981 Starting new HTTPS connection (1): cognito-idp.us-east-1.amazonaws.com:443
我试图找到是否需要在Cognito上设置vpc/安全组,但没有找到任何相关内容。
知道是什么导致了这个问题吗
更新
我已经检查了VPC,并且有一个与之关联的internet网关
0.0.0.0/0 ig-xxxxxxxxx活动编号
这在VPC的路由表中
然后,我创建了一个NAT网关,并用NAT替换了表上的ig
我仍然会犯同样的错误
更新2
有一个与我的子网有显式子网关联的主路由表
然后,有一个NAT网关连接到其中一个子网和VPC,并具有弹性IP
如果我单击我的任何子网并转到“路由表”选项卡,我会看到类似的内容
172.31.0.0/16本地
0.0.0.0/0 nat-xxxxxxx
我转到网络ACL
我看到:
Network ACL:
acl-xxxxx
Inbound rules
Rule # Type Protocol Port Range / ICMP Type Source Allow / Deny
100 ALL Traffic ALL ALL 0.0.0.0/0 ALLOW
* ALL Traffic ALL ALL 0.0.0.0/0 DENY
Outbound rules
Rule # Type Protocol Port Range / ICMP Type Destination Allow / Deny
100 ALL Traffic ALL ALL 0.0.0.0/0 ALLOW
* ALL Traffic ALL ALL 0.0.0.0/0 DENY
我缺少什么?检查您的安全组是否允许通过NAT网关对0.0.0.0进行出站访问。我问这个问题的原因是,如果DB在VPC内部,它应该仍然可以无缝连接,但是Cognito使用一个可以通过Internet访问的HTTPS端点。如果配置的安全组不允许这样的出站连接,您的功能将超时。我已检查过,并且只有一个Internet网关(是否足够?),我尝试将其替换为NAT网关,但在公用子网上使用相同的错误Internet网关以允许入站/出站流量。如果您的Lambda功能位于仅具有专用子网的VPC内,则在公用子网中至少需要一个NAT网关来路由出站流量。请注意,NAT网关需要位于公共子网中。长话短说,它是这样的:Lambda->SG->公共子网中的NAT网关->互联网。如果您想对其进行故障排除,我建议您暂时忽略DB连接,从VPC中删除Lambda并尝试连接到Cognito。如果有效,那么问题肯定出在您的VPC配置上。@ThalesMinussi我已经用我采取的步骤更新了问题,我不明白我遗漏了什么,我有NAT网关,它与我的子网相关联,没关系。我正处在一个懒得去创造答案的日子里。我很高兴它成功了:)