Dokumen ini menjelaskan cara menyiapkan Lakehouse lintas cloud untuk Apache Iceberg guna membuat kueri data dari katalog AWS Glue langsung dalam Google Cloud. Kemampuan ini menyatukan analisis data Anda dengan mengintegrasikan sumber data eksternal dengan lingkungan Google Cloud yang ada.
Setelah itu, Anda dapat menggunakan Lakehouse untuk mengelola akses ke data gabungan Anda.
Sebelum memulai
- Tinjau Ringkasan Lakehouse untuk memahami cara Lakehouse mengelola akses ke data.
- Baca Tentang Lakehouse lintas cloud untuk memahami cara kerjanya.
- Tinjau katalog yang didukung untuk memverifikasi persyaratan format tabel dan konfigurasi yang didukung.
- Pastikan Administrator AWS Anda memiliki izin untuk membuat peran Identity and Access Management (IAM) dan mengonfigurasi kebijakan izin.
- Opsional: Jika Anda berencana merutekan kueri melalui interkoneksi pribadi antara VPC Anda dan VPC penyedia cloud jarak jauh Anda (misalnya, AWS), pastikan Anda memiliki akun aktif dengan penyedia jarak jauh Anda, sediakan Cross-Cloud Interconnect atau Partner Interconnect, buat sesi BGP dengan Cloud Router Anda, dan verifikasi bahwa Anda memiliki izin IAM yang diperlukan di kedua lingkungan cloud. Google Cloud
- Login ke akun Google Cloud Anda. Jika Anda baru menggunakan Google Cloud, buat akun untuk mengevaluasi performa produk kami dalam skenario dunia nyata. Pelanggan baru juga mendapatkan kredit gratis senilai $300 untuk menjalankan, menguji, dan men-deploy workload.
-
Verify that billing is enabled for your Google Cloud project.
Enable the BigLake API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
Verify that billing is enabled for your Google Cloud project.
Enable the BigLake API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.
Peran yang diperlukan
Untuk mendapatkan izin yang Anda perlukan untuk menyiapkan Lakehouse lintas cloud, minta administrator Anda untuk memberi Anda peran IAM berikut di project Anda:
-
Mengelola katalog Lakehouse:
BigLake Admin (
roles/biglake.admin) -
Merutekan traffic melalui interkoneksi pribadi:
Admin Jaringan Compute (
roles/compute.networkAdmin), Pelihat Direktori Layanan (roles/servicedirectory.viewer), dan Layanan yang Diizinkan PSC Direktori Layanan (roles/servicedirectory.pscAuthorizedService)
Untuk mengetahui informasi selengkapnya tentang pemberian peran, lihat Mengelola akses ke project, folder, dan organisasi.
Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran khusus atau peran bawaan lainnya.
Batasan dan pertimbangan
Bagian ini mencantumkan batasan dan pertimbangan untuk menggunakan Lakehouse lintas cloud.
- Penyedia Cloud yang Didukung: Penggunaan Private Interconnect dengan Lakehouse lintas cloud Anda didukung dengan penyedia cloud jarak jauh berikut: Amazon Web Services (AWS). Anda dapat menggunakan Cross-Cloud Interconnect atau Partner Interconnect.
- Perutean jaringan: Jika interkoneksi pribadi (seperti CCI milik pelanggan atau Partner Interconnect) tidak dikonfigurasi, kueri akan dirutekan melalui internet publik. Hal ini dapat menyebabkan biaya traffic keluar yang lebih tinggi dari penyedia cloud jarak jauh Anda dan performa yang kurang dapat diprediksi.
- Keaktualan data: Flag
--refresh-intervaluntuk katalog gabungan menentukan seberapa sering metadata disinkronkan. Interval yang lebih pendek memberikan data yang lebih baru, tetapi dapat menimbulkan biaya API tambahan dari penyedia katalog jarak jauh. Pelaporan Metrik Iceberg: Pelaporan Metrik Iceberg tidak tersedia untuk katalog gabungan. Tetapkan properti
rest-metrics-reporting-enabledkefalsedi klien Iceberg Anda saat mengakses katalog gabungan.
Alur kerja umum
Untuk menyiapkan dan menggunakan Lakehouse lintas cloud, ikuti langkah-langkah umum berikut:
- Siapkan Cross-Cloud Interconnect (Opsional): Konfigurasi koneksi pribadi antara Google Cloud VPC Anda dan penyedia cloud jarak jauh Anda.
- Siapkan federasi: Konfigurasi autentikasi dengan membuat peran IAM dengan kebijakan kepercayaan placeholder dengan penyedia jarak jauh Anda. Kemudian, buat katalog gabungan di Lakehouse dan perbarui kebijakan kepercayaan.
- Verifikasi koneksi: Pastikan Lakehouse dapat terhubung ke katalog jarak jauh Anda dengan berhasil.
- Kueri data: Jalankan kueri terhadap data gabungan Anda menggunakan BigQuery atau Managed Service untuk Apache Spark. Untuk mengetahui informasi selengkapnya, lihat Menggunakan Lakehouse lintas cloud.
- Mengonfigurasi izin: Gunakan IAM untuk mengelola siapa yang dapat melihat dan mengkueri data gabungan.
Menyiapkan Cross-Cloud Interconnect (Opsional)
Kueri ke katalog jarak jauh Anda dikirim melalui internet publik secara default. Untuk membantu meningkatkan keamanan dan kepatuhan, memberikan performa yang dapat diprediksi, dan mengurangi biaya transfer data, gunakan interkoneksi pribadi. Hal ini akan membuat koneksi jaringan pribadi khusus antara Google Cloud Virtual Private Cloud (VPC) Anda dan jaringan penyedia cloud jarak jauh Anda (misalnya, AWS).
Anda dapat menyediakan dan mengonfigurasi salah satu opsi interkoneksi pribadi berikut antara VPC Anda dan VPC penyedia cloud jarak jauh Anda (misalnya, AWS): Google Cloud
- Cross-Cloud Interconnect: Koneksi fisik khusus.
- Partner Interconnect: Koneksi melalui penyedia layanan yang didukung.
Buat sesi BGP antara Cloud Router Anda di Google Cloud dan VPC penyedia cloud jarak jauh Anda untuk memastikan pertukaran rute.
Untuk mengaktifkan pembuatan kueri pribadi, Anda harus mengonfigurasi jalur dari Lakehouse ke bucket penyimpanan jarak jauh Anda (misalnya, bucket AWS Amazon S3) melalui interkoneksi pribadi Anda. Ada dua alur arsitektur yang dapat Anda ikuti untuk mengonfigurasi pemilihan rute ini:
- Perutean Load Balancer Jaringan proxy regional internal: Alur ini menggunakan Google Cloud Load Balancer Jaringan proxy regional internal untuk mendistribusikan permintaan di seluruh Grup Endpoint Jaringan (NEG) Konektivitas Hybrid yang mengarah ke beberapa Elastic Network Interface (ENI) AWS. Alur ini sangat penting untuk load balancing, skalabilitas, dan ketersediaan tinggi. Hal ini diperlukan untuk Partner Interconnect dan direkomendasikan untuk Cross-Cloud Interconnect untuk load balancing, skalabilitas, dan ketersediaan tinggi.
- Perutean endpoint langsung: Alur ini menghubungkan Service Directory langsung ke satu alamat IP Endpoint VPC Antarmuka AWS. Alur ini hanya berfungsi untuk Cross-Cloud Interconnect dan tidak didukung untuk Partner Interconnect.
Pilih alur konfigurasi yang sesuai dengan persyaratan arsitektur Anda:
Load Balancer Jaringan proxy internal regional
Untuk mengonfigurasi Load Balancer Jaringan proxy regional internal guna mendistribusikan permintaan di beberapa ENI AWS untuk ketersediaan tinggi dan load balancing, ikuti langkah-langkah berikut:
Mengonfigurasi jaringan AWS
Pertama, buat Endpoint Antarmuka VPC Amazon S3 (AWS PrivateLink):
- Di konsol AWS VPC, buat Endpoint Antarmuka untuk Amazon S3.
- Untuk nama layanan, tentukan
com.amazonaws.<var>AWS_REGION</var>.s3. - Pilih VPC dan subnet yang terhubung melalui Direct Connect ke VPC Anda. Google Cloud
- Lampirkan Grup Keamanan ke endpoint untuk mengontrol akses masuk.
- Tindakan ini menyediakan Elastic Network Interface (ENI) di setiap subnet yang dipilih. Catat alamat IP pribadi ENI ini.
Selanjutnya, konfigurasikan Grup Keamanan:
- Pastikan Grup Keamanan atau grup yang terpasang ke
ENI Endpoint Amazon S3 mengizinkan traffic TCP masuk di port
443dari rentang IP yang relevan di Google Cloud VPC Anda.
Mengonfigurasi Google Cloud jaringan
Ikuti petunjuk untuk menyiapkan Load Balancer Jaringan proxy internal regional untuk endpoint hybrid.
Saat mengikuti petunjuk, pastikan Anda melakukan hal berikut:
- Buat NEG konektivitas hibrida (
NON_GCP_PRIVATE_IP_PORT) dan tambahkan alamat IP pribadi ENI AWS yang Anda buat sebelumnya. - Gunakan port TCP
443untuk NEG, health check, dan aturan penerusan. - Siapkan load balancer di Google Cloud region yang sama dengan katalog gabungan Anda.
Setelah membuat aturan penerusan untuk load balancer, catat alamat IP internal yang ditetapkan untuknya. Ini adalah
ILB_IP_ADDRESS Anda.
Mengonfigurasi Service Directory
Daftarkan alamat IP ILB di Service Directory, sehingga Lakehouse dapat menemukannya.
Buat namespace untuk cloud jarak jauh Anda:
gcloud service-directory namespaces create NAMESPACE \ --project=PROJECT_ID \ --location=REGION
Ganti kode berikut:
NAMESPACE: ID unik untuk namespace Anda.PROJECT_ID: Google Cloud Project ID Anda.REGION: Google Cloud region. Contoh,us-east4. Region ini harus sama dengan region katalog gabungan.
Buat layanan di namespace Direktori Layanan:
gcloud service-directory services create SERVICE_NAME \ --namespace=NAMESPACE \ --project=PROJECT_ID \ --location=REGION
Ganti kode berikut:
SERVICE_NAME: ID unik untuk layanan Anda.
Buat endpoint untuk ILB di layanan:
gcloud service-directory endpoints create ENDPOINT_NAME \ --project=PROJECT_ID \ --namespace=NAMESPACE \ --service=SERVICE_NAME \ --location=REGION \ --network=projects/PROJECT_NUMBER/global/networks/VPC_NETWORK \ --address=ILB_IP_ADDRESS \ --port=443
Ganti kode berikut:
ENDPOINT_NAME: ID unik untuk endpoint Anda.PROJECT_NUMBER: nomor project Google Cloud Anda. Gunakan nomor project Anda di flag--network.ILB_IP_ADDRESS: alamat IP internal aturan penerusan ILB Anda.
Endpoint langsung
Untuk mengonfigurasi Service Directory agar merutekan traffic langsung ke satu alamat IP Endpoint VPC Antarmuka AWS, ikuti langkah-langkah berikut:
- Buat Endpoint VPC Antarmuka untuk Amazon S3 di dalam VPC AWS Anda. Catat alamat IP dan port endpoint ini.
Buat namespace untuk cloud jarak jauh Anda:
gcloud service-directory namespaces create NAMESPACE \ --project=PROJECT_ID \ --location=REGION
Ganti kode berikut:
NAMESPACE: ID unik untuk namespace Anda.PROJECT_ID: Google Cloud Project ID Anda.REGION: Google Cloud region. Contoh,us-east4. Region ini harus sama dengan region katalog gabungan.
Buat layanan di namespace Direktori Layanan:
gcloud service-directory services create SERVICE_NAME \ --namespace=NAMESPACE \ --project=PROJECT_ID \ --location=REGION
Ganti kode berikut:
SERVICE_NAME: ID unik untuk layanan Anda.
Buat endpoint di layanan yang berisi informasi perutean untuk Endpoint VPC Antarmuka Amazon S3 Anda:
gcloud service-directory endpoints create ENDPOINT_NAME \ --service=SERVICE_NAME \ --namespace=NAMESPACE \ --project=PROJECT_ID \ --location=REGION \ --address=S3_VPCE_IP_ADDRESS \ --port=S3_VPCE_PORT \ --network=projects/PROJECT_NUMBER/global/networks/VPC_NETWORK
Ganti kode berikut:
ENDPOINT_NAME: ID unik untuk endpoint Anda.S3_VPCE_IP_ADDRESS: alamat IP Endpoint VPC Antarmuka Amazon S3 Anda. Contoh,10.0.1.45.S3_VPCE_PORT: nomor port Endpoint VPC Antarmuka Amazon S3. Contoh,443.PROJECT_NUMBER: nomor project Google Cloud Anda. Gunakan nomor project Anda di flag--network.VPC_NETWORK: nama jaringan Google Cloud VPC yang terkait dengan interkoneksi pribadi Anda.
Menyiapkan federasi lintas cloud
Untuk membuat kueri data, siapkan katalog gabungan Lakehouse yang terhubung ke katalog AWS jarak jauh Anda.
Buat peran AWS IAM dengan kebijakan kepercayaan placeholder
Lakehouse menyediakan ID akun layanan Google setelah pembuatan katalog. Buat peran AWS IAM dengan kebijakan kepercayaan placeholder.
Buat file bernama
trust_policy.json:{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "accounts.google.com" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "accounts.google.com:aud": [ "PLACEHOLDER_VALUE" ], "accounts.google.com:sub": [ "PLACEHOLDER_VALUE" ] } } } ] }
Jalankan perintah AWS CLI untuk membuat peran dengan kebijakan kepercayaan placeholder. Sebaiknya tetapkan durasi sesi maksimum ke 12 jam (
43200detik) untuk mencegah masa berlaku kredensial berakhir selama tugas yang berjalan lama:aws iam create-role \ --role-name AWS_ROLE_NAME \ --assume-role-policy-document file://trust_policy.json \ --max-session-duration 43200
Ganti kode berikut:
AWS_ROLE_NAME: nama untuk peran IAM AWS Anda. Contoh,biglake_glue_federation_role.
Melampirkan kebijakan izin
Lampirkan kebijakan izin ke peran IAM Anda yang memungkinkan Lakehouse mengakses bucket S3 dan Katalog Data Glue di region AWS. Kebijakan ini juga memberikan akses ke bucket tabel S3 jika Anda menggunakan integrasi Tabel S3 AWS Lake Formation. Jika Anda telah mengupgrade dari izin data AWS Glue default ke model AWS Lake Formation, Anda mungkin perlu memberikan izin tambahan di Lake Formation.
Buat file bernama
permissions_policy.jsondengan konfigurasi kebijakan berikut.{ "Version": "2012-10-17", "Statement": [ { "Sid": "GlueRead", "Effect": "Allow", "Action": [ "glue:GetCatalog", "glue:GetDatabase", "glue:GetDatabases", "glue:GetTable", "glue:GetTables" ], "Resource": "arn:aws:glue:AWS_REGION:AWS_ACCOUNT_ID:*" }, { "Sid": "S3Read", "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:GetObject" ], "Resource": [ "arn:aws:s3:::*" ] }, { "Sid": "S3TablesRead", "Effect": "Allow", "Action": [ "s3tables:GetTableBucket", "s3tables:ListNamespaces", "s3tables:GetNamespace", "s3tables:ListTables", "s3tables:GetTable", "s3tables:GetTableMetadataLocation", "s3tables:GetTableData" ], "Resource": [ "arn:aws:s3tables:AWS_REGION:AWS_ACCOUNT_ID:*" ] } ] }
Lampirkan kebijakan izin ini ke peran IAM Anda:
aws iam put-role-policy \ --role-name AWS_ROLE_NAME \ --policy-name AWS_POLICY_NAME \ --policy-document file://permissions_policy.json
Ganti kode berikut:
AWS_ROLE_NAME: nama peran IAM AWS Anda. Contoh,biglake_glue_federation_role.AWS_POLICY_NAME: nama untuk kebijakan izin Anda. Contoh,biglake_glue_permissions.AWS_REGION: region AWS tempat katalog Glue atau Tabel S3 Anda berada. Contoh,us-east-1.AWS_ACCOUNT_ID: string ID akun AWS 12 digit Anda. Contoh,123456789012.
Membuat katalog gabungan
Buat katalog gabungan di Google Cloud dengan menggunakan CLI gcloud
atau REST API.
Untuk mencegah kegagalan sinkronisasi metadata sebelum waktunya saat hubungan kepercayaan AWS disebarkan, lakukan inisialisasi katalog tanpa menentukan jadwal refresh (yang secara default adalah 0s).
Google Cloud CLI
Internet publik (tanpa CCI)
Jika Anda tidak mengonfigurasi CCI, koneksi akan berjalan dengan aman melalui internet publik.
gcloud alpha biglake iceberg catalogs create FEDERATED_CATALOG_NAME \ --project="PROJECT_ID" \ --primary-location="REGION" \ --catalog-type="federated" \ --federated-catalog-type="glue" \ --glue-warehouse="GLUE_OR_S3_TABLE_BUCKET_WAREHOUSE" \ --glue-aws-region="AWS_REGION" \ --glue-aws-role-arn="arn:aws:iam::AWS_ACCOUNT_ID:role/AWS_ROLE_NAME"
Milik pelanggan (CCI)
Jika Anda mengonfigurasi Private Interconnect (seperti Dedicated CCI atau Partner Interconnect), berikan referensi layanan Service Directory untuk memastikan Lakehouse merutekan traffic secara pribadi.
gcloud alpha biglake iceberg catalogs create FEDERATED_CATALOG_NAME \ --project="PROJECT_ID" \ --primary-location="REGION" \ --catalog-type="federated" \ --federated-catalog-type="glue" \ --glue-warehouse="GLUE_OR_S3_TABLE_BUCKET_WAREHOUSE" \ --glue-aws-region="AWS_REGION" \ --glue-aws-role-arn="arn:aws:iam::AWS_ACCOUNT_ID:role/AWS_ROLE_NAME" \ --service-directory-name="projects/PROJECT_ID/locations/REGION/namespaces/NAMESPACE/services/SERVICE_NAME"
REST
curl -s -X POST \ -H "x-goog-user-project: PROJECT_ID" \ -H "Accept: application/json" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://biglake.googleapis.com/iceberg/v1/restcatalog/extensions/projects/PROJECT_ID/catalogs?iceberg_catalog_id=FEDERATED_CATALOG_NAME&primary_location=REGION" \ -d '{ "catalog_type": "CATALOG_TYPE_FEDERATED", "storage_regions": ["'"REGION"'"], "federated_catalog_options": { "glue_catalog_info": { "warehouse": "'"GLUE_OR_S3_TABLE_BUCKET_WAREHOUSE"'", "aws_region": "'"AWS_REGION"'", "aws_role_arn": "arn:aws:iam::'"AWS_ACCOUNT_ID"':role/'"AWS_ROLE_NAME"'" } } }'
Ganti kode berikut:
FEDERATED_CATALOG_NAME: nama untuk katalog gabungan Anda.PROJECT_ID: Google Cloud Project ID Anda.REGION: region Lakehouse tempat katalog gabungan dibuat. Contoh,us-east4.GLUE_OR_S3_TABLE_BUCKET_WAREHOUSE: ID katalog gudang data target Anda. Untuk Glue Data Catalog region AWS, masukkan string ID akun AWS 12 digit Anda. Contoh,123456789012. Untuk menggunakan bucket tabel S3 di region, masukkanAWS_ACCOUNT_ID:s3tablescatalog/S3_TABLE_BUCKET. Contoh,123456789012:s3tablescatalog/my-table-bucket.AWS_ACCOUNT_ID: string ID akun AWS 12 digit Anda. Contoh,123456789012.AWS_REGION: region AWS tempat bucket tabel S3 atau katalog Glue Anda berada. Contoh,us-east-1.AWS_ROLE_NAME: nama peran IAM AWS Anda. Contoh,biglake_glue_federation_role.NAMESPACE: (Opsional) namespace Direktori Layanan yang Anda buat selama penyiapan interkoneksi pribadi.SERVICE_NAME: (Opsional) nama layanan Service Directory yang Anda buat selama penyiapan interkoneksi pribadi.
Memperbarui kebijakan kepercayaan
Saat katalog dibuat, Lakehouse menyediakan akun layanan unik untuknya, yang ditampilkan sebagai kolom biglake-service-account-id dalam respons pembuatan katalog. Anda menggunakan akun layanan ini untuk
membuat hubungan tepercaya.
Jalankan perintah berikut untuk mengekstrak nilai
biglake-service-account-idke dalam variabel bash aktif:BIGLAKE_SA_ID=$(gcloud alpha biglake iceberg catalogs describe FEDERATED_CATALOG_NAME \ --project="PROJECT_ID" \ --format="value(biglake-service-account-id)")
Perbarui kebijakan kepercayaan peran IAM AWS Anda untuk mengganti placeholder dengan ID Agen Layanan Google terverifikasi Anda. Blok kondisi memvalidasi kecocokan
subdanaud. Tulis kebijakan ke file bernamatrust_policy_comprehensive.json:cat > trust_policy_comprehensive.json << EOF { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "accounts.google.com" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "accounts.google.com:aud": [ "$BIGLAKE_SA_ID" ], "accounts.google.com:sub": [ "$BIGLAKE_SA_ID" ] } } } ] } EOF
Terapkan kebijakan akhir ke peran AWS Anda:
aws iam update-assume-role-policy \ --role-name AWS_ROLE_NAME \ --policy-document file://trust_policy_comprehensive.json
Mengaktifkan muat ulang di latar belakang
Setelah hubungan kepercayaan yang aman berhasil dibuat di kedua platform, perbarui katalog Anda untuk mengaktifkan refresh di latar belakang (setiap 5 menit atau 300s, atau lebih besar).
gcloud CLI
gcloud alpha biglake iceberg catalogs update FEDERATED_CATALOG_NAME \ --project="PROJECT_ID" \ --refresh-interval="300s"
REST
curl -s -X PATCH \ -H "x-goog-user-project: PROJECT_ID" \ -H "Accept: application/json" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://biglake.googleapis.com/iceberg/v1/restcatalog/extensions/projects/PROJECT_ID/catalogs/FEDERATED_CATALOG_NAME?updateMask=federated_catalog_options.refresh_options.refresh_schedule" \ -d '{ "federated_catalog_options": { "refresh_options": { "refresh_schedule": { "refresh_interval": "300s" } } } }'
Memverifikasi koneksi
Pastikan siklus refresh latar belakang katalog berhasil diselesaikan dan namespace disinkronkan.
Pastikan status refresh menunjukkan keberhasilan:
gcloud alpha biglake iceberg catalogs describe FEDERATED_CATALOG_NAME \ --project="PROJECT_ID" \ --location="REGION"
Pastikan database jarak jauh muncul sebagai namespace yang disinkronkan:
gcloud alpha biglake iceberg namespaces list \ --catalog="FEDERATED_CATALOG_NAME" \ --project="PROJECT_ID" \ --location="REGION"