Connessione a Cloud SQL: Compute Engine, IP privato e proxy Cloud SQL

1. Introduzione

Ultimo aggiornamento: 2021-05-06

Valutare la connessione

Esistono molti tipi di applicazioni e framework. In questo codelab, parleremo della connessione a Cloud SQL da un'applicazione in esecuzione su una macchina virtuale gestita in Google Compute Engine tramite un indirizzo IP privato interno utilizzando il proxy Cloud SQL. Si tratta di un modo incredibilmente sicuro per eseguire un'applicazione stateful nel cloud. Stai riducendo l'esposizione a internet limitandoti all'utilizzo solo di un IP privato e utilizzando il proxy SQL che gestisce la connettività SSL al posto tuo.

Un caso d'uso comune per questo potrebbe essere, ad esempio, un'applicazione on-premise che è stata spostata per l'esecuzione nel cloud anziché in locale.

Cosa creerai

Questo codelab è molto minimalista. L'idea è illustrare i dadi del pezzo di raccordo senza dover pensare troppo all'applicazione stessa. In un mondo perfetto, connettersi a Cloud SQL è come connettersi a qualsiasi altra istanza di un database SQL, quindi dovresti essere in grado di utilizzare ciò che crei in questo codelab e applicarlo a qualsiasi applicazione di produzione.

Le istruzioni includeranno sia una procedura dettagliata delle operazioni nella console di Google Cloud, sia gli equivalenti dei comandi gcloud per l'utilizzo nell'interfaccia a riga di comando o nell'automazione.

I singoli passaggi sono:

  • Crea un account di servizio minimo per abilitare la connessione all'istanza Cloud SQL
  • Crea una VM su Google Compute Engine (GCE)
  • Crea un'istanza Cloud SQL (questo tutorial utilizza Postgres, ma funziona in modo simile per MySQL o SQL Server)
  • Scarica ed esegui il proxy Cloud SQL sull'istanza GCE

Che cosa ti serve

  • Un account Google Cloud su cui disponi delle autorizzazioni per abilitare le API e creare servizi

2. Crea un account di servizio

Gli account di servizio vengono utilizzati per concedere le autorizzazioni a utilizzare diversi servizi all'interno del progetto Google Cloud. Per questo codelab, ne abbiamo bisogno per concedere l'autorizzazione al proxy Cloud SQL per connettersi alla nostra istanza Cloud SQL.

Nella console

Vai alla pagina degli account di servizio IAM e fai clic sul pulsante f8393a08b37a422c.png nella parte superiore della pagina.

Assegna al tuo account di servizio un nome e un ID univoci e fai clic su CREA.

Nella pagina successiva, fai clic sul menu a discesa Seleziona un ruolo. Filtra per "Cloud SQL" e seleziona il ruolo Client Cloud SQL. Fai clic su CONTINUA.

Fai clic su FINE.

Utilizzo di gcloud

Crea l'account di servizio:

gcloud iam service-accounts create <SERVICE_ACCOUNT_NAME> --display-name "<SERVICE_ACCOUNT_NAME> service account"

Questa operazione crea l'account di servizio, ma attualmente non è assegnato a ruoli/autorizzazioni. Per assegnare il ruolo appropriato, esegui:

gcloud projects add-iam-policy-binding <GCP PROJECT ID> --member serviceAccount:<SERVICE_ACCOUNT_NAME>@<GCP PROJECT ID>.iam.gserviceaccount.com --role roles/cloudsql.client

Ad es. Se il tuo account di servizio è denominato sa-test quando lo hai creato e il tuo progetto è my-project-test, il comando sarà:

gcloud projects add-iam-policy-binding my-project-test --member serviceAccount:sa-test@my-project-test.iam.gserviceaccount.com --role roles/cloudsql.client
gcloud iam service-accounts keys create service-account.json --iam-account <SERVICE_ACCOUNT_NAME>@<GCP PROJECT ID>.iam.gserviceaccount.com

3. Creazione della VM di Compute Engine

Google Compute Engine è il servizio gestito su cui verrà eseguita la macchina virtuale che conterrà l'applicazione da cui vogliamo connetterci. In questo codelab non stiamo creando un'applicazione, ma verificheremo la connettività eseguendo psql.

Nella console

Vai alla pagina Google Compute Engine e fai clic sul pulsante 77c46cd1f51bed5c.png.

Ci sono molte opzioni qui, le uniche cose che devi fare sono:

  1. Assegna un nome all'istanza
  2. Cambia Machine type in f1-micro
  3. In Identità e accesso API, modifica il menu a discesa per Service account da Default compute service account a quello creato nel passaggio precedente.
  4. Fai clic su Crea fino in fondo nella parte inferiore della pagina

Utilizzo di gcloud

L'account di servizio è il nome completo dell'account di servizio che hai creato in precedenza, quindi il suo formato sarà: <NAME>@<PROJECT>.iam.gserviceaccount.com.

gcloud compute instances create <INSTANCE NAME> --machine-type=f1-micro --zone=us-central1-b --service-account=<SERVICE ACCOUNT FULL NAME>
gcloud compute zones list

4. Creazione dell'istanza Cloud SQL

Cloud SQL è la nostra offerta per i database relazionali gestiti. Supporta MySQL, PostgreSQL e SQL Server. Per questo codelab creeremo un database Postgres, ma le istruzioni sono simili per tutti e tre.

Nella console

Vai alla pagina Cloud SQL e fai clic sul pulsante 241836b315e11bf5.png.

Come accennato, la maggior parte di questo codelab è generico per qualsiasi versione SQL, ma per questo codelab scegli PostgreSQL.

  1. Assegna un ID all'istanza
  2. Inserisci una password per l'utente predefinito (il nome utente sarà quello predefinito per il database selezionato, ad es. root per MySQL o postgres per PostgreSQL)
  3. Se hai cambiato la regione dell'istanza Compute, dovresti cambiare anche la regione qui in modo che corrisponda.
  4. Scorri verso il basso e fai clic sulla show configuration options
  5. Espandi la sezione Connectivity
  6. Deseleziona l'opzione per Public IP e seleziona la casella di controllo Private IP
  7. Assicurati che default sia selezionato nel menu a discesa visualizzato quando è stato selezionato l'IP privato
  8. Scorri verso il basso e fai clic su Crea.

Generalmente l'avvio dell'istanza richiede qualche minuto.

Utilizzo di gcloud

Dato che non abbiamo prompt utili per abilitare le API da qui, dovremo farlo manualmente

gcloud services enable servicenetworking.googleapis.com

Successivamente, devi abilitare la connettività privata ai servizi sulla rete VPC predefinita. Il primo passaggio per farlo è allocare un intervallo denominato di indirizzi IP da utilizzare per la nostra istanza.

gcloud compute addresses create sql-codelab-allocation --global --purpose=VPC_PEERING --prefix-length=24 --network=default

Il prossimo passo è assegnare questo intervallo di IP ai nostri servizi interni (questa operazione richiede circa un minuto).

gcloud services vpc-peerings update --service=servicenetworking.googleapis.com  --network=default     --project=<PROJECT ID> --ranges=sql-codelab-allocation --force

Infine, la creazione dell'istanza stessa è attualmente disponibile solo con la versione beta. La combinazione di --no-assign-ip e --network=default consente la connettività con IP privato. Al momento, non è possibile abilitare contemporaneamente sia l'IP privato che l'IP pubblico, quindi se hai bisogno dell'accesso pubblico, dovrai modificare l'istanza dopo la creazione. Il completamento dell'operazione richiede alcuni minuti.

gcloud beta sql instances create test-sql-codelab-00 --no-assign-ip --database-version=POSTGRES_11 --tier=db-f1-micro --region=us-central1 --network=default --root-password=<PASSWORD>

5. Configura ed esegui il proxy Cloud SQL

Una volta connesse alla VM, avremo bisogno di una stringa di connessione dell'istanza. Innanzitutto, ci connettiamo alla VM stessa tramite SSH. Le istruzioni per queste sezioni saranno indicate nelle rispettive sezioni dedicate a console o gcloud, il resto sarà costituito da comandi eseguiti dalla shell sulla VM nella rispettiva sezione.

Nella console

Vai qui e fai clic sul nome della tua istanza Cloud SQL.

Scorri un po' verso il basso e copia il Connection name da qualche parte per utilizzarlo in un secondo momento.

Vai alla pagina di elenco delle istanze di Google Compute Engine e individua la riga con la tua VM.

Nella colonna Connect, fai clic sul pulsante SSH. Si aprirà una finestra separata per connetterti in modo sicuro alla macchina virtuale.

Salta la sezione Using gcloud per leggere le altre istruzioni, perché è la stessa cosa per entrambe.

Utilizzo di gcloud

Sostituisci <INSTANCE NAME> con il nome della tua istanza Cloud SQL:

gcloud sql instances describe <INSTANCE NAME> | grep connectionName

Salva il nome della connessione dell'istanza per utilizzarlo in un secondo momento.

Dovrai sostituire <ZONE> con la zona utilizzata al momento della creazione dell'istanza. Se non l'hai modificata, allora è stata impostata su us-central1-b. E sostituisci anche <INSTANCE_NAME> con quanto specificato in precedenza.

gcloud compute ssh --zone <ZONE> <INSTANCE_NAME>

Dopo la connessione alla VM

Innanzitutto, dobbiamo scaricare il proxy. Dipende dal sistema operativo. Se non hai modificato il sistema operativo nella creazione della VM, sarà Linux e puoi usare:

wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64 -O cloud_sql_proxy && chmod +x cloud_sql_proxy

Se hai cambiato sistema operativo, puoi visitare questa pagina per trovare il comando giusto per scaricare il proxy per il tuo sistema operativo.

Per eseguire il proxy, recupera il nome della connessione dell'istanza che hai copiato dai dettagli dell'istanza Cloud SQL e sostituisci <INSTANCE_CONNECTION_NAME>. Tieni inoltre presente che il numero di porta tcp potrebbe cambiare se non utilizzi un database Postgres o se hai cambiato la porta predefinita su cui il database è in ascolto.

./cloud_sql_proxy -instances=<INSTANCE_CONNECTION_NAME>=tcp:5432 &

6. Testa la connessione e la conclusione

Come accennato in precedenza, se hai un'applicazione che vuoi testare nell'istanza GCE da testare, va bene anche questo. Per questo codelab, installeremo psql e utilizzeremo questo client per verificare che possiamo connetterci al nostro database.

Dalla sessione SSH sulla VM:

sudo apt-get install postgresql-client
psql "host=127.0.0.1 port=5432 sslmode=disable user=postgres"

Quindi specifica la password dell'utente predefinita che hai impostato durante la creazione dell'istanza Cloud SQL.

Complimenti! Se tutto è andato bene, dovresti avere il prompt di Postgres e poter eseguire i comandi sul tuo database.

Passaggi successivi

Dai un'occhiata ad alcuni di questi codelab...

Documenti di riferimento