AWS Lambda对外部HTTP请求的间歇连接问题



我目前正在AWS Lambda中构建一个脚本,需要它向外部API发送HTTP Post请求。然而,偶尔脚本失去连接,不能发送请求到任何人(外部网站,其他Lambda函数的url,谷歌等)大约20分钟之前,它可以再次发送请求。它只是到达超时点并重试几次。我还需要访问AWS内部服务,如RDS。

我已经尝试使用AWS系统管理器运行AWSSupport-TroubleshootLambdaInternetAccess自动化,并返回成功。

我已经设置了一个互联网网关和NAT网关以及一个"公共"one_answers"私有"子网。公网子网路由到internet网关,私网子网路由到NAT网关。Lambda连接到这两个子网。

虽然,这个问题为什么在VPC的公共子网内的AWS lambda函数不能连接到互联网?说有2个私有子网,而不是1个私有子网,1个公共子网,但如果我这样做,我就无法访问RDS。

Lambda函数具有以下权限:

  • "ec2: DescribeNetworkInterfaces"
  • "ec2: CreateNetworkInterface",
  • "ec2: DeleteNetworkInterface",
  • "ec2: DescribeInstances",
  • "ec2: AttachNetworkInterface"
  • "日志:CreateLogStream",
  • "日志:PutLogEvents"

与测试连接相关的Python 3.9脚本如下所示,并在本地机器上正常运行。

def ConnectTest():
http = urllib3.PoolManager(timeout=Timeout(connect=1.3,read=1.3));
logger.info("Lodging")
url = "---" # A link to one of my servers that simply responses "Hello" to POST HTTP requests. 
headers = {"Accept": "application/json"}
response = ""
try:
response = http.request('POST',url, headers=headers,timeout=Timeout(connect=1.3,read=1.3))
except Exception as e:
logger.error("Request error | %s", response);
return response.data;

我也试过增加超时时间,但它真的不应该超过几秒钟来发送一个请求。

谢谢你的帮助!

尽管AWS指南声明使用公共和私有子网,但这不起作用,最终成为间歇性连接的原因。

我在3个私人子网上有Lambda函数和RDS数据库,这似乎工作正常,到目前为止我还没有遇到任何问题。

相关内容

  • 没有找到相关文章

最新更新