Verbindung zu Cloud SQL herstellen: Compute Engine, private IP-Adresse und Cloud SQL-Proxy

1. Einführung

Zuletzt aktualisiert:06.05.2021

Über die Verbindung nachdenken

Es gibt viele Arten von Anwendungen und Frameworks. In diesem Codelab erfahren Sie, wie Sie mit einer Anwendung, die auf einer verwalteten virtuellen Maschine in Google Compute Engine über eine interne private IP-Adresse mit dem Cloud SQL-Proxy ausgeführt wird, eine Verbindung zu Cloud SQL herstellen. Dies ist eine unglaublich sichere Möglichkeit, eine zustandsorientierte Anwendung in der Cloud auszuführen. Sie minimieren Ihre Gefährdung gegenüber dem Internet, indem Sie sich darauf beschränken, nur eine private IP-Adresse zu verwenden, und den SQL-Proxy zu verwenden, der SSL-Verbindungen für Sie verarbeitet.

Ein häufiger Anwendungsfall dafür ist beispielsweise eine lokale Anwendung, die jetzt in der Cloud statt lokal ausgeführt wird.

Inhalt

Dieses Codelab ist sehr minimalistisch. Der Grundgedanke ist, Sie durch die Besonderheiten des Verbindungsstücks zu führen, ohne zu lange über die Anwendung selbst nachzudenken. Im Idealfall ist das Herstellen einer Verbindung zu Cloud SQL mit einer anderen Instanz einer SQL-Datenbank vergleichbar. Sie sollten also in der Lage sein, das, was Sie in diesem Codelab erstellt haben, auf jede Produktionsanwendung anzuwenden.

Sie enthält sowohl eine Einführung in die GCP Console als auch die Entsprechungen des gcloud-Befehls für die Verwendung mit der Befehlszeile oder Automatisierung.

Die einzelnen Schritte sind:

  • Erstellen Sie ein minimales Dienstkonto, um die Verbindung zur Cloud SQL-Instanz zu ermöglichen
  • VM in Google Compute Engine (GCE) erstellen
  • Cloud SQL-Instanz erstellen. In dieser Anleitung wird Postgres verwendet, für MySQL oder SQL Server funktioniert es jedoch ähnlich.
  • Cloud SQL-Proxy herunterladen und auf der GCE-Instanz ausführen

Voraussetzungen

  • Ein GCP-Konto, für das Sie die Berechtigungen zum Aktivieren von APIs und zum Erstellen von Diensten haben

2. Dienstkonto erstellen

Dienstkonten werden verwendet, um Berechtigungen zur Verwendung verschiedener Dienste innerhalb Ihres GCP-Projekts zu erteilen. Für dieses Codelab benötigen wir eins, um dem Cloud SQL-Proxy die Berechtigung zum Herstellen einer Verbindung zu unserer Cloud SQL-Instanz zu gewähren.

In der Console

Rufen Sie die IAM-Seite für Dienstkonten auf und klicken Sie oben auf der Seite auf die Schaltfläche f8393a08b37a422c.png.

Geben Sie Ihrem Dienstkonto einen eindeutigen Namen und eine eindeutige ID und klicken Sie auf ERSTELLEN.

Klicke auf der nächsten Seite auf das Drop-down-Menü für „Rolle auswählen“. Nach „Cloud SQL“ filtern 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, ihm jedoch derzeit keine Rollen/Berechtigungen zugewiesen. Führen Sie folgenden Befehl aus, um die entsprechende Rolle zuzuweisen:

gcloud projects add-iam-policy-binding <GCP PROJECT ID> --member serviceAccount:<SERVICE_ACCOUNT_NAME>@<GCP PROJECT ID>.iam.gserviceaccount.com --role roles/cloudsql.client

Beispiel: Wenn Ihr Dienstkonto bei der Erstellung den Namen sa-test und Ihr Projekt my-project-test hat, 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, in dem die virtuelle Maschine ausgeführt wird und die Anwendung enthält, über die die Verbindung hergestellt werden soll. In diesem Codelab erstellen wir keine Anwendung, aber wir prüfen die Konnektivität, indem wir psql ausführen.

In der Console

Rufen Sie die Seite Google Compute Engine auf und klicken Sie auf die Schaltfläche 77c46cd1f51bed5c.png.

Hier haben Sie viele Möglichkeiten. Sie müssen lediglich Folgendes tun:

  1. Instanz benennen
  2. Ändern Sie „Machine type“ zu „f1-micro
  3. Ändern Sie unter „Identität und API-Zugriff“ das Drop-down-Menü für Service account von Default compute service account in das Drop-down-Menü, das Sie im vorherigen Schritt erstellt haben.
  4. Klicken Sie ganz unten auf der Seite auf Erstellen .

gcloud verwenden

Das Dienstkonto ist der vollständige Name des zuvor erstellten Dienstkontos und hat daher das folgende 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, aber die Anweisungen sind für alle drei ähnlich.

In der Console

Rufen Sie die Seite Cloud SQL auf und klicken Sie auf die Schaltfläche 241836b315e11bf5.png.

Wie bereits erwähnt, ist der größte Teil dieses Codelabs für alle SQL-Varianten allgemein, aber für dieses Codelab wählen Sie PostgreSQL.

  1. Instanz eine ID zuweisen
  2. Geben Sie ein Passwort für den Standardnutzer ein. Der Nutzername ist der Standardnutzer für die ausgewählte Datenbank, z. B. root für MySQL oder postgres für PostgreSQL.
  3. Wenn Sie die Region Ihrer Compute-Instanz geändert haben, sollten Sie auch die Region hier entsprechend ändern.
  4. Scrollen Sie nach unten und klicken Sie auf das show configuration options.
  5. Abschnitt „Connectivity“ maximieren
  6. Deaktivieren Sie die Option für Public IP und klicken Sie das Kästchen Private IP an.
  7. Achten Sie darauf, dass default im Drop-down-Menü ausgewählt ist, das angezeigt wird, wenn die private IP-Adresse aktiviert wurde
  8. Scrollen Sie nach unten und klicken Sie auf „Erstellen“.

Es dauert normalerweise einige Minuten, bis die Instanz gestartet ist.

gcloud verwenden

Da wir hier keine schöne Aufforderung zum Aktivieren von APIs haben, müssen wir dies manuell tun.

gcloud services enable servicenetworking.googleapis.com

Als Nächstes müssen Sie die Verbindung zu privaten Diensten in unserem Standard-VPC-Netzwerk aktivieren. Zuerst weisen Sie der Instanz einen benannten Bereich von IP-Adressen zu.

gcloud compute addresses create sql-codelab-allocation --global --purpose=VPC_PEERING --prefix-length=24 --network=default

Als Nächstes weisen Sie 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

Das Erstellen der Instanz selbst ist derzeit nur mit der Betaversion möglich. Die Kombination aus --no-assign-ip und --network=default ermöglicht private IP-Verbindungen. Derzeit gibt es keine Möglichkeit, die private IP-Adresse und die öffentliche IP-Adresse gleichzeitig zu aktivieren. Wenn Sie also öffentlichen Zugriff benötigen, müssen Sie die Instanz nach der Erstellung bearbeiten. Dies 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 die Verbindung zur VM hergestellt ist, benötigen Sie einen Instanzverbindungsstring. Zuerst nehmen wir das und stellen über SSH eine Verbindung zur VM her. Anleitungen für diese Komponenten finden Sie in den entsprechenden Abschnitten für die Console bzw. gcloud. Der Rest umfasst Befehle, die in der Shell auf der VM in einem eigenen Abschnitt ausgeführt werden.

In der Console

Rufen Sie diese Seite auf und klicken Sie auf den Namen Ihrer Cloud SQL-Instanz.

Scrolle ein wenig nach unten und kopiere die Connection name zur späteren Verwendung.

Rufen Sie die Seite mit der Google Compute Engine-Instanzliste auf und suchen Sie die Zeile mit Ihrer VM.

Klicken Sie in der Spalte Connect auf die Schaltfläche SSH. Daraufhin wird ein separates Fenster geöffnet, in dem Sie eine sichere Verbindung zur virtuellen Maschine herstellen können.

Für die anderen Anleitungen gilt der gleiche 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 zur späteren Verwendung.

Sie müssen dabei <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. Und ersetzen Sie auch <INSTANCE_NAME>. mit der zuvor angegebenen Angabe durch.

gcloud compute ssh --zone <ZONE> <INSTANCE_NAME>

Nach der Verbindung zur VM

Zuerst müssen wir den Proxy herunterladen. Hängt vom 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 abzurufen.

Ersetzen Sie zum Ausführen des Proxys <INSTANCE_CONNECTION_NAME> durch den Namen der Instanzverbindung, den Sie aus den Cloud SQL-Instanzdetails kopiert haben. Beachten Sie außerdem, dass sich die TCP-Portnummer ändern kann, wenn Sie keine Postgres-Datenbank verwenden oder den Standardport geändert haben, den die Datenbank überwacht.

./cloud_sql_proxy -instances=<INSTANCE_CONNECTION_NAME>=tcp:5432 &

6. Verbindung und Zusammenfassung testen

Wie bereits erwähnt, ist das natürlich auch kein Problem, wenn Sie eine Anwendung zum Testen in der GCE-Instanz bereitstellen möchten. Für dieses Codelab installieren wir psql und verwenden diesen Client, um zu überprü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 festgelegt haben.

Glückwunsch! Wenn alles gut gelaufen ist, sollten Sie die Postgres-Eingabeaufforderung haben und Befehle für Ihre Datenbank ausführen.

Was liegt als Nächstes an?

Sehen Sie sich einige dieser Codelabs an...

Referenzdokumente