Übersicht: Build-Prozess

Wenn Sie den Quellcode Ihrer Funktion in Cloud Run Functions bereitstellen, wird diese Quelle in einem Cloud Storage-Bucket gespeichert. Cloud Build erstellt dann automatisch Ihren Code in einem Container-Image und überträgt dieses Image per Push in eine Image-Registry. Cloud Run Functions greift auf dieses Image zu, wenn es zum Ausführen der Funktion den Container ausführen muss. Wenn für Ihre Funktion noch Container Registry verwendet wird, sollten Sie so schnell wie möglich zu Artifact Registry wechseln.

Das Erstellen des Images erfolgt komplett automatisch und erfordert keine direkte Eingabe von Ihnen. Alle im Build-Prozess verwendeten Ressourcen werden in Ihrem eigenen Nutzerprojekt ausgeführt.

Wenn Sie den Build-Prozess in Ihrem Projekt ausführen, hat das diese Folgen:

  • Sie haben direkten Zugriff auf alle Build-Logs.

  • Es gibt kein voreingestelltes Kontingent für die Build-Dauer, obwohl Cloud Build über ein eigenes Standardkontingent für Gleichzeitigkeit verfügt.

  • Sie können sich das aktuelle Container-Image und das zuvor bereitgestellte Container-Image ansehen. Beide sind in Artifact Registry gespeichert.

  • Cloud Storage wird direkt in Ihrem Projekt verwendet und das Quellcodeverzeichnis für Ihre Funktionen wird in einem Bucket in Ihrem Projekt gespeichert. Wichtige Hinweise:

    • Wenn Sie die Standardverschlüsselung verwenden, heißt dieser Bucket gcf-sources-PROJECT_NUMBER-REGION.
    • Wenn Sie Ihre Daten mit CMEK schützen, heißt der Bucket gcf-sources-PROJECT_NUMBER-REGION-CMEK_KEY_HASH.
    • Für den Bucket ist keine Aufbewahrungsdauer festgelegt.

Merkmale des Build-Prozesses

Der Build-Prozess hat die folgenden Eigenschaften:

  • Die Cloud Build API muss für Ihr Projekt aktiviert sein.

    Klicken Sie zum manuellen aktivieren der API, auf den obigen Link, wählen Sie Ihr Projekt aus dem Drop-down-Menü und folgen Sie den Anweisungen, um die Benutzeroberfläche zu aktivieren.

  • Da der gesamte Build-Prozess im Kontext Ihres Projekts erfolgt, fallen für das Projekt die Preise für die enthaltenen Ressourcen an:

    • Preise für Cloud Build finden Sie auf der Preisseite. Für diesen Prozess wird die Standardinstanzgröße von Cloud Build verwendet, da diese Instanzen vorbereitet und schneller verfügbar sind. Cloud Build bietet eine kostenlose Stufe: Weitere Informationen finden Sie im Dokument mit der Preisübersicht.

    • Preise für Cloud Storage finden Sie auf der Preisseite. Cloud Storage bietet eine kostenlose Stufe: Weitere Informationen finden Sie im Dokument mit der Preisübersicht.

    • Preise für Artifact Registry finden Sie auf der Preisseite.

    • Preise für Container Registry (eingestellt) finden Sie auf der Preisseite.

  • Da der Build-Prozess kostenpflichtig ist, muss Ihrem Projekt ein Cloud-Rechnungskonto zugeordnet sein.

Build-Image-Logs aufrufen

Ein wichtiger Vorteil beim Verschieben des Build-Image-Prozesses in Ihr Nutzerprojekt ist der Zugriff auf Build-Logs. Zum Aufrufen der Logs, die über Cloud Logging verfügbar sind, können Sie entweder die gcloud CLI oder die Google Cloud Console verwenden.

gcloud

  1. Stellen Sie die Funktion mit dem Befehl gcloud functions deploy bereit.

  2. Die URL der Logs wird als Teil der Antwort im Terminalfenster angezeigt. Beispiel:

    Deploying function (may take a while - up to 2 minutes)...⠹
    **For Cloud Build Stackdriver Logs**, visit:
    https://console.cloud.google.com/logs/viewer?project=&advancedFilter=resource.type%
    3Dbuild%0Aresource.labels.build_id%3D38d5b662-2315-45dd-8aa2-
    380d50d4f5e8%0AlogName%3Dprojects%2F%
    2Flogs%2Fcloudbuild
    Deploying function (may take a while - up to 2 minutes)...done.

Google Cloud Console

  1. Klicken Sie im Fenster Cloud Run Functions – Übersicht auf den Namen der Funktion, die Sie prüfen möchten.
  2. Klicken Sie auf den Tab Details.
  3. Klicken Sie im Bereich Allgemeine Informationen auf den Link Container-Build-Log, um den Bereich Log-Explorer zu öffnen.
  4. Klicken Sie auf eine Zeile, um die Details dieses Build-Logeintrags aufzurufen. Wenn es sich um einen Fehlereintrag handelt, der mit einer Datei verknüpft ist, enthalten diese Details den Namen, die Zeile und die Spalte der Datei.

Image-Registry

Cloud Run Functions verwendet Artifact Registry, um die aus dem Quellcode Ihrer Funktion erstellten Images zu speichern. Bilder werden in einem Repository mit dem Namen REGION-docker.pkg.dev/PROJECT_ID/gcf-artifacts im selben Projekt gespeichert, in dem Ihre Funktion erstellt wird.

Führen Sie den folgenden Befehl aus, um ein selbst verwaltetes Artifact Registry-Repository anzugeben:

gcloud

gcloud functions deploy FUNCTION \
  --docker-registry=artifact-registry \
  --docker-repository=REPOSITORY \
  [FLAGS...]

Ersetzen Sie Folgendes:

  • FUNCTION: Der Name der Funktion.
  • REPOSITORY: Der voll qualifizierte Artifact Registry-Repository-Name im folgenden Format: projects/PROJECT_NAME/locations/LOCATION/repositories/REPOSITORY.

Wenn Sie ein Artifact Registry-Repository in einem anderen Projekt oder einer anderen Region angeben, müssen Sie möglicherweise zusätzliche Konfigurationen berücksichtigen:

IAM-Konfigurationen:

  • Das Build-Dienstkonto muss Lese- und Schreibzugriff auf REPOSITORY haben.

Netzwerkkonfigurationen:

  • Prüfen Sie, ob das Ziel REPOSITORY von der aktuellen Projektkonfiguration aus erreichbar ist.

VPC Service Controls-Konfigurationen:

  • Das Build-Dienstkonto muss das Ziel REPOSITORY innerhalb des VPC-SC-Perimeters erreichen können.

Einschränkungen für den Datenstandort:

  • Wenn Sie eine REPOSITORY in einer anderen Region angeben als der, in der sich Ihre Funktion befindet, kommt es zu einer Datenübertragung zwischen Regionen.

Google Cloud Console

  1. Rufen Sie in der Google Cloud Console die Seite „Cloud Run-Funktionen“ auf:
    Zur Seite „Cloud Run-Funktionen“

  2. Klicken Sie auf den Namen der Funktion, für die Sie Artifact Registry verwenden möchten.

  3. Klicken Sie auf Bearbeiten.

  4. Klicken Sie auf Laufzeit, Build..., um die erweiterten Konfigurationsoptionen zu maximieren.

  5. Klicken Sie in der Menüleiste auf Sicherheit und Image-Repository, um den Tab „Sicherheit“ zu öffnen.

  6. Wählen Sie unter Image-Repository eine der folgenden Optionen aus, je nachdem, welchen Typ von Artifact Registry Sie verwenden:

    • Vom Kunden verwaltete Artifact Registry. Verwenden Sie diese Option, wenn Sie ein eigenes Docker-Repository einrichten.
    • Von Google verwaltete Artifact Registry Verwenden Sie diese Option, wenn Sie ein von Google verwaltetes Docker-Repository verwenden möchten, anstatt ein eigenes einzurichten.
  7. Verwenden Sie für die vom Kunden verwaltete Artifact Registry das Artifact Registry-Drop-down, um das gewünschte Artifact Registry-Repository auszuwählen, oder folgen Sie den Eingabeaufforderungen und erstellen Sie ein neues.

  8. Klicken Sie auf Weiter.

  9. Klicken Sie auf Bereitstellen.

Auf Artifact Registry umstellen

Sie können Images in Artifact Registry veröffentlichen, indem Sie die Repository-Einstellungen ändern:

gcloud

gcloud beta functions deploy FUNCTION \
  --docker-registry=artifact-registry \
  [FLAGS...]

Google Cloud Console

  1. Rufen Sie in der Google Cloud Console die Seite „Cloud Run-Funktionen“ auf:
    Zur Seite „Cloud Run-Funktionen“

  2. Klicken Sie auf den Namen der Funktion, für die Sie Artifact Registry verwenden möchten.

  3. Klicken Sie auf Bearbeiten.

  4. Klicken Sie auf Laufzeit, Build..., um die erweiterten Konfigurationsoptionen zu maximieren.

  5. Klicken Sie in der Menüleiste auf Sicherheit und Image-Repository, um den Tab „Sicherheit“ zu öffnen.

  6. Wählen Sie unter Image-Repository eine der folgenden Optionen aus, je nachdem, welchen Typ von Artifact Registry Sie verwenden:

    • Vom Kunden verwaltete Artifact Registry. Verwenden Sie diese Option, wenn Sie ein eigenes Docker-Repository einrichten.
    • Von Google verwaltete Artifact Registry Verwenden Sie diese Option, wenn Sie ein von Google verwaltetes Docker-Repository verwenden möchten, anstatt ein eigenes einzurichten.
  7. Verwenden Sie für die vom Kunden verwaltete Artifact Registry das Artifact Registry-Drop-down, um das gewünschte Artifact Registry-Repository auszuwählen, oder folgen Sie den Eingabeaufforderungen und erstellen Sie ein neues.

  8. Klicken Sie auf Weiter.

  9. Klicken Sie auf Bereitstellen.

Ausführliche Preisinformationen finden Sie unter Cloud Run Functions-Preise.

Build mit privaten Pools sichern

Damit Ihre Funktionen Abhängigkeiten verwenden können (z. B. npm-Pakete), hat Cloud Build standardmäßig uneingeschränkten Internetzugriff während des Build-Prozesses. Wenn Sie einen VPC Service Controls-Perimeter (VPC SC) eingerichtet haben und den Zugriff des Builds auf Abhängigkeiten beschränken möchten, die im Perimeter gespeichert sind, können Sie die privaten Worker-Pools von Cloud Build verwenden verwenden.

Gehen Sie im Allgemeinen so vor, um einen privaten Pool einzurichten:

  1. Erstellen Sie Ihren privaten Worker-Pool. Siehe Private Pools erstellen und verwalten.
  2. Konfigurieren Sie den VPC Service Controls-Perimeter. Siehe VPC Service Controls verwenden.

  3. Wenn sich Ihr privater Worker-Pool in einem anderen Projekt als Ihre Funktion befindet, müssen Sie dem Cloud Run Functions-Dienst-Agent-Dienstkonto (service-FUNCTION_PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com) die cloudbuild.workerPoolUser, damit der Cloud Build-Dienst auf den Worker-Pool zugreifen kann.

    gcloud projects add-iam-policy-binding PRIVATE_POOL_PROJECT_ID \
        --member serviceAccount:service-FUNCTION_PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com
        --role roles/cloudbuild.workerPoolUser

    Dabei ist FUNCTION_PROJECT_NUMBER die Nummer des Projekts, in dem die Funktion ausgeführt wird, und PRIVATE_POOL_PROJECT_ID die ID des Projekts, in dem sich der Worker-Pool befindet. Weitere Informationen finden Sie unter Builds in einem privaten Pool ausführen.

  4. Stellen Sie die Funktion zum Erstellen mit einem privaten Pool bereit:

gcloud

gcloud functions deploy FUNCTION_NAME \
  --runtime RUNTIME \
  --build-worker-pool PRIVATE_POOL_NAME
  [FLAGS...]

Dabei ist FUNCTION_NAME der Name der Funktion, RUNTIME die von Ihnen verwendete Laufzeit und PRIVATE_POOL_NAME der Name Ihres Pools.

Wenn Sie einen bestimmten privaten Pool nicht mehr verwenden und stattdessen den standardmäßigen Cloud Build-Pool verwenden möchten, verwenden Sie das Flag --clear-build-worker-pool bei der erneuten Bereitstellung.

gcloud functions deploy FUNCTION_NAME \
  --runtime RUNTIME \
  --clear-build-worker-pool
  [FLAGS...]

Dabei ist FUNCTION_NAME der Name der Funktion und RUNTIME die von Ihnen verwendete Laufzeit.

Google Cloud Console

  1. Wählen Sie auf der Cloud Run Functions – Übersicht die Option Funktion erstellen.

  2. Klicken Sie im Abschnit Laufzeit, Build... auf den Tab Build und geben Sie den vollständigen Ressourcennamen Ihres privaten Pools in das Textfeld Worker-Pools erstellen ein.

Weitere Informationen finden Sie unter Builds in einem privaten Pool ausführen.

Build mit einem benutzerdefinierten Dienstkonto sichern

Cloud Run Functions übernehmen Ihren Quellcode und senden ihn zur Containerisierung an Cloud Build. Die containerisierte Funktion wird in Artifact Registry gespeichert und als Dienst in Cloud Run bereitgestellt. Standardmäßig weist Cloud Build ein Dienstkonto zu, das beim Ausführen des Builds als Hauptkonto fungiert. Seit Juli 2024 wird in neuen Projekten in einer Organisation das Compute Engine-Standarddienstkonto als Hauptberechtigter für die Ausführung eines Builds verwendet. Weitere Informationen finden Sie unter Änderung des Cloud Build-Standarddienstkontos. Aus Sicherheitsgründen hat das Compute Engine-Standarddienstkonto nicht genügend Berechtigungen, um den Build auszuführen.

Für Google Cloud-Projekte, die vor Juli 2024 erstellt wurden, verwendet Cloud Build das bisherige Cloud Build-Dienstkonto. Dieses Dienstkonto wurde entwickelt, um Nutzern die Ausführung einer Vielzahl von Anwendungsfällen zu ermöglichen, die für die Anforderungen Ihres Projekts möglicherweise zu weit gefasst sind. Wenn Sie Ihre vorhandenen Projekte aus diesem Dienstkonto verschieben möchten, können Sie die folgenden Schritte ausführen, um Ihre Build-Umgebung für Funktionen weiter zu schützen:

  1. Verhindert, dass das Cloud Build-Legacy-Dienstkonto für den Build verwendet wird
  2. Verhindert, dass das Standard-Compute-Dienstkonto für den Build verwendet wird
  3. Konfigurieren Sie ein neues Dienstkonto mit Berechtigungen für den Build.
  4. Verwenden Sie das konfigurierte Dienstkonto für den Build.

Verhindert, dass das alte Cloud Build-Dienstkonto für Builds verwendet wird

Sie können prüfen, ob für Ihr Projekt das alte Cloud Build-Dienstkonto verwendet wird, indem Sie sich die Details des Builds Ihrer Funktion ansehen. Das Standarddienstkonto für die Builds hat das folgende Format:

PROJECT_NUMBER@cloudbuild.gserviceaccount.com.

Sie können die Verwendung dieses Dienstkontos erzwingen, indem Sie die Einschränkung der Organisationsrichtlinie cloudbuild.useBuildServiceAccount auf Not Enforced setzen. Alternativ können Sie alle Rollen gewähren, um den Zugriff auf Google Cloud-Ressourcen einzuschränken.

Verhindert, dass das Standarddienstkonto von Compute für den Build verwendet wird

Das Standard-Compute-Dienstkonto hat das Format PROJECT_NUMBER-compute@developer.gserviceaccount.com. Sie können festlegen, dass sie nicht als Standard für den Build verwendet wird, indem Sie die Organisationsrichtlinie cloudbuild.useComputeServiceAccount auf Not Enforced setzen. Alternativ können Sie dieses Dienstkonto deaktivieren, damit es nicht zum Zugriff auf Google Cloud-Ressourcen verwendet wird.

Dienstkonto für das Erstellen von Funktionen angeben

Im Rahmen der Konfiguration einer Funktion kann bei der Bereitstellung der Funktion ein Build-Dienstkonto angegeben werden. Wenn die Verwendung des alten Cloud Build-Dienstkontos und des Standard-Compute-Dienstkontos für den Build verhindert wird, muss ein Build-Dienstkonto angegeben werden, um eine Funktion bereitzustellen.

Informationen zum Konfigurieren und Verwenden eines Build-Dienstkontos für Ihre Funktion finden Sie unter Benutzerdefiniertes Dienstkonto für Cloud Build.