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 Ihre relationalen Datenbanken auf der Google Cloud Platform ganz einfach einrichten, warten und verwalten können.

Was ist Cloud Functions?

Cloud Functions ist eine ressourcensparende Computing-Lösung, mit der Entwickler zweckgebundene, eigenständige Funktionen erstellen können, die auf Cloud-Ereignisse reagieren, ohne einen Server oder eine Laufzeitumgebung verwalten zu müssen.

Inhalt

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.

Aufgaben in diesem Lab

  • Hier erfahren Sie, wie Sie in der Google Cloud Console auf die Cloud Functions-Web-UI zugreifen.
  • Cloud Functions-Funktion erstellen
  • Cloud Functions-Funktion testen
  • Hier erfahren Sie, wie Sie mit Python eine Verbindung zu einer Cloud SQL-Datenbankinstanz (entweder MySQL oder PostgreSQL) herstellen.
  • Hier erfahren Sie, wie Sie mit Python in eine Cloud SQL-Datenbank schreiben.

2. Voraussetzungen

  • Ein Browser wie Chrome oder Firefox
  • Ein Google Cloud Platform-Projekt, das Ihre Cloud SQL-Instanz enthält.
  • Falls noch nicht geschehen, folgen Sie der Anleitung in der Kurzanleitung für MySQL oder PostgreSQL. Führen Sie alle Schritte bis auf die Bereinigung aus.
  • Die Instanz enthält eine MySQL- oder PostgreSQL-Datenbank mit einer Tabelle.
  • Name der Instanzverbindung, Datenbank- und Tabellennamen, Datenbanknutzername und Passwort des Nutzers.
  • Ein Dienstkonto mit der Rolle Cloud SQL-Client.

3. Code vorbereiten und Funktion erstellen

Code vorbereiten

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

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 kopieren und in die Benutzeroberfläche 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 UI der Google Cloud Platform 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 Trigger HTTP aus. Notieren Sie sich die URL, die unter dem Trigger-Element 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 zu veröffentlichen.
  7. Maximieren Sie 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 als runtime die Option Python 3.7 aus.
  10. Wählen Sie Inline-Editor als Option Quellcode aus.
  11. Löschen Sie in den Editorfenstern für den Quellcode den vorhandenen Inhalt der Datei requirements.txt und main.py und ersetzen Sie sie durch die bearbeitete Version des obigen Codes.
  12. Geben Sie als Namen für den Einstiegspunkt insert ein.
  13. Klicken Sie auf Bereitstellen und warten Sie, bis die Funktion erstellt wurde. Das rotierende Ladesymbol dreht sich nicht mehr und auf der nächsten Seite wird ein grünes Häkchen angezeigt, sobald die Funktion einsatzbereit ist.

4. Funktion testen

  1. Rufen Sie in einem Browser die UI der Google Cloud Platform 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, wird ein Stacktrace zur Fehlerbehebung angezeigt.
  7. Rufen Sie in einem Browser die URL auf, die Sie zuvor beim Erstellen der Funktion 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. Wählen Sie für Ihre Funktion die drei Punkte unter Aktionen und dann Löschen aus.
  3. Bestätigen Sie den Löschvorgang, indem Sie auf die Schaltfläche LÖSCHEN klicken.

6. Glückwunsch

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

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

7. Nächste Schritte

Sieh dir diese Codelabs an...

Weitere Informationen

Referenzdokumente