VPC删除中的Lambda需要更多时间

Gow*_*and 15 aws-cloudformation aws-lambda

我使用云形成在VPC中创建了一个lambda的堆栈.当我尝试删除整个堆栈时,需要40-45分钟的时间.

我的Iam角色具有以下权限:

Action:                            
          - ec2:DescribeInstances
          - ec2:CreateNetworkInterface
          - ec2:AttachNetworkInterface
          - ec2:DescribeNetworkInterfaces
          - ec2:DeleteNetworkInterface
          - ec2:DetachNetworkInterface
          - ec2:ModifyNetworkInterfaceAttribute
          - ec2:ResetNetworkInterfaceAttribute
          - autoscaling:CompleteLifecycleAction
          - iam:CreateRole
          - iam:CreatePolicy
          - iam:AttachRolePolicy
          - iam:PassRole
          - lambda:GetFunction
          - lambda:ListFunctions
          - lambda:CreateFunction
          - lambda:DeleteFunction
          - lambda:InvokeFunction
          - lambda:GetFunctionConfiguration
          - lambda:UpdateFunctionConfiguration
          - lambda:UpdateFunctionCode
          - lambda:CreateAlias
          - lambda:UpdateAlias
          - lambda:GetAlias
          - lambda:ListAliases
          - lambda:ListVersionsByFunction
          - logs:FilterLogEvents
          - cloudwatch:GetMetricStatistics
Run Code Online (Sandbox Code Playgroud)

如何改善堆栈的删除时间?

Mic*_*bot 27

在您的VPC中执行Lambda函数时,会创建弹性网络接口(ENI)以便为其提供网络访问.您可以将ENI视为虚拟NIC.它具有MAC地址和至少一个私有IP地址,并且"插入"连接到VPC网络并且在VPC内部具有IP地址的任何资源(EC2实例,RDS实例,ELB,ALB,NLB,EFS,等等.).

虽然它似乎没有明确记录,但Lambda使用的这些接口看起来是1:1映射到容器实例,每个容器实例承载一个或多个容器,具体取决于每个容器的内存分配的大小.Lambda用于配置这些机器的算法没有记录,但是有一个记录的公式用于近似 Lambda将创建的数量:

您可以使用以下公式来近似确定ENI要求.

Projected peak concurrent executions * (Memory in GB / 3GB)

https://docs.aws.amazon.com/lambda/latest/dg/vpc.htm

此公式表明,如果您具有高并发或大内存占用,或者如果这些条件都不为真,则会看到更少的ENI.(3GB边界的原因似乎是基于Lambda似乎使用的最小实例,在后台,这是m3.medium通用EC2实例.您无法在EC2实例中看到这些,并且您不需要支付费用对他们来说.)

在任何情况下,Lambda都不会在函数执行后立即关闭容器或其主机实例,因为它可能需要它们在后续调用中重用,并且因为容器(及其主机实例)不会立即销毁,它们的关联ENI也不会被销毁. .这样做效率低下.无论如何,延迟记录在案:

Lambda函数执行和删除ENI之间存在延迟.

http://docs.aws.amazon.com/lambda/latest/dg/vpc.html

这是有道理的,当我们考虑Lambda基础设施的优先级应该集中在根据需要使资源可用并保持它们可用于快速访问性能的原因 - 因此再次撕下来是服务在后台处理的次要考虑因素.

简而言之,这种延迟是正常的和预期的.

据推测,CloudFormation使用标签来识别这些接口,因为不清楚如何区分它们.

ENI在EC2控制台的左侧导航窗格下可见Network Interfaces,因此您可以自行删除这些并加快过程......但请注意,假设系统允许,此操作需要谨慎进行 -因为如果删除附加到Lambda随后尝试使用的容器实例的ENI,Lambda将不知道该接口丢失,并且该函数将超时或抛出错误,至少在Lambda决定销毁附加的容器实例之前.

  • 手动分离和删除接口是使我的部署继续进行的唯一方法。 (2认同)