クローラー設定オプションの設定 - AWS Glue

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

クローラー設定オプションの設定

クローラーを実行すると、データストアの変更が検出される場合があります。これらの変更に伴って、以前のクローラーとは異なるスキーマやパーティションが生じることがあります。AWS Management Console または AWS Glue API を使用して、特定のタイプの変更をクローラーで処理する方法を設定できます。

Console

AWS Glue コンソールを使用してクローラーを定義する場合、クローラーの動作を設定するためのオプションをいくつか使用できます。AWS Glue コンソールを使用してクローラーを追加する方法の詳細については、「AWS Glue コンソールでのクローラーの使用」を参照してください。

以前にクロールしたデータストアに対してクローラーを実行すると、データストアでのスキーマの変更やオブジェクトの削除が検出される場合があります。クローラーは、スキーマの変更をログに記録します。クローラーのソースタイプに応じて、スキーマの変更ポリシーにかかわらず、新しいテーブルとパーティションが作成される可能性があります。

クローラーがスキーマの変更を検出したときの動作を指定するには、コンソールで以下のいずれかのアクションを選択できます。

  • Data Catalog でテーブル定義を更新する – AWS Glue Data Catalog で、新しい列を追加し、欠落している列を削除して、既存の列の定義を変更します。クローラーで設定されていないすべてのメタデータを削除します。これはデフォルトの設定です。

  • 新しい列の追加のみ – Amazon S3 データストアにマッピングされるテーブルの場合、検出した新しい列は追加されますが、既存の列のタイプは Data Catalog で削除または変更されません。データカタログの現在の列が正しく、クローラーで既存の列のタイプを削除または変更しない場合は、このオプションを選択します。Amazon S3 の基本的なテーブル属性 (分類、圧縮タイプ、CSV 区切り記号など) が変わった場合は、テーブルを廃止としてマークします。Data Catalog に存在する入力形式と出力形式そのままにします。 SerDe パラメータがクローラーによって設定されたパラメータである場合にのみ、パラメータを更新します。他のすべてのデータストアについては、既存の列定義を変更します。

  • 変更を無視し、Data Catalog のテーブルを更新しない – 新しいテーブルとパーティションのみが作成されます。

    これは、増分クロールのデフォルト設定です。

新規のパーティションや変更されたパーティションがクローラーで検出される場合もあります。デフォルトでは、変更が行われると、新しいパーティションが追加され、既存のパーティションは更新されます。さらに、 コンソールですべての新規および既存のパーティションを更新してテーブルのメタデータを反映するAWS Glueようにクローラーの設定オプションを設定できます。このオプションを設定すると、パーティションは分類、入力形式、出力形式 SerDe、情報、スキーマなどのメタデータプロパティを親テーブルから継承します。テーブルでの上記プロパティに対する変更は、そのパーティションに伝播されます。この設定オプションを既存のクローラーに設定すると、既存のパーティションは、次回クローラーが実行されるときに親テーブルのプロパティと一致するよう更新されます。

データストアで削除されたオブジェクトを検出したときのクローラーの動作を指定するには、以下のいずれかのアクションを選択します。

  • Data Catalog からテーブルとパーティションを削除する

  • 変更を無視し、Data Catalog のテーブルを更新しない

    これは、増分クロールのデフォルト設定です。

  • Data Catalog でテーブルを廃止としてマークする – これがデフォルトの設定です。

AWS CLI
aws glue create-crawler \ --name "your-crawler-name" \ --role "your-iam-role-arn" \ --database-name "your-database-name" \ --targets 'S3Targets=[{Path="s3://your-bucket-name/path-to-data"}]' \ --configuration '{"Version": 1.0, "CrawlerOutput": {"Partitions": {"AddOrUpdateBehavior": "InheritFromTable"}, "Tables": {"AddOrUpdateBehavior": "MergeNewColumns"}}}'
API

AWS Glue API を使用してクローラーを定義する場合は、いくつかのフィールドから選択してクローラーを設定できます。クローラー API の SchemaChangePolicy は、変更されたスキーマや削除されたオブジェクトを検出したときのクローラーの動作を決定します。クローラーは、実行時にスキーマの変更をログに記録します。

クローラー設定オプションを示すサンプル Python コード

import boto3 import json # Initialize a boto3 client for AWS Glue glue_client = boto3.client('glue', region_name='us-east-1') # Replace 'us-east-1' with your desired AWS region # Define the crawler configuration crawler_configuration = { "Version": 1.0, "CrawlerOutput": { "Partitions": { "AddOrUpdateBehavior": "InheritFromTable" }, "Tables": { "AddOrUpdateBehavior": "MergeNewColumns" } } } configuration_json = json.dumps(crawler_configuration) # Create the crawler with the specified configuration response = glue_client.create_crawler( Name='your-crawler-name', # Replace with your desired crawler name Role='crawler-test-role', # Replace with the ARN of your IAM role for Glue DatabaseName='default', # Replace with your target Glue database name Targets={ 'S3Targets': [ { 'Path': "s3://your-bucket-name/path/", # Replace with your S3 path to the data }, ], # Include other target types like 'JdbcTargets' if needed }, Configuration=configuration_json, # Include other parameters like Schedule, Classifiers, TablePrefix, SchemaChangePolicy, etc., as needed ) print(response)a

クローラーを実行すると、スキーマの変更ポリシーにかかわらず、常に新しいテーブルとパーティションが作成されます。変更されたテーブルスキーマを検出したときのクローラーの動作を決定するには、SchemaChangePolicy 構造の UpdateBehavior フィールドで以下のいずれかのアクションを選択できます。

  • UPDATE_IN_DATABASE – のテーブルを更新します。AWS Glue Data Catalog新しい列を追加し、欠落している列を削除して、既存の列の定義を変更します。クローラーで設定されていないすべてのメタデータを削除します。

  • LOG – 変更を無視し、Data Catalog でテーブルを更新しない。

    これは、増分クロールのデフォルト設定です。

クローラー API の Configuration フィールドに指定されている JSON オブジェクトを使用して SchemaChangePolicy 構造を上書きすることもできます。この JSON オブジェクトに含まれているキーと値のペアを使用して、既存の列を更新しないで新規の列のみを追加するようにポリシーを設定できます。たとえば、次の JSON オブジェクトを文字列として指定します。

{ "Version": 1.0, "CrawlerOutput": { "Tables": { "AddOrUpdateBehavior": "MergeNewColumns" } } }

このオプションは、 コンソールの [Add new columns onlyAWS Glue] (新しい列のみを追加) オプションに対応します。これにより、Amazon S3 データストアをクロールした結果のテーブルの SchemaChangePolicy 構造のみが上書きされます。Data Catalog (信頼できる情報源) にあるがままにメタデータを維持する場合は、このオプションを選択します。新しい列が検出されると追加されます。これには、ネストされたデータ型も含まれます。ただし、既存の列は削除されず、そのタイプは変更されません。Amazon S3 のテーブル属性が大幅に変わる場合は、テーブルを廃止としてマークし、互換性のない属性を解決する必要があるという警告をログに記録します。このオプションは増分クローラーには適用できません。

クローラーが、以前にクロールしたデータストアに対して実行される場合、新規または変更されたパーティションが検出される場合があります。デフォルトでは、変更が行われると、新しいパーティションが追加され、既存のパーティションは更新されます。さらに、クローラーの設定オプションを InheritFromTable に設定できます。このオプションは、 コンソールの [Update all new and existing partitions with metadata from the tableAWS Glue] (すべての新規および既存のパーティションを更新してテーブルのメタデータを反映する) オプションに対応します。このオプションを設定すると、パーティションは分類、入力形式、出力形式、 SerDe 情報、スキーマなどのメタデータプロパティを親テーブルから継承します。親テーブルでのすべてのプロパティの変更は、そのパーティションに伝播されます。

この設定オプションを既存のクローラーに設定すると、既存のパーティションは、次回クローラーが実行されるときに親テーブルのプロパティと一致するよう更新されます。この動作は、クローラー API の Configuration フィールドで設定します。たとえば、次の JSON オブジェクトを文字列として指定します。

{ "Version": 1.0, "CrawlerOutput": { "Partitions": { "AddOrUpdateBehavior": "InheritFromTable" } } }

クローラー API の Configuration フィールドでは、複数の設定オプションを設定できます。たとえば、パーティションとテーブルの両方のクローラー出力を設定するには、次の JSON オブジェクトの文字列表現を指定できます。

{ "Version": 1.0, "CrawlerOutput": { "Partitions": { "AddOrUpdateBehavior": "InheritFromTable" }, "Tables": {"AddOrUpdateBehavior": "MergeNewColumns" } } }

データストアで削除されたオブジェクトを検出したときのクローラーの動作を決定するには、以下のいずれかのアクションを選択できます。クローラー API の SchemaChangePolicy 構造の DeleteBehavior フィールドでは、削除されたオブジェクトを検出したときのクローラーの動作を設定します。

  • DELETE_FROM_DATABASE – Data Catalog からテーブルとパーティションを削除します。

  • LOG – 変更を無視します。Data Catalog を更新しません。代わりにログメッセージを書き込みます。

  • DEPRECATE_IN_DATABASE –​ Data Catalog でテーブルを廃止としてマークします。これはデフォルトの設定です。

パーティションインデックスクローラー設定オプションの設定

データカタログは、特定のパーティションを効率的に検索できるようにパーティションインデックスをサポートしています。詳細については、「AWS Glue でのパーティションインデックスの使用」を参照してください。AWS Glue クローラーは、Amazon S3 ターゲットと Delta Lake ターゲットのパーティションインデックスをデフォルトにより作成します。

クローラを定義すると、パーティションインデックスを自動的に作成するオプションは、出力とスケジューリングの設定ページの高度なオプションでデフォルトで有効になります。

このオプションを無効にするには、コンソールでパーティションインデックスを自動的に作成するのチェックボックスをオフにします。クローラー API を使用してこのオプションを無効にし、 CreatePartitionIndex で を設定することもできますConfiguration。デフォルト値は True です。

パーティションインデックスの使用に関する注意事項

  • クローラーによって作成されたテーブルには、デフォルトでは partition_filtering.enabled 変数がありません。詳細については、「AWS Glue パーティションインデックスとフィルタリング」を参照してください。

  • 暗号化されたパーティションのパーティションインデックスの作成はサポートされていません。

既存のスキーマをクローラーで変更しないための方法

Amazon S3 テーブル定義の既存のフィールドに対する更新をクローラーで上書きしない場合は、コンソールでオプションとして [Add new columns only] (新しい列の追加のみ) を選択するか、設定オプションとして MergeNewColumns を設定します。これはテーブルとパーティションに適用されます (Partitions.AddOrUpdateBehaviorInheritFromTable で上書きしていない場合)。

クローラーの実行時にテーブルスキーマを一切変更しない場合は、スキーマ変更ポリシーを LOG に設定します。設定オプションにより、テーブルから継承するようにパーティションスキーマを設定することもできます。

コンソールでクローラーを設定する場合は、以下のアクションを選択できます。

  • 変更を無視し、Data Catalog のテーブルを更新しない

  • すべての新規および既存のパーティションを更新してテーブルのメタデータを反映する

API を使用してクローラーを設定する場合は、以下のパラメータを設定します。

  • SchemaChangePolicy 構造の UpdateBehavior フィールドを LOG に設定します。

  • クローラー API で次の JSON オブジェクトの文字列表現を使用して Configuration フィールドを設定します。

    { "Version": 1.0, "CrawlerOutput": { "Partitions": { "AddOrUpdateBehavior": "InheritFromTable" } } }

各 Amazon S3 インクルードパスの単一のスキーマを作成する方法

デフォルトでは、Amazon S3 に保存されたデータのテーブルをクローラーが定義するときに、データの互換性とスキーマの類似性の両方が考慮されます。考慮されるデータ互換性要因には、データが同じ形式 (JSON など) かどうか、同じ圧縮タイプ (GZIP など) かどうか、Amazon S3 パスの構造、他のデータ属性などです。スキーマの類似性は、別個の Amazon S3 オブジェクトのスキーマがどれくらい似ているかの尺度です。

可能な場合は、CombineCompatibleSchemas へのクローラーを共通テーブル定義に設定できます。このオプションを使用しても、クローラーはデータ互換性を考慮に入れますが、指定されたインクルードパスで Amazon S3 オブジェクトを評価するときに特定のスキーマの類似性を無視します。

コンソールでクローラーを設定する場合、スキーマを組み合わせるには、クローラーオプション [Create a single schema for each S3 path (各 S3 パスの単一のスキーマを作成する)] を選択します。

API を使用してクローラーを設定する場合は、以下の設定オプションを設定します。

  • クローラー API で次の JSON オブジェクトの文字列表現を使用して Configuration フィールドを設定します。

    { "Version": 1.0, "Grouping": { "TableGroupingPolicy": "CombineCompatibleSchemas" } }

このオプションを説明するため、インクルードパス s3://bucket/table1/ を使用してクローラーを定義するとします。クローラーが実行されると、次の特性を持つ 2 つの JSON ファイルが検索されます。

  • ファイル 1S3://bucket/table1/year=2017/data1.json

  • ファイルのコンテンツ{“A”: 1, “B”: 2}

  • スキーマA:int, B:int

  • ファイル 2S3://bucket/table1/year=2018/data2.json

  • ファイルのコンテンツ{“C”: 3, “D”: 4}

  • スキーマC: int, D: int

デフォルトでは、スキーマの類似性が十分ではないため、クローラーは year_2017 および year_2018 という 2 つのテーブルを作成します。ただし、オプション [Create a single schema for each S3 path (各 S3 パスの単一のスキーマを作成する)] を選択し、データに互換性がある場合、クローラーは 1 つのテーブルを作成します。テーブルにはスキーマ A:int,B:int,C:int,D:intpartitionKey year:string があります。

テーブルの場所とパーティションレベルの指定方法

デフォルトでは、Amazon S3 に保存されたデータのテーブルをクローラーが定義するときに、クローラーはスキーマを結合してトップレベルのテーブル (year=2019) を作成しようとします。場合によっては、フォルダ month=Jan のテーブルをクローラーが作成することを期待することがありますが、兄弟フォルダ (month=Mar) が同じテーブルにマージされているので、代わりにクローラーはパーティションを作成します。

テーブルレベルのクローラーオプションを使用すると、クローラーにテーブルの配置場所やパーティションの作成方法を柔軟に指定できます。テーブルレベル を指定すると、その絶対レベルにAmazon S3 バケットからテーブルが作成されます。


        テーブルレベルがレベル 2 に指定されている場合のクローラーのグループ化

コンソールでクローラーを設定するとき、テーブルレベル クローラーオプションの値を指定できます。値は、テーブルの場所 (データセット内の絶対レベル) を示す正の整数である必要があります。最上位レベルのフォルダのレベルは 1 です。例えば、mydataset/year/month/day/hour というパスで、レベルが 3 に設定されている場合、テーブルは mydataset/year/month という場所に作成されます。

Console

              クローラー設定でのテーブルレベルの指定。
API

API を使用してクローラー設定をすると、次の JSON オブジェクトの文字列表現をする Configuration フィールドを設定します。例:

configuration = jsonencode( { "Version": 1.0, "Grouping": { TableLevelConfiguration = 2 } })
CloudFormation

この例では、 CloudFormation テンプレート内のコンソールで使用できるテーブルレベルのオプションを設定します。

"Configuration": "{ \"Version\":1.0, \"Grouping\":{\"TableLevelConfiguration\":2} }"

クローラーが作成できるテーブルの最大数を指定する方法

オプションで、クローラーが作成できるテーブルの最大数を指定する場合は、AWS Glue コンソールまたは CLI 経由で TableThreshold を指定します。クローリング中にクローラーによって検出されたテーブルがこの入力値より多い場合、クローリングが失敗し、データカタログにデータが書き込まれません。

このパラメータは、クローラーによって検出および作成されるテーブルが予想よりもはるかに多い場合に役立ちます。これには、以下のような複数の理由が考えられます。

  • AWS Glue ジョブを使用して Amazon S3 ロケーションに入力する場合、フォルダと同じレベルに空のファイルができる可能性があります。このような場合、この Amazon S3 ロケーションでクローラーを実行すると、ファイルとフォルダが同じレベルに存在するため、クローラーは複数のテーブルを作成します。

  • "TableGroupingPolicy": "CombineCompatibleSchemas" を設定しない場合、予想よりも多くのテーブルが作成される可能性があります。

TableThreshold を 1 以上の整数値として指定します。この値はクローラーごとに設定されます。つまり、クローリングごとに、この値が考慮されます。例えば、あるクローラーでは TableThreshold 値を 5 に設定したとします。各クローリングで、AWS Glue は検出されたテーブルの数をこのテーブルのしきい値 (5) と比較します。検出されたテーブルの数が 5 未満の場合、AWS Glue はデータカタログにテーブルを書き込み、そうでない場合、データカタログに書き込むことなくクローリングが失敗します。

コンソール

AWS コンソールを使用して TableThreshold を設定する場合は、次の画面で行います。


          最大テーブルしきい値のパラメータを表示する AWS コンソールの [Output and scheduling] (出力およびスケジューリング) セクション。
CLI

AWS CLI を使用して TableThreshold を設定する場合は、次のようになります。

"{"Version":1.0, "CrawlerOutput": {"Tables":{"AddOrUpdateBehavior":"MergeNewColumns", "TableThreshold":5}}}";

エラーメッセージはログに記録され、テーブルパスを特定してデータをクリーンアップするのに役立ちます。テーブル数が指定したテーブルしきい値を超えているためにクローラーが失敗した場合は、次のようなログの例がアカウントで確認できます。

Table Threshold value = 28, Tables detected - 29

では CloudWatch、INFO メッセージとして検出されたすべてのテーブルの場所をログに記録します。失敗の理由としてエラーがログに記録されます。

ERROR com.amazonaws.services.glue.customerLogs.CustomerLogService - CustomerLogService received CustomerFacingException with message The number of tables detected by crawler: 29 is greater than the table threshold value provided: 28. Failing crawler without writing to Data Catalog. com.amazonaws.services.glue.exceptions.CustomerFacingInternalException: The number of tables detected by crawler: 29 is greater than the table threshold value provided: 28. Failing crawler without writing to Data Catalog.

Delta Lake データストアの設定オプションを指定する方法

Delta Lake データストアのクローラーを設定する場合は、次の設定パラメータを指定します。

Connection

任意で、この Amazon S3 ターゲットで使用するネットワーク接続を選択または追加します。接続の詳細については、「データへの接続」を参照してください

クエリ用テーブルの作成

Delta Lake テーブルの作成方法を次の中から選択します。

  • [Create Native tables] (ネイティブテーブルの作成): Delta トランザクションログの直接クエリをサポートするクエリエンジンとの統合を可能にします。

  • [Create Symlink tables] (Symlink テーブルの作成): 指定された設定パラメータに基づいて、マニフェストファイルを分割キーで分割して Symlink マニフェストを作成します。

マニフェストの書き込みを有効にします (Delta Lake ソースで [Create Symlink tables] (Symlink テーブルの作成) を選択している場合のみ設定可能)。

Delta Lake のトランザクションログでテーブルメタデータまたはスキーマの変更を検出するかどうかを選択します。マニフェストファイルを再生成します。Delta Lake SET TBLPROPERTIES で自動マニフェスト更新を構成している場合は、このオプションを選択しないでください。

Delta Lake のテーブルパスを含める

Delta テーブルへの Amazon S3 パスを s3://bucket/prefix/object として 1 つ以上指定します。


              Delta Lake データストアのクロールを指定する。

Lake Formation の認証情報を使用するようにクローラーを設定する方法

AWS Lake Formation 認証情報を使用するようにクローラーを設定すると、同じ AWS アカウント または別の AWS アカウント 内の基盤となる Amazon S3 ロケーションで Amazon S3 データストアまたはデータカタログテーブルにアクセスできます。クローラーとデータカタログテーブルが同じアカウントに存在する場合は、既存のデータカタログテーブルをクローラーのターゲットとして設定できます。現在、データカタログテーブルをクローラーのターゲットとして使用する場合、単一のカタログテーブルを含む単一のカタログターゲットのみが許可されています。

注記

データカタログテーブルをクローラーターゲットとして定義する場合、データカタログテーブルの基盤となるロケーションが Amazon S3 ロケーションであることを確認してください。Lake Formation の認証情報を使用するクローラーは、基盤となる Amazon S3 ロケーションを備えたデータカタログターゲットのみをサポートしています。

クローラーと登録された Amazon S3 ロケーションまたはデータカタログテーブルが同じアカウントに存在する場合は、セットアップが必要になります (アカウント内クローリング)

クローラーが Lake Formation の認証情報を使用してデータストアまたはデータカタログテーブルにアクセスできるようにするには、データロケーションを Lake Formation で登録する必要があります。また、クローラーの IAM ロールには、Amazon S3 バケットが登録されている送信先からデータを読み込む許可が付与されている必要があります。

AWS Management Console または AWS Command Line Interface (AWS CLI) を使用して、次の設定手順を完了できます。

AWS Management Console
  1. クローラーソースにアクセスするようにクローラーを設定する前に、データストアまたはデータカタログのデータロケーションを Lake Formation で登録します。Lake Formation コンソール (https://console.aws.amazon.com/lakeformation/) で、クローラーが定義されている AWS アカウント で Amazon S3 ロケーションをデータレイクのルートロケーションとして登録します。詳細については、「Amazon S3 ロケーションの登録」を参照してください。

  2. クローラーの実行に使用される IAM ロールにデータロケーション許可を付与し、クローラーが Lake Formation の送信先からデータを読み込めるようにします。詳細については、「データロケーション許可の付与 (同じアカウント)」を参照してください。

  3. クローラーロールにデータベースへのアクセス権限 (Create) を付与します。 このデータベースは出力データベースとして指定されています。詳細については、「Lake Formation コンソールと名前付きリソース方式を使用したデータベース許可の付与」を参照してください。

  4. IAM コンソール (https://console.aws.amazon.com/iam/) で、クローラー用の IAM ロールを作成します。ロールに lakeformation:GetDataAccess ポリシーを追加します。

  5. AWS Glue コンソール (https://console.aws.amazon.com/glue/) で、クローラーを設定する際に、オプション [Use Lake Formation credentials for crawling Amazon S3 data source] (Amazon S3 データソースのクローリングに Lake Formation の認証情報を使用する) を選択してください。

    注記

    accountId フィールドは、アカウント内クローリングのためのオプションです。

AWS CLI
aws glue --profile demo create-crawler --debug --cli-input-json '{ "Name": "prod-test-crawler", "Role": "arn:aws:iam::111122223333:role/service-role/AWSGlueServiceRole-prod-test-run-role", "DatabaseName": "prod-run-db", "Description": "", "Targets": { "S3Targets":[ { "Path": "s3://crawl-testbucket" } ] }, "SchemaChangePolicy": { "UpdateBehavior": "LOG", "DeleteBehavior": "LOG" }, "RecrawlPolicy": { "RecrawlBehavior": "CRAWL_EVERYTHING" }, "LineageConfiguration": { "CrawlerLineageSettings": "DISABLE" }, "LakeFormationConfiguration": { "UseLakeFormationCredentials": true, "AccountId": "111122223333" }, "Configuration": { "Version": 1.0, "CrawlerOutput": { "Partitions": { "AddOrUpdateBehavior": "InheritFromTable" }, "Tables": {"AddOrUpdateBehavior": "MergeNewColumns" } }, "Grouping": { "TableGroupingPolicy": "CombineCompatibleSchemas" } }, "CrawlerSecurityConfiguration": "", "Tags": { "KeyName": "" } }'

クローラーと登録された Amazon S3 ロケーションが異なるアカウントに存在する場合は、セットアップが必要になります (クロスアカウントクローリング)

クローラーが Lake Formation の認証情報を使用して別のアカウントのデータストアにアクセスできるようにするには、まず Amazon S3 のデータロケーションを Lake Formation で登録する必要があります。次に、以下の手順を実行して、クローラーのアカウントにデータロケーション許可を付与します。

AWS Management Console または AWS CLI を使用して、次のステップを実行できます。

AWS Management Console
  1. Amazon S3 ロケーションが登録されているアカウント (アカウント B) では、次の操作を行います。

    1. Lake Formation で Amazon S3 パスを登録します。詳細については、「Amazon S3 ロケーションの登録」を参照してください。

    2. クローラーを実行するアカウント (アカウント A) にデータロケーション許可を付与します。詳細については、「Grant data location permissions」(データロケーション許可を付与する) を参照してください。

    3. 基盤となるロケーションをターゲットの Amazon S3 ロケーションとして、Lake Formation に空のデータベースを作成します。詳細については、「データベースの作成」を参照してください。

    4. アカウント A (クローラーを実行するアカウント) に、前のステップで作成したデータベースへのアクセス権を付与します。詳細については、「Granting database permissions」(データベース許可の付与) を参照してください。

  2. クローラーが作成され実行されるアカウント (アカウント A) では、次の操作を行います。

    1. AWS RAM コンソールを使用して、外部アカウント (アカウント B) から共有されたデータベースを受け入れます。詳細については、「AWS Resource Access Manager からのリソース共有招待の承諾」を参照してください。

    2. クローラー用の IAM ロールを作成します。ロールに lakeformation:GetDataAccess ポリシーを追加します。

    3. Lake Formation コンソール (https://console.aws.amazon.com/lakeformation/) で、ターゲットの Amazon S3 ロケーションに対するデータロケーション許可をクローラーの実行に使用される IAM ロールに付与して、クローラーが Lake Formation の送信先からデータを読み込めるようにします。詳細については、「Granting data location permissions」(データロケーション許可の付与) を参照してください。

    4. 共有データベースでリソースリンクを作成します。詳細については、「Create a resource link」(リソースリンクを作成する) を参照してください。

    5. クローラーロールに共有データベースと (Describe) リソースリンクに対するアクセス許可 (Create) を付与します。リソースリンクはクローラーの出力で指定されます。

    6. AWS Glue コンソール (https://console.aws.amazon.com/glue/) で、クローラーを設定する際に、オプション [Use Lake Formation credentials for crawling Amazon S3 data source] (Amazon S3 データソースのクローリングに Lake Formation の認証情報を使用する) を選択してください。

      クロスアカウントクローリングの場合は、ターゲットの Amazon S3 ロケーションが Lake Formation で登録されている AWS アカウント ID を指定します。アカウント内クローリングの場合、accountId フィールドはオプションです。

AWS CLI
aws glue --profile demo create-crawler --debug --cli-input-json '{ "Name": "prod-test-crawler", "Role": "arn:aws:iam::111122223333:role/service-role/AWSGlueServiceRole-prod-test-run-role", "DatabaseName": "prod-run-db", "Description": "", "Targets": { "S3Targets":[ { "Path": "s3://crawl-testbucket" } ] }, "SchemaChangePolicy": { "UpdateBehavior": "LOG", "DeleteBehavior": "LOG" }, "RecrawlPolicy": { "RecrawlBehavior": "CRAWL_EVERYTHING" }, "LineageConfiguration": { "CrawlerLineageSettings": "DISABLE" }, "LakeFormationConfiguration": { "UseLakeFormationCredentials": true, "AccountId": "111111111111" }, "Configuration": { "Version": 1.0, "CrawlerOutput": { "Partitions": { "AddOrUpdateBehavior": "InheritFromTable" }, "Tables": {"AddOrUpdateBehavior": "MergeNewColumns" } }, "Grouping": { "TableGroupingPolicy": "CombineCompatibleSchemas" } }, "CrawlerSecurityConfiguration": "", "Tags": { "KeyName": "" } }'
注記
  • Lake Formation 認証情報を使用するクローラーは、Amazon S3 およびデータカタログターゲットでのみサポートされます。

  • Lake Formation 認証情報供給を使用するターゲットの場合、基盤となる Amazon S3 ロケーションは同じバケットに属している必要があります。例えば、すべてのターゲットロケーションが同じバケット (bucket1) にある限り、ユーザーは複数のターゲット (s3://bucket1/folder1、s3://bucket1/folder2) を使用できます。別のバケット (s3://bucket1/folder1、s3://bucket2/folder2) を指定することはできません。

  • 現在、データカタログのターゲットクローラーでは、単一のカタログテーブルを含む単一のカタログターゲットのみが許可されています。