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

所要時間3分
0

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

解決策

次の一般的な問題を確認してください。

ネットワークに関する問題

  • **JDBC データストアへの接続を確認する:**AWS Glue では、接続のサブネットにプライベート IP アドレスを使用して ENI (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 へのアウトバウンドトラフィックを制限できます。詳細については、「Setting up a VPC to connect to JDBC Data Stores」を参照してください。

  • **空いている IP アドレスの数を確認する:**サブネット内の空き IP アドレスの数は、ジョブに指定されたデータ処理ユニット (DPU) の数より多いこととします。これは、指定されたサブネットに、AWS Glue で ENI (Elastic Network Interface) を作成するために必要です。

  • サブネットで Amazon Simple Storage Service (Amazon S3) にアクセスできることを確認する:Amazon S3 エンドポイントを指定するか、サブネットのルートテーブルに NAT ゲートウェイへのルートを指定します。詳細については、「Error: Could not find S3 endpoint or NAT Gateway for subnetId in VPC」を参照してください。

  • **AWS KMS VPC エンドポイントがあるかどうかを確認する:**AWS Glue データカタログで接続が暗号化されている場合は、AWS KMS へのルートが用意済みであることを確認してください。例えば、このルートは AWS KMS VPC インターフェイスエンドポイントの可能性があります。詳細については、「 Connecting to AWS KMS through a VPC endpoint」を参照してください。

  • **AWS Glue 接続とデータベースで異なる VPC が使用されていないかを確認する:**次の条件に当てはまる場合、テスト接続はタイムアウトエラーで失敗します。
    データベースはパブリックにアクセスできません。
    AWS Glue ジョブが、VPC ピアリングのない別の VPC を使用する接続にアタッチされます。
    この問題は、専用の AWS Glue VPC を作成し、必要に応じて他の VPC と対応する VPC ピアリングを設定すると解決できます。詳細については、「Connect to and run ETL jobs across multiple VPCs using a dedicated AWS Glue VPC」を参照してください。

  • **オンプレミスデータストアへの接続を確認する:**オンプレミスのデータベースへの AWS Glue 接続をテストする場合は、接続に使用したものと同じ VPC、サブネット、およびセキュリティグループ内の Amazon Elastic Compute Cloud (Amazon EC2) インスタンスに接続するのがベストプラクティスです。次に、Amazon EC2 インスタンスから次のテストを実行します。コマンドの実行に問題がある場合は、VPN と VPC、サブネット、セキュリティグループ、ネットワークアクセスコントロールリスト (ACL) の設定を確認してください。これらの設定で VPC からオンプレミスデータベースへの接続がブロックされていないか、あるいは、オンプレミスデータベースからファイアウォールの問題が発生してはいかいかを確認してください。詳細については、「How to access and analyze on-premises data stores using 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 アクションが許可されていることを確認します。詳細については、「Setting up encryption in AWS Glue」を参照してください。
  • 接続ログを確認する:テスト接続からのログは、/aws-glue/testconnection/output の Amazon CloudWatch Logs にあります。ログにエラーメッセージがないか確認してください。
  • **SSL 設定を確認する:**指定されたユーザーの SSL 接続がデータストアで必要な場合は、コンソールで接続を作成する際に [SSL 接続が必要です] を必ず選択してください。データストアが SSL をサポートしていない場合は、このオプションを選択しないでください。
  • **JDBC のユーザー名とパスワードを確認する:**JDBC データストアにアクセスするユーザーには、十分なアクセス権限が必要です。例えば、AWS Glue クローラーには SELECT アクセス権限が必要です。データストアに書き込むジョブには、INSERT、UPDATE、DELETE のアクセス権限が必要です。
  • **JDBC URL の構文を確認する:**構文の要件はデータベースエンジンによって異なります。詳細については、「 Adding an AWS Glue connection」と「JDBC URL」の下の例を確認してください。

その他のトラブルシューティング

  • 接続タイプを確認する:

  • 必ず正しい接続タイプを選択してください。接続タイプとして [Amazon RDS] または [Amazon Redshift] を選択すると、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 ファイルをジョブにロードします。詳細については、「 Connection types and options for ETL in AWS Glue」を参照してください。

  • DNS の問題を回避する:DNS の問題を回避するには、データストアのパブリック IP アドレスまたはプライベート IP アドレスを AWS Glue 接続の JDBC URL として使用します。このとき、ドメイン名を使用しないので、[SSL 接続が必要です] をオフにする必要があります。

  • **ドライバーに互換性がないかどうかを確認する:**互換性のないドライバーが原因で接続が失敗した場合は、失敗した接続名とともに、ジョブのプロパティに追加の JAR ファイルとして正しいドライバーを指定します。(接続名をジョブプロパティとして指定すると、AWS Glue では VPC やサブネットなどの接続のネットワーク設定が使用されます)。 次に、ジョブプロパティで指定した JAR ファイルを使用して Apache Spark データフレームを手動で作成し、デフォルトの AWS Glue データストアドライバーをオーバーライドします。データフレームを作成したら、任意で AWS Glue DynamicFrame に変換できます。詳細については、「fromDF」を参照してください。

  • **JDBC データストアが公開されているかどうかを確認する:**MySQL ワークベンチと JDBC URL を使用してデータストアに接続します。または、接続に使用したのと同じサブネットとセキュリティグループに SSH アクセスできる Amazon EC2 インスタンスを起動します。次に、SSH を使用してインスタンスに接続し、次のコマンドを実行して接続をテストします。

$ dig hostname
$ nc -zv hostname port

関連情報

Defining connections in the AWS Glue Data Catalog

Troubleshooting errors in AWS Glue

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