AWS Glue のテスト接続が失敗するのはなぜですか?

最終更新日: 2021 年 7 月 27 日

AWS Glue でのテスト接続の失敗をトラブルシューティングしたいと考えています。

解決方法

次の一般的な問題を確認します。

ネットワーキングの問題

  • JDBC データストアへの接続を確認する: AWS Glue は、接続のサブネットにプライベート IP アドレスを持つ Elastic Network Interface を作成します。つまり、AWS Glue はパブリックインターネットを使用してデータストアに接続できません。
    • データストアが Amazon Virtual Private Cloud (Amazon VPC) の外にある場合、サブネットのルートテーブルには、パブリックサブネット内の NAT ゲートウェイへのルートが必要です。そうしないと、接続がタイムアウトします。
      注意: Amazon VPC 外のデータストアは、オンプレミスのデータストアまたはパブリックホスト名を持つ Amazon Relational Database Service (Amazon RDS) リソースである場合があります。
    • データストアが Amazon VPC にある場合は、接続のセキュリティグループとネットワークアクセスコントロールリスト (ネットワーク ACL) でデータストアへのトラフィックが許可されていることを確認してください。
  • 接続のセキュリティグループを確認する: 接続に関連付けられたセキュリティグループの 1 つに、すべての TCP ポートに対して開かれている自己参照型のインバウンドルールが必要です。同様に、セキュリティグループの 1 つがすべてのアウトバウンドトラフィックに対して開かれている必要もあります。自己参照型ルールを使用して、Amazon VPC へのアウトバウンドトラフィックを制限できます。詳細については、「JDBC データストアに接続するための VPC の設定」をご参照ください。
  • 空き IP アドレスの数を確認する: サブネットの空き IP アドレスの数は、ジョブに指定されたデータ処理ユニット (DPU) の数より大きくする必要があります。これで、AWS Glue は指定されたサブネットに Elastic Network Interface を作成できます。
  • サブネットが Amazon Simple Storage Service (Amazon S3) にアクセスできることを確認する: Amazon S3 エンドポイント を指定するか、サブネットのルートテーブルで NAT ゲートウェイへのルートを指定します。詳細については、「エラー: VPC の subnetId に S3 エンドポイントまたは NAT ゲートウェイが見つかりませんでした」を参照してください。
  • AWS KMS VPC エンドポイントがあるかどうかを確認する: AWS Glue データカタログが接続を暗号化している場合は、AWS KMS へのルートがあることを確認してください。例えば、このルートは AWS KMS VPC インターフェイスエンドポイントにすることができます。詳細については、「VPC エンドポイント経由で AWS KMS に接続する」をご参照ください。
  • AWS Glue 接続とデータベースで異なる VPC が使用されているかどうかを確認する: 次の条件に当てはまる場合、テスト接続はタイムアウトエラーで失敗します。
    データベースがパブリックにアクセスできない。
    AWS Glue ジョブが、VPC ピアリングなしで別の VPC を使用する接続にアタッチされている。
    この問題は、専用の AWS Glue VPC を作成し、必要に応じて他の VPC と対応する VPC ピアリングを設定することで解決できます。詳細については、「専用の AWS Glue VPC を使用して、複数の VPC 間で ETL ジョブに接続して実行する」を参照してください。
  • オンプレミスのデータストアへの接続を確認: オンプレミスデータベースへの AWS Glue 接続をテストする場合は、接続に使用したのと同じ VPC、サブネット、およびセキュリティグループ内の Amazon Elastic Compute Cloud (Amazon EC2) インスタンスに接続することをお勧めします。次に、Amazon EC2 インスタンスから以下のテストを実行します。コマンドの実行に問題がある場合は、VPN と VPC、サブネット、セキュリティグループ、およびネットワークアクセスコントロールリスト (ACL) の設定を確認してください。これらの設定によって VPC からオンプレミスデータベースへの接続がブロックされたり、オンプレミスデータベースからファイアウォールの問題が発生したりしないようにしてください。詳細については、「AWS Glue を使用してオンプレミスのデータストアにアクセスして分析する方法」を参照してください。
$ telnet hostname port
$ nc -zv hostname port
$ dig hostname
$ traceroute -AnT -p IP port

認証の問題

  • 正しい IAM ロールを選択する: テスト接続用に選択した AWS Identity and Access Management (IAM) ロールには、AWS Glue との信頼関係が必要です。これを行う簡単な方法は、AWSGlueServiceRole ポリシーをアタッチしたサービスにリンクされたロールを選択することです。
  • 接続の IAM ロールを確認: 接続パスワードが AWS Key Management Service (AWS KMS) で暗号化されている場合、接続の IAM ロールで、キーの kms:Decrypt アクションが許可されていることを確認します。詳細については、「AWS Glue での暗号化のセットアップ」を参照してください。
  • 接続ログを確認する: テスト接続からのログは /aws-glue/testconnection/output の Amazon CloudWatch Logs にあります。ログでエラーメッセージを確認します。
  • SSL 設定を確認する: データストアが指定されたユーザーの SSL 接続を必要とする場合は、コンソールで接続を作成するときに [Require SSL connection] を必ず選択してください。データストアが SSL をサポートしていない場合は、このオプションを選択しないでください。
  • JDBC のユーザー名とパスワードを確認する: JDBC データストアにアクセスしているユーザーは、適切なアクセス許可が必要です。たとえば、AWS Glue クローラには SELECT のアクセス許可が必要です。データストアに書き込むジョブには、INSERT、UPDATE、DELETE のアクセス許可が必要です。
  • JDBC URL 構文を確認する: 構文要件はデータベースエンジンによって異なります。詳細については、「AWS Glue 接続の追加」および JDBC URL の例をご参照ください。

追加のトラブルシューティング

  • 接続タイプを確認:
    • 正しい接続タイプを選択していることを確認してください。Amazon RDS または Amazon Redshift を [Connection type] で選択すると、AWS Glue によって VPC、サブネット、およびセキュリティグループが自動的に入力されます。
    • MySQL に接続する必要がある場合は、テスト接続機能は MySQL 5.x バージョンでのみ機能することに注意してください。MySQL バージョン 8 は、組み込みの AWS Glue JDBC ドライバーではサポートされていません。バージョン 5.x より新しい MySQL バージョンに対して接続をテストすると、接続タイムアウトエラーが発生することがあります。ただし、回避策により、AWS Glue 接続を使用して MySQL バージョン 8 に接続することはできます。MySQL バージョン 8 以降の互換性のあるドライバー JAR を手動で提供して、抽出、読み込み、変換 (ETL) ジョブで接続を使用します。次に、Spark ジョブに任意の JDBC ドライバをロードする方法と同様に、この JAR ファイルをジョブにロードします。詳細については、「AWS Glue での ETL の接続タイプとオプション」を参照してください。
  • DNS の問題を除外: DNS の問題を除外するには、AWS Glue 接続の JDBC URL としてデータストアのパブリック IP アドレスまたはプライベート IP アドレスを使用します。その場合は、ドメイン名を使用しなくなったため、[Require SSL connection] のチェックを外す必要があります。
  • 互換性のないドライバー: 互換性のないドライバーのために接続が失敗した場合は、失敗した接続名とともに、ジョブのプロパティで追加の JAR ファイルとして正しいドライバーを指定します。(ジョブプロパティとして接続名を指定すると、AWS Glue は VPC やサブネットなどの接続のネットワーク設定を使用します。) 次に、ジョブプロパティで指定した JAR ファイルを使用して Apache Spark データフレームを手動で作成して、デフォルトの AWS Glue データストアドライバを上書きします。データフレームを作成したら、オプションで AWS Glue 動的フレームに変換できます。詳細については、「fromDF」を参照してください。
  • JDBC データストアがパブリックでアクセス可能である場合: MySQL Workbench および JDBC URL を使用して、データストアに接続します。または、接続に使用したものと同じサブネットとセキュリティグループに SSH アクセスできる Amazon EC2 インスタンスを起動します。その後、SSH を使用してインスタンスに接続し、次のコマンドを実行して接続をテストします。
$ dig hostname
$ nc -zv hostname port

この記事はお役に立ちましたか?


請求に関するサポートまたは技術サポートが必要ですか?