AWS Glue クローラーが内部サービス例外で失敗するのはなぜですか?

所要時間2分
0

AWS Glue クローラーが「エラー: 内部サービス例外」というエラーで失敗します。

解決方法

クローラーの内部サービスの例外は、一時的な問題が原因で発生する可能性があります。トラブルシューティングを開始する前に、クローラーを再度実行します。それでも内部サービスの例外が発生する場合は、以下の一般的な問題を確認します。

データに関する問題

AWS Glue クローラーが大量のデータを処理するように設定されている場合、クローラーが内部サービス例外に直面する可能性があります。データ問題の原因を確認して、次のように修正してください。

  • 小さなファイルが多数あると、クローラーが内部サービス例外で失敗する原因となる場合があります。この問題を回避するには、S3DistCp ツールを使用して小さなファイルを結合します。S3DistCp を使用すると、追加の Amazon EMR 料金が発生します。または、除外パターンを設定してファイルを繰り返しクロールすることもできます。最後に、プレフィックス内のすべてのファイルをスキャンしないように、サンプリングを有効にすることを検討してください。
  • クローラーが 24 時間のタイムアウト値に近づいている場合は、メモリの問題を防ぐためにワークフローを分割してください。詳細については、「AWS Glue クローラーが長時間実行されるのはなぜですか?」を参照してください。

: データスケールの問題を解決する最善の方法は、処理するデータ量を減らすことです。

Amazon Simple Storage Service (Amazon S3) のフォルダ構造に一貫性がない

時間が経つにつれて、AWS Glue クローラーはデータを特定の形式に処理します。ただし、上流のアプリケーションに矛盾があると、内部サービス例外エラーが発生する可能性があります。

データカタログのテーブルパーティション定義と Amazon S3 の Hive パーティション構造に矛盾がある可能性があります。このような違いにより、クローラーに問題が生じる可能性があります。例えば、クローラーはオブジェクトが「s3://awsdoc-example-bucket/yyyy=xxxx/mm=xxx/dd=xx/[files]」として分割されることを期待する場合があります。しかし、代わりに一部のオブジェクトが「s3://awsdoc-example-bucket/yyyy=xxxx/mm=xxx/[files]」に該当するとします。これが発生すると、クローラーが失敗し、内部サービス例外エラーが発生します。

以前にクロールしたデータロケーションを変更すると、インクリメンタルクロールによる内部サービス例外エラーが発生する可能性があります。これは、次のいずれかの条件が満たされているために起こります。

  • 空であることが判明している Amazon S3 ロケーションがデータファイルで更新される
  • ファイルは、データファイルが保存されていることがわかっている Amazon S3 の場所から削除されます。

Amazon S3 プレフィックス構造を変更すると、この例外がトリガーされます。

S3 データストアに変更があったと思われる場合は、現在のクローラーを削除するのがベストプラクティスです。現在のクローラーを削除したら、[Crawl all folders] (すべてのフォルダをクロール) オプションを使用して同じ S3 ターゲットに新しいクローラーを作成します。

AWS Key Management Service (AWS KMS) に関する問題

データストアが AWS KMS 暗号化で設定されている場合は、以下を確認してください。

  • クローラーの AWS Identity and Access Management (IAM) ロールに AWS KMS キーにアクセスするために必要なアクセス許可があることを確認します。
  • AWS KMS キーポリシーがアクセス許可を適切に委任していることを確認します。
  • AWS KMS キーがまだ存在し、ステータスが [Available] (使用可能) であることを確認します。AWS KMS キーが削除待ちの場合、内部サービス例外がトリガーされます。

詳細については、「AWS Glue コンソールでのセキュリティ設定の操作」および「AWS Glue での暗号化の設定」を参照してください。

AWS Glue データカタログに関する問題

データカタログに多数の列またはネスト構造がある場合、スキーマのサイズが 400 KB の制限を超える可能性があります。データカタログに関連する例外に対処するには、次の点を確認してください。

  • 列名の長さは 255 文字以内で、特殊文字を含めないようにしてください。列の要件の詳細については、「」を参照してください。
  • 長さが 0 の列をチェックします。これは、ソースデータの列がデータカタログテーブルのデータ形式と一致しない場合に発生する可能性があります。
  • テーブルのスキーマ定義で、各列の [Type] (タイプ) 値が 131,072 バイトを超えないようにしてください。この制限を超えると、クローラーが内部サービス例外に直面する可能性があります。詳細については、「列構造」を参照してください。
  • 不正な形式のデータをチェックします。例えば、列名が「[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\t]」の正規表現パターンに従っていない場合、クローラーは機能しません。
  • データに「(precision, scale)」形式の DECIMAL 列が含まれている場合、スケール値が精度値以下であることを確認してください。
  • クローラーが「カタログにテーブルを作成できません」または「リクエストのペイロードサイズが制限を超えました」というエラーメッセージが表示されて失敗することがあります。このような場合は、テーブルスキーマ定義のサイズを監視してください。データカタログのテーブルに含めることができる列の数に制限はありません。ただし、スキーマの合計サイズには 400 KB の制限があります。列の数が多いと、スキーマの合計サイズが 400 KB の制限を超えることになります。考えられる回避策としては、スキーマを複数のテーブルに分割し、不要な列を削除することが挙げられます。列名を減らすことでメタデータのサイズを小さくすることも検討できます。

Amazon S3 に関する問題

  • Amazon S3 パスに特殊文字が含まれていないことを確認します。
  • クローラーの IAM ロールに Amazon S3 パスへのアクセス許可があることを確認します。詳細については、「AWS Glue 用の IAM ロールを作成する」を参照してください。
  • 可能であれば、データから ^、%、~ などの特殊な ASCII 文字を削除します。または、カスタム分類子を使用してデータを分類します。
  • S3 オブジェクトが STANDARD ストレージクラスを使用していることを確認します。STANDARD ストレージクラスにオブジェクトを復元するには、アーカイブされたオブジェクトの復元を参照してください。
  • クローラー設定の包含パターンと除外パターンが S3 バケットパスと一致することを確認します。
  • 暗号化された S3 バケットをクロールしている場合は、クローラーの IAM ロールに AWS KMS キーに対する適切な許可があることを確認します。詳細については、「AWS Glue コンソールでのセキュリティ設定の操作」および「AWS Glue での暗号化の設定」を参照してください。
  • 暗号化された S3 バケットをクロールしている場合は、バケット、AWS KMS キー、および AWS Glue ジョブが同じ AWS リージョン内にあることを確認します。
  • クロールする S3 バケットのリクエストレートを確認します。リクエストレートが高い場合は、より多くのプレフィックスを作成して読み込みを並列化することを検討してください。詳細については、「ベストプラクティスの設計パターン: Amazon S3 パフォーマンスの最適化」を参照してください。
  • S3 リソースパスの長さが 700 文字未満であることを確認してください。

Amazon DynamoDB に関する問題

JDBC に関する問題

  • AWS KMS で暗号化された JDBC データソースをクロールしている場合は、接続に使用しているサブネットをチェックします。サブネットのルートテーブルには、AWS KMS エンドポイントへのルートが必要です。このルートは、AWS KMS がサポートする仮想プライベートクラウド (VPC) エンドポイントまたは NAT ゲートウェイを経由できます。
  • 正しい Include パス構文を使用していることを確認します。詳細については、Defining crawlers を参照してください。
  • JDBC データストアをクロールしている場合は、SSL 接続が正しく設定されていることを確認します。SSL 接続を使用していない場合は、クローラーの設定時に [Require SSL connection] (SSL 接続が必要です) が選択されていないことを確認してください。
  • AWS Glue 接続のデータベース名が、クローラーの Include パスのデータベース名と一致していることを確認します。また、Include パスが正しく入力されていることを確認してください。詳細については、Include and exclude patterns を参照してください。
  • 使用しているサブネットが AWS Glue でサポートされているアベイラビリティーゾーンにあることを確認してください。
  • 使用しているサブネットに十分なプライベート IP アドレスがあることを確認してください。
  • 組み込みの AWS Glue JDBC ドライバーで JDBC データソースがサポートされていることを確認します。

VPC エンドポイント使用時の AWS KMS に関する問題

  • AWS KMS を使用している場合、AWS Glue クローラーは AWS KMS にアクセスできる必要があります。アクセスを許可するには、AWS KMS エンドポイントの作成時に [Enable Private DNS Name] (プライベート DNS 名を有効にする) オプションを選択します。その後、AWS KMS エンドポイントを AWS Glue 接続の VPC サブネット設定に追加します。詳細については、「VPC エンドポイント経由で AWS KMS に接続する」を参照してください。

関連情報

AWS Glue コンソールでのクローラーの使用

Encrypting data written by crawlers, jobs, and development endpoints

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