Migrieren einer App Engine-Anwendung mit flexibler Umgebung zu Cloud Run

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 diesem Leitfaden wird beschrieben, wie Sie eine vorhandene App Engine-Anwendung migrieren, die mit einer öffentlichen IP-Adresseeine Verbindung zu einer Cloud SQL-Instanz herstellt.

Generell wird an den Schritten in diesem Leitfaden gezeigt, wie Sie denselben Anwendungsquellcode in Cloud Run bereitstellen und dann für die Verwendung desselben Cloud SQL-Datenbanknutzers zur Verbindung Ihrer vorhandenen Instanz und Datenbank konfigurieren.

Die Schritte in diesem Leitfaden enthalten keine Informationen zur Verwendung einer internen privaten IP-Verbindung, da Sie dazu zuerst Ihren Anwendungscode ändern müssen. Nachdem Sie Ihre Anwendung jedoch für Cloud Run bereitgestellt haben, können Sie die Schritte unter Über Cloud Run mit Cloud SQL verbinden ausführen, um die Anforderungen und die Verwendung von privaten IP-Adressen zu erfahren.

Weitere Informationen zu den Gemeinsamkeiten und Unterschieden zwischen App Engine und Cloud Run, einschließlich der Vorteile für die Migration zu Cloud Run, finden Sie in der vergleichenden Zusammenfassung.

Hinweise

  1. Achten Sie darauf, dass Cloud Run Ihre Anwendungsanforderungen erfüllt. Vergleichen Sie App Engine und Cloud Run, um festzustellen, ob die Cloud Run-Ressourcen wie CPU und Arbeitsspeicher Ihren Anforderungen entsprechen.

  2. Sie benötigen Zugriff auf Ihre Cloud SQL-Instanz, einschließlich des Datenbank-Nutzernamens und des Passworts für die Verbindung der Anwendung. Cloud Run verwendet Verschlüsselung und stellt die Verbindung über den Cloud SQL Auth Proxy entweder über Unix-Sockets oder Cloud SQL-Konnektoren her.

  3. Aktivieren Sie die Cloud Run Admin API und die Artifact Registry API.

    APIs aktivieren

  4. Beachten 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 zum Bereitstellen in Cloud Run.

    • Sie können Ihren Quellcode mit der Google Cloud CLI oder der Google Cloud Console in Cloud Run bereitstellen, um die Einstellungen Ihrer Anwendung zu konfigurieren und zu verwalten. Cloud Run erfordert keine dateibasierte Konfiguration. Die YAML-Konfiguration wird jedoch unterstützt und Sie können das app2run Tool verwenden, um Ihre vorhandene App Engine-Datei für Cloud Run zu übersetzen.

    • Jeder Dienst, den Sie in Cloud Run bereitstellen, verwendet die run.app 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.

    • Cloud Run unterstützt keine gebündelten Legacy-Dienste von App Engine.

In diesem Leitfaden wird davon ausgegangen, dass Ihre App Engine-Anwendung fehlerfrei ausgeführt wird.

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.

Für öffentliche IP-Verbindungen zu Cloud SQL benötigen Sie eine der folgenden Rollen:

Anwendung zu Cloud Run migrieren

Es sind keine Codeänderungen erforderlich, um Ihre App Engine-Anwendung in Cloud Run bereitzustellen.

In den folgenden Schritten stellen Sie Ihre Anwendung in einem neuen Dienst in Cloud Run bereit und konfigurieren diesen Dienst gleichzeitig für die Verbindung zu Cloud SQL.

Wie die flexible App Engine-Umgebung unterstützt Cloud Run sowohl container- als auch quellbasierte Bereitstellungen. Je nach verwendeter Bereitstellungsmethode benötigen Sie Zugriff auf Ihr Container-Image oder das Quellcode-Repository.

Container-Images bereitstellen

Wenn Ihre App Engine-Dienste mit einem manuell erstellten Container bereitgestellt werden, können Sie dasselbe Container-Image verwenden, um Ihren Dienst in Cloud Run bereitzustellen. So stellen Sie Ihr App Engine-Container-Image in Cloud Run bereit:

  1. Notieren Sie sich die Registry-URL, unter der sich Ihr Container-Image befindet. Dies ist dieselbe URL, die Sie beim Bereitstellen in App Engine im --image-url Flag angeben.

  2. Stellen Sie Ihr Container-Image bereit:

    Console

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

      Öffnen Sie Cloud Run.

    2. Klicken Sie auf Dienst erstellen.

    3. Klicken Sie im Feld Container-Image-URL auf Auswählen und wählen Sie das Container-Image aus, das Sie für App Engine bereitgestellt haben.

    4. Geben Sie einen Namen für Ihren Dienst ein. Wählen Sie einen eindeutigen Namen aus, der die Anwendung darstellt, die Sie bereitstellen.

    5. Wählen Sie im Bereich Authentifizierung die Option Nicht authentifizierte Aufrufe zulassen aus.

    6. Sie müssen für Cloud Run dieselben Umgebungsvariablen erstellen, die Sie in der Datei app.yaml Ihrer App Engine-Anwendung definiert haben. Maximieren Sie den Bereich Container, Netzwerk, Sicherheit und erstellen Sie die folgenden Umgebungsvariablen, indem Sie unter Umgebungsvariablen auf Variable hinzufügen klicken.

      • Für Unix-Sockets fügen Sie Folgendes hinzu:

          INSTANCE_UNIX_SOCKET: /cloudsql/INSTANCE_CONNECTION_NAME
        
      • Für Cloud SQL-Connectors fügen Sie Folgendes hinzu:

          INSTANCE_CONNECTION_NAME:INSTANCE_CONNECTION_NAME
        

        Ersetzen Sie INSTANCE_CONNECTION_NAME durch Ihre Projekt-ID, Region und Instanz im Format project:region:instance-id. Sie finden sie in der Console auf der Seite Übersicht für Ihre Instanz in der Google Cloud Console.

        Solche Verbindungen werden ohne zusätzliche Konfiguration automatisch verschlüsselt.

      • DB_NAME: Name Ihrer Datenbank.

      • DB_USER: Nutzername Ihres Datenbanknutzers.

      • DB_PASS: Passwort, das Sie beim Erstellen der Datenbank angegeben haben.

    7. Klicken Sie im Bereich Cloud SQL-Verbindungen auf die Schaltfläche Verbindung hinzufügen und wählen Sie die Instanz aus, die Sie zuvor für App Engine erstellt haben.

    8. Klicken Sie auf Bereitstellen. Wenn der Cloud Run-Dienst bereitgestellt ist, wird oben auf der Seite Dienstdetails eine URL angezeigt. Klicken Sie auf den Link URL, um in Cloud Run die bereitgestellte Anwendung zu sehen, die mit Cloud SQL verbunden ist.

    gcloud

    Führen Sie den folgenden Befehl aus, um einen neuen Dienst in Cloud Run zu erstellen. Sie müssen Konfigurations-Flags festlegen, um dieselben SQL-Verbindungsumgebungsvariablen einzuschließen, die in der app.yaml-Datei Ihrer App Engine-Anwendung definiert sind:

    gcloud run deploy run-sql --image IMAGE \
      --allow-unauthenticated \
      --add-cloudsql-instances INSTANCE_CONNECTION_NAME\
      --set-env-vars INSTANCE_UNIX_SOCKET="/cloudsql/INSTANCE_CONNECTION_NAME" \
      --set-env-vars INSTANCE_CONNECTION_NAME="INSTANCE_CONNECTION_NAME" \
      --set-env-vars DB_NAME="DB_NAME" \
      --set-env-vars DB_USER="DB_USER" \
      --set-env-vars DB_PASS="DB_PASS"
    

    Ersetzen Sie:

    • IMAGE durch das Image, das Sie bereitstellen
    • INSTANCE_CONNECTION_NAME durch den Namen der Verbindung Ihrer Cloud SQL-Instanz oder eine durch Kommas getrennte Liste von Verbindungsnamen. Sie finden den INSTANCE_CONNECTION_NAME mit dem folgenden Befehl:

        gcloud instances describe INSTANCE_NAME
      
    • DB_NAME durch den Namen Ihrer Datenbank.

    • DB_USER durch den Nutzernamen Ihrer Datenbank.

    • DB_PASS durch das Passwort Ihres Datenbanknutzers.

Quellcode bereitstellen

Cloud Run verwendet intern Buildpacks und Cloud Build, um automatisch Container-Images aus Ihrem Quellcode zu erstellen. Sie müssen keinen Container manuell erstellen oder ein Dockerfile angeben. Wenn jedoch ein Dockerfile vorhanden ist, wird es verwendet. Da die Bereitstellung eines Cloud Run-Dienstes aus der Quelle Artifact Registry verwendet, ist dieses Feature nur in von Artifact Registry unterstützten Regionen verfügbar.

So stellen Sie denselben Quellcode bereit, den Sie zuvor in App Engine bereitgestellt haben:

  1. Wechseln Sie zu Ihrem Quellverzeichnis, in dem sich der Quellcode Ihrer Anwendung befindet.

      cd YOUR_APPENGINE_CODE_DIR
    
  2. In Cloud Run bereitstellen

    Führen Sie den Bereitstellungsbefehl mit dem Flag --source aus, um Ihren Quellcode zu erstellen und Ihre Anwendung bereitzustellen. Sie müssen Konfigurations-Flags festlegen, um dieselben SQL-Verbindungsumgebungsvariablen einzuschließen, die in der Datei app.yaml Ihrer App Engine-Anwendung definiert sind:

      gcloud run deploy run-sql --source . \
        --allow-unauthenticated \
        --add-cloudsql-instances INSTANCE_CONNECTION_NAME\
        --set-env-vars INSTANCE_UNIX_SOCKET="/cloudsql/INSTANCE_CONNECTION_NAME" \
        --set-env-vars INSTANCE_CONNECTION_NAME="INSTANCE_CONNECTION_NAME" \
        --set-env-vars DB_NAME="DB_NAME" \
        --set-env-vars DB_USER="DB_USER" \
        --set-env-vars DB_PASS="DB_PASS"
    

    Ersetzen Sie INSTANCE_CONNECTION_NAME durch den Namen der Verbindung Ihrer Cloud SQL-Instanz oder eine durch Kommas getrennte Liste von Verbindungsnamen. Sie finden den INSTANCE_CONNECTION_NAME mit dem folgenden Befehl:

        gcloud instances describe INSTANCE_NAME
    
    • DB_NAME durch den Namen Ihrer Datenbank.
    • DB_USER durch den Nutzernamen Ihrer Datenbank.
    • DB_PASS durch das Passwort Ihres Datenbanknutzers.
  3. Geben Sie einen Namen für den SERVICE ein, wenn Sie dazu aufgefordert werden.

  4. Beantworten Sie die Aufforderungen, die erforderlichen APIs zu installieren, indem Sie nach Aufforderung y antworten. Dies ist nur einmal für ein Projekt erforderlich. Warten Sie, bis der Build und die Bereitstellung abgeschlossen sind. Anschließend wird eine Meldung wie die folgende angezeigt:

    Service [my-app] revision [my-app-00000-xxx] has been deployed and is serving 100 percent of traffic. Service URL: https://sample.run.app
    

    Weitere Informationen zum Bereitstellen von Quellcode in Cloud Run finden Sie unter Aus Quellcode bereitstellen.

Nächste Schritte

  • Best Practices für Cloud SQL zum Herstellen einer Verbindung zu Ihrer Cloud SQL-Instanz über Cloud Run.
  • 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.
  • Informationen zum Verwalten Ihrer Cloud Run-Dienste.
  • Im Cloud Run-Containervertrag finden Sie Informationen zu den Anforderungen und Verhaltensweisen von Containern in Cloud Run.