为什么我无法分离或删除 Lambda 创建的弹性网络接口?

3 分钟阅读
0

当我尝试分离或删除 AWS Lambda 创建的弹性网络接口时,收到了一条错误消息。

简短描述

您只能通过 Lambda 删除网络接口。如果您删除网络接口代表的资源,则 Lambda 会为您分离并删除相应的网络接口。要删除未使用的网络接口,Lambda 会使用创建了网络接口的函数的执行角色。但是,您无法删除某个函数或函数版本使用的网络接口。

Lambda 在具有相同 Amazon Virtual Private Cloud (Amazon VPC) 配置的多个函数和事件源映射之间共享网络接口。要减少您的 AWS 账户中使用的网络接口数量,您可以共享网络接口。

解决方法

确定使用网络接口的函数和函数版本

注意:

要确定当前使用网络接口的函数或函数版本,请使用 GitHub 网站上的 Lambda ENI Finder Bash 脚本。有关详细信息,请参阅请求者托管的网络接口

完成以下步骤:

  1. 使用有权查询 Lambda 和网络接口的 AWS Identity and Access Management (IAM) 角色配置 AWS CLI。有关详细信息,请参阅授予 Lambda 函数对Amazon VPC 中资源的访问权限
    **注意:**Lambda 使用函数执行角色的权限来删除 Hyperplane 弹性网络接口。请仅在 Lambda 删除 Hyperplane 弹性网络接口之后,再删除执行角色。

  2. 安装命令行 JSON 处理器 jq:

    $ sudo yum install jq -y

    **注意:**有关 jq 的详细信息,请参阅 jq 网站。

  3. 验证是否已安装 Git:

    $ sudo yum install git -y

    如果未安装 Git,请参阅 Git 网站上的入门- 安装 Git

  4. 克隆 aws-support-tools GitHub 存储库:

    $ git clone https://github.com/awslabs/aws-support-tools.git

    **注意:**有关这些工具的详细信息,请参阅 GitHub 网站上的 aws-support-tools

  5. 将目录更改为 Lambda ENI Finder 的位置:

    $ cd aws-support-tools  
    $ cd Lambda  
    $ cd FindEniMappings
  6. 针对要删除的网络接口运行 Lambda ENI Finder:

    ./findEniAssociations --eni eni-0123456789abcef01 --region us-east-1

    **注意:**在前面的命令中,请将 eni-0123456789abcef01 替换为网络接口 ID。您可以在 Amazon Elastic Compute Cloud (Amazon EC2) 控制台Network Interfaces(网络接口)页面上找到该 ID。请将 us-east-1 替换为网络接口所在的 AWS 区域。

输出结果将返回您的账户和区域中使用网络接口的 Lambda 函数和函数版本的列表。如果您需要这些函数或函数版本中的任何一个,请不要删除该网络接口。

如果输出结果中未列出任何函数或函数版本,请检查您账户中的以下服务是否使用网络接口:

  • Amazon Managed Streaming for Apache Kafka (Amazon MSK)
  • 自托管式 Apache Kafka
  • Amazon ActiveMQ
  • Amazon RabbitMQ
  • Amazon DocumentDB

识别使用网络接口的事件源映射

使用 AWS CLI

完成以下步骤:

  1. 使用有权查询 LambdaAmazon MSKAmazon MQAmazon DocumentDB 的 IAM 角色配置 AWS CLI
    **注意:**Lambda 使用与事件源映射相关的函数执行角色中的权限来删除 Hyperplane 弹性网络接口。请仅在 Lambda 删除 Hyperplane 弹性网络接口之后,再删除执行角色。

  2. 运行 list-event-source-mappings 命令:

    aws lambda list-event-source-mappings --query 'EventSourceMappings[?State != Disabled]'
  3. 检查每个事件源映射的 EventSourceArn 字段或 SelfManagedEventSource 字段。
    如果 EventSourceArn 字段包含 Amazon MSK 集群、Amazon MQ 代理或 Amazon DocumentDB 集群的 ARN,请记下该 ARN。
    要查看集群或代理的详细信息,请针对事件源运行以下命令之一:

    aws kafka describe-cluster-v2 --cluster-arn MSK_CLUSTER_ARN
    aws mq describe-broker --broker-id MQ_BROKER_ID
    aws docdb describe-db-clusters --db-cluster-identifier DOCDB_CLUSTER_ID
  4. 在命令的输出结果中,检查集群或代理是否使用与网络接口相同的子网和安全组 ID。

  5. 如果存在 SelfManagedEventSource 字段,请检查网络接口的子网和安全组 ID 是否列在事件源映射的 SourceAccessConfigurations 下。

使用 Lambda 控制台

您还可以查看 Lambda 控制台上的 Event source mappings(事件源映射)页面,以查找以下服务的事件源映射:

  • Amazon MSK
  • 自托管式 Apache Kafka
  • Amazon ActiveMQ
  • Amazon RabbitMQ
  • Amazon DocumentDB

完成以下步骤:

  1. 打开 Lambda 控制台
  2. 在导航窗格中,选择 Event source mappings(事件源映射)。
  3. 查看 Event source service(事件源服务)列,以查找“apache kafka”、“docdb”、“msk”或“mq”的事件源映射。
  4. 对于“docdb”、“msk”或“mq”,记下 Event source resource(事件源资源)下的集群或代理名称。
  5. 使用 Amazon MSKAmazon MQAmazon DocumentDB 控制台搜索集群或代理名称。
  6. 选择集群或代理名称以查看其详细信息。
  7. 在网络设置中,验证集群或代理是否配置为使用与网络接口相同的子网和安全组 ID。
  8. 对于“apache kafka”,选择事件源映射的 UUID
  9. 为您的服务选择 Event Source ARN(事件源 ARN),以查看事件源和服务配置。
  10. Source access configurations(源访问配置)下,检查是否列出了网络接口的子网和安全组 ID。

删除 Lambda 创建的网络接口

完成以下步骤:

  1. 运行 Lambda ENI Finder。
  2. 对于列出的每个未发布的 Lambda 函数版本 ($LATEST),请完成以下步骤之一:
    更改 Amazon VPC 配置以使用不同的子网和安全组。
    -或-
    断开函数与 Amazon VPC 的连接。
  3. 对于已发布的 Lambda 函数版本,请删除每个版本。
    **注意:**因为您无法编辑已发布的函数版本,因此无法更改 Amazon VPC 配置。
  4. 对于使用网络接口的每个 Lambda 事件源映射,请关闭或删除事件源映射。
  5. 要验证网络接口是否已不再使用,请再次运行 Lambda ENI Finder。

当满足以下两个条件时,Lambda 会自动删除网络接口:

  • 输出结果中未列出其他函数或函数版本。
  • 事件源映射当前未使用网络接口。

相关信息

如果我已达到 AWS 区域中的弹性网络接口限制,如何获得更多的弹性网络接口?

AWS 官方
AWS 官方已更新 5 个月前