Sie können über Cloud Run mithilfe von ausgehendem Direct VPC-Traffic eine Verbindung zu einer Redis-Instanz herstellen.
Einrichtung
Wenn Sie die Google Cloud CLI bereits installiert und eine Redis-Instanz erstellt haben, können Sie diese Schritte überspringen.
Installieren und initialisieren Sie die gcloud CLI:
gcloud initFolgen Sie der Schnellstartanleitung zum Erstellen einer Redis-Instanz. Notieren Sie sich die Zone, die IP-Adresse und den Port der Redis-Instanz.
Ausgehenden VPC-Netzwerk-Traffic für die Konfiguration vorbereiten
Zum Herstellen einer Verbindung zu Ihrer Redis-Instanz benötigt Ihr Cloud Run-Dienst Zugriff auf das autorisierte VPC-Netzwerk der Redis-Instanz.
Führen Sie den folgenden Befehl aus, um den Namen dieses Netzwerks zu ermitteln:
gcloud redis instances describe INSTANCE_ID --region REGION --format "value(authorizedNetwork)"
Notieren Sie sich den Netzwerknamen.
Beispielanwendung
Diese HTTP-Server-Beispielanwendung stellt eine Verbindung zu einer Redis-Instanz über einen Cloud Run-Dienst her.
Klonen Sie das Repository für die gewünschte Programmiersprache und rufen Sie den Ordner auf, der den Beispielcode enthält:
Go
git clone https://github.com/GoogleCloudPlatform/golang-samples
cd golang-samples/memorystore/redis
Java
git clone https://github.com/GoogleCloudPlatform/java-docs-samples
cd java-docs-samples/memorystore/redis
Node.js
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples
cd nodejs-docs-samples/memorystore/redis
Python
git clone https://github.com/GoogleCloudPlatform/python-docs-samples
cd python-docs-samples/memorystore/redis
Diese Beispielanwendung erhöht einen Redis-Zähler jedes Mal, wenn auf den Endpunkt / zugegriffen wird.
Go
Diese Anwendung verwendet den github.com/gomodule/redigo/redis-Client. Installieren Sie diesen mit dem folgenden Befehl:
go get github.com/gomodule/redigo/redis@latest
Beispielanwendung:
Java
Diese Anwendung basiert auf dem Jetty-Servlet 3.1.
Sie verwendet die Jedis Bibliothek:
Die Klasse AppServletContextListener wird zum Erstellen eines langlebigen Redis-Verbindungspools verwendet:
Die Klasse VisitCounterServlet ist ein Web-Servlet, das einen Redis-Zähler schrittweise erhöht:
Node.js
Diese Anwendung verwendet das redis
Modul. Dies ist ein Beispiel für eine package.json-Datei:
Beispielcode für die Anwendung:
Python
Diese Anwendung verwendet Flask
für das Web-Serving und das redis-py
Paket für die Kommunikation mit der Redis-Instanz.
Beispielcode für die Anwendung:
Anwendung in Cloud Run bereitstellen
So stellen Sie die Anwendung bereit:
Kopieren Sie die Datei
Dockerfilein das Quellverzeichnis:cp cloud_run_deployment/Dockerfile .Verwenden Sie den folgenden Befehl, um mithilfe von Cloud Build ein Container-Image zu erstellen:
gcloud artifacts repositories create --location REPO_REGION --repository-format=docker REPO_ID gcloud builds submit --pack image=REPO_REGION-docker.pkg.dev/PROJECT_ID/REPO_ID/visit-counter:v1
Verwenden Sie den folgenden Befehl, um den Container in Cloud Run bereitzustellen:
gcloud run deploy \ --image REPO_REGION-docker.pkg.dev/PROJECT_ID/REPO_ID/visit-counter:v1 \ --allow-unauthenticated \ --region REGION \ --network NETWORK \ --subnet SUBNET \ --set-env-vars REDISHOST=REDIS_IP,REDISPORT=REDIS_PORT
Dabei gilt:
REPO_REGIONist die Region des Repositorys.REPO_IDist der Name des Repositorys, das das Anwendungs-Image enthält.PROJECT_IDist die ID Ihres Google Cloud Projekts.REGIONist die Region, in der sich Ihre Redis-Instanz befindet.NETWORKist der Name des autorisierten VPC-Netzwerk, mit dem Ihre Redis-Instanz verbunden ist.SUBNETist der Name Ihres Subnetzes. Das Subnetzwerk muss mindestens/26sein. Ausgehender Direct VPC-Traffic unterstützt die IPv4-Bereiche RFC 1918, RFC 6598, und die Klasse E.REDIS_IPundREDIS_PORTsind die IP-Adresse und die Portnummer Ihrer Redis-Instanz.
Nach erfolgreichem Abschluss der Bereitstellung wird in der Befehlszeile die URL Ihres Cloud Run-Dienstes angezeigt. Rufen Sie diese URL in einem Webbrowser auf oder verwenden Sie ein Tool wie curl. Die Anzahl der Redis-Instanzen steigt mit den Dienstaufrufen.