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 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 Images-Dienstaufrufe 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 Legacy-Backend des App Engine Images-Dienstes 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 get_serving_url() 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 get_serving_url() erstellt haben, stellen weiterhin Bilder bereit.

  • Wenn Sie die Version Ihres App Engine-Dienste-SDK 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_SERVICE und APPENGINE_IMAGES_SERVICE_ENDPOINT konfiguriert haben.

Hinweis

  1. Achten Sie darauf, dass Sie Zugriff auf den App Engine-Quellcode haben.

  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 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:

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:

  1. Stellen Sie den Bildtransformationsdienst in Cloud Run bereit, um die Dienst-URL zu erhalten.
  2. 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.
  3. 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:

  1. 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=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 Ihres bereitgestellten Cloud Run-Dienstes, z. B. https://image-processing-service-xyz-uc.a.run.app.

  2. Weisen Sie dem Standarddienstkonto von App Engine die Rolle Cloud Run Invoker (roles/run.invoker) zu. So 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=REGION
    
  3. Weisen Sie dem Compute Engine-Standarddienstkonto die Rolle Cloud Storage Object Viewer (roles/storage.objectViewer) zu. So 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 Python-Anwendung für die Verwendung des Bildtransformationsdienstes in Cloud Run:

  1. Fügen Sie der Datei requirements.txt die folgende Abhängigkeit hinzu:

    appengine-python-standard>=3.0.0b0
    

    Alternativ können Sie Abhängigkeiten lokal installieren, indem Sie Folgendes ausführen:

    pip install --pre "appengine-python-standard>=3.0.0b0"
    
  2. Aktualisieren Sie die Datei app.yaml, um den API-Proxy zu aktivieren und die erforderlichen Umgebungsvariablen zu konfigurieren:

    runtime: RUNTIME  # a supported python version
    
    # List the Images service
    app_engine_bundled_services:
    - images
    
    env_variables:
      # Enable the custom gRPC Images service
      APPENGINE_USE_CUSTOM_IMAGES_GRPC_SERVICE: "true"
    
      # The URL of the Cloud Run service you deployed
      APPENGINE_IMAGES_SERVICE_ENDPOINT: "RUN_SERVICE_URL"
    

    Ersetzen Sie Folgendes:

    • RUNTIME: Eine unterstützte Python-Laufzeitversion.
    • RUN_SERVICE_URL: Die URL Ihres bereitgestellten Cloud Run-Dienstes.
  3. Stellen Sie Ihre Anwendung in App Engine bereit:

    gcloud app deploy
    

    Ihr App Engine-Dienst wird unter https://PROJECT_ID.REGION_ID.r.appspot.com bereitgestellt.

  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-Bildtransformationsdienst verwendet:

  1. Lösen Sie die Bildverarbeitungsfunktion in Ihrer Anwendung aus.
  2. Prüfen Sie den Log-Explorer für Ihre App Engine-Anwendung. Achten Sie darauf, dass keine Fehler im Zusammenhang mit google.appengine.api.images-Aufrufen auftreten.
  3. 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.

Nächste Schritte