AWS Lambda函数如何抛出SubnetIPAddressLimitReachedException?

Sum*_*ora 2 amazon-web-services aws-lambda

在我的一个项目中,AWS Lambda函数之一(通常每分钟调用一次)在其函数内调用另一个AWS Lambda函数(使用AWSLambdaClient lambdaClient;).有时lambdaClient调用lambda函数(它不常说每小时4到5次)抛出SubnetIPAddressLimitReachedException:

2016-11-24 14 <---------------------> INFO xyzHandler:395 - Lambda无法为Lambda函数设置VPC访问权限,因为一个或更多配置的子网没有可用的IP地址.(服务:AWSLambda;状态代码:502;错误代码:SubnetIPAddressLimitReachedException ;请求ID:XXXX)

在这里这里搜索,但是我没有找到任何关于这个例外的明确解释?

Mat*_*ser 10

将Lambda函数配置为在VPC内执行时,可以指定Lambda函数将在其中执行的一个或多个子网ID.

您指定的子网需要在其中包含足够的可用IP地址,以适应Lambda函数的所有同时执行.

例如,如果您选择一个子网并将其定义为a /24,那么您最多拥有254个IP地址.

如果您的Lambda函数同时被调用300次,那么它们将需要300个单独的IP地址,这是您的子网无法容纳的.在这种情况下,您将收到SubnetIPAddressLimitReachedException错误.

当Lambda函数完成时,它们的资源将被重用.因此,他们将释放使用过的IP地址和/或在后续Lambda执行期间重新使用它们.

目前无法限制Lambda本身内的同时执行次数.我见过人们使用其他服务,比如Kinesis来限制它.

有3种解决途径:

  1. 如果您的Lambda函数不需要在您的VPC中执行,和/或从您的VPC中访问资源,请将其移出VPC.
  2. 使用更多可用IP地址指定更多或不同的子网ID.
  3. 修改Lambda函数以不调用其他Lambda函数.根Lambda函数和随后调用的Lambda函数都需要IP地址.