Vom App Engine Images-Dienst zu Cloud Run migrieren

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.

Hier finden Sie 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-Dienstaufrufe dorthin weiterleiten.

Für diese Migration sind keine größeren Änderungen am Bildverarbeitungscode oder das Hosting Ihrer App Engine-Anwendung in Cloud Run erforderlich. Stattdessen fängt das App Engine Services SDK beim Konfigurieren Ihrer Anwendung die Aufrufe des App Engine Images-Dienstes 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. Bei dieser Einrichtung wird das alte Backend des App Engine Images-Dienstes durch eine moderne, cloudnative Lösung ersetzt.

Beschränkungen

  • Wenn Sie den benutzerdefinierten Bildverarbeitungsdienst verwenden und APPENGINE_USE_CUSTOM_IMAGES_GRPC_SERVICE auf true gesetzt ist, können Sie keine Bereitstellungs-URLs generieren. App Engine löst eine Laufzeitausnahme aus, wenn Sie die Methode getServingUrl() aufrufen. Sie können diese Methode nur verwenden, wenn APPENGINE_USE_CUSTOM_IMAGES_GRPC_SERVICE auf false festgelegt oder nicht festgelegt ist. Diese Einschränkung verhindert, dass das Legacy-Backend zum Speichern und Bereitstellen von Bildern verwendet wird.

    Wir empfehlen, Bilder direkt über eine Cloud Storage-URL oder einen Cloud Storage-Bucket bereitzustellen, der von Cloud CDN unterstützt wird.

    Vorhandene URLs, die Sie mit alten Aufrufen der Methode getServingUrl() erstellt haben, stellen weiterhin Bilder bereit.

  • Wenn Sie die SDK-Version Ihrer App Engine-Dienste aktualisieren, leitet App Engine Aufrufe nicht automatisch an den Cloud Run-Dienst weiter. Ihre Anwendung wendet das neue Verhalten erst an, nachdem Sie die Umgebungsvariablen APPENGINE_USE_CUSTOM_IMAGES_GRPC_SERVICE und APPENGINE_IMAGES_SERVICE_ENDPOINT konfiguriert haben.

Hinweis

  1. Sie benötigen Zugriff auf den App Engine-Quellcode.

  2. Aktivieren Sie die Cloud Run Admin API und die Artifact Registry API:

    APIs aktivieren

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 Deployer-Konto und dem Cloud Build-Dienstkonto die folgenden IAM-Rollen zuweisen.

Klicken, um die erforderlichen Rollen für das Deployer-Konto 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:

Klicken, um die erforderlichen Rollen für das Cloud Build-Dienstkonto aufzurufen

Cloud Build verwendet automatisch das Compute Engine-Standarddienstkonto als Cloud Build-Standarddienstkonto, um Ihren Quellcode und Ihre Cloud Run-Ressource zu erstellen, sofern Sie dieses Verhalten nicht überschreiben. 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@ \
      --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 finden Sie unter 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 mitGoogle 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:

  1. Stellen Sie den Bildtransformationsdienst in Cloud Run bereit, um die Dienst-URL zu erhalten.
  2. Konfigurieren Sie Ihre App Engine-Quelldateien mit der URL und den Routing-Flags Ihres Cloud Run-Dienstes und stellen Sie dann Ihre App Engine-Anwendung bereit oder stellen Sie sie noch einmal bereit.
  3. Testen Sie Ihre Anwendung, um die Bildverarbeitungsfunktion zu prüfen.

Image-Transformationsdienst in Cloud Run bereitstellen

So stellen Sie den Dienst zur Bildtransformation bereit und konfigurieren den Zugriff auf Cloud Storage:

  1. Stellen Sie den vordefinierten Container für den Bildtransformationsdienst im Cloud Run-Dienst bereit. Achten Sie darauf, dass Sie die Bereitstellung mit erzwungener Authentifizierung (--no-allow-unauthenticated) durchführen. Das App Engine Services SDK übernimmt die Authentifizierung, wenn Aufrufe an diesen Dienst erfolgen:

    gcloud run deploy image-processing-service \
        --image=us-central1-docker.pkg.dev/gae-bundled-services-images/release/image-processing-service:latest \
        --no-allow-unauthenticated \
        --region=REGION
    

    Ersetzen 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 des bereitgestellten Cloud Run-Dienstes, z. B. https://image-processing-service-xyz-uc.a..

  2. Weisen Sie dem App Engine-Standarddienstkonto 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@" \
        --role="roles/run.invoker" \
        --region=REGION
    
  3. Weisen Sie dem Compute Engine-Standarddienstkonto die Rolle Cloud Storage-Objekt-Betrachter (roles/storage.objectViewer) zu. Dadurch kann der Bildtransformationsdienst Bilder lesen, die in Cloud Storage gespeichert sind:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member="serviceAccount:PROJECT_NUMBER-compute@" \
        --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:

  1. Aktualisieren Sie die Datei pom.xml, um die folgenden Abhängigkeiten einzuschließen:

    • Fügen Sie die Abhängigkeit appengine-api-1.0-sdk hinzu oder aktualisieren Sie sie:

      <dependency>
        <groupId>com.google.appengine</groupId>
        <artifactId>appengine-api-1.0-sdk</artifactId>
        <version>5.1.0</version>
      </dependency>
      
    • Fügen Sie die Abhängigkeit google-auth-library-oauth2-http fü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>
      
  2. 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 des bereitgestellten Cloud Run-Dienstes.
  3. Stellen Sie Ihre Anwendung in App Engine bereit:

    mvn clean package appengine:deploy clean
    
  4. Starten 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-Dienst zur Bildtransformation erfolgreich verwendet:

  1. Lösen Sie die Bildverarbeitungsfunktion in Ihrer bereitgestellten App Engine-Anwendung aus.
  2. 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.
  3. Prüfen Sie die Logs Ihrer Cloud Run-image-processing-service, um zu sehen, ob Cloud Run die Anfragen empfangen und verarbeitet hat.

Nächste Schritte