Configura Lakehouse senza bordi per AWS Glue

Questo documento descrive come configurare un Lakehouse senza bordi per interrogare i dati da un catalogo AWS Glue direttamente in Google Cloud. Questa funzionalità unifica l'analisi dei dati integrando le origini dati esterne con l'ambiente Google Cloud esistente.

Successivamente, puoi utilizzare Lakehouse for Apache Iceberg per gestire l'accesso ai tuoi dati federati.

Prima di iniziare

  1. Consulta la panoramica di Lakehouse per capire come Lakehouse gestisce l'accesso ai dati.
  2. Leggi Informazioni su Lakehouse senza bordi per capire come funziona.
  3. Esamina i cataloghi supportati per verificare i requisiti del formato della tabella e le configurazioni supportate.
  4. Assicurati che l'amministratore AWS disponga delle autorizzazioni per creare ruoli IAM (Identity and Access Management) e configurare i criteri delle autorizzazioni.
  5. (Facoltativo) Se prevedi di instradare le query tramite un'interconnessione privata tra il tuo Google Cloud VPC e il VPC del tuo provider cloud remoto (ad esempio AWS), assicurati di avere un account attivo con il tuo provider remoto, esegui il provisioning di un'interconnessione cross-cloud dedicata o di un'interconnessione cross-cloud partner, stabilisci sessioni BGP con il tuo router Cloud e verifica di disporre delle autorizzazioni IAM richieste in entrambi gli ambienti cloud.
  6. Accedi al tuo account Google Cloud . Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti senza costi per l'esecuzione, il test e il deployment dei carichi di lavoro.
  7. Verify that billing is enabled for your Google Cloud project.

  8. Enable the BigLake API.

    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 API

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

  10. Enable the BigLake API.

    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 API

Ruoli obbligatori

Per ottenere le autorizzazioni necessarie per configurare Lakehouse senza bordi, chiedi all'amministratore di concederti i seguenti ruoli IAM nel progetto:

Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.

Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.

Limitazioni e considerazioni

Questa sezione elenca le limitazioni e le considerazioni per l'utilizzo di Lakehouse senza bordi.

  • Provider cloud supportati: l'utilizzo di un interconnessione privata con il tuo Lakehouse senza confini è supportato con i seguenti provider cloud remoti: Amazon Web Services (AWS). Puoi utilizzare un Dedicated Cross-Cloud Interconnect o un Partner Cross-Cloud Interconnect.
  • Routing di rete:se non è configurata un'interconnessione privata (ad esempio Dedicated CCI o Partner CCI), le query vengono instradate su internet pubblico. Ciò può comportare tariffe per il traffico in uscita più elevate dal tuo cloud provider remoto e prestazioni meno prevedibili.
  • Aggiornamento dei dati:il flag --refresh-interval per il catalogo federato determina la frequenza di sincronizzazione dei metadati. Un intervallo più breve fornisce dati più recenti, ma può comportare costi API aggiuntivi da parte del fornitore del catalogo remoto.
  • Report sulle metriche Iceberg: il report sulle metriche Iceberg non è disponibile per i cataloghi federati. Imposta la proprietà rest-metrics-reporting-enabled su false nel client Iceberg quando accedi a un catalogo federato.

Flusso di lavoro generale

Per configurare e utilizzare Lakehouse senza bordi, segui questi passaggi generali:

  • (Facoltativo) Configura Cross-Cloud Interconnect: configura una connessione privata tra il tuo VPC Google Cloud e il tuo provider di servizi cloud remoto.
  • Configura la federazione:configura l'autenticazione creando un ruolo IAM con un criterio di attendibilità segnaposto con il tuo provider remoto. Quindi, crea un catalogo federato in Lakehouse e aggiorna il criterio di attendibilità.
  • Verifica la connessione:assicurati che Lakehouse possa connettersi correttamente al catalogo remoto.
  • Esegui query sui dati:esegui query sui dati federati utilizzando BigQuery o Managed Service for Apache Spark. Per maggiori informazioni, vedi Utilizzare Lakehouse senza bordi.
  • Configura le autorizzazioni:utilizza IAM per gestire chi può visualizzare ed eseguire query sui dati federati.

Configura Cross-Cloud Interconnect (facoltativo)

Per impostazione predefinita, le query al catalogo remoto vengono inviate tramite la rete internet pubblica. Per migliorare la sicurezza e la conformità, fornire prestazioni prevedibili e ridurre i costi di trasferimento dei dati, utilizza un interconnessione privata. In questo modo viene stabilita una connessione di rete privata dedicata tra la tua Google Cloud Virtual Private Cloud (VPC) e la rete del tuo provider di servizi cloud remoto (ad esempio AWS).

Puoi eseguire il provisioning e configurare una delle seguenti opzioni di interconnessione privata tra il tuo Google Cloud VPC e il VPC del tuo provider di servizi cloud remoto (ad esempio AWS):

Stabilisci sessioni BGP tra il tuo router Cloud in Google Cloud e il VPC del tuo fornitore di servizi cloud remoto per garantire lo scambio di route.

Per abilitare le query private, devi configurare un percorso da Lakehouse al bucket di archiviazione remoto (ad esempio, un bucket AWS Amazon S3) tramite l'interconnessione privata. Esistono due flussi architetturali che puoi seguire per configurare questo routing:

  • Routing del bilanciatore del carico di rete proxy interno regionale: questo flusso utilizza un bilanciatore del carico di rete proxy interno regionaleGoogle Cloud per distribuire le richieste tra i gruppi di endpoint di rete (NEG) di connettività ibrida che puntano a più interfacce di rete elastiche (ENI) AWS. Questo flusso è essenziale per il bilanciamento del carico, la scalabilità e l'alta affidabilità. È obbligatorio per l'interconnessione interaziendale partner e consigliato per l'interconnessione interaziendale dedicata per il bilanciamento del carico, la scalabilità e l'alta affidabilità.
  • Routing diretto degli endpoint: questo flusso connette Service Directory direttamente a un singolo indirizzo IP dell'endpoint VPC di interfaccia AWS. Questo flusso funziona solo per l'API CCI dedicata e non è supportato per l'API CCI partner.

Seleziona il flusso di configurazione che corrisponde ai requisiti dell'architettura:

Bilanciatore del carico di rete proxy interno regionale

Per configurare un bilanciatore del carico di rete proxy interno regionale per distribuire le richieste su più interfacce di rete AWS per alta affidabilità e bilanciamento del carico, segui questi passaggi:

Configura la rete AWS

Innanzitutto, crea un endpoint VPC di interfaccia Amazon S3 (AWS PrivateLink):

  1. Nella console AWS VPC, crea un endpoint di interfaccia per Amazon S3.
  2. Per il nome del servizio, specifica com.amazonaws.AWS_REGION.s3.
  3. Seleziona il VPC e le subnet connessi tramite Direct Connect al tuo VPC Google Cloud .
  4. Collega i gruppi di sicurezza all'endpoint per controllare l'accesso in entrata.
  5. Vengono eseguito il provisioning delle interfacce di rete elastiche (ENI) in ogni subnet selezionata. Prendi nota degli indirizzi IP privati di queste interfacce di rete.

Poi, configura i gruppi di sicurezza:

  • Assicurati che il gruppo o i gruppi di sicurezza collegati alle ENI dell'endpoint Amazon S3 consentano il traffico TCP in entrata sulla porta 443 dal tuo VPC Google Cloud . Deve includere l'intervallo CIDR della tua subnetGoogle Cloud proxy-only per consentire i controlli di integrità e il traffico inoltrato.

Configurare Google Cloud il networking

Per semplificare la configurazione, esegui i seguenti comandi per configurare il bilanciatore del carico interno. Per configurazioni avanzate o maggiori dettagli, vedi Configurare un bilanciatore del carico di rete proxy interno regionale per endpoint ibridi.

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

Sostituisci quanto segue:

  • PROXY_SUBNET_NAME: un nome per la subnet solo proxy.
  • PROXY_SUBNET_RANGE: un intervallo CIDR non utilizzato all'interno della rete VPC (ad esempio, 10.129.0.0/23).
  1. Crea un controllo di integrità a livello di regione:

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

    Sostituisci quanto segue:

    • HEALTH_CHECK_NAME: un nome per il controllo di integrità.
    • REGION: la Google Cloud regione (ad esempio, us-east4).
  2. Crea gruppi di endpoint di rete (NEG) con connettività ibrida e aggiungi endpoint:

    Crea un NEG ibrido (NON_GCP_PRIVATE_IP_PORT) per ogni zona:

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

    Aggiungi l'indirizzo IP privato della tua ENI AWS al NEG ibrido corrispondente:

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

    Sostituisci quanto segue:

    • NEG_NAME: un nome per il NEG ibrido.
    • ZONE: la zona Google Cloud (ad esempio us-east4-a). Questa zona deve trovarsi all'interno della regione del collegamento VLAN Cross-Cloud Interconnect.
    • VPC_NETWORK: il nome della tua rete VPC.
    • AWS_S3_IP: l'indirizzo IP privato dell'interfaccia di rete (ENI) dell'endpoint VPC AWS Amazon S3 in quella zona.

    Ripeti questi comandi per creare NEG e aggiungere endpoint per altre zone se le tue ENI AWS sono distribuite in più zone.

  3. Crea e configura il servizio di backend:

    Crea un servizio di backend regionale con bilanciamento del carico gestito interno:

    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

    Aggiungi i NEG ibridi al servizio di 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

    Sostituisci quanto segue:

    • BACKEND_SERVICE_NAME: un nome per il servizio di backend.
    • NEG_NAME: il nome del NEG ibrido creato nel passaggio precedente.
    • ZONE: la zona Google Cloud (ad esempio, us-east4-a).
    • MAX_CONNECTIONS: il numero massimo di connessioni simultanee che il backend deve gestire (ad esempio, 100).

    Ripeti il comando add-backend per ogni NEG ibrida che hai creato.

  4. Configura il frontend del bilanciatore del carico:

    Crea un proxy TCP di destinazione:

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

    Crea una regola di forwarding per instradare il traffico al proxy di destinazione:

    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

    Sostituisci quanto segue:

    • TARGET_PROXY_NAME: un nome per il proxy di destinazione.
    • FORWARDING_RULE_NAME: un nome per la regola di forwarding.
    • VPC_SUBNET: il nome della tua subnet VPC.

Dopo aver creato la regola di forwarding per il bilanciatore del carico, prendi nota dell'indirizzo IP interno assegnato. Questo è il tuo ILB_IP_ADDRESS.

Configurare Service Directory

Registra l'indirizzo IP del bilanciamento del carico interno in Service Directory, in modo che Lakehouse possa rilevarlo.

  1. Crea uno spazio dei nomi per il tuo cloud remoto:

    gcloud service-directory namespaces create NAMESPACE \
        --project=PROJECT_ID \
        --location=REGION

    Sostituisci quanto segue:

    • NAMESPACE: un identificatore univoco per il tuo spazio dei nomi.
    • PROJECT_ID: il tuo Google Cloud ID progetto.
    • REGION: la Google Cloud regione. Ad esempio, us-east4. Deve trovarsi nella stessa regione del catalogo federato.
  2. Crea un servizio nello spazio dei nomi Service Directory:

    gcloud service-directory services create SERVICE_NAME \
        --namespace=NAMESPACE \
        --project=PROJECT_ID \
        --location=REGION

    Sostituisci quanto segue:

    • SERVICE_NAME: un identificatore univoco per il tuo servizio.
  3. Crea un endpoint per il bilanciatore del carico interno nel servizio:

    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

    Sostituisci quanto segue:

    • ENDPOINT_NAME: un identificatore univoco per l'endpoint.
    • PROJECT_NUMBER: il tuo Google Cloud numero di progetto. Utilizza il numero del progetto nel flag --network.
    • ILB_IP_ADDRESS: l'indirizzo IP interno della regola di forwarding del bilanciamento del carico interno.

Endpoint diretto

Per configurare Service Directory in modo da instradare il traffico direttamente a un singolo indirizzo IP dell'endpoint VPC di interfaccia AWS, segui questi passaggi:

  1. Crea un endpoint VPC di interfaccia per Amazon S3 all'interno del tuo VPC AWS. Prendi nota dell'indirizzo IP e della porta di questo endpoint.
  2. Crea uno spazio dei nomi per il tuo cloud remoto:

    gcloud service-directory namespaces create NAMESPACE \
        --project=PROJECT_ID \
        --location=REGION

    Sostituisci quanto segue:

    • NAMESPACE: un identificatore univoco per il tuo spazio dei nomi.
    • PROJECT_ID: il tuo Google Cloud ID progetto.
    • REGION: la Google Cloud regione. Ad esempio, us-east4. Deve trovarsi nella stessa regione del catalogo federato.
  3. Crea un servizio nello spazio dei nomi Service Directory:

    gcloud service-directory services create SERVICE_NAME \
        --namespace=NAMESPACE \
        --project=PROJECT_ID \
        --location=REGION

    Sostituisci quanto segue:

    • SERVICE_NAME: un identificatore univoco per il tuo servizio.
  4. Crea un endpoint nel servizio contenente le informazioni di routing per l'endpoint VPC dell'interfaccia Amazon S3:

    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

    Sostituisci quanto segue:

    • ENDPOINT_NAME: un identificatore univoco per l'endpoint.
    • S3_VPCE_IP_ADDRESS: l'indirizzo IP dell'endpoint VPC di interfaccia Amazon S3. Ad esempio, 10.0.1.45.
    • S3_VPCE_PORT: il numero di porta dell'endpoint VPC di interfaccia Amazon S3. Ad esempio, 443.
    • PROJECT_NUMBER: il tuo Google Cloud numero di progetto. Utilizza il numero del progetto nel flag --network.
    • VPC_NETWORK: il nome della rete VPC associata al tuo interconnessione privata. Google Cloud

Configura la federazione

Per eseguire query sui dati, configura un catalogo federato Lakehouse che si connette al catalogo AWS remoto.

Crea il ruolo AWS IAM con un criterio di trust segnaposto

Lakehouse esegue il provisioning di un ID account di servizio Google dopo la creazione del catalogo. Crea il ruolo IAM AWS con un criterio di attendibilità segnaposto.

  1. Crea un file denominato 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"
              ]
            }
          }
        }
      ]
    }
  2. Esegui il comando AWS CLI per creare il ruolo con la policy di attendibilità segnaposto. Ti consigliamo di impostare la durata massima della sessione su 12 ore (43200 secondi) per evitare la scadenza delle credenziali durante i job a lunga esecuzione:

    aws iam create-role \
      --role-name AWS_ROLE_NAME \
      --assume-role-policy-document file://trust_policy.json \
      --max-session-duration 43200

    Sostituisci quanto segue:

    • AWS_ROLE_NAME: un nome per il tuo ruolo AWS IAM. Ad esempio, lakehouse_glue_federation_role.

Allegare una policy delle autorizzazioni

Collega una policy di autorizzazioni al tuo ruolo IAM che consenta a Lakehouse di accedere a Glue Data Catalog e ai bucket S3 della regione AWS. Questa policy concede anche l'accesso ai bucket delle tabelle S3 se utilizzi l'integrazione di AWS Lake Formation S3 Tables. Se hai eseguito l'upgrade dalle autorizzazioni dati AWS Glue predefinite al modello AWS Lake Formation, potresti dover concedere autorizzazioni aggiuntive in Lake Formation.

  1. Crea un file denominato permissions_policy.json con la seguente configurazione delle policy.

    {
      "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:*"
          ]
        }
      ]
    }

    Se utilizzi chiavi gestite dal cliente ospitate in AWS Key Management Service (KMS) per criptare le risorse AWS Glue, Amazon S3 o Amazon S3 Tables, devi aggiungere un'istruzione che conceda l'accesso alla chiave KMS per decriptare le risorse:

    # ...
    {
      "Sid": "GlueS3S3TablesKmsDecrypt",
      "Effect": "Allow",
      "Action": [
          "kms:Decrypt"
      ],
      "Resource": [
          "arn:aws:kms:AWS_REGION:AWS_ACCOUNT_ID:key/key_id_for_glue",
          "arn:aws:kms:AWS_REGION:AWS_ACCOUNT_ID:key/key_id_for_s3",
          "arn:aws:kms:AWS_REGION:AWS_ACCOUNT_ID:key/key_id_for_s3_tables"
      ]
    }
    # ...
  2. Collega questa policy delle autorizzazioni al tuo ruolo IAM:

    aws iam put-role-policy \
      --role-name AWS_ROLE_NAME \
      --policy-name AWS_POLICY_NAME \
      --policy-document file://permissions_policy.json

    Sostituisci quanto segue:

    • AWS_ROLE_NAME: il nome del tuo ruolo IAM AWS. Ad esempio, lakehouse_glue_federation_role.
    • AWS_POLICY_NAME: un nome per la policy delle autorizzazioni. Ad esempio, lakehouse_glue_federation_policy.
    • AWS_REGION: la regione AWS in cui si trovano il catalogo Glue o le tabelle S3. Ad esempio, us-east-1.
    • AWS_ACCOUNT_ID: la stringa dell'ID account AWS di 12 cifre. Ad esempio, 123456789012.

Crea un catalogo federato

Stabilisci il catalogo federato su Google Cloud utilizzando la console Google Cloud , l'interfaccia a riga di comando gcloud o l'API REST.

Per evitare errori di aggiornamento prematuro dei metadati in background durante la propagazione delle relazioni di trust AWS, inizializza il catalogo senza specificare una pianificazione dell'aggiornamento (che per impostazione predefinita è 0s).

Console

Per creare un catalogo federato:

  1. Nella console Google Cloud , vai a Lakehouse.

    Vai a Lakehouse

  2. Fai clic su Crea catalogo.

  3. Fai clic su Catalogo federato.

    Vengono visualizzati i dettagli della Configurazione catalogo.

  4. In Origine del catalogo federato, seleziona AWS Glue.

  5. Per Posizione dei dati, seleziona la regione Lakehouse in cui vuoi creare il catalogo federato. Ad esempio, us-east4. Per ridurre al minimo la latenza (anche su internet pubblico), seleziona la regione Google Cloud più vicina alla tua regione AWS.

  6. Fai clic su Continua.

    Vengono visualizzati i dettagli Dettagli connessione.

  7. Nella sezione Dettagli catalogo remoto, nel campo Warehouse AWS, inserisci l'ID account AWS o il catalogo dei bucket della tabella S3. Ad esempio 123456789012.

  8. Nel campo Regione AWS, inserisci la tua regione AWS. Ad esempio: us-east-1.

  9. Nel campo ARN del ruolo AWS, inserisci l'ARN del ruolo AWS. Utilizza il formato seguente: arn:aws:iam::AWS_ACCOUNT_ID:role/AWS_ROLE_NAME.

  10. (Facoltativo) Nel campo Nome di Service Directory, inserisci il percorso del servizio o dell'endpoint Service Directory. Questo è necessario solo se stai configurando un interconnessione privata (Cross-Cloud Interconnect).

  11. Fai clic su Crea.

Google Cloud CLI

Rete internet pubblica (nessun CCI)

Se non configuri CCI, la connessione passa in modo sicuro attraverso la rete internet pubblica.

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"

Di proprietà del cliente (CCI)

Se hai configurato un'interconnessione privata (ad esempio Dedicated CCI o Partner CCI), fornisci il riferimento al servizio Service Directory per assicurarti che Lakehouse instradi il traffico in modo privato.

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"'"
      }
    }
  }'

Sostituisci quanto segue:

  • FEDERATED_CATALOG_NAME: un nome per il catalogo federato.
  • PROJECT_ID: il tuo ID progetto Google Cloud .
  • REGION: la regione Lakehouse in cui viene creato il catalogo federato. Ad esempio, us-east4.
  • GLUE_OR_S3_TABLE_BUCKET_WAREHOUSE: l'identificatore del catalogo del magazzino di destinazione. Per il Data Catalog Glue di una regione AWS, inserisci la stringa dell'ID account AWS di 12 cifre. Ad esempio, 123456789012. Per utilizzare un bucket della tabella S3 nella regione, inserisci AWS_ACCOUNT_ID:s3tablescatalog/S3_TABLE_BUCKET. Ad esempio: 123456789012:s3tablescatalog/my-table-bucket.
  • AWS_ACCOUNT_ID: la stringa dell'ID account AWS di 12 cifre. Ad esempio, 123456789012.
  • AWS_REGION: la regione AWS in cui si trova il bucket della tabella del catalogo Glue o S3. Ad esempio, us-east-1.
  • AWS_ROLE_NAME: il nome del ruolo IAM di AWS. Ad esempio, lakehouse_glue_federation_role.
  • NAMESPACE: (facoltativo) lo spazio dei nomi di Service Directory che hai creato durante la configurazione dell'interconnessione privata.
  • SERVICE_NAME: (facoltativo) il nome del servizio Service Directory che hai creato durante la configurazione dell'interconnessione privata.

Aggiorna la policy di attendibilità

Quando viene creato il catalogo, Lakehouse esegue il provisioning di un account di servizio univoco, che viene restituito come campo biglake-service-account-id nella risposta alla creazione del catalogo. Utilizzi questo account di servizio per stabilire la relazione di trust.

  1. Esegui questo comando per estrarre il valore biglake-service-account-id in una variabile bash attiva:

    LAKEHOUSE_SA_ID=$(gcloud alpha biglake iceberg catalogs describe FEDERATED_CATALOG_NAME \
      --project="PROJECT_ID" \
      --format="value(biglake-service-account-id)")
  2. Aggiorna il criterio di attendibilità del ruolo AWS IAM per sostituire il segnaposto con l'ID agente di servizio Google verificato. Il blocco condizione convalida la corrispondenza di sub e aud. Scrivi la policy in un file denominato trust_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": [
                "$LAKEHOUSE_SA_ID"
              ],
              "accounts.google.com:sub": [
                "$LAKEHOUSE_SA_ID"
              ]
            }
          }
        }
      ]
    }
    EOF
  3. Applica la policy finalizzata al tuo ruolo AWS:

    aws iam update-assume-role-policy \
      --role-name AWS_ROLE_NAME \
      --policy-document file://trust_policy_comprehensive.json

Attivare l'aggiornamento dei metadati in background

Ora che le relazioni di trust sicure sono state stabilite correttamente su entrambe le piattaforme, aggiorna il catalogo per attivare l'aggiornamento dei metadati in background (ogni 5 minuti o 300s o più).

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"
      }
    }
  }
}'

Completa la configurazione dell'interconnessione privata (solo Cross-Cloud Interconnect)

Se instradi il traffico su un'interconnessione privata (Dedicated o Partner CCI), devi concedere all'account di servizio del catalogo Lakehouse le autorizzazioni per rilevare e autorizzare le connessioni tramite Service Directory.

Console

  1. Nella console Google Cloud vai alla pagina IAM.

    Vai a IAM

  2. Fai clic su Concedi accesso (o Aggiungi).

  3. Nel campo Nuove entità, inserisci l'email del account di servizio del catalogo Lakehouse. Puoi recuperare questa email descrivendo il catalogo (vedi la scheda gcloud).

  4. Nel menu a discesa Ruolo, seleziona Visualizzatore directory di servizi (roles/servicedirectory.viewer).

  5. Fai clic su Aggiungi un altro ruolo e seleziona Servizio autorizzato PSC di Service Directory (roles/servicedirectory.pscAuthorizedService).

  6. Fai clic su Salva.

gcloud CLI

Concedi i ruoli richiesti al account di servizio del catalogo:

# Grant Service Directory Viewer
gcloud projects add-iam-policy-binding PROJECT_ID \
--member="serviceAccount:$(gcloud alpha biglake iceberg catalogs describe FEDERATED_CATALOG_NAME \
    --project="PROJECT_ID" \
    --format='value(biglake-service-account)')" \
--role="roles/servicedirectory.viewer"

# Grant Service Directory PSC Authorized Service
gcloud projects add-iam-policy-binding PROJECT_ID \
--member="serviceAccount:$(gcloud alpha biglake iceberg catalogs describe FEDERATED_CATALOG_NAME \
    --project="PROJECT_ID" \
    --format='value(biglake-service-account)')" \
--role="roles/servicedirectory.pscAuthorizedService"

Verificare la connessione

Verifica che il ciclo di aggiornamento dei metadati in background del catalogo sia stato completato correttamente e che gli spazi dei nomi siano sincronizzati.

  1. Verifica che lo stato di aggiornamento indichi esito positivo:

    gcloud alpha biglake iceberg catalogs describe FEDERATED_CATALOG_NAME \
      --project="PROJECT_ID"
  2. Verifica che i database remoti vengano visualizzati come spazi dei nomi sincronizzati:

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

Passaggi successivi