Diese Seite enthält Informationen und Beispiele für das Herstellen einer Verbindung zu einer Cloud SQL-Instanz über einen Dienst, der in Cloud Build ausgeführt wird.
Cloud SQL ist ein vollständig verwalteter Datenbankdienst, mit dem Sie Ihre relationalen Datenbanken in der Cloud einrichten, warten und verwalten können.
Cloud Build ist ein Dienst, der Ihre Builds in der Infrastruktur von Google Cloud ausführt.
Cloud SQL-Instanz einrichten
- Aktivieren Sie die Cloud SQL Admin API in dem Google Cloud-Projekt, über das Sie eine Verbindung herstellen, falls noch nicht geschehen:
- Cloud SQL for PostgreSQL-Instanz erstellen Wir empfehlen, einen
Cloud SQL-Instanzstandort in derselben Region wie Ihr Cloud Run-Dienst auszuwählen, um die Latenz zu verbessern, einige Netzwerkkosten zu vermeiden und das Risiko von regionenübergreifenden Ausfällen zu reduzieren.
Standardmäßig weist Cloud SQL einer neuen Instanz eine öffentliche IP-Adresse zu. Sie können aber auch eine private IP-Adresse zuweisen. Weitere Informationen zu den Verbindungsoptionen für beide Möglichkeiten finden Sie auf der Seite Verbindungsübersicht.
Cloud Build konfigurieren
Die Schritte zum Konfigurieren von Cloud Build hängen vom Typ der IP-Adresse ab, die Sie der Cloud SQL-Instanz zugewiesen haben.Öffentliche IP-Adresse (Standard)
Prüfen Sie, ob Ihr
Cloud Build-Dienstkonto die IAM-Rollen und -Berechtigungen hat, die für die Verbindung mit der Cloud SQL-Instanz erforderlich sind.
Das Cloud Build-Dienstkonto ist auf der Seite IAM der Google Cloud Console als Hauptkonto
[YOUR-PROJECT-NUMBER]@cloudbuild.gserviceaccount.com
aufgeführt.
Klicken Sie auf das Kästchen Von Google bereitgestellte Rollenzuweisungen einschließen, um dieses Dienstkonto in der Google Cloud Console aufzurufen.
Ihr Cloud Build-Dienstkonto benötigt eine der folgenden IAM-Rollen:
Cloud SQL Client
(bevorzugt)Cloud SQL Admin
cloudsql.instances.connect
cloudsql.instances.get
Wenn das Cloud Build-Dienstkonto zu einem anderen Projekt gehört als die Cloud SQL-Instanz, müssen die Cloud SQL Admin API und die IAM-Berechtigungen für beide Projekte hinzugefügt werden.
Private IP-Adresse
Zum Herstellen einer Verbindung zu Ihrer Cloud SQL-Instanz über eine private IP-Adresse muss sich Cloud Build im selben VPC-Netzwerk wie Ihre Cloud SQL-Instanz befinden. Konfiguration:
- Richten Sie eine private Verbindung zwischen dem VPC-Netzwerk Ihrer Cloud SQL-Instanz und dem Netzwerk des Diensterstellers ein.
- Erstellen Sie einen privaten Cloud Build-Pool.
Nach der Konfiguration kann Ihre Anwendung eine direkte Verbindung über die private IP-Adresse und den Port 5432
Ihrer Instanz herstellen, wenn Ihr Build im Pool ausgeführt wird.
Verbindung mit Cloud SQL herstellen
Nachdem Sie Cloud Build konfiguriert haben, können Sie eine Verbindung zu Ihrer Cloud SQL-Instanz herstellen.
Öffentliche IP-Adresse (Standard)
Für öffentliche IP-Pfade unterstützt Cloud Build sowohl Unix- als auch TCP-Sockets.
Sie können den Cloud SQL Auth-Proxy in einem Cloud Build-Schritt verwenden, um Verbindungen zu Ihrer Datenbank zuzulassen. Diese Konfiguration:
- Erstellt den Container und überträgt ihn per Push in Container Registry.
- Erstellt einen zweiten Container, der in die Cloud SQL Auth-Proxy-Binärdatei kopiert wird.
- Von Cloud Build erstellte Container müssen nicht in eine Registry verschoben werden und werden nach Abschluss des Builds verworfen.
- Durch Verwendung des zweiten Containers wird der Cloud SQL Auth-Proxy gestartet und es werden alle Migrationsbefehle ausgeführt.
Das obige Cloud Build-Codebeispiel zeigt, wie Sie ein hypothetisches Migrationsskript ausführen können, nachdem die obige Beispielanwendung bereitgestellt wurde, um ihre Cloud SQL-Datenbank mit dem Cloud SQL-Auth-Proxy und Cloud Build zu aktualisieren. Führen Sie die folgenden Schritte aus, um dieses Cloud Build-Codebeispiel auszuführen:
- Ordner mit Namen
sql-proxy
erstellen - Erstellen Sie eine
Dockerfile
-Datei im Ordnersql-proxy
mit der folgenden Codezeile für den Dateiinhalt:FROM gcr.io/gcp-runtimes/ubuntu_20_0_4
- Erstellen Sie im Ordner
sql-proxy
eine Dateicloudbuild.yaml
. - Aktualisieren Sie die Datei
cloudbuild.yaml
:- Kopieren Sie den obigen Cloud Build-Beispielcode und fügen Sie ihn in die Datei
cloudbuild.yaml
ein. - Verwenden Sie entweder eine TCP-Verbindung oder eine Unix-Socket-Verbindung, indem Sie den Codeblock für die nicht verwendete Verbindungsmethode entfernen.
- Ersetzen Sie die folgenden Platzhalterwerte durch die Werte, die in Ihrem Projekt verwendet werden:
mydatabase
myuser
myinstance
- Kopieren Sie den obigen Cloud Build-Beispielcode und fügen Sie ihn in die Datei
- Erstellen Sie in Secret Manager ein Secret mit dem Namen
database_password
.- Damit das Cloud Build-Dienstkonto auf dieses Secret zugreifen kann, müssen Sie ihm in IAM die Rolle Secret Manager Secret Accessor zuweisen. Weitere Informationen finden Sie unter Secrets aus Secret Manager verwenden.
- Erstellen Sie im Ordner
sql-proxy
eine Skriptdatei migrate.py.- Das Skript kann anhand der folgenden Beispiele auf die folgenden Umgebungsvariablen und das in der Datei
cloudbuild.yaml
erstellte Secret verweisen:os.getenv('DATABASE_NAME')
os.getenv('DATABASE_USER')
os.getenv('DATABASE_PASS')
os.getenv('INSTANCE_CONNECTION_NAME')
- Verwenden Sie die folgenden Beispiele, um dieselben Variablen aus einem Bash-Skript wie
migrate.sh
zu referenzieren:$DATABASE_NAME
$DATABASE_USER
$DATABASE_PASS
$INSTANCE_CONNECTION_NAME
- Das Skript kann anhand der folgenden Beispiele auf die folgenden Umgebungsvariablen und das in der Datei
- Führen Sie den folgenden Befehl
gcloud builds submit
aus, um einen Container mit dem Cloud SQL Auth-Proxy zu erstellen, den Cloud SQL Auth-Proxy zu starten und das Skriptmigrate.py
auszuführen:gcloud builds submit --config cloudbuild.yaml
Private IP-Adresse
Bei privaten IP-Pfaden stellt die Anwendung über private Pools eine direkte Verbindung zur Instanz her. Bei dieser Methode wird über TCP eine direkte Verbindung zur Cloud SQL-Instanz hergestellt, ohne den Cloud SQL Auth-Proxy zu verwenden.
Mit TCP verbinden
Stellen Sie eine Verbindung mithilfe der privaten IP-Adresse Ihrer Cloud SQL-Instanz als Host und Port 5432
her.
Python
Wenn Sie dieses Snippet im Kontext einer Webanwendung sehen möchten, rufen Sie die README-Datei auf GitHub auf.
Java
Wenn Sie dieses Snippet im Kontext einer Webanwendung sehen möchten, rufen Sie die README-Datei auf GitHub auf.
Hinweis:
- CLOUD_SQL_CONNECTION_NAME sollte als <MY-PROJECT>:<INSTANCE-REGION>:<INSTANCE-NAME> dargestellt werden.
- Die Verwendung des Arguments ipTypes=PRIVATE erzwingt, dass die SocketFactory eine Verbindung zur zugeordneten privaten IP-Adresse einer Instanz herstellen kann.
- Die Anforderungen für die JDBC Socket Factory-Version der pom.xml-Datei finden Sie hier.
Node.js
Wenn Sie dieses Snippet im Kontext einer Webanwendung sehen möchten, rufen Sie die README-Datei auf GitHub auf.
Go
Wenn Sie dieses Snippet im Kontext einer Webanwendung sehen möchten, rufen Sie die README-Datei auf GitHub auf.
C#
Wenn Sie dieses Snippet im Kontext einer Webanwendung sehen möchten, rufen Sie die README-Datei auf GitHub auf.
Ruby
Wenn Sie dieses Snippet im Kontext einer Webanwendung sehen möchten, rufen Sie die README-Datei auf GitHub auf.
PHP
Wenn Sie dieses Snippet im Kontext einer Webanwendung sehen möchten, rufen Sie die README-Datei auf GitHub auf.
Sie können dann einen Cloud Build-Schritt erstellen, um Ihren Code direkt auszuführen.
Das obige Cloud Build-Codebeispiel zeigt, wie Sie nach der Bereitstellung der obigen Beispielanwendung ein hypothetisches Skript für die Migration ausführen können, um die Cloud SQL-Datenbank mit Cloud Build zu aktualisieren. Führen Sie die folgenden Schritte aus, um dieses Cloud Build-Codebeispiel auszuführen:
- Ordner mit Namen
sql-private-pool
erstellen - Erstellen Sie eine
Dockerfile
-Datei im Ordnersql-private-pool
mit der folgenden Codezeile für den Dateiinhalt:FROM gcr.io/gcp-runtimes/ubuntu_20_0_4
- Erstellen Sie im Ordner
sql-private-pool
eine Dateicloudbuild.yaml
. - Aktualisieren Sie die Datei
cloudbuild.yaml
:- Kopieren Sie den obigen Cloud Build-Beispielcode und fügen Sie ihn in die Datei
cloudbuild.yaml
ein. - Ersetzen Sie die folgenden Platzhalterwerte durch die Werte, die in Ihrem Projekt verwendet werden:
mydatabase
myuser
databasehost
, im Formularhost:port
.
- Kopieren Sie den obigen Cloud Build-Beispielcode und fügen Sie ihn in die Datei
- Erstellen Sie in Secret Manager ein Secret mit dem Namen
database_password
.- Damit das Cloud Build-Dienstkonto auf dieses Secret zugreifen kann, müssen Sie ihm in IAM die Rolle Secret Manager Secret Accessor zuweisen. Weitere Informationen finden Sie unter Secrets aus Secret Manager verwenden.
- Erstellen Sie im Ordner
sql-proxy
eine Skriptdatei migrate.py.- Das Skript kann anhand der folgenden Beispiele auf die folgenden Umgebungsvariablen und das in der Datei
cloudbuild.yaml
erstellte Secret verweisen:os.getenv('DATABASE_NAME')
os.getenv('DATABASE_USER')
os.getenv('DATABASE_PASS')
os.getenv('DATABASE_HOST')
- Verwenden Sie die folgenden Beispiele, um dieselben Variablen aus einem Bash-Skript wie
migrate.sh
zu referenzieren:$DATABASE_NAME
$DATABASE_USER
$DATABASE_PASS
$DATABASE_HOST
- Das Skript kann anhand der folgenden Beispiele auf die folgenden Umgebungsvariablen und das in der Datei
- Führen Sie den folgenden Befehl
gcloud builds submit
aus, um einen Container mit dem Cloud SQL Auth-Proxy zu erstellen, den Cloud SQL Auth-Proxy zu starten und das Skriptmigrate.py
auszuführen:gcloud builds submit --config cloudbuild.yaml
Best Practices und weitere Informationen
Sie können für den lokalen Test Ihrer Anwendung den Cloud SQL Auth-Proxy verwenden. Eine ausführliche Anleitung dazu finden Sie unter Kurzanleitung zur Verwendung des Cloud SQL Auth-Proxys.
Sie können lokale Tests auch mithilfe des Cloud SQL Proxy-Docker-Images ausführen.
Migration von Datenbankschemas
Wenn Sie Cloud Build so konfigurieren, dass eine Verbindung zu Cloud SQL hergestellt wird, können Sie in Cloud Build Aufgaben zur Migration von Datenbankschemas mit demselben Code ausführen, den Sie auch auf jeder anderen serverlosen Plattform bereitstellen würden.
Secret Manager verwenden
Mit Secret Manager können Sie vertrauliche Informationen in Ihre Builds aufnehmen.