1. Introduzione
Ultimo aggiornamento: 06/05/2021
Riflettere sulla connessione
Esistono molti tipi di applicazioni e framework. In questo codelab, vedremo come connetterci a Cloud SQL da un'applicazione in esecuzione su una macchina virtuale gestita in Google Compute Engine tramite un indirizzo IP privato interno utilizzando Cloud SQL Proxy. Si tratta di un modo incredibilmente sicuro per eseguire un'applicazione stateful nel cloud. Stai riducendo al minimo la tua esposizione a internet limitandoti a utilizzare un IP privato e utilizzando il proxy SQL, che gestisce la connettività SSL per te.
Un caso d'uso comune potrebbe essere, ad esempio, un'applicazione on-premise che è stata spostata per essere eseguita nel cloud anziché localmente.
Cosa creerai
Questo codelab è molto minimalista. L'idea è di guidarti attraverso gli aspetti essenziali della connessione, senza pensare troppo all'applicazione stessa. In un mondo perfetto, la connessione a Cloud SQL è come la connessione a qualsiasi altra istanza di un database SQL, quindi dovresti essere in grado di prendere ciò che crei in questo codelab e applicarlo a qualsiasi applicazione di produzione.
Le istruzioni includeranno una procedura dettagliata per eseguire le operazioni nella console GCP, nonché i comandi gcloud equivalenti da utilizzare nella CLI o nell'automazione.
I singoli passaggi sono:
- Crea un service account 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 hai le autorizzazioni per abilitare le API e creare servizi
2. Crea un account di servizio
I service account vengono utilizzati per concedere le autorizzazioni per utilizzare diversi servizi all'interno del tuo progetto Google Cloud. Per questo codelab ne abbiamo bisogno per concedere l'autorizzazione al proxy Cloud SQL di connettersi alla nostra istanza Cloud SQL.
Nella console
Vai alla pagina degli account di servizio IAM e fai clic sul pulsante
nella parte superiore della pagina.
Assegna un nome e un ID univoci all'account di servizio e fai clic su CREA.
Nella pagina successiva, fai clic sul menu a discesa Seleziona un ruolo. Filtra in base a "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"
In questo modo viene creato il service account, ma al momento non gli sono assegnati 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 esempio, se il service account è denominato sa-test quando l'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 Compute Engine
Google Compute Engine è il servizio gestito in cui verrà eseguita la macchina virtuale che conterrà l'applicazione a cui vogliamo connetterci. In questo codelab non creeremo un'applicazione, ma confermeremo la connettività eseguendo psql.
Nella console
Vai alla pagina Google Compute Engine e fai clic sul pulsante
.
Qui ci sono molte opzioni, le uniche cose che devi fare sono:
- Assegna un nome all'istanza
- Modifica
Machine typeinf1-micro - In Identità e accesso API, modifica il menu a discesa per
Service accountdaDefault compute service accounta quello che hai creato nel passaggio precedente. - Fai clic su Crea in fondo alla pagina.
Utilizzo di gcloud
Il service account è il nome completo del service account che hai creato in precedenza, quindi avrà il formato <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 di 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
.
Come ho detto, la maggior parte di questo codelab è generica per qualsiasi variante di SQL, ma per questo codelab scegli PostgreSQL.
- Assegna un ID all'istanza
- Inserisci una password per l'utente predefinito (il nome utente sarà quello predefinito per il database selezionato, ad es.
rootper MySQL opostgresper PostgreSQL) - Se hai modificato la regione dell'istanza di computing, devi modificare anche la regione qui in modo che corrisponda.
- Scorri verso il basso e fai clic su
show configuration options. - Espandi la sezione
Connectivity - Deseleziona l'opzione per
Public IPe seleziona la casella di controlloPrivate IP. - Assicurati che
defaultsia selezionato nel menu a discesa visualizzato quando è stato selezionato IP privato. - Scorri verso il basso e fai clic su Crea.
L'avvio dell'istanza richiede in genere un paio di minuti.
Utilizzo di gcloud
Poiché non abbiamo prompt utili per abilitare le API da qui, dovremo farlo manualmente.
gcloud services enable servicenetworking.googleapis.com
Successivamente, dobbiamo abilitare la connettività privata ai servizi nella nostra rete VPC predefinita. Il primo passaggio consiste nell'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 passaggio successivo consiste nell'assegnare questo intervallo di IP ai nostri servizi interni (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 è attualmente disponibile solo con la versione beta. La combinazione di --no-assign-ip e --network=default consente la connettività IP privata. Al momento, non è possibile abilitare contemporaneamente l'IP privato e 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 connessi alla VM, avremo bisogno di una stringa di connessione dell'istanza. Per prima cosa, recupereremo questo valore, poi ci connetteremo alla VM tramite SSH. Le istruzioni per questi elementi si trovano nelle rispettive sezioni per la console e gcloud, mentre il resto sono comandi eseguiti dalla shell sulla VM nella sua sezione.
Nella console
Vai qui e fai clic sul nome dell'istanza Cloud SQL.
Scorri leggermente verso il basso e copia Connection name da qualche parte per utilizzarlo in un secondo momento.
Vai alla pagina dell'elenco delle istanze di Google Compute Engine e trova la riga con la tua VM.
Nella colonna Connect, fai clic sul pulsante SSH per aprire una finestra separata che si connette in modo sicuro alla macchina virtuale.
Salta la sezione Using gcloud per il resto delle istruzioni, poiché sono le stesse per entrambi.
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 all'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, è stata impostata su us-central1-b. Sostituisci anche <INSTANCE_NAME> con il valore specificato in precedenza.
gcloud compute ssh --zone <ZONE> <INSTANCE_NAME>
Una volta connesso alla VM
Per prima cosa, dobbiamo scaricare il proxy. Dipende dal sistema operativo. Se non hai modificato il sistema operativo durante la creazione della VM, sarà Linux e potrai utilizzare:
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 andare qui per trovare il comando giusto per ottenere 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 per sostituire <INSTANCE_CONNECTION_NAME>. Tieni presente inoltre che il numero di porta TCP potrebbe cambiare se non utilizzi un database Postgres o se hai modificato la porta predefinita su cui è in ascolto il database.
./cloud_sql_proxy -instances=<INSTANCE_CONNECTION_NAME>=tcp:5432 &
6. Testare la connessione e concludere
Come accennato in precedenza, se hai un'applicazione che vuoi configurare nell'istanza GCE per il test, va bene lo stesso. Per questo codelab, installeremo psql e utilizzeremo questo client per verificare che sia possibile connettersi 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 predefinito che hai configurato durante la creazione dell'istanza Cloud SQL.
Complimenti! Se tutto è andato bene, dovresti visualizzare il prompt di Postgres e poter eseguire comandi sul tuo database.
Passaggi successivi
Dai un'occhiata ad alcuni di questi codelab...