Mit Cloud Functions eine Verbindung zu Cloud SQL herstellen

1. Einführung

Zuletzt aktualisiert: 11.05.2021

Was ist Cloud SQL?

Cloud SQL ist ein vollständig verwalteter Datenbankdienst, mit dem Sie relationale Datenbanken auf der Google Cloud Platform ganz einfach einrichten, warten und verwalten können.

Was ist Cloud Functions?

Cloud Functions ist eine einfache Computing-Lösung für Entwickler zum Erstellen eigenständiger und zweckgebundener Funktionen, mit denen auf Cloud-Ereignisse reagiert werden kann, ohne einen Server oder eine Laufzeitumgebung verwalten zu müssen.

Umfang

In diesem Codelab schreiben Sie eine Cloud Functions-Funktion in Python. Die Funktion:

  • Stellt eine Verbindung zu einer Cloud SQL-Datenbankinstanz her.
  • Sendet eine INSERT-Anweisung an eine Tabelle in der Datenbank.

Lerninhalte

  • So greifen Sie in der Google Cloud Console auf die Cloud Functions-Web-UI zu.
  • Cloud Functions-Funktion erstellen
  • Cloud Functions-Funktion testen
  • So stellen Sie mit Python eine Verbindung zu einer Cloud SQL-Datenbankinstanz (MySQL oder PostgreSQL) her.
  • So schreiben Sie mit Python in eine Cloud SQL-Datenbank.

2. Voraussetzungen

  • Ein Browser, z. B. Chrome oder Firefox.
  • Ein Google Cloud-Projekt, das Ihre Cloud SQL-Instanz enthält.
  • Wenn Sie noch keine haben, können Sie der Kurzanleitung für MySQL oder PostgreSQL folgen. Führen Sie alle Schritte außer dem Bereinigen aus.
  • Ihre Instanz enthält eine MySQL- oder PostgreSQL-Datenbank mit einer Tabelle.
  • Der Name der Instanzverbindung, die Namen der Datenbank und der Tabelle, der Name des Datenbanknutzers und das Passwort des Nutzers.
  • Ein Dienstkonto mit der Rolle Cloud SQL-Client.

3. Code vorbereiten und Funktion erstellen

Code vorbereiten

Der Cloud Functions-Code zum Herstellen einer Verbindung zu einer Cloud SQL-Datenbank ist hier zu finden. Einige Variablenwerte hängen davon ab, ob Ihre Cloud SQL-Datenbank MySQL oder PostgreSQL ist, und von Ihren eigenen Datenbankinformationen.

Die Cloud Functions-Benutzeroberfläche in der Cloud Console enthält einen Texteditor. Sie können den Code dort kopieren/einfügen und bearbeiten oder den Code zuerst lokal bearbeiten und dann in die Benutzeroberfläche kopieren/einfügen.

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'

Funktion erstellen

  1. Rufen Sie in einem Browser die Google Cloud Console auf.
  2. Wählen Sie aus dem Navigationsmenü Cloud Functions aus.
  3. Klicken Sie in der Schaltflächenleiste auf FUNKTION ERSTELLEN.
  4. Geben Sie einen Namen für die Funktion ein.
  5. Wählen Sie den HTTP-Trigger aus. Notieren Sie sich die URL, die unter dem Triggerelement angezeigt wird. Sie hat folgendes Format: https://REGION-PROJECT_ID.cloudfunctions.net/FUNCTION_NAME.
  6. Wählen Sie unter Authentifizierung die Option Nicht authentifizierte Aufrufe zulassen aus, um die Funktion öffentlich zu machen.
  7. Maximieren Sie die Laufzeit-, Build- und Verbindungseinstellungen. Wählen Sie unter Laufzeitdienstkonto ein Dienstkonto mit der Rolle Cloud SQL-Client aus.
  8. Klicken Sie auf die Schaltfläche WEITER.
  9. Wählen Sie für die Option Laufzeit die Option Python 3.7 aus.
  10. Wählen Sie für die Option Quellcode die Option Inline-Editor aus.
  11. Löschen Sie in den Quellcode-Editor-Fenstern die vorhandenen Inhalte für requirements.txt und main.py und ersetzen Sie sie durch Ihre bearbeiteten Versionen des obigen Codes.
  12. Geben Sie insert als Namen des Einstiegspunkts ein.
  13. Klicken Sie auf Bereitstellen und warten Sie, bis die Funktion erstellt wurde. Wenn die Funktion einsatzbereit ist, wird das sich drehende Symbol angehalten und auf der nächsten Seite wird ein grünes Häkchen angezeigt.

4. Funktion testen

  1. Rufen Sie in einem Browser die Google Cloud Console auf.
  2. Wählen Sie aus dem Navigationsmenü Cloud Functions aus.
  3. Klicken Sie auf den Namen der Funktion, die Sie zuvor erstellt haben.
  4. Wählen Sie in der Mitte der Seite den Link TESTING aus.
  5. Wählen Sie FUNKTION TESTEN aus.
  6. Das Ergebnis sollte ok lauten. Wenn der Test fehlschlägt, sehen Sie einen Stacktrace zum Debugging.
  7. Rufen Sie in einem Browser die URL auf, die Sie beim Erstellen der Funktion zuvor gespeichert haben. Wenn Sie vergessen haben, die URL zu speichern, können Sie sie über den Link TRIGGER abrufen.
  8. Das Ergebnis ok sollte auch im Browser angezeigt werden.

5. Bereinigen

Mit den folgenden Schritten vermeiden Sie, dass Ihrem Google Cloud-Konto die in diesem Codelab verwendeten Ressourcen in Rechnung gestellt werden.

Cloud SQL-Instanz löschen

  1. Rufen Sie in der Google Cloud Console die Seite Cloud SQL-Instanzen auf.
  2. Wählen Sie die erstellte Instanz aus, um die Seite „Instanzdetails“ zu öffnen.
  3. Klicken Sie oben auf der Seite in der Symbolleiste auf Löschen.
  4. Geben Sie im Fenster „Instanz löschen“ den Namen der Instanz ein und klicken Sie dann auf Löschen, um die Instanz zu löschen. Nach dem Löschen einer Instanz kann der Instanzname etwa 7 Tage lang nicht wiederverwendet werden.

Cloud Functions-Funktion löschen

  1. Rufen Sie in der Google Cloud Console die Seite „Cloud Functions“ auf.
  2. Klicken Sie für die Funktion unter Aktionen auf das Dreipunkt-Menü und wählen Sie Löschen aus.
  3. Klicken Sie zur Bestätigung auf die Schaltfläche LÖSCHEN.

6. Glückwunsch

Glückwunsch! Sie haben erfolgreich eine Cloud-Funktion erstellt, die mit Cloud SQL funktioniert.

Sie haben eine Cloud-Funktion erstellt, die eine Verbindung zu einer Cloud SQL-Datenbankinstanz herstellt und Daten in diese schreibt.

7. Nächste Schritte

Hier findest du einige Codelabs…

Weitere Informationen

Referenzdokumente