Menyiapkan Lakehouse lintas cloud untuk Snowflake

Dokumen ini menjelaskan cara menyiapkan Lakehouse lintas cloud untuk mengueri data dari katalog Snowflake (Snowflake Horizon) langsung dalam Google Cloud. Kemampuan ini menyatukan analisis data Anda dengan mengintegrasikan sumber data eksternal dengan lingkungan Google Cloudyang ada.

Setelah itu, Anda dapat menggunakan Lakehouse untuk mengelola akses ke data gabungan Anda.

Sebelum memulai

  1. Tinjau Ringkasan Lakehouse untuk memahami cara Lakehouse mengelola akses ke data.
  2. Baca Tentang Lakehouse lintas cloud untuk memahami cara kerjanya.
  3. Tinjau katalog yang didukung untuk memverifikasi persyaratan lokasi eksternal dan konfigurasi yang didukung.
  4. Pahami cara menggunakan secret Secret Manager regional. Hal ini diperlukan untuk menyiapkan Lakehouse lintas cloud dengan Snowflake menggunakan autentikasi berbasis rahasia.
  5. Jika menggunakan autentikasi berbasis rahasia, buat Token Akses Pribadi (PAT) dalam lingkungan Snowflake Horizon Anda yang memiliki akses baca ke katalog target. Proses ini berada di luar cakupan dokumentasi ini.
  6. Jika menggunakan Workload Identity Federation, pastikan Anda memiliki akses ke UI akun Snowflake dengan hak istimewa ACCOUNTADMIN untuk menyediakan pengguna layanan.
  7. Opsional: Jika Anda berencana merutekan kueri melalui interkoneksi pribadi antara VPC Google Cloud Anda dan VPC penyedia cloud jarak jauh Anda (misalnya, AWS), pastikan Anda memiliki akun aktif dengan penyedia jarak jauh Anda, sediakan Dedicated Cross-Cloud Interconnect atau Partner Cross-Cloud Interconnect, buat sesi BGP dengan Cloud Router Anda, dan verifikasi bahwa Anda memiliki izin Identity and Access Management (IAM) yang diperlukan di kedua lingkungan cloud.
  8. 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.
  9. Verify that billing is enabled for your Google Cloud project.

  10. Enable the BigLake, Secret Manager APIs.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the APIs

  11. Verify that billing is enabled for your Google Cloud project.

  12. Enable the BigLake, Secret Manager APIs.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the APIs

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: Admin BigLake (roles/biglake.admin)
  • Mengelola secret: Secret Manager Admin (roles/secretmanager.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.

Detail katalog yang didukung

Panduan ini memberikan petunjuk untuk menyiapkan Lakehouse lintas cloud dengan katalog Snowflake (Snowflake Horizon) di Amazon Web Services (AWS) dan Google Cloud. Untuk mengetahui informasi mendetail terkait persyaratan lokasi eksternal dan konfigurasi yang didukung, lihat Katalog yang didukung.

Batasan dan pertimbangan

Bagian ini mencantumkan batasan dan pertimbangan untuk menggunakan Lakehouse lintas cloud.

  • Penyedia Cloud yang Didukung: Penggunaan interkoneksi pribadi dengan Lakehouse lintas cloud Anda didukung dengan penyedia cloud jarak jauh berikut: Amazon Web Services (AWS). Anda dapat menggunakan Dedicated Cross-Cloud Interconnect atau Partner Cross-Cloud Interconnect.
  • Perutean jaringan: Jika interkoneksi pribadi (seperti CCI Khusus atau CCI Partner) 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-interval untuk katalog gabungan menentukan seberapa sering metadata disinkronkan. Interval yang lebih pendek memberikan data yang lebih aktual, 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-enabled ke false di 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 dan buat katalog gabungan di Lakehouse.
    • Autentikasi berbasis secret (PAT): Buat secret di Secret Manager dengan kredensial katalog jarak jauh Anda. Kemudian, buat katalog gabungan di Lakehouse dan beri akun layanan katalog akses ke secret.
    • Workload Identity Federation (WIF): Buat katalog gabungan di Lakehouse dengan menentukan peran Snowflake yang diperlukan. Kemudian, tautkan ID akun layanan katalog ke pengguna layanan di Snowflake. Pengguna layanan Snowflake harus memiliki izin penggunaan pada katalog Snowflake jarak jauh.
  • Verifikasi koneksi: Verifikasi bahwa 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

Buat sesi BGP antara Cloud Router Anda di Google Cloud dan VPC penyedia cloud jarak jauh Anda untuk memastikan pertukaran rute.

Untuk mengaktifkan 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 CCI Partner dan direkomendasikan untuk CCI Khusus 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 CCI Khusus dan tidak didukung untuk CCI Partner.

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):

  1. Di konsol AWS VPC, buat Endpoint Antarmuka untuk Amazon S3.
  2. Untuk nama layanan, tentukan com.amazonaws.AWS_REGION.s3.
  3. Pilih VPC dan subnet yang terhubung melalui Direct Connect ke VPC Anda. Google Cloud
  4. Lampirkan Grup Keamanan ke endpoint untuk mengontrol akses masuk.
  5. Tindakan ini menyediakan Elastic Network Interface (ENI) di setiap subnet yang dipilih. Catat alamat IP pribadi ENI ini.

Selanjutnya, konfigurasikan Grup Keamanan:

  • Pastikan bahwa Grup Keamanan yang dilampirkan ke ENI Endpoint Amazon S3 mengizinkan traffic TCP masuk di port 443 dari Google Cloud VPC Anda. Ini harus mencakup rentang CIDR dari subnet khusus proxy Anda untuk mengizinkan health check dan traffic yang diteruskan.Google Cloud

Mengonfigurasi Google Cloud jaringan

Untuk menyederhanakan penyiapan, jalankan perintah berikut untuk mengonfigurasi load balancer internal. Untuk konfigurasi lanjutan atau detail selengkapnya, lihat Menyiapkan Load Balancer Jaringan proxy regional internal untuk endpoint hybrid.

gcloud compute networks subnets create PROXY_SUBNET_NAME \
    --purpose=REGIONAL_MANAGED_PROXY \
    --role=ACTIVE \
    --region=REGION \
    --network=VPC_NETWORK \
    --range=PROXY_SUBNET_RANGE

Ganti kode berikut:

  • PROXY_SUBNET_NAME: nama untuk subnet khusus proxy.
  • PROXY_SUBNET_RANGE: rentang CIDR yang tidak digunakan dalam jaringan VPC Anda (misalnya, 10.129.0.0/23).
  1. Membuat health check regional:

    gcloud compute health-checks create tcp HEALTH_CHECK_NAME \
        --region=REGION \
        --port=443

    Ganti kode berikut:

    • HEALTH_CHECK_NAME: nama untuk health check.
    • REGION: Google Cloud region (misalnya, us-east4).
  2. Buat Grup Endpoint Jaringan (NEG) Konektivitas hybrid dan tambahkan endpoint:

    Buat NEG hybrid (NON_GCP_PRIVATE_IP_PORT) untuk setiap zona:

    gcloud compute network-endpoint-groups create NEG_NAME \
        --network-endpoint-type=NON_GCP_PRIVATE_IP_PORT \
        --zone=ZONE \
        --network=VPC_NETWORK

    Tambahkan alamat IP pribadi ENI AWS Anda ke NEG hibrida yang sesuai:

    gcloud compute network-endpoint-groups update NEG_NAME \
        --zone=ZONE \
        --add-endpoint="ip=AWS_S3_IP,port=443"

    Ganti kode berikut:

    • NEG_NAME: nama untuk NEG hybrid.
    • ZONE: zona Google Cloud (misalnya, us-east4-a). Zona ini harus berada dalam region lampiran VLAN Cross-Cloud Interconnect Anda.
    • VPC_NETWORK: nama jaringan VPC Anda.
    • AWS_S3_IP: alamat IP pribadi Endpoint VPC AWS Amazon S3 (ENI) di zona tersebut.

    Ulangi perintah ini untuk membuat NEG dan menambahkan endpoint untuk zona lain jika ENI AWS Anda didistribusikan di beberapa zona.

  3. Buat dan konfigurasikan layanan backend:

    Buat layanan backend regional dengan load balancing terkelola internal:

    gcloud compute backend-services create BACKEND_SERVICE_NAME \
        --load-balancing-scheme=INTERNAL_MANAGED \
        --protocol=TCP \
        --region=REGION \
        --health-checks=HEALTH_CHECK_NAME \
        --health-checks-region=REGION

    Tambahkan NEG hybrid ke layanan backend:

    gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \
        --region=REGION \
        --network-endpoint-group=NEG_NAME \
        --network-endpoint-group-zone=ZONE \
        --balancing-mode=CONNECTION \
        --max-connections=MAX_CONNECTIONS

    Ganti kode berikut:

    • BACKEND_SERVICE_NAME: nama untuk layanan backend.
    • NEG_NAME: nama NEG hybrid yang Anda buat di langkah sebelumnya.
    • ZONE: zona Google Cloud (misalnya, us-east4-a).
    • MAX_CONNECTIONS: jumlah maksimum koneksi serentak yang harus ditangani backend (misalnya, 100).

    Ulangi perintah add-backend untuk setiap NEG hybrid yang Anda buat.

  4. Konfigurasi frontend load balancer:

    Buat proxy TCP target:

    gcloud compute target-tcp-proxies create TARGET_PROXY_NAME \
        --backend-service=BACKEND_SERVICE_NAME \
        --region=REGION

    Buat aturan penerusan untuk merutekan traffic ke proxy target:

    gcloud compute forwarding-rules create FORWARDING_RULE_NAME \
        --load-balancing-scheme=INTERNAL_MANAGED \
        --network=VPC_NETWORK \
        --subnet=VPC_SUBNET \
        --ports=443 \
        --region=REGION \
        --target-tcp-proxy=TARGET_PROXY_NAME \
        --target-tcp-proxy-region=REGION \
        --allow-global-access

    Ganti kode berikut:

    • TARGET_PROXY_NAME: nama untuk proxy target.
    • FORWARDING_RULE_NAME: nama untuk aturan penerusan.
    • VPC_SUBNET: nama subnetwork VPC 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.

  1. 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.
  2. 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.
  3. 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:

  1. Buat Endpoint VPC Antarmuka untuk Amazon S3 di dalam VPC AWS Anda. Catat alamat IP dan port endpoint ini.
  2. 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.
  3. 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.
  4. 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 penggabungan

Untuk membuat kueri data, Anda harus menyiapkan katalog gabungan Lakehouse yang terhubung ke katalog Snowflake jarak jauh Anda. Pilih metode autentikasi Anda:

Berbasis secret (PAT)

Mengonfigurasi autentikasi

Federasi memerlukan kredensial untuk mengakses katalog Snowflake jarak jauh. Untuk Snowflake Horizon, Anda harus menggunakan Personal Access Token (PAT), yang merupakan token yang berlaku lama yang dibuat oleh Snowflake, bersama dengan peran Snowflake spesifik yang diperlukan untuk sesi.

Buat secret di Secret Manager regional untuk menyimpan kredensial:

  1. Buat file JSON bernama credentials.json dengan payload Anda:

      {
        "client_secret": "SNOWFLAKE_PAT_TOKEN",
        "scope": "session:role:SNOWFLAKE_ROLE"
      }
      

    Ganti kode berikut:

    • SNOWFLAKE_PAT_TOKEN: Token Akses Pribadi (PAT) Snowflake Anda.
    • SNOWFLAKE_ROLE: Peran Snowflake tertentu yang diperlukan untuk sesi. Contoh, ICEBERG_VIEW.
  2. Konfigurasi endpoint regional untuk Secret Manager:

    Secara default, Secret Manager menggunakan endpoint global. Namun, Lakehouse lintas cloud mengharuskan rahasia Anda disimpan di region yang sama dengan katalog Lakehouse Anda. Untuk berinteraksi dengan secret regional menggunakan CLI gcloud, Anda harus mengganti endpoint API default untuk sesi atau profil saat ini. Untuk menghindari masalah konektivitas, rahasia dan katalog Anda harus dibuat di region yang sama.

      gcloud config set api_endpoint_overrides/secretmanager https://secretmanager.REGION.rep.googleapis.com/
      

    Ganti kode berikut:

    • REGION: Region Google Cloud tempat secret Secret Manager Anda disimpan. Misalnya, us-east4. Untuk menghindari masalah konektivitas, rahasia dan katalog Anda harus dibuat di region yang sama.
  3. Upload payload ke Secret Manager:

      gcloud secrets create SNOWFLAKE_SECRET_NAME \
        --location="REGION" \
        --project="PROJECT_ID" \
        --data-file=credentials.json
      

    Ganti kode berikut:

    • SNOWFLAKE_SECRET_NAME: Nama untuk secret Snowflake Anda.
    • PROJECT_ID: Google Cloud Project ID Anda.

    Membuat katalog gabungan

    Buat katalog gabungan menggunakan perintah gcloud alpha biglake iceberg catalogs create.

    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="snowflake" \
          --secret-name="projects/PROJECT_ID/locations/REGION/secrets/SNOWFLAKE_SECRET_NAME" \
          --snowflake-account-identifier="SNOWFLAKE_ACCOUNT_IDENTIFIER" \
          --snowflake-warehouse="SNOWFLAKE_WAREHOUSE" \
          --refresh-interval="REFRESH_INTERVAL" \
          --namespace-filters="NAMESPACE_FILTERS"
      

    Ganti kode berikut:

    • PROJECT_ID: Google Cloud Project ID Anda.
    • REGION: region Lakehouse tempat katalog gabungan dibuat. Contoh, us-east4. Untuk meminimalkan latensi, pilih region yang paling dekat dengan region Snowflake Anda. Google Cloud
    • SNOWFLAKE_SECRET_NAME: nama secret Snowflake Anda.
    • SNOWFLAKE_ACCOUNT_IDENTIFIER: ID akun Snowflake Anda (misalnya, my_org-my_account).
    • SNOWFLAKE_WAREHOUSE: nama katalog Snowflake yang ingin Anda gabungkan.
    • REFRESH_INTERVAL: Opsional: Menentukan seberapa sering informasi katalog diperbarui. Tetapkan nilai ini sebagai durasi, misalnya, 330s atau 5m30s. Interval yang lebih pendek memperbarui data lebih sering, tetapi dapat menimbulkan biaya panggilan API yang lebih besar. Interval yang lebih panjang dapat lebih murah, tetapi data yang dikueri mungkin tidak mencerminkan set data terbaru Anda. Jika dihilangkan atau jika nilai disetel ke 0s, maka refresh metadata di latar belakang tidak akan dimulai. Fitur ini akan tetap dinonaktifkan hingga interval refresh diperbarui ke nilai positif.
    • NAMESPACE_FILTERS: Opsional: Daftar namespace yang dipisahkan koma untuk difederasikan. Contoh, ns1,ns2. Jika tidak disertakan, semua namespace akan disertakan.

    Milik pelanggan (CCI)

    Jika Anda mengonfigurasi Private Interconnect (seperti CCI Khusus atau CCI Partner), berikan referensi endpoint Service Directory agar 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="snowflake" \
          --secret-name="projects/PROJECT_ID/locations/REGION/secrets/SNOWFLAKE_SECRET_NAME" \
          --snowflake-account-identifier="SNOWFLAKE_ACCOUNT_IDENTIFIER" \
          --snowflake-warehouse="SNOWFLAKE_WAREHOUSE" \
          --refresh-interval="REFRESH_INTERVAL" \
          --namespace-filters="NAMESPACE_FILTERS" \
          --service-directory-name="projects/PROJECT_ID/locations/REGION/namespaces/NAMESPACE/services/SERVICE_NAME/endpoints/ENDPOINT_NAME"
      

    Ganti kode berikut:

    • PROJECT_ID: Google Cloud Project ID Anda.
    • REGION: region Lakehouse tempat katalog gabungan dibuat. Catatan: Region ini harus sama dengan namespace Service Directory dan rahasia regional.
    • SNOWFLAKE_SECRET_NAME: nama secret Snowflake Anda.
    • SNOWFLAKE_ACCOUNT_IDENTIFIER: ID akun Snowflake Anda.
    • SNOWFLAKE_WAREHOUSE: nama katalog Snowflake yang ingin Anda gabungkan
    • REFRESH_INTERVAL: Opsional: Menentukan seberapa sering informasi katalog diperbarui.
    • NAMESPACE_FILTERS: Opsional: Daftar namespace yang dipisahkan koma untuk difederasikan.
    • NAMESPACE: namespace Service Directory yang Anda buat selama penyiapan interkoneksi pribadi.
    • SERVICE_NAME: nama layanan Service Directory yang Anda buat selama penyiapan interkoneksi pribadi.
    • ENDPOINT_NAME: nama endpoint Service Directory yang Anda buat selama penyiapan interkoneksi pribadi.

    Menyelesaikan penyiapan autentikasi

    Saat katalog dibuat, Lakehouse menyediakan akun layanan unik untuknya (ditampilkan sebagai biglake-service-account dalam deskripsi resource).

    Anda harus memberikan izin akun layanan ini untuk mengakses secret yang Anda buat sebelumnya. Perhatikan bahwa propagasi kebijakan IAM dapat memerlukan waktu beberapa menit.

    Beri akun layanan katalog izin untuk mengakses secret:

    gcloud config set api_endpoint_overrides/secretmanager https://secretmanager.REGION.rep.googleapis.com/
    gcloud secrets add-iam-policy-binding SNOWFLAKE_SECRET_NAME \
      --project="PROJECT_ID" \
      --location="REGION" \
      --member="serviceAccount:$(gcloud alpha biglake iceberg catalogs describe FEDERATED_CATALOG_NAME \
          --project="PROJECT_ID" \
          --location="REGION" \
          --format='value(biglake-service-account)')" \
      --role="roles/secretmanager.secretAccessor"

    Untuk memverifikasi bahwa akun layanan katalog gabungan memiliki akses ke secret, jalankan perintah berikut:

    gcloud config set api_endpoint_overrides/secretmanager https://secretmanager.REGION.rep.googleapis.com/
    gcloud secrets get-iam-policy SNOWFLAKE_SECRET_NAME \
        --project="PROJECT_ID" \
        --location="REGION"

    Dalam output, pastikan akun layanan biglake-service-account memiliki peran roles/secretmanager.secretAccessor yang ditetapkan untuknya.

Workload Identity Federation

Workload Identity Federation (WIF) menghindari penggunaan rahasia yang aktif dalam jangka waktu lama dengan menautkan akun layanan Lakehouse langsung ke pengguna layanan Snowflake.

Membuat katalog gabungan

Buat katalog gabungan menggunakan konsol Google Cloud , Lakehouse REST API, atau CLI gcloud. Anda harus menentukan peran Snowflake yang akan digunakan.

Konsol

Untuk membuat katalog gabungan menggunakan autentikasi berbasis secret:

  1. Di konsol Google Cloud , buka Lakehouse.

    Buka Lakehouse

  2. Klik Buat katalog.

  3. Klik Federated catalog.

    Detail Konfigurasi katalog akan muncul.

  4. Untuk Federated catalog source, pilih Snowflake Horizon.

  5. Untuk Lokasi data, pilih region Lakehouse tempat Anda ingin membuat katalog gabungan. Contoh, us-east4. Untuk meminimalkan latensi (bahkan melalui internet publik), lakukan hal berikut saat memilih region:

    • Jika katalog Snowflake Anda ada di AWS, pilih Google Cloud region yang paling dekat dengan region AWS Anda.
  6. Klik Lanjutkan.

    Detail Detail koneksi akan muncul.

  7. Di bagian Remote catalog details, di kolom Snowflake account identifier, masukkan ID akun Snowflake Anda. Misalnya: my_org-my_account

  8. Di kolom Snowflake warehouse, masukkan nama Snowflake warehouse Anda.

  9. Untuk Secret, masukkan nama secret Anda. Gunakan format berikut: projects/PROJECT_ID/locations/REGION/secrets/SNOWFLAKE_SECRET_NAME.

  10. Opsional: Di kolom Nama direktori layanan, masukkan jalur ke endpoint atau layanan Service Directory Anda. Langkah ini hanya diperlukan jika Anda mengonfigurasi interkoneksi pribadi (Cross-Cloud Interconnect).

  11. Klik Create.

REST API

curl -X POST \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \
  -H "x-goog-user-project: PROJECT_ID" \
  -d '{
    "catalog-type": "CATALOG_TYPE_FEDERATED",
    "federated-catalog-options": {
      "snowflake-catalog-info": {
        "account-identifier": "SNOWFLAKE_ACCOUNT_IDENTIFIER",
        "warehouse": "SNOWFLAKE_WAREHOUSE",
        "snowflake-role": "SNOWFLAKE_ROLE"
      },
      "refresh-options": {
        "refresh-schedule": {
          "refresh-interval": "REFRESH_INTERVAL"
        }
      }
    }
}' \
  "https://biglake.googleapis.com/iceberg/v1/restcatalog/extensions/projects/PROJECT_ID/catalogs?iceberg_catalog_id=FEDERATED_CATALOG_NAME&primary_location=REGION"

gcloud CLI

Internet publik (tanpa CCI)

    gcloud alpha biglake iceberg catalogs create FEDERATED_CATALOG_NAME \
        --project="PROJECT_ID" \
        --primary-location="REGION" \
        --catalog-type="federated" \
        --federated-catalog-type="snowflake" \
        --snowflake-account-identifier="SNOWFLAKE_ACCOUNT_IDENTIFIER" \
        --snowflake-warehouse="SNOWFLAKE_WAREHOUSE" \
        --snowflake-role="SNOWFLAKE_ROLE" \
        --refresh-interval="REFRESH_INTERVAL" \
        --namespace-filters="NAMESPACE_FILTERS"
    

Milik pelanggan (CCI)

Jika Anda mengonfigurasi interkoneksi pribadi, berikan referensi layanan Service Directory agar 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="snowflake" \
        --snowflake-account-identifier="SNOWFLAKE_ACCOUNT_IDENTIFIER" \
        --snowflake-warehouse="SNOWFLAKE_WAREHOUSE" \
        --snowflake-role="SNOWFLAKE_ROLE" \
        --refresh-interval="REFRESH_INTERVAL" \
        --namespace-filters="NAMESPACE_FILTERS" \
        --service-directory-name="projects/PROJECT_ID/locations/REGION/namespaces/NAMESPACE/services/SERVICE_NAME/endpoints/ENDPOINT_NAME"
    

Ganti kode berikut:

  • PROJECT_ID: Google Cloud Project ID Anda.
  • SNOWFLAKE_ACCOUNT_IDENTIFIER: ID akun Snowflake Anda.
  • SNOWFLAKE_WAREHOUSE: nama katalog Snowflake yang ingin Anda gabungkan.
  • SNOWFLAKE_ROLE: peran Snowflake tertentu yang diperlukan untuk sesi. Contoh, ICEBERG_VIEW.
  • FEDERATED_CATALOG_NAME: nama untuk katalog gabungan Lakehouse.
  • REGION: region Lakehouse tempat katalog gabungan dibuat.
  • REFRESH_INTERVAL: Opsional: Menentukan seberapa sering informasi katalog diperbarui. Contoh, 300s.
  • NAMESPACE_FILTERS: Opsional: Daftar namespace yang dipisahkan koma untuk difederasikan. Contoh, ns1,ns2. Jika tidak disertakan, semua namespace akan disertakan.
  • NAMESPACE: namespace untuk layanan Service Directory Anda.
  • SERVICE_NAME: nama layanan Service Directory Anda.
  • ENDPOINT_NAME: nama endpoint Service Directory Anda.

Setelah membuat katalog, Anda harus menautkan identitas akun layanannya ke pengguna layanan di Snowflake.

  1. Ekstrak ID Akun Layanan Lakehouse (Subjek) dari detail katalog.

    Anda bisa mendapatkannya dari respons JSON perintah pembuatan (kolom biglake-service-account-id).

    Atau, Anda dapat menjalankan perintah describe pada katalog untuk mendapatkan nilai:

    gcloud alpha biglake iceberg catalogs describe FEDERATED_CATALOG_NAME \
    --project="PROJECT_ID"

    Cari biglake-service-account-id di output.

  2. Login ke instance pengelolaan Snowflake Anda dan jalankan skrip berikut untuk membuat hubungan tepercaya dengan identitas layanan Lakehouse:

    USE ROLE ACCOUNTADMIN;
    
    CREATE USER SNOWFLAKE_SERVICE_USER
    TYPE = SERVICE
    WORKLOAD_IDENTITY = (
      TYPE = GCP
      SUBJECT = 'LAKEHOUSE_SERVICE_ACCOUNT_ID'
    )
    DEFAULT_ROLE = SNOWFLAKE_ROLE
    COMMENT = 'Service user for Lakehouse federation over WIF';
    
    -- Also explicitly GRANT permissions to the role
    GRANT ROLE SNOWFLAKE_ROLE TO USER SNOWFLAKE_SERVICE_USER;

    Ganti kode berikut:

    • SNOWFLAKE_SERVICE_USER: nama untuk pengguna layanan baru di Snowflake.
    • LAKEHOUSE_SERVICE_ACCOUNT_ID: ID akun layanan yang diekstrak pada langkah sebelumnya.
    • SNOWFLAKE_ROLE: peran Snowflake (harus cocok dengan peran yang ditentukan selama pembuatan katalog).

Memverifikasi koneksi

Pastikan siklus refresh metadata latar belakang katalog berhasil diselesaikan dan namespace disinkronkan.

gcloud CLI

  1. Pastikan status refresh menunjukkan keberhasilan:

    gcloud alpha biglake iceberg catalogs describe FEDERATED_CATALOG_NAME \
      --project="PROJECT_ID" \
      --location="REGION"
  2. Pastikan skema database jarak jauh muncul sebagai namespace yang disinkronkan:

    gcloud alpha biglake iceberg namespaces list \
      --catalog="FEDERATED_CATALOG_NAME" \
      --project="PROJECT_ID" \
      --location="REGION"

REST API

  1. Verifikasi status sinkronisasi federasi katalog:

    curl -X GET \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      -H "x-goog-user-project: PROJECT_ID" \
      "https://biglake.googleapis.com/iceberg/v1/restcatalog/extensions/projects/PROJECT_ID/catalogs/FEDERATED_CATALOG_NAME"
  2. Mencantumkan namespace yang disinkronkan:

    curl -X GET \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      -H "x-goog-user-project: PROJECT_ID" \
      "https://biglake.googleapis.com/iceberg/v1/restcatalog/v1/projects/PROJECT_ID/catalogs/FEDERATED_CATALOG_NAME/namespaces"
  3. Mencantumkan tabel dalam namespace yang disinkronkan:

    curl -X GET \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      -H "x-goog-user-project: PROJECT_ID" \
      "https://biglake.googleapis.com/iceberg/v1/restcatalog/v1/projects/PROJECT_ID/catalogs/FEDERATED_CATALOG_NAME/namespaces/NAMESPACE_NAME/tables"

Langkah berikutnya