为什么我无法分离或删除 Lambda 创建的弹性网络接口?
当我尝试分离或删除 AWS Lambda 创建的弹性网络接口时,收到了一条错误消息。
简短描述
您只能通过 Lambda 删除网络接口。如果您删除网络接口代表的资源,则 Lambda 会为您分离并删除相应的网络接口。要删除未使用的网络接口,Lambda 会使用创建了网络接口的函数的执行角色。但是,您无法删除某个函数或函数版本使用的网络接口。
Lambda 在具有相同 Amazon Virtual Private Cloud (Amazon VPC) 配置的多个函数和事件源映射之间共享网络接口。要减少您的 AWS 账户中使用的网络接口数量,您可以共享网络接口。
解决方法
确定使用网络接口的函数和函数版本
注意:
- 如果在运行 AWS 命令行界面(AWS CLI)命令时收到错误,请参阅排查 AWS CLI 错误。此外,请确保您使用的是最新版本的 AWS CLI。
- 以下命令仅适用于 Linux 和 Unix 操作系统。
要确定当前使用网络接口的函数或函数版本,请使用 GitHub 网站上的 Lambda ENI Finder Bash 脚本。有关详细信息,请参阅请求者托管的网络接口。
完成以下步骤:
-
使用有权查询 Lambda 和网络接口的 AWS Identity and Access Management (IAM) 角色配置 AWS CLI。有关详细信息,请参阅授予 Lambda 函数对Amazon VPC 中资源的访问权限。
**注意:**Lambda 使用函数执行角色的权限来删除 Hyperplane 弹性网络接口。请仅在 Lambda 删除 Hyperplane 弹性网络接口之后,再删除执行角色。 -
安装命令行 JSON 处理器 jq:
$ sudo yum install jq -y
**注意:**有关 jq 的详细信息,请参阅 jq 网站。
-
验证是否已安装 Git:
$ sudo yum install git -y
如果未安装 Git,请参阅 Git 网站上的入门- 安装 Git。
-
克隆 aws-support-tools GitHub 存储库:
$ git clone https://github.com/awslabs/aws-support-tools.git
**注意:**有关这些工具的详细信息,请参阅 GitHub 网站上的 aws-support-tools。
-
将目录更改为 Lambda ENI Finder 的位置:
$ cd aws-support-tools $ cd Lambda $ cd FindEniMappings
-
针对要删除的网络接口运行 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
完成以下步骤:
-
使用有权查询 Lambda、Amazon MSK、Amazon MQ 和 Amazon DocumentDB 的 IAM 角色配置 AWS CLI。
**注意:**Lambda 使用与事件源映射相关的函数执行角色中的权限来删除 Hyperplane 弹性网络接口。请仅在 Lambda 删除 Hyperplane 弹性网络接口之后,再删除执行角色。 -
运行 list-event-source-mappings 命令:
aws lambda list-event-source-mappings --query 'EventSourceMappings[?State != Disabled]'
-
检查每个事件源映射的 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
-
在命令的输出结果中,检查集群或代理是否使用与网络接口相同的子网和安全组 ID。
-
如果存在 SelfManagedEventSource 字段,请检查网络接口的子网和安全组 ID 是否列在事件源映射的 SourceAccessConfigurations 下。
使用 Lambda 控制台
您还可以查看 Lambda 控制台上的 Event source mappings(事件源映射)页面,以查找以下服务的事件源映射:
- Amazon MSK
- 自托管式 Apache Kafka
- Amazon ActiveMQ
- Amazon RabbitMQ
- Amazon DocumentDB
完成以下步骤:
- 打开 Lambda 控制台。
- 在导航窗格中,选择 Event source mappings(事件源映射)。
- 查看 Event source service(事件源服务)列,以查找“apache kafka”、“docdb”、“msk”或“mq”的事件源映射。
- 对于“docdb”、“msk”或“mq”,记下 Event source resource(事件源资源)下的集群或代理名称。
- 使用 Amazon MSK、Amazon MQ 或 Amazon DocumentDB 控制台搜索集群或代理名称。
- 选择集群或代理名称以查看其详细信息。
- 在网络设置中,验证集群或代理是否配置为使用与网络接口相同的子网和安全组 ID。
- 对于“apache kafka”,选择事件源映射的 UUID。
- 为您的服务选择 Event Source ARN(事件源 ARN),以查看事件源和服务配置。
- 在 Source access configurations(源访问配置)下,检查是否列出了网络接口的子网和安全组 ID。
删除 Lambda 创建的网络接口
完成以下步骤:
- 运行 Lambda ENI Finder。
- 对于列出的每个未发布的 Lambda 函数版本 ($LATEST),请完成以下步骤之一:
更改 Amazon VPC 配置以使用不同的子网和安全组。
-或-
断开函数与 Amazon VPC 的连接。 - 对于已发布的 Lambda 函数版本,请删除每个版本。
**注意:**因为您无法编辑已发布的函数版本,因此无法更改 Amazon VPC 配置。 - 对于使用网络接口的每个 Lambda 事件源映射,请关闭或删除事件源映射。
- 要验证网络接口是否已不再使用,请再次运行 Lambda ENI Finder。
当满足以下两个条件时,Lambda 会自动删除网络接口:
- 输出结果中未列出其他函数或函数版本。
- 事件源映射当前未使用网络接口。
相关信息
相关内容
- AWS 官方已更新 1 个月前
- AWS 官方已更新 2 年前
- AWS 官方已更新 3 个月前
- AWS 官方已更新 3 个月前