Lambda が作成した Elastic Network Interface をデタッチしたり削除したりできない原因を教えてください。
AWS Lambda が作成した Elastic Network Interface をデタッチまたは削除しようとすると、エラーメッセージが表示されます。
簡単な説明
ネットワークインターフェイスは Lambda 経由でのみ削除できます。ネットワークインターフェイスが表すリソースを削除すると、Lambda が自動的にそのネットワークインターフェイスをデタッチして削除します。未使用のネットワークインターフェイスを削除する際に、Lambda はそのネットワークインターフェイスを作成した関数の実行ロールを使用します。ただし、関数または関数バージョンが使用するネットワークインターフェイスは削除できません。
Lambda は、同じ Amazon Virtual Private Cloud (Amazon VPC) 設定を持つ複数の関数とイベントソースマッピングにわたり、ネットワークインターフェイスを共有します。ネットワークインターフェイスを共有すると、AWS アカウントで使用するネットワークインターフェイスの数を削減できます。
解決策
注: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、「AWS CLI のエラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。
ネットワークインターフェイスを使用する関数と関数のバージョンを特定する
注: 次のコマンドは、Linux および Unix オペレーティングシステムにのみ適用されます。
ネットワークインターフェイスを使用している関数または関数バージョンを確認するには、GitHub のウェブサイトにある Lambda ENI Finder を使用します。
次の手順を実行します。
-
Lambda とネットワークインターフェイスをクエリするアクセス許可を持つ AWS Identity and Access Management (IAM) ロールを使用して AWS CLI を構成します。
重要: Lambda は、関数の実行ロールに含まれるアクセス許可を使用して、Hyperplane Elastic Network Interface を削除します。Lambda が Hyperplane Elastic Network Interface を削除した後にのみ、実行ロールを削除してください。 -
jq コマンドライン JSON プロセッサをインストールするには、次のコマンドを実行します。
sudo yum install jq -y注: 詳細については、jq のウェブサイトで「jq」を参照してください。
-
Git のインストールには、次のコマンドを実行します。
sudo yum install git -y注: 詳細については、Git のウェブサイトで「Getting started - installing Git」(開始方法 - Git のインストール) を参照してください。
-
GitHub リポジトリ aws-support-tools のクローンを作成するには、次のコマンドを実行します。
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 に、us-east-1 をネットワークインターフェイスが配置された AWS リージョンに置き換えてください。詳細については、「リクエスタマネージド型のネットワークインターフェイス」を参照してください。
出力には、アカウントとリージョン内のネットワークインターフェイスを使用する Lambda 関数および関数バージョンのリストが表示されます。これらの関数または関数バージョンのいずれかが必要な場合は、ネットワークインターフェイスを削除しないでください。
出力に関数も関数バージョンも記載されていない場合は、アカウント内の次のサービスがネットワークインターフェイスを使用しているかどうかを確認してください。
- Amazon Managed Streaming for Apache Kafka (Amazon MSK)
- セルフマネージド Apache Kafka
- Amazon MQ for ActiveMQ
- Amazon MQ for RabbitMQ
- Amazon DocumentDB (MongoDB 互換)
ネットワークインターフェイスを使用しているイベントソースマッピングを特定する
AWS CLI を使用する
次の手順を実行します。
-
Lambda、Amazon MSK、Amazon MQ、Amazon DocumentDB をクエリするアクセス許可のある IAM ロールを使用して AWS CLI を構成します。
注: Lambda は、イベントソースマッピングに関連付けられている関数の実行ロールにあるアクセス許可を使用して、Hyperplane Elastic Network Interface を削除します。Lambda が Hyperplane Elastic Network Interface を削除した後にのみ、実行ロールを削除してください。 -
イベントソースマッピングを一覧表示するには、次の list-event-source-mappings コマンドを実行します。
aws lambda list-event-source-mappings --query 'EventSourceMappings[?State != Disabled]' -
各イベントソースマッピングの EventSourceArn フィールドまたは SelfManagedEventSource フィールドを確認します。
EventSourceArn フィールドに Amazon MSK クラスター、Amazon MQ ブローカー、または Amazon DocumentDB クラスターの Amazon リソースネーム (ARN) が含まれている場合は、その ARN を書き留めておきます。
クラスターまたはブローカーの詳細を確認するには、イベントのソースに応じて次のいずれかのコマンドを実行します。
Amazon MSK では、次の describe-cluster-v2 コマンドを実行します。aws kafka describe-cluster-v2 --cluster-arn MSK_CLUSTER_ARN注: MSK_CLUSTER_ARN を MSK クラスターの ARN に置き換えてください。
Amazon MQ では、次の describe-broker コマンドを実行します。aws mq describe-broker --broker-id MQ_BROKER_ID注: MQ_BROKER_ID を Amazon MQ ブローカー ID に置き換えてください。
Amazon DocumentDB では、次の describe-db-clusters コマンドを実行します。aws docdb describe-db-clusters --db-cluster-identifier DOCDB_CLUSTER_ID注: DOCDB_CLUSTER_ID を Amazon DocumentDB クラスター ID に置き換えてください。
-
コマンドの出力において、クラスターまたはブローカーがネットワークインターフェイスと同じサブネットおよびセキュリティグループ ID を使用しているかどうかを確認します。
-
SelfManagedEventSource フィールドがある場合は、ネットワークインターフェイスのサブネットとセキュリティグループ ID が、イベントソースマッピングの SourceAccessConfigurations に含まれているかどうかを確認します。
Lambda コンソールを使用する
注: セルフマネージド Apache Kafka のイベントソースマッピングを確認するには、Lambda コンソールを使用する必要があります。
次の手順を実行します。
- Lambda コンソールを開きます。
- ナビゲーションペインで [イベントソースマッピング] を選択します。
- [イベントソースサービス] 列を参照し、apache kafka、docdb、msk、mq のイベントソースマッピングを見つけます。
- docdb、msk、mq では、[イベントソースリソース] に表示されるクラスター名またはブローカー名を書き留めます。apache kafka では、イベントソースマッピングの UUID を選択し、ステップ 8 に進みます。
- クラスター名またはブローカー名を Amazon MSK、Amazon MQ、Amazon DocumentDB コンソールのいずれかを使用して検索します。
- クラスター名またはブローカー名を選択すると、詳細が表示されます。
- ネットワーク設定において、クラスターまたはブローカーがネットワークインターフェイスと同じサブネットおよびセキュリティグループ ID を使用するよう構成されていることを確認します。
- サービスの [イベントソース ARN] を選択すると、イベントソースとサービス構成が表示されます。
- [ソースアクセス設定] で、ネットワークインターフェイスのサブネットとセキュリティグループ ID が含まれているかどうかを確認します。
Lambda が作成したネットワークインターフェイスを削除する
次の手順を実行します。
- Lambda ENI Finder を実行します。
- リストに含まれる未公開の Lambda 関数バージョン ($LATEST) ごとに、次のいずれかの手順を実行します。
別のサブネットとセキュリティグループを使用するように Amazon VPC 設定を変更します。
または、
関数を Amazon VPC から切断します。 - 公開されている Lambda 関数バージョンを、それぞれ削除します。
注: 公開されている関数のバージョンは編集できないため、Amazon VPC の設定は変更できません。 - ネットワークインターフェイスを使用する Lambda イベントソースマッピングごとに、イベントソースマッピングを無効にするか削除します。
- ネットワークインターフェイスが使用中ではなくなったことを確認するために、Lambda ENI Finder を再度実行します。
Lambda は、次の両方の設定が満たされた場合、ネットワークインターフェイスを自動的に削除します。
- 出力に、他の関数や関数バージョンが含まれていない。
- イベントソースマッピングがネットワークインターフェイスを使用していない。
スクレイパーを見つけて削除する
Lambda ネットワークインターフェイスを Amazon Managed Service for Prometheus スクレイパーに関連付けている場合は、次の手順を実行します。
-
スクレイパーの設定を特定するには、次の list-rule-groups-namespaces コマンドを実行します。
aws amp list-rule-groups-namespaces -
アカウント内のスクレイパーを一覧表示するには、次の list-scrapers コマンドを実行します。
aws amp list-scrapers --region your-region注: your-region を実際のリージョンに置き換えます。
-
スクレイパーを削除するには、次の delete-scraper コマンドを実行します。
aws amp delete-scraper --scraper-id your-scraperId注: your-scraperId をスクレイパー ID に置き換えます。スクレイパーの削除が完了するまで 5~10 分待ってから、ステップ 4 に進みます。
-
ENI を削除するには、次の delete-network コマンドを実行します。
aws ec2 delete-network --your-network-interface-id注: your-network-interface-id をネットワークインターフェイス ID に置き換えます。
詳細については、「Find and delete scrapers」(スクレイパーを見つけて削除する) を参照してください。
関連情報
AWS リージョンで制限に達した場合、より多くの Elastic Network Interface を利用できるようにするにはどうすればよいですか?
関連するコンテンツ
- 質問済み 2年前
- 質問済み 3年前
- 質問済み 3年前

