Connessione a Cloud SQL con Cloud Functions

1. Introduzione

Ultimo aggiornamento: 2021-05-11

Che cos'è Cloud SQL?

Cloud SQL è un servizio di database completamente gestito che semplifica la configurazione, la manutenzione, la gestione e l'amministrazione dei database relazionali sulla piattaforma Google Cloud.

Che cos'è Cloud Functions?

Cloud Functions è una soluzione di calcolo leggera che consente agli sviluppatori di creare funzioni autonome a uso specifico in grado di rispondere agli eventi Cloud senza dover gestire un ambiente server o di runtime.

Cosa creerai

In questo codelab, scriverai una funzione Cloud Functions in Python. La funzione:

  • Si connette a un'istanza di database Cloud SQL.
  • Invia un'istruzione di inserimento a una tabella nel database.

Cosa imparerai a fare

  • Accedere all'interfaccia utente web di Cloud Functions nella console Google Cloud.
  • Come creare una funzione Cloud Functions.
  • Come testare una funzione Cloud Functions.
  • Come connettersi a un'istanza di database Cloud SQL (MySQL o PostgreSQL) utilizzando Python.
  • Come scrivere in un database Cloud SQL utilizzando Python.

2. Requisiti

  • Un browser, ad esempio Chrome o Firefox.
  • Un progetto della piattaforma Google Cloud contenente la tua istanza Cloud SQL.
  • Se non ne hai già uno, puoi seguire i passaggi descritti nella guida rapida per MySQL o PostgreSQL. Svolgi tutti i passaggi tranne la pulizia.
  • L'istanza contiene un database MySQL o PostgreSQL con una tabella.
  • Il nome di connessione istanza, i nomi del database e della tabella, il nome utente del database e la password dell'utente.
  • Un account di servizio con il ruolo Client Cloud SQL.

3. Prepara il codice e crea la funzione

Prepara il codice

Qui puoi trovare il codice della funzione Cloud Functions per connetterti a un database Cloud SQL. Alcuni dei valori delle variabili dipendono dal fatto che il database Cloud SQL sia MySQL o PostgreSQL e dipendono dalle informazioni del tuo database.

L'interfaccia utente di Cloud Functions nella console Cloud include un editor di testo. Puoi copiare/incollare e modificare il codice qui oppure modificarlo localmente per poi copiarlo/incollarlo nell'interfaccia utente.

requirements.txt

# This file tells Python which modules it needs to import
SQLAlchemy==1.3.12      
# If your database is MySQL, uncomment the following line:
#PyMySQL==0.9.3
# If your database is PostgreSQL, uncomment the following line:
#pg8000==1.13.2

main.py

# This file contains all the code used in the codelab. 
import sqlalchemy

# Depending on which database you are using, you'll set some variables differently. 
# In this code we are inserting only one field with one value. 
# Feel free to change the insert statement as needed for your own table's requirements.

# Uncomment and set the following variables depending on your specific instance and database:
#connection_name = ""
#table_name = ""
#table_field = ""
#table_field_value = ""
#db_name = ""
#db_user = ""
#db_password = ""

# If your database is MySQL, uncomment the following two lines:
#driver_name = 'mysql+pymysql'
#query_string = dict({"unix_socket": "/cloudsql/{}".format(connection_name)})

# If your database is PostgreSQL, uncomment the following two lines:
#driver_name = 'postgres+pg8000'
#query_string =  dict({"unix_sock": "/cloudsql/{}/.s.PGSQL.5432".format(connection_name)})

# If the type of your table_field value is a string, surround it with double quotes.

def insert(request):
    request_json = request.get_json()
    stmt = sqlalchemy.text('insert into {} ({}) values ({})'.format(table_name, table_field, table_field_value))
    
    db = sqlalchemy.create_engine(
      sqlalchemy.engine.url.URL(
        drivername=driver_name,
        username=db_user,
        password=db_password,
        database=db_name,
        query=query_string,
      ),
      pool_size=5,
      max_overflow=2,
      pool_timeout=30,
      pool_recycle=1800
    )
    try:
        with db.connect() as conn:
            conn.execute(stmt)
    except Exception as e:
        return 'Error: {}'.format(str(e))
    return 'ok'

Crea la funzione

  1. In un browser, vai all'interfaccia utente della console di Google Cloud Platform.
  2. Seleziona Cloud Functions dal menu di navigazione.
  3. Fai clic su CREA FUNZIONE nella barra dei pulsanti.
  4. Inserisci un nome per la funzione.
  5. Seleziona l'attivatore HTTP. Annota l'URL visualizzato sotto l'elemento dell'attivatore. Sarà nel formato: https://REGION-PROJECT_ID.cloudfunctions.net/FUNCTION_NAME)
  6. In Autenticazione, seleziona Consenti chiamate non autenticate per rendere pubblica la funzione.
  7. Espandi Impostazioni di runtime, build e connessioni. In Account di servizio di runtime, seleziona un account di servizio con il ruolo Client Cloud SQL.
  8. Fai clic sul pulsante AVANTI.
  9. Seleziona Python 3.7 per l'opzione di runtime.
  10. Seleziona Editor incorporato per l'opzione Codice sorgente.
  11. Nelle finestre dell'editor del codice sorgente, elimina i contenuti esistenti sia di requirements.txt che di main.py e sostituiscili con le versioni modificate del codice precedente.
  12. Inserisci insert come nome dell'entry point.
  13. Fai clic su Esegui il deployment e attendi che venga creata la funzione. La rotellina smette di ruotare e viene visualizzato un segno di spunta verde nella pagina successiva quando la funzione è pronta per essere utilizzata.

4. testa la funzione

  1. In un browser, vai all'interfaccia utente della console di Google Cloud Platform.
  2. Seleziona Cloud Functions dal menu di navigazione.
  3. Fai clic sul nome della funzione creata in precedenza.
  4. Seleziona il link TEST al centro della pagina.
  5. Seleziona TESTA LA FUNZIONE.
  6. Dovrebbe essere visualizzato il risultato: ok (se il test non va a buon fine, viene visualizzata un'analisi dello stack che ti consente di eseguire il debug).
  7. In un browser, vai all'URL salvato in precedenza, quando hai creato la funzione. Se hai dimenticato di salvare l'URL, puoi recuperarlo dal link ATTIVATORE.
  8. Nel browser dovrebbe apparire anche il risultato ok.

5. Esegui la pulizia

Per evitare che al tuo account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questo codelab, segui questi passaggi.

Elimina l'istanza Cloud SQL

  1. Vai alla pagina Istanze Cloud SQL nella console Google Cloud.
  2. Seleziona l'istanza che hai creato per aprire la pagina Dettagli istanza.
  3. Nella barra delle icone nella parte superiore della pagina, fai clic su Elimina.
  4. Nella finestra Elimina istanza, digita il nome dell'istanza, quindi fai clic su Elimina per eliminarla. Non puoi riutilizzare un nome istanza per circa sette giorni dopo l'eliminazione di un'istanza.

Elimina la funzione Cloud Functions

  1. Vai alla pagina Cloud Functions nella console Google Cloud.
  2. Seleziona i tre puntini sotto Azioni per la funzione e scegli Elimina.
  3. Conferma l'eliminazione facendo clic sul pulsante ELIMINA.

6. Complimenti

Complimenti, hai creato una funzione Cloud Functions compatibile con Cloud SQL.

In particolare, hai creato una funzione Cloud Functions che si connette e scrive su un'istanza di database Cloud SQL.

7. Passaggi successivi

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

Per approfondire

Documenti di riferimento