MSK およびセルフマネージド Kafka クラスターからポーリングする Lambda トリガーをトラブルシューティングするにはどうすればよいですか?

所要時間4分
0

私の AWS Lambda 関数は、私の Amazon Managed Streaming for Apache Kafka (Amazon MSK) クラスターまたはセルフマネージド Kafka クラスターのレコードを処理するように設計されています。しかし、Lambda トリガーにはエラーメッセージが表示されています。

簡単な説明

イベントソースマッピング (ESM) は、イベントソースから読み込んで Lambda 関数を呼び出す AWS Lambda リソースです。Lambda 関数を呼び出すには、Lambda-Kafka ESM が次のアクションを実行できる必要があります。

ESM のネットワーク、認証、または承認の設定によってクラスターとの通信が妨げられると、関数を呼び出す前に設定が失敗します。その後、トリガーは根本原因のトラブルシューティングに役立つエラーメッセージを表示します。

解決方法

ESM を理解する

Lambda 関数を Amazon MSK トリガーまたはセルフマネージド Kafka トリガーを使用して設定すると、ESM リソースが自動的に作成されます。ESM は Lambda 関数とは別のもので、Kafka クラスター内のトピックからレコードを継続的にポーリングします。ESM はそれらのレコードをペイロードにバンドルします。その後、Lambda Invoke API を呼び出し、処理のためにペイロードを Lambda 関数に渡します。

重要: Lambda-Kafka ESM は Lambda 関数の VPC ネットワーク設定を継承しません。これは MSK トリガーとセルフマネージド Kafka トリガーの両方に当てはまります。MSK ESM は、ターゲット MSK クラスターで設定されているサブネットとセキュリティグループの設定を使用します。セルフマネージド Kafka トリガーにはデフォルトで WAN アクセスがありますが、同じアカウントと AWS リージョン内の VPC へのネットワークアクセスで設定できます。ネットワーク設定が分離されているため、Lambda 関数は Kafka クラスターへのルートがないネットワーク内でコードを実行できます。

ESM の設定プロセスを理解する

関連付けられている Lambda 関数を ESM が呼び出す前に、ESM は次のステップを自動的に完了します。

1.    ESM は AWS STS API を呼び出して、セキュリティトークンを取得します。

2.    SourceAccessConfiguration にシークレットが含まれている場合は、そのシークレットを AWS Secrets Manager API から取得します。

3.    セルフマネージド Kakfa ESM: Lambda は、クラスターエンドポイントの IP アドレスを、ESM の selfManagedEventSourceEndPoints で設定されているホスト名から解決します。

      MSK ESM: MSK クラスターのサブネットとセキュリティグループの設定を取得します。

4.    セルフマネージド Kakfa ESM: ブローカーのエンドポイントへのネットワーク接続を確立します。

      MSK ESM: MSK クラスターの各サブネットで、MSK クラスターのセキュリティグループを使用してハイパープレーン Elastic Network Interface を作成します。

5.    認証:

  • TLS 認証がアクティブ化されている場合は、ブローカーエンドポイントによって提示される SSL 証明書を確認します。
  • ブローカーにログインします。

6.    承認:

  • トピックがクラスターに存在しているようにしてください。ESM の Topics パラメータで設定されたトピックがクラスターに存在するかどうかをクラスターブローカーに尋ねます。
  • ESM の UUID をコンシューマーグループ ID として使用して、クラスターにコンシューマーグループを作成します。

7.    トピックからのレコードをポーリングする。

8.    レコードを 6 MB 未満のペイロードにバンドルします。これは Lambda 呼び出しペイロードの制限です。

9.    ESM は、レコードのペイロードを使用して、関連付けられている Lambda 関数を呼び出します。これを実行するには、Lambda Invoke API に対する同期的な呼び出しを実行します。

ネットワークセキュリティの問題をトラブルシューティングする

ESM がブローカーのエンドポイントにリクエストを送信しても応答がない場合、ESM はリクエストがタイムアウトしたものとみなします。ブローカーエンドポイントに対するタイムアウトが発生すると、トリガーは次のエラーメッセージを表示します。

「PROBLEM: Connection error.Please check your event source connection configuration.If your event source lives in a VPC, try setting up a new Lambda function or EC2 instance with the same VPC, Subnet, and Security Group settings.Connect the new device to the Kafka cluster and consume messages to ensure that the issue is not related to VPC or Endpoint configuration.If the new device is able to consume messages, please contact Lambda customer support for further investigation.」(問題: 接続エラー。イベントソースの接続設定を確認してください。イベントソースが VPC に存在する場合は、同じ VPC、サブネット、セキュリティグループの設定を使用して、新しい Lambda 関数または EC2 インスタンスの設定を試みてください。新しいデバイスを Kafka クラスターに接続し、メッセージを消費して、問題が VPC またはエンドポイントの設定に関連していないことを確認します。新しいデバイスでメッセージを消費できる場合は、Lambda カスタマーサポートに問い合わせて、さらに詳しく調査してください。)

問題をトラブルシューティングするには、前述のエラーメッセージに記載されているステップに従います。また、次のセクションのネットワーク構成を書き留めて、ESM が適切に設定されていることを確認します。

注: ESM からのリクエストのタイムアウトは、クラスターがリクエストを処理するためのシステムリソースが不足している場合にも発生する可能性があります。または、ESM またはクラスターで間違ったセキュリティ設定が設定されていると、リクエストがタイムアウトすることがあります。このエラーを受け取り、ネットワーク設定に問題がない場合は、クラスターブローカーのアクセスログで追加情報を確認してください。

セルフマネージド Kafka ESM が使用するネットワーク構成

セルフマネージド Kafka ESM のネットワーク構成は、Lambda 関数に似ています。デフォルトでは、ESM は WAN にアクセスできますが、VPC 内でアクセスできるようには設定されていません。Kafka クラスターにアクセスするために、特定のサブネットとセキュリティグループを使用して手動で設定できます。ただし、アクセスできるのは、Lambda 関数を含むアカウントの VPC から到達可能なクラスターのみです。そのため、次の場所にある Kafka クラスター用のセルフマネージド Kafka ESM を作成できます。

  • オンプレミスのデータセンター
  • 別のクラウドプロバイダー
  • 別のアカウントの VPC にある Kafka クラスターの MSK ブローカー

注: 別のアカウントの MSK クラスターから消費するセルフマネージド Kafka トリガーを作成することは可能です。ただし、いくつかのデメリットがあります。MSK トリガーとは異なり、AWS Identity and Access Management (IAM) 認証をセルフマネージド Kafka トリガーで使用することはできません。また、VPC ピア接続経由で MSK クラスターに接続するには、特定の VPC 回避策が必要です。詳細については、「How Goldman Sachs builds cross-account connectivity to their Amazon MSK clusters with AWS PrivateLink」(Goldman Sachs が AWS PrivateLink を使用して Amazon MSK クラスターへのクロスアカウント接続を構築する方法) を参照してください。

Lambda-MSK ESM のネットワーク構成

MSK ESM は、MSK クラスターと通信するために、クラスターが使用する各サブネット内にハイパープレーン Elastic Network Interface を作成します。これは、Lambda 関数が VPC 内で動作する方法と似ています。

MSK ESM は Lambda 関数の VPC 設定を使用しません。代わりに、ESM はターゲット MSK クラスターで設定されているサブネットとセキュリティグループの設定を自動的に使用します。その後、MSK ESM は、MSK クラスターが使用する各サブネット内にネットワークインターフェイスを作成します。これらのネットワークインターフェイスは、MSK クラスターが使用するのと同じセキュリティグループを使用します。MSK ESM が使用するセキュリティグループとイングレスまたはエグレスルールは、次の CLI コマンドで検索できます。

1.    AWS CLI MSK コマンド describe-cluster を使用して、MSK クラスターが使用するセキュリティグループとサブネットを一覧表示します。

2.    describe-cluster の出力に一覧表示されているセキュリティグループに対して、describe-security-groups コマンドを使用します。

トラフィックへのアクセス権を付与する

MSK クラスターのセキュリティグループには、それ自体からのイングレストラフィックとそれ自体へのエグレストラフィックを許可するルールを含める必要があります。トラフィックは、ブローカーが使用する次のオープン認証ポートのいずれかでも許可される必要があります。

  • 9092 (プレーンテキスト)
  • 9094 (TLS)
  • 9096 (SASL)
  • 443 (すべての設定に対応)

初期化、ポーリング、呼び出し中に発生する可能性のある問題をトラブルシューティングする

「PROBLEM: Connection error.Your VPC must be able to connect to Lambda and STS, as well as Secrets Manager if authentication is required.You can provide access by configuring PrivateLink or a NAT Gateway.」(問題: 接続エラー。VPC は Lambda と STS に接続できる必要があります。認証が必要な場合は Secrets Manager にも接続できる必要があります。PrivateLink または NAT Gateway を設定することでアクセス権を付与できます。)

前述のエラーは、次のいずれかの理由で発生します。

  • ESM は VPC で設定されており、STS API に対する呼び出しが失敗またはタイムアウトする。
  • ESM は VPC で設定されており、Secrets Manager API 接続の試行が失敗またはタイムアウトする。
  • トリガーは Kafka クラスターにアクセスできるが、Lambda API を介して関数を呼び出すとタイムアウトする。

これらの問題は、VPC の設定が正しくないために ESM が AWS STS や AWS Secrets Manager などの他のサービスに到達できないことが原因である可能性があります。「Setting up AWS Lambda with an Apache Kafka cluster within a VPC」(VPC 内における Apache Kafka クラスターを使用した AWS Lambda の設定) の手順に従って、VPC 設定を適切に構成します。

STS API に対する呼び出しが失敗またはタイムアウトした場合、VPC の設定により、ESM はポート 443 のリージョンレベルの Lambda エンドポイントに到達できません。この問題を解決するには、「Setting up AWS Lambda with an Apache Kafka cluster within a VPC」(VPC 内における Apache Kafka クラスターを使用した AWS Lambda の設定) を参照してください。

SourceAccessConfiguration にシークレットが含まれている場合は、必ず Secrets Manager からそのシークレットを取得してください。

「PROBLEM: Certificate and/or private key must be in PEM format.」(問題: 証明書やプライベートキーは PEM 形式である必要があります。)

前述のエラーは、ESM で暗号解読できない形式のシークレットがある場合に発生します。

この問題をトラブルシューティングするには、シークレットの形式を確認します。Secrets Manager は .pem 形式の X.509 証明書ファイルのみをサポートしていることに注意してください。詳細については、「Provided certificate or private key is invalid (提供された証明書またはプライベートキーが無効です)」(Amazon MSK) または「Provided certificate or private key is invalid (提供された証明書またはプライベートキーが無効です)」(Kafka) を参照してください。

「PROBLEM: The provided Kafka broker endpoints cannot be resolved.」(問題: 提供されている Kafka ブローカーのエンドポイントを解決できません。)

前述のエラーは、ESM がホスト名を IP アドレスに変換できない場合に発生します。

このエラーを解決するには、ホスト名を変換できる DNS サーバーに ESM が到達できることを確認します。エンドポイントのホスト名がプライベートネットワーク内にある場合は、ホスト名を解決できる DNS 設定の VPC を使用するように ESM を設定します。

「PROBLEM: Server failed to authenticate Lambda or Lambda failed to authenticate server.」(問題: サーバーが Lambda を認証できなかったか、または Lambda がサーバーを認証できませんでした。)

前述のエラーは、ESM が接続されているサーバーが ESM 設定で構成したサーバーではない場合に発生します。

この問題をトラブルシューティングするには、接続しているサーバーの ESM の設定が構成されていることを確認します。

「PROBLEM: SASL authentication failed.」(問題: SASL 認証が失敗しました。)

前述のエラーは、サーバーへのログイン試行が失敗した場合に発生します。

Amazon MSK トピックからトリガーされる AWS Lambda 関数は、SASL/SRAM を使用して AWS Secrets Manager によって保護されているユーザー名とパスワードにアクセスできます。ユーザー名とパスワードが有効と認識されない場合、エラーを受け取ります。

このエラーを解決するには、ブローカーにログインして、アクセスログを確認します。

注意:

「PROBLEM: Cluster failed to authorize Lambda.」(問題: クラスターは、Lambda の承認に失敗しました。)

前述のエラーは、ESM がブローカーにログインしても、トピックからレコードをポーリングするための許可が ESM ユーザーに付与されていない場合に発生します。この問題をトラブルシューティングするには、「クラスターが Lambda の認可に失敗した」(Amazon MSK) または「クラスターが Lambda の認可に失敗した」(Kafka) を参照してください。


関連情報

認証と認可のエラー

AWS公式
AWS公式更新しました 2年前