Google CloudがAWS GlueとBigQueryの接続を紹介、gcloud alphaのコマンド例でカタログ登録が可能
公開:
手順例では、AWS Glue Data Catalogは、gcloudコマンドを使ってフェデレーションカタログとしてGoogle Cloudに登録できます。IAMロールのポリシーは、BigQueryにAWS Glueのメタデータの読み取りと、Amazon S3上のParquetデータファイルへのアクセスを許可する仕組みです。[1]
AWS GlueをBigQueryにつなぐためのAWS側とGoogle Cloud側の設定と、利用前に確かめる条件を解説します。Google Cloud側の登録と同期の確認は、gcloud alphaのコマンド例で進めます。
AWS GlueをBigQueryに接続する仕組み
AWS Glueの接続では、AWS Glue Data Catalogをフェデレーションカタログとして、gcloudコマンドでGoogle Cloudに登録します。主な要素は、カタログ登録やBigQueryに付与するアクセス権限、メタデータの同期、名前空間の確認です。[1]
BigQueryに許可するAWS Glueの操作は、glue:GetCatalogやglue:GetTablesなどの読み取りです。コード例では、対象をarn:aws:glue:us-east-2:123456789012:*に限っています。
permissions_policy.jsonの例は、Parquetデータファイル用にBigQueryへs3:ListBucketとs3:GetObjectを許可します。対象は、arn:aws:s3:::my-glue-iceberg-bucketと配下のオブジェクトです。
AWS GlueをBigQueryへ接続する手順
接続の設定には、AWS CLIやAmazon Athena、gcloudコマンドラインツールを使います。AWS側の準備からメタデータ同期の有効化まで、順に進めます。[1]
仮の信頼ポリシーの作成
AWS側では最初に、Versionが"2012-10-17"の信頼ポリシーtrust_policy.jsonを、仮の値を入れて作成します。Google Cloudがカタログ固有のサービスエージェントを割り当てる前に、IAMロールを作るためです。
Effectは"Allow"で、Federatedのaccounts.google.comにsts:AssumeRoleWithWebIdentityを許可します。StringEquals条件のaccounts.google.com:audとaccounts.google.com:subには、PLACEHOLDER_VALUEを入れる形です。
AWS CLIでのIAMロール作成
IAMロールは、AWS CLIのaws iam create-roleで作成します。--role-name "$AWS_ROLE_NAME"の値は、例ではlakehouse_glue_federation_roleです。
--assume-role-policy-documentには、file://trust_policy.jsonを指定します。Google Cloudは、--max-session-durationの12時間(43200秒)設定で、長時間の分析クエリ中の認証情報の期限切れを防ぐとしています。
IAMロールへの権限ポリシー付与
次に、permissions_policy.jsonに、BigQuery向けの権限ポリシーを定義します。AWS Glueのカタログのメタデータの読み取りと、Amazon S3上のParquetデータファイルへのアクセスを許可するポリシーです。
このポリシーは、aws iam put-role-policyで新しく作成したIAMロールに付けます。ポリシー名は、--policy-nameでlakehouse_glue_federation_policyと指定します。
付与先のロールは、--role-nameの$AWS_ROLE_NAMEです。ポリシーの中身は、--policy-documentでfile://permissions_policy.jsonとして渡します。
Icebergテーブルの作成
権限の設定後は、Amazon Athenaを使ってAWS Glueにデータベースglue_retail_dbを作ります。Icebergテーブルglue_retail_db.dim_storesはstore_keyなど8列で、どちらもIF NOT EXISTS付きです。
LOCATIONは、s3://my-glue-iceberg-bucket/retail/dim_stores/です。TBLPROPERTIESでは、table_typeにICEBERG、formatにparquet、write_compressionにzstdを指定しています。
Google Cloud側のカタログ登録
Google Cloud側では、gcloudコマンドラインツールでフェデレーションカタログを登録します。AWSアカウントIDなどの値は、--glue-warehouseなどのオプションで渡す形式です。
カタログは、最初は更新スケジュールを設定せずに作成します。AWS側の信頼ポリシーが反映されるまでの間に、バックグラウンドの更新が早すぎて失敗するのを防ぐためです。
カタログを作成するコマンドは、以下の通りです。
export GCP_PROJECT_ID="my-lakehouse-project"
export GCP_REGION="us-central1"
export AWS_REGION="us-east-2"
export AWS_ACCOUNT_ID="123456789012"
gcloud alpha biglake iceberg catalogs create glue_retail_db \
--project="$GCP_PROJECT_ID" \
--primary-location="$GCP_REGION" \
--catalog-type="federated" \
--federated-catalog-type="glue" \
--glue-warehouse="$AWS_ACCOUNT_ID" \
--glue-aws-region="$AWS_REGION" \
--glue-aws-role-arn="arn:aws:iam::${AWS_ACCOUNT_ID}:role/lakehouse_glue_federation_role"
公式資料からの抜粋:Cross-cloud conversational analytics made simple with open standards(Connect AWS Glue to BigQuery)。対象版・範囲:Google Cloudブログの手順例(gcloud alphaコマンド)。
上記のコードでは、--catalog-typeにfederated、--federated-catalog-typeにglueを指定しています。例の値は、GCP_REGIONがus-central1、AWS_REGIONがus-east-2です。
サブジェクトIDの取得
次に、Google Cloudがカタログに割り当てた一意の数値のサブジェクトIDを取り出します。取り出した後は、AWS CLIに戻って信頼ポリシーを更新する流れです。
コード例は、gcloud alpha biglake iceberg catalogs describeでglue_retail_dbを指定します。--formatのvalue(biglake-service-account-id)で取り出した値は、LAKEHOUSE_SA_IDに設定してechoで表示します。
IAMロールの信頼ポリシー更新
AWS CLIに戻り、仮の値を確認済みのGoogle CloudのIDに置き換えて、IAMロールの信頼ポリシーを更新します。コード例では、trust_policy_final.jsonを新しく作り、aud条件とsub条件の両方に$LAKEHOUSE_SA_IDを入れる形です。
Effectは"Allow"で、Federatedのaccounts.google.comにsts:AssumeRoleWithWebIdentityを許可します。audとsubの条件はStringEqualsで、更新のコマンドはaws iam update-assume-role-policyです。
更新するロールは、--role-nameの$AWS_ROLE_NAMEで指定します。--policy-documentには、file://trust_policy_final.jsonを渡します。
メタデータ同期の有効化
メタデータの同期は、gcloud alpha biglake iceberg catalogs updateで有効にします。glue_retail_dbを対象に、--projectに$GCP_PROJECT_ID、--refresh-intervalに300sを指定する形です。
同期した名前空間を確かめるコマンドは、以下の通りです。
# Verify namespaces synchronized from AWS Glue
gcloud alpha biglake iceberg namespaces list \
--project="$GCP_PROJECT_ID" \
--catalog="glue_retail_db"
公式資料からの抜粋:Cross-cloud conversational analytics made simple with open standards(5. Enable metadata synchronization and verify)。対象版・範囲:Google Cloudブログの手順例(gcloud alphaコマンド)。
上記のコードでは、--catalogにglue_retail_dbを指定します。AWS Glueから同期された名前空間を一覧にし、検出と同期を確かめます。
AWS GlueをBigQueryに接続する前提
フェデレーションカタログの登録には、12桁のAWSアカウントIDやAWSリージョン、作成したIAMロールのARNが必要です。カタログの作成や取得、更新、名前空間の一覧表示に使う4つのgcloudコマンドは、いずれもgcloud alphaで始まります。[1]
AWS Lake Formation権限
AWS Lake Formationを使う環境では、IAMAllowedPrincipalsグループが対象のデータベースとテーブルにアクセスできるかの確認が必要です。AWS Lake Formationに登録したバケットなら、lakehouse_glue_federation_roleに明示的な権限を与える方法も選べます。
権限がない場合、Lake Formationのセキュリティ設定がアクセスをブロックします。対象は、IAMロールによるカタログのメタデータへのアクセスです。
場面別の確認点と登録時の順序
編集部が整理した場面別の確認点と作業順序は、以下の通りです。
東京リージョンなど例と異なるリージョンでは、GCP_REGIONやAWS_REGIONを置き換えます。そのリージョンで利用できるかも、公式情報で確かめる必要があります。
出典
- ^ Google Cloud. 「Cross-cloud conversational analytics made simple with open standards」. https://cloud.google.com/blog/products/data-analytics/cross-cloud-conversational-analytics-with-borderless-lakehouse, (参照 26-10-13).
※本記事は公式の一次情報を基に編集しています。内容はAIで確認していますが、誤りや最新情報との差異がある場合は、以下フォームよりご報告ください。
修正・削除・掲載などの依頼はこちら

















