Lambda が作成した Elastic Network Interface をデタッチしたり削除したりできない理由を知りたいです。

所要時間3分
1

AWS Lambda が作成した Elastic Network Interface をデタッチまたは削除しようとすると、エラーが発生します。

簡単な説明

ネットワークインターフェイスは 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 Elastic Network Interface を削除します。必ず、Lambda が Hyperplane Elastic Network Interface を削除した後に、実行ロールを削除してください。

  2. コマンドライン JSON プロセッサ jq をインストールします。

    $ sudo yum install jq -y

    **注:](https://jqlang.github.io/jq/) jq の詳細については、**jq[のウェブサイトを参照してください。

  3. Git がインストールされていることを確認します。

    $ sudo yum install git -y

    Git がインストールされていない場合は、Git のウェブサイトで「はじめに - Git のインストール」を参照してください。

  4. GitHub リポジトリ aws-support-tools をクローンします。

    $ 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 に置き換えます。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 を使用する

次の手順を実行します。

  1. LambdaAmazon MSKAmazon MQAmazon DocumentDB をクエリするアクセス許可のある IAM ロールを使用して AWS CLI を設定します。
    注: Lambda は、イベントソースマッピングに関連付けられている関数の実行ロールにあるアクセス許可を使用して、Hyperplane エラスティックネットワークインターフェイスを削除します。必ず、Lambda が Hyperplane Elastic Network Interface を削除した後に、実行ロールを削除してください。

  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 コンソールの [イベントソースマッピング] ページをチェックすると、次のサービスのイベントソースマッピングを確認できます。

  • Amazon MSK
  • セルフマネージド Apache Kafka
  • Amazon ActiveMQ
  • Amazon RabbitMQ
  • Amazon DocumentDB

次の手順を実行します。

  1. Lambda コンソールを開きます。
  2. ナビゲーションペインで、[イベントソースマッピング] を選択します。
  3. [イベントソースサービス] 列を確認し、"apache kafka"、"docdb"、"msk" または "mq" のイベントソースマッピングを見つけます。
  4. "docdb"、"msk"、 "mq" の場合は、イベントソースリソースにあるクラスター名またはブローカー名を書き留めます。
  5. Amazon MSKAmazon MQAmazon DocumentDB コンソールのいずれかを使用して、クラスター名またはブローカー名を検索します。
  6. クラスター名またはブローカー名を選択すると、その詳細が表示されます。
  7. ネットワーク設定で、クラスターまたはブローカーがネットワークインターフェイスと同じサブネットおよびセキュリティグループ ID を使用するように構成されていることを確認します。
  8. "apache kafka" の場合、イベントソースマッピングの UUID を選択します。
  9. サービスの [イベントソース ARN] を選択すると、イベントソースとサービス設定が表示されます。
  10. [ソースアクセス設定] で、ネットワークインターフェイスのサブネットとセキュリティグループ 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 リージョンの上限に達した場合に、Elastic Network Interface を増やす方法を教えてください。

AWS公式
AWS公式更新しました 6ヶ月前
コメントはありません

関連するコンテンツ