S3 テーブルバケットが AWS Glue Data Catalog と統合されると、PyIceberg や Spark などの Apache Iceberg 互換クライアントから S3 テーブルに接続するために AWS Glue Iceberg REST エンドポイントを使用できます。AWS Glue Iceberg REST エンドポイントは、Iceberg テーブルを操作するための標準化されたインターフェイスを提供する Iceberg REST Catalog Open API 仕様
PyIceberg を使用したエンドツーエンドのチュートリアルについては、「AWS Glue Iceberg REST エンドポイントを通じて PyIceberg により Amazon S3 Tables のデータにアクセスする
クライアント用の IAM ロールを作成する
AWS Glue エンドポイントを通じてテーブルにアクセスするには、AWS Glue および Lake Formation アクションに対するアクセス許可を付与した IAM ロールを作成する必要があります。この手順では、このロールを作成し、そのアクセス許可を設定する方法について説明します。
IAM コンソール (https://console.aws.amazon.com/iam/
) を開きます。 左のナビゲーションペインの [ポリシー] を選択します。
[ポリシーを作成] を選択し、ポリシーエディタで [JSON] を選択します。
AWS Glue および Lake Formation アクションへのアクセス許可を付与する次のインラインポリシーを追加します。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow" "Action": [ "glue:GetCatalog", "glue:GetDatabase", "glue:GetDatabases", "glue:GetTable", "glue:GetTables", "glue:CreateTable", "glue:UpdateTable" ], "Resource": [ "arn:aws:glue:
<region>
:<account-id>
:catalog", "arn:aws:glue:<region>
:<account-id>
:catalog/s3tablescatalog", "arn:aws:glue:<region>
:<account-id>
:catalog/s3tablescatalog/<s3_table_bucket_name>
", "arn:aws:glue:<region>
:<account-id>
:table/s3tablescatalog/<s3_table_bucket_name>
/<namespace>
/*", "arn:aws:glue:<region>
:<account-id>
:database/s3tablescatalog/<s3_table_bucket_name>
/<namespace>
" ] } ] }, { "Effect": "Allow", "Action": [ "lakeformation:GetDataAccess" ], "Resource": "*" } ] }
Lake Formation でアクセスを定義する
Lake Formation は、データレイクテーブルに対するきめ細かなアクセスコントロールを提供します。S3 バケットを AWS Glue Data Catalog と統合すると、テーブルは Lake Formation のリソースとして自動的に登録されます。これらのテーブルにアクセスするには、IAM ポリシーのアクセス許可に加えて、特定の Lake Formation 許可を IAM アイデンティティに付与する必要があります。
以下の手順では、Lake Formation のアクセスコントロールを適用して、Iceberg クライアントがテーブルに接続できるようにする方法について説明します。これらのアクセス許可を適用するには、データレイク管理者としてサインインする必要があります。
外部エンジンによるテーブルデータへのアクセスを許可する
Lake Formation では、外部エンジンがデータにアクセスできるように、テーブルへのフルアクセスを有効にする必要があります。これにより、サードパーティーアプリケーションは、リクエストされたテーブルに対するフルアクセス許可を付与した IAM ロールを使用する際に、Lake Formation から一時的な認証情報を取得できます。
Lake Formation コンソール (https://console.aws.amazon.com/lakeformation/
Lake Formation コンソール (https://console.aws.amazon.com/lakeformation/
) を開き、データレイク管理者としてサインインします。 ナビゲーションペインの [管理] で、[アプリケーションの統合設定] を選択します。
[外部エンジンに、Amazon S3 ロケーション内のデータに対するフルアクセス許可を付与する] を選択します。次に、[保存] を選択します。
テーブルリソースに対する Lake Formation 許可の付与
次に、Iceberg 互換クライアント用に作成した IAM ロールに Lake Formation アクセス許可を付与します。これらのアクセス許可により、ロールは名前空間にテーブルを作成して管理できます。データベースレベルとテーブルレベルの両方のアクセス許可を付与する必要があります。
データベースに対するアクセス許可を付与するには
AWS Lake Formation コンソール (https://console.aws.amazon.com/lakeformation/
) を開き、データレイク管理者としてサインインします。 ナビゲーションペインで、[データアクセス許可]、[付与] の順に選択します。
[アクセス許可の付与] ページの [プリンシパル] で、[IAM ユーザーとロール] を選択し、AWS Glue Iceberg REST endpoint アクセス用に作成した IAM ロールを選択します。
[LF タグまたはカタログリソース] で、[名前付きのデータカタログリソース] を選択します。
[カタログ] で、テーブルバケット用に作成した AWS Glue データカタログを選択します。例えば、
と指定します。<accoundID>
:s3tablescatalog/<table-bucket-name>
[Database] (データベース) には
mynamespace
を選択します。[テーブルのアクセス許可] で、[テーブルを作成] と [説明] を選択します。
[Grant] (付与) を選択します。
テーブルに対するアクセス許可を付与するには
AWS Lake Formation コンソール (https://console.aws.amazon.com/lakeformation/) を開き、データレイク管理者としてサインインします。
ナビゲーションペインで、[データアクセス許可]、[付与] の順に選択します。
[アクセス許可の付与] ページの [プリンシパル] で、[IAM ユーザーとロール] を選択し、AWS Glue Iceberg REST endpoint アクセス用に作成した IAM ロールを選択します。
[LF タグまたはカタログリソース] で、[名前付きのデータカタログリソース] を選択します。
[カタログ] で、テーブルバケット用に作成した AWS Glue データカタログを選択します。例えば、
と指定します。<accoundID>
:s3tablescatalog/<table-bucket-name>
[データベース] で、作成した S3 テーブルバケット名前空間を選択します。
[テーブル]で、[ALL_TABLES] を選択します。
[テーブルアクセス許可] で、[Super] を選択します。
[Grant] (付与) を選択します。
エンドポイントを使用するための環境を設定する
テーブルへのアクセスに必要な許可を付与した IAM ロールを設定した後、次のコマンドを使用して、AWS CLI をそのロールで設定することで、ローカルマシンから Iceberg クライアントを実行できます。
aws sts assume-role --role-arn "arn:aws:iam::
<accountid>
:role/<glue-irc-role>
" --role-session-name<glue-irc-role>
AWS Glue REST エンドポイントを通じてテーブルにアクセスするには、Iceberg 互換クライアントでカタログを初期化する必要があります。この初期化では、sigv4 プロパティ、エンドポイント URI、ウェアハウスの場所などのカスタムプロパティを指定する必要があります。これらのプロパティを次のように指定します。
-
Sigv4 プロパティ – Sigv4 を有効にする必要があります。署名は
glue
です。 -
ウェアハウスの場所 - テーブルバケットです。次の形式で指定します:
<accountid>
:s3tablescatalog/<table-bucket-name>
-
エンドポイント URI - リージョン固有のエンドポイントについては、「AWS Glue サービスエンドポイントのリファレンスガイド」を参照してください。
次の例では、pyIceberg カタログを初期化する方法を示しています。
rest_catalog = load_catalog(
s3tablescatalog
, **{ "type": "rest", "warehouse": "<accountid>
:s3tablescatalog/<table-bucket-name>
", "uri": "https://glue.<region>
.amazonaws.com/iceberg", "rest.sigv4-enabled": "true", "rest.signing-name": "glue", "rest.signing-region": region } )
AWS GlueIceberg REST エンドポイントの実装の詳細については、「AWS Glue ユーザーガイド」の「AWS Glue Iceberg REST エンドポイントを使用したデータカタログへの接続」を参照してください。