Blog

Wie man eine private Serverless-Verbindung mit CloudSQL erstellt

Martijn van de Grift

Martijn van de Grift

Aktualisiert Oktober 20, 2025
6 Minuten

Private Verbindung

Standardmäßig sind die Dienste über öffentliche IPs miteinander verbunden. In den meisten Fällen ist es ratsam, stattdessen private IPs zu verwenden. Mit privaten IP-Adressen können sich Geräte innerhalb desselben Netzwerks verbinden, ohne eine Verbindung zum öffentlichen Internet herstellen zu müssen. Dies bietet eine zusätzliche Schutzebene, die es einem externen Host oder Benutzer erschwert, eine Verbindung herzustellen.

Das Problem

Das Zugriffsmuster Private IP wurde mit Blick auf Infrastructure as a Service (IaaS) entwickelt (d.h. virtuelle Maschinen, VPC usw.). Das bedeutet, dass dies nicht so einfach zu implementieren ist, wenn Sie Serverless-Dienste verwenden. Beispiele für Serverless Compute-Dienste innerhalb von Google Cloud sind:

  • App Engine Standardumgebung
  • Cloud-Funktionen
  • Wolkenlauf

Die Lösung

Um dieses Problem zu lösen, hat Google eine Netzwerkkomponente veröffentlicht, die Serverless VPC Access heißt. Dieser Connector ermöglicht es Ihnen, aus Serverless-Umgebungen eine direkte Verbindung zu Ihrem VPC-Netzwerk herzustellen. Wir verwenden den Serverless VPC Access Connector, um eine Verbindung zu einer CloudSQL-Datenbank über Private IP herzustellen. Bitte beachten Sie, dass dies nicht auf CloudSQL beschränkt ist. Sobald Sie den Serverless VPC Access Connector eingerichtet haben, ist es möglich, eine Verbindung zu allen Ressourcen herzustellen, die in Ihrer VPC verfügbar sind. In diesem Blog-Beitrag führe ich Sie durch die Einrichtung dieser Funktion für die Google App Engine Standardumgebung.

Voraussetzungen:

  • Authentifiziertes Google Cloud SDK, alternativ Cloud Shell.
  • Ausreichende GCP-Berechtigungen, um Netzwerke zu erstellen und Implementierungen durchzuführen.

Schritt 1: Erstellen Sie eine VPC mit Netzwerken

Für diesen Blog-Beitrag werde ich eine neue VPC mit einem Subnetz in europe-west1 erstellen. Bitte beachten Sie, dass dies nicht erforderlich ist. Sie können auch Ihre eigene VPC oder die von Google bereitgestellte Standard-VPC wiederverwenden.

gcloud compute networks create private-cloud-sql 
--subnet-mode custom

In Google Cloud ist eine VPC zwar global, aber wir müssen trotzdem Subnetze erstellen, um Ressourcen in den verschiedenen Cloud-Regionen bereitzustellen. Dieser Befehl erstellt ein Subnetz in der VPC, die wir zuvor für europe-west1 erstellt haben:

gcloud compute networks subnets create private-europe-west1 
--description=europe-west1 subnet 
--range=192.168.1.0/24 
--network=private-cloud-sql 
--region=europe-west1

Schritt 2: Erstellen Sie einen Serverless VPC Access Connector

Nachdem wir eine VPC mit einem Subnetz erstellt haben, können wir mit der Erstellung eines Serverless VPC Access Connector fortfahren. Dazu können wir den folgenden GCloud-Befehl verwenden.

gcloud compute networks vpc-access connectors create connector-europe-west1 
  --network=private-cloud-sql 
  --region=europe-west1 
  --range=10.8.0.0/28

Hinweis: Dieser Befehl verwendet einige Standardwerte für die Anzahl der Instanzen und den Instanztyp. Da dies den Netzwerkdurchsatz zwischen Ihrer VPC und den Serverless-Produkten einschränken könnte, wird empfohlen, diese Eigenschaften zu überschreiben.

Schritt 3: Private Zugangsverbindung einrichten

Die CloudSQL-Instanzen werden in einer VPC bereitgestellt, die von Google verwaltet wird. Um CloudSQL-Instanzen über eine private IP in Ihrer VPC zu nutzen, müssen wir eine VPC-Peering-Verbindung mit dem 'servicenetworking'-Netzwerk einrichten. Wenn dies das erste Mal ist, dass Sie mit dem Servicenetzwerk interagieren, müssen Sie die API über aktivieren:

gcloud services enable servicenetworking.googleapis.com

Um eine VPC-Peering-Verbindung einzurichten, müssen wir zunächst einen IP-Bereich reservieren, der verwendet werden kann. Dazu führen Sie den folgenden Befehl aus:

gcloud compute addresses create google-managed-services-private-cloud-sql 
--global 
--purpose=VPC_PEERING 
--prefix-length=16 
--network=private-cloud-sql

Damit wird ein automatisch generierter IP-Adressbereich auf der Grundlage eines Präfixes eingerichtet. Sie können den Bereich aber auch selbst festlegen. Da wir nun einen IP-Bereich haben, können wir diesen verwenden, um ein VPC-Peering einzurichten, das eine Verbindung mit dem Projekt 'Service Networking' herstellt:

gcloud services vpc-peerings connect 
--service=servicenetworking.googleapis.com 
--ranges=google-managed-services-private-cloud-sql 
--network=private-cloud-sql

Hinweis: Dieser Schritt ist speziell für die Verbindung mit Cloud SQL über private IP gedacht. Er kann übersprungen werden, wenn Sie keine Verbindung mit CloudSQL herstellen.

Schritt 4: Erstellen einer Cloud SQL-Instanz

Nachdem wir nun die notwendige Netzwerkinfrastruktur geschaffen haben, können wir eine CloudSQL-Datenbankinstanz erstellen. Mit diesem Befehl erstellen wir eine neue PostgreSQL-Datenbank mit privater IP in dem VPC-Netzwerk, das wir zuvor eingerichtet haben. In diesem Beispiel habe ich 'secretpassword' als Root-Passwort verwendet. Für die Produktion empfehle ich die Verwendung von Google Secret Manager oder IAM-Authentifizierung.

gcloud beta sql instances create private-postgres 
--region=europe-west1 
--root-password=secretpassword 
--database-version=POSTGRES_13 
--no-assign-ip 
--network=private-cloud-sql 
--cpu=2 
--memory=4GB 
--async

Dieser Vorgang dauert ein paar Minuten. Danach kann eine Datenbank in der neu bereitgestellten CloudSQL-Instanz erstellt werden.

gcloud sql databases create test --instance private-postgres

Schritt 5: Konfigurieren Sie Ihre App Engine Anwendung

Nachdem wir nun die richtige Netzwerkkonfiguration erstellt haben und die (PostgreSQL) Datenbank angelegt wurde, ist es an der Zeit, die Konfiguration unserer App Engine Anwendung zu aktualisieren. Eine Hallo Welt Anwendung kann hier geklont werden. Um die Konfiguration einer App Engine Anwendung zu aktualisieren, müssen wir die Datei app.yaml ändern. Diese Datei befindet sich im Stammverzeichnis des Projekts. Das Ergebnis könnte wie folgt aussehen (vergessen Sie nicht, die Werte für den VPC Connector und die Datenbank zu ersetzen):

runtime: nodejs14

vpc_access_connector:
 name: projects/martijnsgcpproject/locations/europe-west1/connectors/connector-europe-west1
 egress_setting: all-traffic

env_variables:
  PGHOST: 10.39.16.5
  PGUSER: postgres
  PGDATABASE: test
  PGPASSWORD: secretpassword
  PGPORT: 5432

In diesem Beispiel werden die Informationen zur Datenbankverbindung über Umgebungsvariablen bereitgestellt. Je nach Bibliothek/Laufzeitumgebung, die Sie verwenden, müssen Sie diese möglicherweise ändern. Sie geben den Benutzernamen, die Datenbank und die in Schritt 4 verwendeten Passworteinstellungen an. Um die für Ihre CloudSQL reservierte private IP-Adresse zu erhalten, können Sie zur Google Cloud Console navigieren und die Seite Cloud SQL aufrufen.

Schritt 6: Stellen Sie Ihre App Engine Anwendung bereit

Jetzt, wo wir unsere App Engine Spezifikation konfiguriert haben, können wir sie bereitstellen. Navigieren Sie zum Stammverzeichnis und führen Sie aus:

gcloud app deploy

Dadurch wird Ihre App verpackt, auf GCP hochgeladen und auf dem App Engine Service bereitgestellt. Nachdem die App bereitgestellt wurde, können Sie automatisch zur Anwendung navigieren, indem Sie sie ausführen:

gcloud app browse

Die Anwendung Hallo Welt hat nur einen Endpunkt. Sobald sie ausgelöst wird, stellt sie eine Verbindung mit der CloudSQL-Datenbank her und führt eine SELECT NOW() Abfrage aus. Sobald Sie über den Befehl gcloud app browse zu dem generierten Link navigieren, sehen Sie: Herzlichen Glückwunsch! Ihre Verbindung von Google App Engine zu einer privaten CloudSQL-Instanz ist erfolgreich!

Bonus: Wolkenlauf

In diesem Blogbeitrag geht es zwar um Google App Engine, aber es ist auch möglich, den Serverless VPC Connector mit Cloud Run zu verwenden, und zwar über:

gcloud run deploy SERVICE_NAME 
--image IMAGE_URL 
--vpc-connector CONNECTOR_NAME

Das Servicekonto, das Cloud Run verwendet, muss die folgende Rolle haben: roles/vpcaccess.serviceAgent.

Bonus 2: Cloud-Funktionen

Ähnlich wie bei Cloud Run können Sie eine Cloud-Funktion mit einem Serverless VPC Connector über einrichten:

gcloud functions deploy FUNCTION_NAME 
--vpc-connector CONNECTOR_NAME 

Das Servicekonto, das Cloud Function verwendet, muss die folgende Rolle haben: roles/vpcaccess.serviceAgent.

Fazit

Wir haben soeben gelernt, wie man die Serverless-Produkte von Google Cloud über den Serverless VPC Access Connector mit privaten IP-Instanzen kombiniert. Das folgende Diagramm veranschaulicht alles, was wir in diesem Blogpost erstellt haben.

Verfasst von

Martijn van de Grift

Contact

Let’s discuss how we can support your journey.