Regions-ID
REGION_ID ist ein abgekürzter Code, den Google anhand der Region zuweist, die Sie beim Erstellen Ihrer Anwendung ausgewählt haben. Der Code bezieht sich nicht auf ein Land oder eine Provinz, auch wenn einige Regions-IDs häufig verwendeten Länder- und Provinzcodes ähneln können. Bei Anwendungen, die nach Februar 2020 erstellt wurden, ist REGION_ID.r in den App Engine-URLs enthalten. Bei Anwendungen, die vor diesem Datum erstellt wurden, ist die Regions-ID in der URL optional.
Weitere Informationen zu Regions-IDs.
Wenn Sie die Bildverarbeitung in Ihren vorhandenen App Engine-Anwendungen modernisieren möchten, können Sie einen containerisierten Bildtransformationsdienst in Cloud Run bereitstellen und Ihre App Engine Images service Aufrufe dorthin weiterleiten.
Für diese Migration sind keine größeren Änderungen am Bildverarbeitungscode oder am Hosting Ihrer App Engine-Anwendung in Cloud Run erforderlich. Stattdessen fängt das App Engine-Dienste-SDK beim Konfigurieren Ihrer Anwendung Ihre App Engine-Bilderdienstaufrufe ab und leitet sie an den Cloud Run-Dienst weiter. Der Dienst verarbeitet die Bilder mit einer Open-Source-Pillow Engine über gRPC und gibt die Ergebnisse an Ihre App Engine Anwendung zurück. Mit dieser Einrichtung wird das Legacy-Backend des App Engine-Bilderdienstes durch eine moderne, cloudnative Lösung ersetzt.
Beschränkungen
Wenn Sie den benutzerdefinierten Bildverarbeitungsdienst verwenden, können Sie keine Bereitstellungs-URLs generieren. App Engine löst eine Laufzeitausnahme aus, wenn Sie die Methode
getServingUrl()aufrufen. Diese Einschränkung verhindert, dass das Legacy-Backend zum Speichern und Bereitstellen von Bildern verwendet wird.Zum Bereitstellen von Bildern empfehlen wir, sie entweder direkt über eine Cloud Storage-URL bereitzustellen oder je nach Anwendungsanforderungen einen Cloud Storage-Bucket zu verwenden, der von Cloud CDN unterstützt wird.
Vorhandene URLs, die Sie mit Legacy-Aufrufen der Methode
getServingUrl()erstellt haben, stellen weiterhin Bilder bereit.Wenn Sie Ihre App Engine-Dienste-SDK-Version aktualisieren, leitet App Engine App Engine-Aufrufe nicht automatisch an den Cloud Run-Dienst weiter. Das neue Verhalten wird erst angewendet, nachdem Sie die Umgebungsvariablen für die Migration
APPENGINE_USE_CUSTOM_IMAGES_GRPC_SERVICEundAPPENGINE_IMAGES_SERVICE_ENDPOINTkonfiguriert haben.
Hinweis
Achten Sie darauf, dass Sie Zugriff auf den App Engine-Quellcode haben.
Aktivieren Sie die Cloud Run Admin API und die Artifact Registry API:
Erforderliche Rollen
Sie können entweder ein neues Dienstkonto erstellen oder dasselbe nutzerverwaltete Dienstkonto in Cloud Run verwenden, das Sie für App Engine verwenden. Sie oder Ihr Administrator müssen dem Bereitstellerkonto und dem Cloud Build-Dienstkonto die folgenden IAM-Rollen zuweisen.
Klicken, um die erforderlichen Rollen für das Bereitstellerkonto aufzurufen
Bitten Sie Ihren Administrator, Ihnen die folgenden IAM Rollen zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Erstellen und Bereitstellen aus der Quelle benötigen:
- Cloud Run-Quellcodeentwickler (
roles/run.sourceDeveloper) für Ihr Projekt - Service Usage Consumer (
roles/serviceusage.serviceUsageConsumer) für Ihr Projekt - Dienstkontonutzer (
roles/iam.serviceAccountUser) für die Cloud Run-Dienstidentität
Klicken, um die erforderlichen Rollen für das Cloud Build-Dienstkonto aufzurufen
Cloud Build verwendet automatisch das
Compute Engine-Standarddienstkonto als Standard-Cloud Build-Dienstkonto, um Ihren Quellcode und Ihre
Cloud Run-Ressource zu erstellen, es sei denn, Sie überschreiben dieses Verhalten. Damit
Cloud Build Ihre Quellen erstellen kann, bitten Sie Ihren Administrator, dem Compute Engine-Standarddienstkonto in Ihrem Projekt die Rolle
Cloud Run-Builder
(roles/run.builder) zuzuweisen:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role=roles/run.builder
Ersetzen Sie PROJECT_NUMBER durch Ihre Google Cloud
Projektnummer und PROJECT_ID durch Ihre Google Cloud
Projekt-ID. Eine detaillierte Anleitung zum Ermitteln der Projekt-ID und der Projektnummer,
siehe Projekte erstellen
und verwalten.
Es dauert einige Minuten, bis die Zuweisung der Rolle „Cloud Run-Builder“ für das Compute Engine-Standarddienstkonto übertragen wurde.
Eine Liste der IAM-Rollen und -Berechtigungen im Zusammenhang mit Cloud Run finden Sie unter IAM-Rollen für Cloud Run und IAM-Berechtigungen für Cloud Run. Wenn Ihr Cloud Run-Dienst mit Google Cloud APIs wie Cloud-Clientbibliotheken verknüpft ist, lesen Sie die Konfigurationsanleitung für Dienstidentitäten. Weitere Informationen zum Zuweisen von Rollen finden Sie unter Bereitstellungsberechtigungen und Zugriff verwalten.
Migrationsprozess
Diese Migration umfasst die folgenden Schritte:
- Stellen Sie den Bildtransformationsdienst in Cloud Run bereit, um die Dienst-URL zu erhalten.
- Konfigurieren Sie Ihre App Engine-Quelldateien mit Ihrer Cloud Run-Dienst-URL und den Routing-Flags und stellen Sie dann Ihre App Engine-Anwendung bereit oder stellen Sie sie noch einmal bereit.
- Testen Sie Ihre Anwendung, um die Bildverarbeitungsfunktion zu prüfen.
Bildtransformationsdienst in Cloud Run bereitstellen
So stellen Sie den Bildtransformationsdienst bereit und konfigurieren den Zugriff auf Cloud Storage:
Stellen Sie den vordefinierten Container des Bildtransformationsdienstes im Cloud Run-Dienst bereit. Achten Sie darauf, dass Sie die Bereitstellung mit erzwungener Authentifizierung (
--no-allow-unauthenticated) durchführen. Das App Engine-Dienste-SDK verarbeitet die Authentifizierung bei Aufrufen dieses Dienstes:gcloud run deploy image-processing-service \ --image=us-central1-docker.pkg.dev/gae-bundled-services-images/image-processing-service-staging/image-processing-service:public-image-d476f7ef9d1b \ --no-allow-unauthenticated \ --region=REGIONErsetzen Sie REGION durch die Region, in der Sie den Cloud Run-Dienst bereitstellen. Wir empfehlen, den Dienst in derselben Region wie Ihren App Engine-Dienst bereitzustellen.
Notieren Sie sich die Dienst-URL Ihres bereitgestellten Cloud Run-Dienstes, z. B.
https://image-processing-service-xyz-uc.a.run.app.Weisen Sie dem Standarddienstkonto von App Engine die Rolle „Cloud Run-Aufrufer (
roles/run.invoker)“ zu. Dadurch kann Ihre App Engine-Anwendung Aufrufe an den privaten Cloud Run-Dienst autorisieren und weiterleiten:gcloud run services add-iam-policy-binding image-processing-service \ --member="serviceAccount:PROJECT_ID@appspot.gserviceaccount.com" \ --role="roles/run.invoker" \ --region=REGIONWeisen Sie dem Compute Engine-Standarddienstkonto die Rolle „Cloud Storage Object Viewer“ (
roles/storage.objectViewer) zu. Dadurch kann der Bildtransformationsdienst in Cloud Storage gespeicherte Bilder lesen:gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com" \ --role="roles/storage.objectViewer"Ersetzen Sie Folgendes:
- PROJECT_ID: die ID des Projekts, in dem Sie den Cloud Run-Dienst bereitstellen.
- PROJECT_NUMBER: die Projektnummer des Projekts, in dem Sie den Cloud Run-Dienst bereitstellen.
Quelldateien konfigurieren
So konfigurieren Sie Ihre Java-Anwendung für die Verwendung des Bildtransformationsdienstes in Cloud Run:
Aktualisieren Sie die Datei
pom.xmlmit den folgenden Abhängigkeiten:Fügen Sie die Abhängigkeit
appengine-api-1.0-sdkhinzu oder aktualisieren Sie sie:<dependency> <groupId>com.google.appengine</groupId> <artifactId>appengine-api-1.0-sdk</artifactId> <version>5.0.5-beta.1</version> </dependency>Fügen Sie die Abhängigkeit
google-auth-library-oauth2-httpfür die sichere Kommunikation mit Cloud Run hinzu:<dependency> <groupId>com.google.auth</groupId> <artifactId>google-auth-library-oauth2-http</artifactId> <version>1.20.0</version> </dependency>
Aktualisieren Sie die Datei
appengine-web.xml, um die erforderlichen Umgebungsvariablen zu konfigurieren:<?xml version="1.0" encoding="utf-8"?> <appengine-web-app xmlns="http://appengine.google.com/ns/1.0"> <runtime>RUNTIME</runtime> <!-- a supported Java runtime version --> <threadsafe>true</threadsafe> <!-- List the Images service --> <app-engine-bundled-services> <api>images</api> </app-engine-bundled-services> <env-variables> <!-- Enable the custom gRPC Images service --> <env-var name="APPENGINE_USE_CUSTOM_IMAGES_GRPC_SERVICE" value="true" /> <!-- The URL of the Cloud Run service you deployed --> <env-var name="APPENGINE_IMAGES_SERVICE_ENDPOINT" value="RUN_SERVICE_URL" /> </env-variables> </appengine-web-app>Ersetzen Sie Folgendes:
- RUNTIME: eine unterstützte Java-Laufzeitversion.
- RUN_SERVICE_URL: die URL Ihres bereitgestellten Cloud Run-Dienstes.
Stellen Sie Ihre Anwendung in App Engine bereit:
mvn clean package appengine:deploy cleanStarten Sie Ihren Browser und greifen Sie mit dem folgenden Befehl auf Ihren Webdienst zu:
gcloud app browse
Anwendung testen
So prüfen Sie, ob Ihre Anwendung den Cloud Run-Bildtransformationsdienst verwendet:
- Lösen Sie die Bildverarbeitungsfunktion in Ihrer bereitgestellten App Engine-Anwendung aus.
- Prüfen Sie den Log-Explorer für Ihre App Engine-Anwendung. Achten Sie darauf, dass keine Fehler im Zusammenhang mit
com.google.appengine.api.images-Aufrufen auftreten. - Prüfen Sie die Logs Ihres Cloud Run-Dienstes
image-processing-service, um zu prüfen, ob Cloud Run die Anfragen erhalten und verarbeitet hat.