1. Einführung
Zuletzt aktualisiert: 06.05.2021
Verbindung herstellen
Es gibt viele Arten von Anwendungen und Frameworks. In diesem Codelab wird beschrieben, wie Sie über eine interne private IP-Adresse mit dem Cloud SQL-Proxy eine Verbindung zu Cloud SQL von einer Anwendung aus herstellen, die auf einer verwalteten virtuellen Maschine in Google Compute Engine ausgeführt wird. Dies ist eine äußerst sichere Methode, um eine zustandsorientierte Anwendung in der Cloud auszuführen. Sie minimieren die Gefährdung durch das Internet, indem Sie nur eine private IP-Adresse verwenden und den SQL-Proxy nutzen, der die SSL-Verbindung für Sie übernimmt.
Ein häufiger Anwendungsfall ist beispielsweise eine lokale Anwendung, die in die Cloud verlagert wurde, um nicht mehr lokal ausgeführt zu werden.
Umfang
Dieses Codelab ist sehr minimalistisch. Dabei geht es darum, die Grundlagen der Verbindung zu erläutern, ohne sich zu sehr mit der Anwendung selbst zu beschäftigen. Im Idealfall ist das Herstellen einer Verbindung zu Cloud SQL genauso einfach wie das Herstellen einer Verbindung zu einer anderen SQL-Datenbankinstanz. Sie sollten also in der Lage sein, die in diesem Codelab erstellten Elemente auf jede Produktionsanwendung anzuwenden.
Die Anleitung enthält sowohl eine Schritt-für-Schritt-Anleitung für die GCP Console als auch die entsprechenden gcloud-Befehle für die Verwendung in der CLI oder für die Automatisierung.
Die einzelnen Schritte sind:
- Minimales Dienstkonto erstellen, um eine Verbindung zur Cloud SQL-Instanz herzustellen
- VM in Google Compute Engine (GCE) erstellen
- Cloud SQL-Instanz erstellen (in dieser Anleitung wird Postgres verwendet, aber die Vorgehensweise ist für MySQL oder SQL Server ähnlich)
- Cloud SQL-Proxy auf der GCE-Instanz herunterladen und ausführen
Voraussetzungen
- Ein GCP-Konto, für das Sie Berechtigungen zum Aktivieren von APIs und Erstellen von Diensten haben
2. Dienstkonto erstellen
Mit Dienstkonten werden Berechtigungen für die Verwendung verschiedener Dienste in Ihrem GCP-Projekt erteilt. Für dieses Codelab benötigen wir eine, um dem Cloud SQL-Proxy die Berechtigung zu erteilen, eine Verbindung zu unserer Cloud SQL-Instanz herzustellen.
In der Console
Rufen Sie die Seite „IAM-Dienstkonten“ auf und klicken Sie oben auf der Seite auf die Schaltfläche
.
Geben Sie Ihrem Dienstkonto einen eindeutigen Namen und eine eindeutige ID und klicken Sie auf „ERSTELLEN“.
Klicken Sie auf der nächsten Seite auf das Drop-down-Menü „Rolle auswählen“. Filtern Sie nach „Cloud SQL“ und wählen Sie die Rolle „Cloud SQL-Client“ aus. Klicke auf CONTINUE (WEITER).
Klicken Sie auf "Done" (Fertig).
gcloud verwenden
Erstellen Sie das Dienstkonto:
gcloud iam service-accounts create <SERVICE_ACCOUNT_NAME> --display-name "<SERVICE_ACCOUNT_NAME> service account"
Dadurch wird das Dienstkonto erstellt, dem derzeit keine Rollen/Berechtigungen zugewiesen sind. Führen Sie zum Zuweisen der entsprechenden Rolle folgenden Befehl aus:
gcloud projects add-iam-policy-binding <GCP PROJECT ID> --member serviceAccount:<SERVICE_ACCOUNT_NAME>@<GCP PROJECT ID>.iam.gserviceaccount.com --role roles/cloudsql.client
Wenn Ihr Dienstkonto beispielsweise beim Erstellen den Namen sa-test hatte und Ihr Projekt my-project-test ist, lautet der Befehl:
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. Compute Engine-VM erstellen
Google Compute Engine ist der verwaltete Dienst, auf dem die virtuelle Maschine ausgeführt wird, die unsere Anwendung enthält, mit der wir eine Verbindung herstellen möchten. In diesem Codelab erstellen wir keine Anwendung, sondern bestätigen die Verbindung durch Ausführen von psql.
In der Console
Rufen Sie die Seite Google Compute Engine auf und klicken Sie auf die Schaltfläche
.
Hier gibt es viele Möglichkeiten. Sie müssen nur Folgendes tun:
- Instanz benennen
- Ändern Sie die
Machine typeinf1-micro. - Ändern Sie unter „Identität und API-Zugriff“ das Drop-down-Menü für
Service accountvonDefault compute service accountin das Drop-down-Menü, das Sie im vorherigen Schritt erstellt haben. - Klicken Sie ganz unten auf der Seite auf „Erstellen“.
gcloud verwenden
Das Dienstkonto ist der vollständige Name des Dienstkontos, das Sie zuvor erstellt haben. Es hat also das Format <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. Cloud SQL-Instanz erstellen
Cloud SQL ist unser Angebot für verwaltete relationale Datenbanken. Es unterstützt MySQL, PostgreSQL und SQL Server. In diesem Codelab erstellen wir eine Postgres-Datenbank. Die Anleitung ist jedoch für alle drei ähnlich.
In der Console
Rufen Sie die Seite Cloud SQL auf und klicken Sie auf die Schaltfläche
.
Wie bereits erwähnt, ist der Großteil dieses Codelabs für alle SQL-Varianten geeignet. Wählen Sie für dieses Codelab jedoch PostgreSQL aus.
- Instanz eine ID geben
- Geben Sie ein Passwort für den Standardnutzer ein. Der Nutzername ist der Standardname für die ausgewählte Datenbank, z. B.
rootfür MySQL oderpostgresfür PostgreSQL. - Wenn Sie die Region Ihrer Compute-Instanz geändert haben, sollten Sie auch die Region hier entsprechend ändern.
- Scrollen Sie nach unten und klicken Sie auf
show configuration options. - Maximieren Sie den Abschnitt „
Connectivity“. - Entfernen Sie das Häkchen bei
Public IPund setzen Sie ein Häkchen beiPrivate IP. - Achten Sie darauf, dass
defaultim Drop-down-Menü ausgewählt ist, das angezeigt wird, wenn „Private IP“ aktiviert ist. - Scrollen Sie nach unten und klicken Sie auf „Erstellen“.
Es dauert in der Regel einige Minuten, bis die Instanz gestartet ist.
gcloud verwenden
Da wir hier keine geeigneten Aufforderungen zum Aktivieren von APIs haben, müssen wir das manuell tun.
gcloud services enable servicenetworking.googleapis.com
Als Nächstes müssen wir die private Dienstverbindung in unserem Standard-VPC-Netzwerk aktivieren. Dazu müssen Sie zuerst einen benannten IP-Adressbereich für die Verwendung in unserer Instanz zuweisen.
gcloud compute addresses create sql-codelab-allocation --global --purpose=VPC_PEERING --prefix-length=24 --network=default
Als Nächstes weisen wir diesen IP-Bereich unseren internen Diensten zu. Das dauert etwa eine Minute.
gcloud services vpc-peerings update --service=servicenetworking.googleapis.com --network=default --project=<PROJECT ID> --ranges=sql-codelab-allocation --force
Und schließlich ist die Erstellung der Instanz selbst derzeit nur mit der Betaversion möglich. Die Kombination aus --no-assign-ip und --network=default ermöglicht private IP-Verbindungen. Derzeit ist es nicht möglich, sowohl private als auch öffentliche IP-Adressen gleichzeitig zu aktivieren. Wenn Sie also öffentlichen Zugriff benötigen, müssen Sie die Instanz nach der Erstellung bearbeiten. Die Ausführung dieses Befehls kann einige Minuten dauern.
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. Cloud SQL-Proxy einrichten und ausführen
Sobald wir eine Verbindung zur VM hergestellt haben, benötigen wir einen Instanzverbindungsstring. Zuerst rufen wir die IP-Adresse ab und stellen dann über SSH eine Verbindung zur VM her. Die Anleitung für diese Teile finden Sie in den jeweiligen Abschnitten für die Console und gcloud. Der Rest sind Befehle, die in einem eigenen Abschnitt über die Shell auf der VM ausgeführt werden.
In der Console
Rufen Sie diese Seite auf und klicken Sie auf den Namen Ihrer Cloud SQL-Instanz.
Scrollen Sie etwas nach unten und kopieren Sie die Connection name zur späteren Verwendung.
Rufen Sie die Seite mit der Instanzliste von Google Compute Engine auf und suchen Sie die Zeile mit Ihrer VM.
Klicken Sie in der Spalte Connect auf die Schaltfläche SSH. Dadurch wird ein separates Fenster geöffnet, in dem eine sichere Verbindung zur virtuellen Maschine hergestellt wird.
Die restliche Anleitung ist für beide Geräte gleich. Überspringen Sie daher den Abschnitt Using gcloud.
gcloud verwenden
Ersetzen Sie <INSTANCE NAME> durch den Namen Ihrer Cloud SQL-Instanz:
gcloud sql instances describe <INSTANCE NAME> | grep connectionName
Speichern Sie den Namen der Instanzverbindung für die spätere Verwendung.
Sie müssen <ZONE> durch die Zone ersetzen, die beim Erstellen der Instanz verwendet wurde. Wenn Sie sie nicht geändert haben, wurde sie auf us-central1-b festgelegt. Ersetzen Sie auch <INSTANCE_NAME> durch den zuvor angegebenen Namen.
gcloud compute ssh --zone <ZONE> <INSTANCE_NAME>
Nachdem die Verbindung zur VM hergestellt wurde
Zuerst müssen wir den Proxy herunterladen. Das hängt von Ihrem Betriebssystem ab. Wenn Sie das Betriebssystem bei der VM-Erstellung nicht geändert haben, ist es Linux und Sie können Folgendes verwenden:
wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64 -O cloud_sql_proxy && chmod +x cloud_sql_proxy
Wenn Sie das Betriebssystem gewechselt haben, finden Sie hier den richtigen Befehl, um den Proxy für Ihr Betriebssystem zu erhalten.
Um den Proxy auszuführen, ersetzen Sie <INSTANCE_CONNECTION_NAME> durch den Namen der Instanzverbindung, den Sie aus den Cloud SQL-Instanzdetails kopiert haben. Die TCP-Portnummer kann sich ändern, wenn Sie keine Postgres-Datenbank verwenden oder den Standardport geändert haben, an dem die Datenbank auf Anfragen wartet.
./cloud_sql_proxy -instances=<INSTANCE_CONNECTION_NAME>=tcp:5432 &
6. Verbindung testen und abschließen
Wie bereits erwähnt, können Sie natürlich auch eine Anwendung in der GCE-Instanz einrichten, um sie zu testen. In diesem Codelab installieren wir psql und verwenden diesen Client, um zu prüfen, ob wir eine Verbindung zu unserer Datenbank herstellen können.
Führen Sie in der SSH-Sitzung auf der VM folgende Schritte aus:
sudo apt-get install postgresql-client
psql "host=127.0.0.1 port=5432 sslmode=disable user=postgres"
Geben Sie dann das Passwort des Standardnutzers an, das Sie beim Erstellen der Cloud SQL-Instanz eingerichtet haben.
Glückwunsch! Wenn alles gut gegangen ist, sollten Sie den Postgres-Prompt sehen und Befehle für Ihre Datenbank ausführen können.
Nächste Schritte
Hier finden Sie einige Codelabs: