App Engine-Anwendung in der Standardumgebung in Cloud Run bereitstellen

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.

In dieser Anleitung wird beschrieben, wie Sie Ihre vorhandenen Anwendungen in der Standardumgebung in Cloud Run bereitstellen. Die Anleitung gilt für Laufzeiten der zweiten Generation, die nicht die gebündelten Legacy-Dienste von App Engine verwenden.

Die in dieser Anleitung beschriebenen Schritte wirken sich nicht auf die Funktionalität oder den Traffic-Fluss Ihrer vorhandenen App Engine-Anwendung aus. Der neu erstellte Cloud Run-Dienst ist eine Kopie des App Engine-Dienstes, den Sie unabhängig testen können.

Cloud Run verwendet einen Großteil derselben Infrastruktur wie die App Engine-Standardumgebung, was zu vielen Ähnlichkeiten zwischen den Plattformen führt. Weitere Informationen zu den Gemeinsamkeiten und Unterschieden zwischen App Engine und Cloud Run, einschließlich der Vorteile der Migration zu Cloud Run, finden Sie in der vergleichenden Zusammenfassung.

Wählen Sie eine der folgenden Strategien aus, um in Cloud Run bereitzustellen:

  • Lokale Konfiguration einer app.yaml Datei (empfohlen): Wählen Sie diese Option aus, um ein Container-Image direkt aus Ihrem lokalen Quellcode zu erstellen und in Cloud Run bereitzustellen. So wird sichergestellt, dass alle aktuellen lokalen Änderungen an Ihrem Code oder Ihrer Konfiguration in die neue Bereitstellung aufgenommen werden.

  • Ein zuvor erstelltes Image verwenden: Diese Option ist nützlich, wenn Sie keinen Zugriff auf den Quellcode haben. Wählen Sie diese Option aus, um eine exakte Kopie einer Version bereitzustellen, die bereits in App Engine ausgeführt wird, ohne das Container-Image neu erstellen zu müssen. Dies ist nützlich, wenn Sie das Verhalten der aktiven Bereitstellung ohne Codeänderungen überprüfen möchten.

Hinweis

  1. Prüfen Sie, ob Ihre App Engine-Anwendung ohne Fehler ausgeführt wird. Sie benötigen Zugriff auf den App Engine-Quellcode, wenn Sie die Bereitstellung mit Ihrer lokalen Konfiguration vornehmen möchten.

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

    APIs aktivieren

  3. Konfigurieren Sie Ihr Projekt und Ihre Region mit dem folgenden Befehl:

    gcloud auth login
    gcloud config set project PROJECT_ID
    gcloud config set run/region REGION
    gcloud components update
    

    Ersetzen Sie Folgendes:

    • PROJECT_ID: Projekt-ID in Google Cloud .
    • REGION: Die Region, in der Sie Ihren Cloud Run -Dienst bereitstellen möchten.
  4. Prüfen Sie Ihre Anwendung auf inkompatible Funktionen und entfernen Sie sie, bevor Sie zu Cloud Run migrieren. Wenn Sie Ihre Anwendung auf Inkompatibilitäten prüfen möchten, ohne eine Migration oder Bereitstellung durchzuführen, führen Sie den folgenden Befehl aus:

    gcloud beta app migrate-to-run --dry-run
    

    Prüfen Sie die Ergebnisse der Kompatibilitätsprüfung und nehmen Sie bei Bedarf die empfohlenen Änderungen vor.

  5. Prüfen Sie die folgenden Unterschiede bei Cloud Run:

    • In Cloud Run wird der Begriff Revision anstelle von Version verwendet, um jede Bereitstellung von Änderungen für einen bestimmten Dienst darzustellen. Wenn Sie Ihre App zum ersten Mal in einem Cloud Run-Dienst bereitstellen, wird die erste Revision erstellt. Bei jeder nachfolgenden Bereitstellung eines Dienstes wird eine weitere Revision erstellt. Weitere Informationen zur Bereitstellung in Cloud Run.

    • Sie können Ihren Quellcode mit der gcloud CLI oder Google Cloud Console in Cloud Run bereitstellen, um Ihre App Einstellungen zu konfigurieren und zu verwalten. Cloud Run erfordert keine dateibasierte Konfiguration. Die YAML-Konfiguration wird jedoch unterstützt.

    • Jeder Dienst, den Sie in Cloud Run bereitstellen, verwendet die run.app Domain in der URL, um öffentlich auf den Dienst zuzugreifen.

    • Im Gegensatz zu standardmäßig öffentlichen App Engine-Diensten sind Cloud Run-Dienste standardmäßig privat und erfordern eine Konfiguration für den öffentlichen (nicht authentifizierten) Zugriff.

Erforderliche Rollen

Sie können entweder ein neues Dienstkonto erstellen oder dasselbe nutzerverwaltete Dienstkonto in Cloud Run verwenden, das Sie für die Standardumgebung 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.

Lokale Konfiguration einer app.yaml-Datei verwenden

Stellen Sie Ihre lokale App Engine-Konfiguration mit der Google Cloud Console oder der gcloud CLI in Cloud Run bereit.

Console

  1. Rufen Sie in der Google Cloud Console die App Engine Seite auf.

    Zu App Engine

  2. Klicken Sie im Navigationsmenü auf Migrations-Hub, um Ihre App Engine-Anwendung in Cloud Run bereitzustellen. Im Migrations-Hub können Sie auch Ihre geschätzten Einsparungen in Cloud Run für die Kostenschätzung und Empfehlungen prüfen.

  3. Wählen Sie den Dienst aus, den Sie migrieren möchten, und klicken Sie auf Kompatibilität prüfen.

  4. Wählen Sie den Dienst und die Version aus, um die Kompatibilitätsergebnisse zu sehen. Der Migrations-Hub führt eine Kompatibilitätsprüfung durch, um inkompatible Funktionen zu identifizieren.

  5. Prüfen Sie die Ergebnisse, um zu bestätigen, dass Ihre Anwendung vollständig mit Cloud Run kompatibel ist, und klicken Sie auf Weiter , um zum Abschnitt Überprüfen und bereitstellen zu gelangen.

  6. Kopieren Sie den Befehl im Abschnitt Über gcloud bereitstellen und führen Sie ihn in Ihrem Projektverzeichnis aus.

  7. Klicken Sie auf Bereitgestellte Versionen ansehen , um Ihre in Cloud Run bereitgestellten App Engine-Dienste zu sehen.

gcloud

So stellen Sie Ihren Cloud Run-Dienst mit der lokalen app.yaml-Datei einer vorhandenen App Engine-Konfiguration bereit:

  1. Wechseln Sie im Terminal zu Ihrem Quellverzeichnis, in dem sich die Datei app.yaml befindet.

  2. Führen Sie den folgenden Befehl aus, um Ihren Dienst in Cloud Run bereitzustellen:

    gcloud beta app migrate-to-run
    

    Mit diesem Befehl wird die Konfiguration der Datei service.yaml für Cloud Run generiert und lokal im selben Verzeichnis wie Ihre Datei app.yaml gespeichert. Weitere Informationen finden Sie unter gcloud beta app migrate-to-run.

    • Wenn Sie aufgefordert werden, mit der Bereitstellung fortzufahren (Proceed with the deployment?), geben Sie Y ein, um ein Container-Image aus Ihrem Quellcode zu erstellen und den Dienst in Cloud Run bereitzustellen.
  3. Rufen Sie den bereitgestellten Cloud Run-Dienst auf. Dazu öffnen Sie in einem Webbrowser die Dienst-URL.

    Optional:

    • Wenn sich Ihre Datei app.yaml in einem anderen Verzeichnis befindet, geben Sie den Pfad mit dem Flag --appyaml an:

      gcloud beta app migrate-to-run --appyaml=PATH
      

      Ersetzen Sie PATH durch den Pfad zu Ihrer app.yaml Datei.

    • Wenn Sie die Konfiguration service.yaml von Cloud Run generieren und exportieren möchten, ohne den Dienst bereitzustellen, verwenden Sie das Flag --export-only:

      gcloud beta app migrate-to-run --export-only=EXPORT_PATH
      

      Ersetzen Sie EXPORT_PATH durch das Verzeichnis oder den Pfad, in dem Sie die Datei service.yaml speichern möchten.

Ein zuvor erstelltes Image verwenden

Wenn Sie eine zuvor erstellte Container-Image aus einer bereitgestellten App Engine-Version verwenden möchten, anstatt das Container-Image aus einer lokalen app.yaml-Datei neu zu erstellen, gehen Sie so vor:

Für diese Bereitstellung benötigen Sie den Quellcode Ihrer Anwendung nicht.

  1. Führen Sie den folgenden Befehl aus, um Ihren Dienst in Cloud Run bereitzustellen. Mit diesem Befehl wird das Container-Image einer aktiven App Engine-Bereitstellung verwendet und es werden keine aktuellen Änderungen aus Ihrer lokalen app.yaml-Datei erfasst. Dies kann zu einer veralteten Bereitstellung führen:

    gcloud beta app migrate-to-run --service=SERVICE --version=VERSION --from-image
    

    Ersetzen Sie Folgendes:

    • SERVICE: Der Name Ihres App Engine-Dienstes.
    • VERSION: Die Versions-ID Ihres Dienstes.

    Mit diesem Befehl wird die Konfiguration des angegebenen Dienstes und der angegebenen Version abgerufen, um die Datei service.yaml für Cloud Run zu generieren. Weitere Informationen finden Sie unter gcloud beta app migrate-to-run.

    • Wenn Sie aufgefordert werden, mit der Bereitstellung fortzufahren (Proceed with the deployment?), geben Sie Y ein, um Ihr vorhandenes App Engine-Container-Image zu exportieren und den Dienst in Cloud Run bereitzustellen.
  2. Rufen Sie den bereitgestellten Cloud Run-Dienst auf. Dazu öffnen Sie in einem Webbrowser die Dienst-URL.

    Optional:

    • Wenn Sie die Konfiguration service.yaml von Cloud Run generieren möchten, ohne den Dienst bereitzustellen, führen Sie den folgenden Befehl aus:

      gcloud beta app migrate-to-run --service=SERVICE \
          --version=VERSION \
          --from-image \
          --export-only=EXPORT_PATH
      

      Ersetzen Sie EXPORT_PATH durch das Verzeichnis oder den Pfad, in dem Sie die service.yaml Datei speichern möchten.

Inkompatible Features

Der Migrationsbefehl schlägt fehl, wenn Ihre Datei app.yaml eine der folgenden nicht unterstützten Konfigurationen enthält:
  • Eingehende Dienste:

    inbound_services:
    - warmup
    

    Lösung: Löschen Sie den Abschnitt inbound_services aus Ihrer Datei app.yaml. In Cloud Run werden Instanzen mit dem Container-Einstiegspunkt aufgewärmt. Sie müssen also keine Aufwärmanfragen konfigurieren. Wenn Sie Initialisierungscode ausführen müssen, bevor Sie Traffic bereitstellen, konfigurieren Sie Ihren Dienst so, dass er beim Start ausgeführt wird, bevor Anfragen verarbeitet werden, oder verwenden Sie Start prüfungen. Sie können auch Mindestinstanzen konfigurieren, um Instanzen aufzuwärmen.

  • Benutzerdefinierte Fehlerseiten:

    error_handlers:
     - file: default_error.html
     - error_code: over_quota
     file: over_quota.html
    

    Lösung: Löschen Sie den Abschnitt error_handlers aus Ihrer Datei app.yaml, und folgen Sie einer oder beiden dieser Strategien:

    • Implementieren Sie die Fehlerbehandlung direkt im Anwendungscode. Erfassen Sie Standard-HTTP-Fehlercodes wie 404 oder 500 und stellen Sie Ihre benutzerdefinierten HTML-Fehlerseiten über Ihre Anwendungslogik bereit.
    • Wenn Sie Cloud Load Balancing mit Cloud Run verwenden, konfigurieren Sie benutzerdefinierte Fehlerantworten auf Load-Balancer-Ebene. So können Sie benutzerdefinierte Fehlerseiten aus Cloud Storage basierend auf dem Antwortcode Ihres Cloud Run-Dienstes bereitstellen.
  • Gebündelte Dienste für Laufzeiten der zweiten Generation:

    app_engine_apis: true
    

    Lösung: Löschen Sie die Einstellung app_engine_apis aus Ihrer Datei app.yaml und migrieren Sie stattdessen zu Google Cloud APIs oder Alternativen von Drittanbietern. Weitere Informationen finden Sie unter Von gebündelten Diensten migrieren.

  • Laufzeiten der ersten Generation:

    runtime: python27
    

    Lösung: Aktualisieren Sie Ihre Anwendung auf eine unterstützte Laufzeit der zweiten Generation. Weitere Informationen finden Sie unter Übersicht über die Migration zu Laufzeiten der zweiten Generation.

Nächste Schritte

  • Informationen zum Verwalten Ihrer Cloud Run-Dienste.
  • Informationen zu den Anforderungen und Verhaltensweisen von Containern in Cloud Run finden Sie im Cloud Run-Containervertrag.
  • Hier erfahren Sie, wie Sie Abhängigkeiten für Ihren Dienst mithilfe eines Secret Managers speichern, die API-Schlüssel, Passwörter oder andere vertrauliche Informationen erfordern.