Share Your AWS re:Post Experience - Quick 3 Question Survey
Help us improve AWS re:Post! We're interested in understanding how you use re:Post and its impact on your AWS journey. Please take a moment to complete our brief 3-question survey.
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 bash スクリプトを使用します。詳細については、「リクエスタマネージドネットワークインターフェイス」を参照してください。
次の手順を実行します。
-
Lambda とネットワークインターフェイスをクエリするアクセス許可を持つ AWS Identity and Access Management (IAM) ロールを使用して AWS CLI を設定します。詳細については、「Lambda 関数に Amazon VPC 内のリソースへのアクセスを許可する」を参照してください。
注: Lambda は、関数の実行ロールのアクセス許可を使用して、Hyperplane Elastic Network Interface を削除します。必ず、Lambda が Hyperplane Elastic Network Interface を削除した後に、実行ロールを削除してください。 -
コマンドライン JSON プロセッサ jq をインストールします。
$ sudo yum install jq -y
**注:](https://jqlang.github.io/jq/) jq の詳細については、**jq[のウェブサイトを参照してください。
-
Git がインストールされていることを確認します。
$ sudo yum install git -y
Git がインストールされていない場合は、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 に置き換えます。ID は、Amazon Elastic Compute Cloud (Amazon EC2) コンソールの**[ネットワークインターフェイス]** ページで確認できます。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 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 クラスターの 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 コンソールの [イベントソースマッピング] ページをチェックすると、次のサービスのイベントソースマッピングを確認できます。
- Amazon MSK
- セルフマネージド Apache Kafka
- Amazon ActiveMQ
- Amazon RabbitMQ
- Amazon DocumentDB
次の手順を実行します。
- Lambda コンソールを開きます。
- ナビゲーションペインで、[イベントソースマッピング] を選択します。
- [イベントソースサービス] 列を確認し、"apache kafka"、"docdb"、"msk" または "mq" のイベントソースマッピングを見つけます。
- "docdb"、"msk"、 "mq" の場合は、イベントソースリソースにあるクラスター名またはブローカー名を書き留めます。
- Amazon MSK、Amazon MQ、Amazon DocumentDB コンソールのいずれかを使用して、クラスター名またはブローカー名を検索します。
- クラスター名またはブローカー名を選択すると、その詳細が表示されます。
- ネットワーク設定で、クラスターまたはブローカーがネットワークインターフェイスと同じサブネットおよびセキュリティグループ ID を使用するように構成されていることを確認します。
- "apache kafka" の場合、イベントソースマッピングの UUID を選択します。
- サービスの [イベントソース ARN] を選択すると、イベントソースとサービス設定が表示されます。
- [ソースアクセス設定] で、ネットワークインターフェイスのサブネットとセキュリティグループ ID が含まれているかどうかを確認します。
Lambda が作成したネットワークインターフェイスを削除する
次の手順を実行します。
- Lambda ENI Finder を実行します。
- リストに含まれる未公開の Lambda 関数バージョン ($LATEST) ごとに、次のいずれかの手順を実行します。
別のサブネットとセキュリティグループを使用するように Amazon VPC 設定を変更します。
または、
関数を Amazon VPC から切断します。 - 公開されている Lambda 関数バージョンを、それぞれ削除します。
注: 公開されている関数のバージョンは編集できないため、Amazon VPC の設定は変更できません。 - ネットワークインターフェイスを使用する Lambda イベントソースマッピングごとに、イベントソースマッピングを無効にするか削除します。
- ネットワークインターフェイスが使用中ではなくなったことを確認するために、Lambda ENI Finder を再度実行します。
Lambda は、次の両方に当てはまる場合、ネットワークインターフェイスを自動的に削除します。
- 出力には、他の関数や関数バージョンが含まれていない。
- イベントソースマッピングはネットワークインターフェイスを使用していない。
関連情報
AWS リージョンの上限に達した場合に、Elastic Network Interface を増やす方法を教えてください。
関連するコンテンツ
- 質問済み 1年前lg...
- 質問済み 4ヶ月前lg...
- 質問済み 1年前lg...
- AWS公式更新しました 2年前
- AWS公式更新しました 4ヶ月前