Questa pagina descrive come configurare Change Data Capture (CDC) per trasmettere in streaming i dati da un database AlloyDB per PostgreSQL a una destinazione supportata, come BigQuery o Cloud Storage.
Configura la connettività tra Datastream e AlloyDB
Per abilitare Datastream per la connessione all'istanza AlloyDB, devi configurare un proxy TCP nel progetto consumer. L'immagine proxy TCP è disponibile pubblicamente per tutti i clienti.
- Avvia il container proxy: - Attiva Cloud Shell nel progetto consumer.
- Esegui lo script seguente per creare il proxy TCP e disattivare il networking bridge per evitare problemi di connettività:
 - gcloud compute instances create-with-container \ --zone=REGION_ID VM_NAME \ --container-image gcr.io/dms-images/tcp-proxy \ --tags=dms-tcp-proxy \ --container-env=SOURCE_CONFIG=ALLOYDB_IP:ALLOYDB_PORT \ --can-ip-forward \ --network=SOURCE_AND_DEST_VPC \ --machine-type=VM_TIER \ --metadata=startup-script='#! /bin/bash mkdir -p /etc/docker cat <<EOF > /etc/docker/daemon.json {"bridge":"none"} EOF systemctl restart docker'- Sostituisci quanto segue: - REGION_ID: la regione in cui vuoi creare il proxy TCP.
- VM_NAME: il nome della macchina virtuale.
- ALLOYDB_IP: l'indirizzo IP dell'istanza AlloyDB per PostgreSQL.
- ALLOYDB_PORT: il numero di porta dell'istanza AlloyDB per PostgreSQL.
- SOURCE_AND_DEST_VPC: la rete VPC a cui sono connessi l'origine e la destinazione.
- VM_TIER: il tipo di macchina virtuale.
 - Un comando di esempio con parametri aggiornati: - gcloud compute instances create-with-container \ --zone=us-central1-c ds-tcp-proxy \ --container-image gcr.io/dms-images/tcp-proxy \ --tags=ds-tcp-proxy \ --container-env=SOURCE_CONFIG=10.16.0.5:5432 \ --can-ip-forward \ --network=default \ --machine-type=e2-micro --metadata=startup-script='#! /bin/bash mkdir -p /etc/docker cat <<EOF > /etc/docker/daemon.json {"bridge":"none"} EOF systemctl restart docker'
- Esegui lo script per stampare l'indirizzo IP del proxy TCP con gli input seguenti: - gcloud compute instances describe VM_NAME \ --format="yaml(networkInterfaces[].networkIP)" \ --zone=REGION_ID- Sostituisci quanto segue: - VM_NAME: il nome della macchina virtuale.
- REGION_ID: la regione in cui hai creato il proxy TCP.
 
- (Facoltativo) Crea una regola firewall per limitare il traffico in entrata verso il proxy TCP: - gcloud compute firewall-rules create FIREWALL_RULE_NAME \ --direction=INGRESS \ --priority=1000 \ --target-tags=dms-tcp-proxy \ --network=SOURCE_VPC \ --action=ALLOW \ --rules=tcp:ALLOYDB_PORT \ --source-ranges=IP_RANGE- Sostituisci quanto segue: - FIREWALL_RULE_NAME: il nome della regola firewall.
- SOURCE_VPC: la rete VPC a cui è connessa l'origine.
- ALLOYDB_PORT: il numero di porta dell'istanza AlloyDB per PostgreSQL.
- IP_RANGE: l'intervallo di indirizzi IP a cui vuoi limitare il traffico in entrata.
 - Un comando di esempio per consentire il traffico in entrata da tutti gli indirizzi IP: - gcloud compute firewall-rules create ds-proxy1 \ --direction=INGRESS \ --priority=1000 \ --target-tags=ds-tcp-proxy \ --network=default \ --action=ALLOW \ --rules=tcp:5432
Configura AlloyDB per la replica
- Abilita la decodifica logica per l'istanza principale AlloyDB. In Google Cloud, imposta il valore del flag - alloydb.logical_decodingsu ON. Per informazioni sull'aggiornamento dei flag di database, vedi Configurare i flag di database di un'istanza.
- Connettiti all'istanza AlloyDB utilizzando l'indirizzo IP del proxy TCP eseguendo il seguente comando da qualsiasi VM sullo stesso VPC: - psql -h PROXY_IP \ -U DB_USER \ -d DB_NAME- Sostituisci quanto segue: - PROXY_IP: l'indirizzo IP del proxy TCP.
- DB_USER: il nome utente per il database AlloyDB.
- DB_NAME: il nome del database AlloyDB.
 
- Esegui questo comando per concedere i privilegi di replica all'utente del database: - ALTER USER DB_USER WITH REPLICATION; 
- Crea una pubblicazione. Ti consigliamo di creare una pubblicazione solo per le tabelle che vuoi replicare. In questo modo, Datastream può leggere solo i dati pertinenti, riducendo il carico sul database e su Datastream: - CREATE PUBLICATION PUBLICATION_NAME FOR TABLE SCHEMA1.TABLE1, SCHEMA2.TABLE2; - Sostituisci quanto segue: - PUBLICATION_NAME: il nome della tua pubblicazione. Dovrai fornire questo nome quando crei un flusso nella procedura guidata di creazione dei flussi Datastream.
- SCHEMA: il nome dello schema che contiene la tabella.
- TABLE: il nome della tabella che vuoi replicare.
 - Puoi anche creare una pubblicazione per tutte le tabelle del database. Tieni presente che questo approccio aumenta il carico sia sul database di origine sia su Datastream: - CREATE PUBLICATION PUBLICATION_NAME FOR ALL TABLES; 
- Crea uno slot di replica eseguendo il comando seguente. - SELECT PG_CREATE_LOGICAL_REPLICATION_SLOT('REPLICATION_SLOT_NAME', 'pgoutput');- Sostituisci quanto segue: - REPLICATION_SLOT_NAME: il nome dello slot di replica. Dovrai fornire questo nome quando crei uno stream nella procedura guidata di creazione degli stream Datastream.
 
Crea un utente Datastream
- Per creare un utente Datastream, inserisci il comando PostgreSQL seguente: - CREATE USER USER_NAME WITH REPLICATION LOGIN PASSWORD 'USER_PASSWORD'; - Sostituisci quanto segue: - USER_NAME: il nome dell'utente Datastream che vuoi creare.
- USER_PASSWORD: la password di accesso per l'utente Datastream che vuoi creare.
 
- Concedi i privilegi seguenti all'utente che hai creato: - GRANT SELECT ON ALL TABLES IN SCHEMA SCHEMA_NAME TO USER_NAME; GRANT USAGE ON SCHEMA SCHEMA_NAME TO USER_NAME; ALTER DEFAULT PRIVILEGES IN SCHEMA SCHEMA_NAME GRANT SELECT ON TABLES TO USER_NAME; - Sostituisci quanto segue: - SCHEMA_NAME: il nome dello schema a cui vuoi concedere i privilegi.
- USER_NAME: l'utente a cui vuoi concedere i privilegi.
 
Passaggi successivi
- Scopri di più su come Datastream funziona con le origini PostgreSQL.