Funktionen in Cloud Run bereitstellen

Auf dieser Seite wird beschrieben, wie Sie Funktionen in Cloud Run bereitstellen und ändern. Eine Beispielanleitung für die Bereitstellung einer Hello World-Funktion finden Sie unter Beispielfunktion bereitstellen.

Im Hintergrund werden bei Cloud Run-Funktionsbereitstellungen die Buildpacks von Google Cloud und Cloud Build verwendet, um automatisch Container-Images aus dem Quellcode Ihrer Funktion zu erstellen, ohne Docker auf Ihrem Computer installieren oder Buildpacks oder Cloud Build einrichten zu müssen.

Bei Cloud Run-Funktionsbereitstellungen wird auch Artifact Registry zum Speichern von Artefakten und zum Verwalten von Container-Images verwendet. Artifact Registry erstellt automatisch das Artifact Registry-Repository cloud-run-source-deploy, falls in Ihrem Projekt noch keines mit diesem Namen vorhanden ist.

Hinweise

  1. Prüfen Sie, ob Sie ein neues Projekt für Cloud Run eingerichtet haben, wie auf der Seite Einrichtung beschrieben.

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

     gcloud services enable artifactregistry.googleapis.com \
         cloudbuild.googleapis.com \
         run.googleapis.com \
         logging.googleapis.com
    

    Optional können Sie die Eventarc API aktivieren, um Ereignistrigger zu verwenden:

     gcloud services enable eventarc.googleapis.com
    
  3. Wenn Sie einer Domaineinschränkung zur Organisation nicht eingeschränkter Aufrufe für Ihr Projekt unterliegen, müssen Sie auf Ihren bereitgestellten Dienst zugreifen, wie unter Private Dienste testen beschrieben.

Erforderliche Rollen

Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen für Ihr Projekt zu gewähren, um die Berechtigungen zu erhalten, die Sie zum Bereitstellen von Cloud Run-Diensten aus der Quelle benötigen:

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 Service 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.

Rollen für das Dienstkonto

  • Damit Cloud Build Ihre Quellen erstellen kann, müssen Sie dem Compute Engine-Standarddienstkonto die Rolle Cloud Build-Dienstkonto zuweisen. Führen Sie dazu den folgenden Befehl aus:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \
        --role=roles/cloudbuild.builds.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 Build-Dienstkonto“ für das Compute Engine-Standarddienstkonto übertragen wurde.

  • Funktion erstellen und bereitstellen

    Sie können eine Funktion über die Google Cloud Console oder die gcloud CLI bereitstellen. Klicken Sie auf den Tab, um eine Anleitung zum Verwenden des gewünschten Tools zu erhalten.

    Console

    1. Wechseln Sie in der Google Cloud Console zur Seite Cloud Run.

      Zu Cloud Run

    2. Klicken Sie auf Funktion schreiben.

    3. Geben Sie im Feld Dienstname einen Namen ein, um Ihre Funktion zu beschreiben. Dienstnamen müssen mit einem Buchstaben beginnen und dürfen maximal 49 Zeichen lang sein, einschließlich Buchstaben, Ziffern oder Bindestriche. Dienstnamen dürfen nicht auf Bindestriche enden und müssen pro Region und Projekt eindeutig sein. Ein Dienstname kann später nicht mehr geändert werden und ist öffentlich sichtbar.

    4. Verwenden Sie in der Liste Region den Standardwert oder wählen Sie die Region aus, in der Sie Ihre Funktion bereitstellen möchten.

    5. Verwenden Sie in der Liste Laufzeit den Standardwert oder wählen Sie eine Laufzeitversion aus.

    6. Optional: Klicken Sie im Bereich Trigger auf Trigger hinzufügen und wählen Sie eine Option aus. Der Bereich Eventarc-Trigger wird geöffnet. Dort können Sie die folgenden Details für den Trigger ändern:

      1. Geben Sie im Feld Triggername einen Namen für den Trigger ein oder verwenden Sie den Standardnamen.

      2. Wählen Sie in der Liste einen Triggertyp aus, um einen der folgenden Triggertypen anzugeben:

        • Google-Quellen: Hier können Sie Trigger für Pub/Sub, Cloud Storage, Firestore und andere Google-Ereignisanbieter angeben.

        • Benutzerdefiniert, um Ereignisse aus Ihrem Anwendungscode zu erstellen und zu verarbeiten. Folgen Sie der Anleitung im Bereich Eventarc-Trigger, um einen Kanal zu erstellen. Ein Kanal ist eine Ressource, die als Pipeline verwendet wird, um benutzerdefinierte Ereignisse von Erstellern an Nutzer bereitzustellen. Benutzerdefinierte Ereignisse werden in einem Kanal veröffentlicht und ein Eventarc-Trigger abonniert diese Ereignisse.

        • Drittanbieter, um Nicht-Google-Anbieter einzubinden, die eine Eventarc-Quelle anbieten. Weitere Informationen finden Sie unter Drittanbieterereignisse in Eventarc.

      3. Wählen Sie in der Liste einen Ereignisanbieter aus, um ein Produkt auszuwählen, das den Ereignistyp angibt, den Sie für das Auslösen Ihrer Funktion benötigen. Eine Liste der Ereignisanbieter finden Sie unter Ereignisanbieter und -ziele.

      4. Wählen Sie in der Liste einen Ereignistyp aus. Die Triggerkonfiguration variiert je nach unterstütztem Ereignistyp. Weitere Informationen finden Sie unter Ereignistypen.

      5. Wählen Sie im Feld Region einen Speicherort für den Eventarc-Trigger aus. Im Allgemeinen sollte der Standort eines Eventarc-Triggers mit dem Standort der Google Cloud-Ressource übereinstimmen, die Sie auf Ereignisse überwachen möchten. In den meisten Szenarien sollten Sie Ihre Funktion auch in derselben Region bereitstellen. Weitere Informationen zu Eventarc-Triggerstandorten finden Sie unter Informationen zu Eventarc-Standorten.

      6. Wählen Sie im Feld Dienstkonto ein Dienstkonto aus. Eventarc-Trigger sind mit Dienstkonten verknüpft, um sie beim Aufrufen Ihrer Funktion als Identität zu verwenden. Das Dienstkonto Ihres Eventarc-Triggers muss die Berechtigung zum Aufrufen Ihrer Funktion haben. Cloud Run verwendet standardmäßig das Compute Engine-Standarddienstkonto.

      7. Geben Sie optional den Dienst-URL-Pfad an, an den die eingehende Anfrage gesendet werden soll. Dies ist der relative Pfad im Zieldienst, an den die Ereignisse für den Trigger gesendet werden sollen. Beispiel: /, /route, route und route/subroute.

      8. Wenn Sie alle erforderlichen Felder ausgefüllt haben, klicken Sie auf Trigger speichern.

    7. Konfigurieren Sie unter Authentifizierung Folgendes:

      • Wenn Sie eine öffentliche HTTP-Funktion erstellen, z. B. einen Webhook, wählen Sie Nicht authentifizierte Aufrufe zulassen aus. Durch Anklicken des Kästchens wird der Sonderkennzeichnung allUser die Rolle "IAM-Invoker" zugewiesen. Sie können die Einstellung mit IAM bearbeiten, nachdem Sie den Dienst erstellt haben. Wenn Sie nicht berechtigt sind, diese Option auszuwählen (Cloud Run-Administratorrolle), wird der Dienst bereitgestellt und erfordert eine Authentifizierung.

      • Wenn Sie eine ereignisgesteuerte Funktion erstellen, wählen Sie Authentifizierung anfordern aus.

    8. Optional können Sie die folgenden zusätzlichen Konfigurationen für Ihre Funktionen aktualisieren:

      1. Legen Sie CPU-Zuweisung und -Preise nach Bedarf fest.

      2. Geben Sie unter Dienst-Autoscaling nach Bedarf die Mindestanzahl von Instanzen an.

      3. Legen Sie die Steuerung für eingehenden Traffic nach Bedarf fest.

      4. Maximieren Sie den Bereich Container, Volumes, Netzwerk, Sicherheit, um weitere optionale Einstellungen auf den entsprechenden Tabs festzulegen:

    9. Klicken Sie auf Erstellen und warten Sie, bis der Dienst in Cloud Run mit einer Platzhalter-Überarbeitung erstellt wurde.

    10. Die Console leitet Sie zum Tab Quelle weiter, auf dem Sie den Quellcode Ihrer Funktion sehen. Klicken Sie auf Speichern und neu bereitstellen.

    11. Auf dem Tab Quelle können Sie optional auf Nutzlast anzeigen klicken, um eine Beispielnutzlast eingehender Ereignisse zu sehen.

    12. Testen Sie die erstellte Funktion nach der Bereitstellung, indem Sie auf die Schaltfläche Testen klicken.

    gcloud

    1. In the Google Cloud console, activate Cloud Shell.

      Activate Cloud Shell

      At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

    2. Aktualisieren Sie die Komponenten von gcloud auf die neueste Version:

      gcloud components update
    3. Führen Sie den folgenden Befehl in dem Verzeichnis aus, das den Beispielcode enthält:

      gcloud beta run deploy FUNCTION \
             --source . \
             --function FUNCTION_ENTRYPOINT \
             --base-image BASE_IMAGE \
             --region REGION
      

      Ersetzen Sie:

      • FUNCTION durch den Namen der Funktion, die Sie bereitstellen. Sie können diesen Parameter auch weglassen, werden dann jedoch nach dem Namen gefragt.

      • FUNCTION_ENTRYPOINT durch den Einstiegspunkt zur Funktion in Ihrem Quellcode. Dies ist der Code, der von Cloud Run ausgeführt wird, wenn Ihre Funktion ausgeführt wird. Der Wert dieses Flags muss ein Funktionsname oder ein voll qualifizierter Klassenname sein, der in Ihrem Quellcode vorhanden ist.

      • BASE_IMAGE durch die Umgebung des Basis-Images für Ihre Funktion. Weitere Informationen zu Basis-Images und den in den einzelnen Images enthaltenen Paketen finden Sie unter Laufzeit-Basis-Images.

      • REGION durch die Google Cloud-Region, in der Sie die Funktion bereitstellen möchten. Beispiel: us-central1

      Optional:

      • Wenn Sie eine öffentliche HTTP-Funktion erstellen, z. B. einen Webhook, geben Sie das Flag --allow-unauthenticated an. Mit diesem Flag wird der Sonderkennzeichnung allUser die Rolle „Cloud Run IAM Invoker“ zugewiesen. Sie können die Einstellung mit IAM bearbeiten, nachdem Sie den Dienst erstellt haben. Wenn Sie eine ereignisgesteuerte Funktion oder einen authentifizierten Dienst erstellen, können Sie dieses Flag weglassen.

    Optional können Sie Ihrer Funktion nach der Bereitstellung Eventarc-Trigger hinzufügen. Führen Sie den folgenden Befehl aus, um einen Trigger hinzuzufügen:

      gcloud eventarc triggers create EVENTARC_TRIGGER_NAME \
          --location=EVENTARC_TRIGGER_LOCATION \
          --destination-run-service=FUNCTION \
          --destination-run-region=REGION \
          --event-filters="type=EVENTARC_FILTER_TYPE" \
          --event-filters="EVENTARC_EVENT_FILTER" \
          --service-account=EVENTARC_TRIGGER_SERVICE_ACCOUNT
    

    Ersetzen Sie:

    • EVENTARC_TRIGGER_NAME durch den Namen des Eventarc-Triggers.

    • EVENTARC_TRIGGER_LOCATION durch den Standort für den Eventarc-Trigger. Im Allgemeinen sollte der Standort eines Eventarc-Triggers mit dem Standort der Google Cloud-Ressource übereinstimmen, die Sie auf Ereignisse überwachen möchten. In den meisten Szenarien sollten Sie Ihre Funktion auch in derselben Region bereitstellen. Weitere Informationen zu Eventarc-Triggerstandorten finden Sie unter Informationen zu Eventarc-Standorten.

    • FUNCTION durch den Namen Ihrer bereitgestellten Funktion.

    • REGION durch die Cloud Run-Region der Funktion.

    • EVENTARC_FILTER_TYPE durch die Ereignisfilter, die der Trigger überwacht. Ein Ereignis, das mit allen --event-filters-Filtern übereinstimmt, löst Aufrufe Ihrer Funktion aus. Jeder Trigger muss einen unterstützten Ereignistyp vom Typ --event-filters="type=EVENTARC_FILTER_TYPE" haben. Dieser Ereignistyp kann nach dem Erstellen nicht mehr geändert werden. Wenn Sie EVENT_FILTER_TYPE ändern möchten, erstellen Sie einen neuen Trigger und löschen Sie den alten. Optional können Sie das Flag --event-filters mit einem unterstützten Filter im Format ATTRIBUTE=VALUE wiederholen, um weitere Filter hinzuzufügen.

    • EVENTARC_TRIGGER_SERVICE_ACCOUNT durch ein Dienstkonto. Eventarc-Trigger sind mit Dienstkonten verknüpft, um sie beim Aufrufen Ihrer Funktion als Identität zu verwenden. Das Dienstkonto Ihres Eventarc-Triggers muss die Berechtigung zum Aufrufen Ihrer Funktion haben. Cloud Run verwendet standardmäßig das Compute-Standarddienstkonto.

    Terraform

    Wenn Sie Funktionen mit Terraform verwalten möchten, müssen Sie Ihren Funktionscode in ein Container-Image einbinden und dann Ihren Cloud Run-Dienst in einer Terraform-Konfiguration mithilfe der Ressource google_cloud_run_v2_service des Google Cloud-Anbieters definieren.

    1. Folgen Sie der Anleitung zum Erstellen einer Funktion, um ein Container-Image zu erstellen. Kopieren Sie den vollständigen Pfad des Container-Images für die Variable IMAGE_URL, die im nächsten Schritt verwendet wird.

    2. Erstellen Sie eine neue main.tf-Datei mit folgendem Inhalt:

      provider "google" {
        project = "PROJECT-ID"
      }
      
      resource "google_cloud_run_v2_service" "default" {
        name     = "SERVICE"
        location = "REGION"
        client   = "terraform"
        template {
          containers {
            image = "IMAGE_URL"
          }
        }
      }
      
      resource "google_cloud_run_v2_service_iam_member" "noauth" {
        location = google_cloud_run_v2_service.default.location
        name     = google_cloud_run_v2_service.default.name
        role     = "roles/run.invoker"
        member   = "allUsers"
      }
      

      Ersetzen Sie:

      • PROJECT-ID durch die Google Cloud-Projekt-ID.
      • REGION durch die Google Cloud-Region.
      • SERVICE durch den Namen Ihres Cloud Run-Dienstes. Dienstnamen dürfen maximal 49 Zeichen lang sein und pro Region und Projekt nur einmal vorkommen.
      • IMAGE_URL durch einen Verweis auf das Container-Image, z. B. us-docker.pkg.dev/cloudrun/container/hello:latest. Wenn Sie Artifact Registry verwenden, muss das Repository REPO_NAME bereits erstellt sein. Die URL hat die Form LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.

      Diese Konfiguration ermöglicht öffentlichen Zugriff (entspricht --allow-unauthenticated). Wenn Sie den Dienst privat machen möchten, entfernen Sie die google_cloud_run_v2_service_iam_member-Stanza.

    3. Initialisieren Sie Terraform:

      terraform init
    4. Wenden Sie die Terraform-Konfiguration an:

      terraform apply

      Bestätigen Sie, dass Sie die beschriebenen Aktionen anwenden möchten, indem Sie yes eingeben.

    Cloud Run-Standorte

    Cloud Run ist regional. Die Infrastruktur, in der die Cloud Run-Dienste ausgeführt werden, befindet sich demnach in einer bestimmten Region. Aufgrund der Verwaltung durch Google sind die Anwendungen in allen Zonen innerhalb dieser Region redundant verfügbar.

    Bei der Auswahl der Region, in der Ihre Cloud Run-Dienste ausgeführt werden, ist vorrangig, dass die Anforderungen hinsichtlich Latenz, Verfügbarkeit oder Langlebigkeit erfüllt werden. Sie können im Allgemeinen die Region auswählen, die Ihren Nutzern am nächsten liegt, aber Sie sollten den Standort der anderen Google Cloud-Produkte berücksichtigen, die von Ihrem Cloud Run-Dienst verwendet werden. Die gemeinsame Nutzung von Google Cloud-Produkten an mehreren Standorten kann sich auf die Latenz und die Kosten des Dienstes auswirken.

    Cloud Run ist in diesen Regionen verfügbar:

    Unterliegt Preisstufe 1

    Unterliegt Preisstufe 2

    Wenn Sie bereits einen Cloud Run-Dienst erstellt haben, können Sie dessen Region im Cloud Run-Dashboard der Google Cloud Console aufrufen.

    Ereigniswiederholungen aktivieren

    Eventarc verwendet Pub/Sub als Transportschicht und hat eine Standardwiederholrichtlinie, die für Ihre Funktion möglicherweise nicht geeignet ist.

    Nachdem Sie einen Eventarc-Trigger erstellt haben, empfehlen wir Ihnen dringend, die Wiederholrichtlinie in Eventarc zu aktualisieren und ein Thema für unzustellbare Nachrichten in Pub/Sub zu konfigurieren.

    Vorhandene Funktion ändern

    Sie können entweder die Konfiguration oder den Code Ihrer Funktion ändern:

    Konfiguration ändern

    So ändern Sie Konfigurationsparameter wie CPU-Zuweisung, Arbeitsspeicher und VPC-Konnektivität:

    Console

    1. Wechseln Sie in der Google Cloud Console zur Seite Cloud Run.

      Zu Cloud Run

    2. Klicken Sie in der Übersicht auf den zu aktualisierenden Dienst, um dessen Details anzuzeigen.

    3. Klicken Sie auf Neue Überarbeitung bearbeiten und bereitstellen, um das Formular für die Bereitstellung der Überarbeitung aufzurufen.

    4. Konfigurationseinstellungen ändern.

    5. Klicken Sie auf Bereitstellen und warten Sie, bis die Bereitstellung abgeschlossen ist.

    gcloud

    1. In the Google Cloud console, activate Cloud Shell.

      Activate Cloud Shell

      At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

    2. Wenn Sie eine oder mehrere Dienstkonfigurationseinstellungen aktualisieren möchten, verwenden Sie den Befehl gcloud beta run services update SERVICE mit den Befehlszeilen-Flags der Konfiguration, die Sie aktualisieren möchten. Ersetzen Sie SERVICE durch den Namen des Dienstes.

    Neuen Quellcode neu bereitstellen

    Sie können das Basis-Image, die Laufzeit und den Quellcode Ihrer Funktion entweder über die Google Cloud Console oder die gcloud CLI ändern.

    Klicken Sie auf den Tab, um eine Anleitung zum gewünschten Tool zu erhalten.

    Console

    1. Wechseln Sie in der Google Cloud Console zur Seite Cloud Run.

      Zu Cloud Run

    2. Klicken Sie in der Liste Dienste auf die zu aktualisierende Funktion, um ihre Details anzuzeigen.

    3. Rufen Sie den Tab Quelle auf und klicken Sie auf Quelle bearbeiten.

    4. Klicken Sie neben Basis-Image auf Laufzeit- und Sicherheitsupdates bearbeiten, wählen Sie bei Bedarf eine andere Laufzeit oder Umgebung aus der Liste aus und klicken Sie auf Speichern.

    5. Ändern Sie den Funktionseinstiegspunkt nach Bedarf.

    6. Wählen Sie im Bereich Dateien die Option Datei hinzufügen aus, um eine neue Datei zu erstellen, Datei umbenennen, um eine Datei umzubenennen, oder Datei löschen, um eine Datei zu löschen.

    7. Ändern Sie den Quellcode im Abschnitt Code nach Bedarf.

    8. Klicken Sie auf Speichern und neu bereitstellen und warten Sie, bis die Bereitstellung abgeschlossen ist.

    gcloud

    1. In the Google Cloud console, activate Cloud Shell.

      Activate Cloud Shell

      At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

    2. Führen Sie den folgenden Befehl in dem Verzeichnis aus, das den Quellcode der Funktion enthält:

      gcloud beta run deploy FUNCTION \
             --source . \
             --function FUNCTION_ENTRYPOINT \
             --base-image BASE_IMAGE \
             --region REGION
      

      Ersetzen Sie:

      • FUNCTION durch den Namen der Funktion, die Sie ändern möchten.

      • FUNCTION_ENTRYPOINT durch den Einstiegspunkt zur Funktion in Ihrem Quellcode.

      • BASE_IMAGE durch die Umgebung des Basis-Images für Ihre Funktion. In den meisten Fällen können Sie die Laufzeit-ID angeben, z. B. nodejs22.

        Wenn Sie stattdessen ein bestimmtes Systempaket im Stack verwenden oder die Region angeben möchten, aus der das Basis-Image heruntergeladen wird, können Sie eine der folgenden Optionen angeben:

        • Der vollständige Pfad zum Basis-Image, z. B. us-central1-docker.pkg.dev/serverless-runtimes/google-22-full/runtimes/nodejs22. Mit dieser Option können Sie das Basis-Image, ein bestimmtes Systempaket im Stack und die Region angeben, aus der das Basis-Image heruntergeladen wird.
        • Der Alias des vollständigen Pfads zum Basis-Image, z. B. google-22/nodejs22 oder google-22-full/nodejs22. Mit dieser kürzeren Aliasoption können Sie das Basis-Image und ein bestimmtes Systempaket im Stack angeben.

        Weitere Informationen zu Basis-Images und den in den einzelnen Images enthaltenen Paketen finden Sie unter Laufzeit-Basis-Images.

      • REGION durch die Google Cloud-Region, in der Sie die Funktion bereitstellen möchten. Beispiel: us-central1

      Optionale Flags

      Sie können die folgenden optionalen Flags konfigurieren, während Sie Ihre Funktion ändern:

      • Build-Umgebungsvariablen: Flags zum Angeben von Umgebungsvariablen während des Build-Schritts, z. B. zum Konfigurieren von Buildzeit-spezifischen Zertifikaten oder Parametern.

      • Worker-Pool-Flags, mit denen angegeben wird, welcher Worker-Pool im Build-Kontext mit VPC Service Controls verwendet werden soll.

      • Flags für benutzerdefinierte Build-Dienstkonten, mit denen eine Alternative zum Standard-Build-Dienstkonto für mehr Sicherheit angegeben werden kann.

      • Mit dem Flag Automatic base image updates (Automatische Basis-Image-Updates) können Sie automatische Updates deaktivieren. Für Funktionen sind standardmäßig automatische Sicherheitsupdates aktiviert.

    Nächste Schritte

    Nachdem Sie eine neue Funktion bereitgestellt haben, können Sie Folgendes tun: