Cloud Functions-Images erstellen

Übersicht

Wenn Sie den Quellcode Ihrer Funktion in Cloud 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 (entweder Container Registry oder Artifact Registry). Cloud Functions greift auf dieses Image zu, wenn es zum Ausführen der Funktion den Container ausführen muss.

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 das aktuelle Container-Image und das zuvor bereitgestellte Container-Image aufrufen. Beide sind in Container Registry oder Artifact Registry gespeichert.

  • Da Cloud Storage direkt in Ihrem Projekt verwendet wird, ist das Quellcodeverzeichnis für Ihre Funktionen in einem Bucket mit dem Namen gcf-sources-PROJECT_NUMBER-REGION sichtbar.

Merkmale des Build-Prozesses

Der Build-Prozess hat die folgenden Eigenschaften:

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

    Klicken Sie auf den obigen Link, wählen Sie Ihr Projekt aus dem Drop-down-Menü aus und klicken auf Weiter, um die API 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 Container Registry finden Sie auf der Preisseite.

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

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

Auf Build-Image-Logs zugreifen

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 Bildschirm Funktionen auf den Namen der Funktion, an der Sie interessiert sind. Die Seite Funktionsdetails wird geöffnet.

  2. Scrollen Sie nach unten, bis Sie den Abschnitt Container-Build erreichen. Wenn der Build fehlerfrei verlaufen ist, wird ein Link angezeigt, über den Sie das Build-Log aufrufen können. Wenn Ihr Build wie unten gezeigt Fehler aufweist, werden sie im Abschnitt Container-Build inline angezeigt. Klicken Sie auf Weitere Informationen, um direkt das Build-Log aufzurufen.

    Screenshot mit der Ausgabe für den Bereich Container-Build

  3. Der Bildschirm Logbetrachter wird geöffnet. Klicken Sie auf den Eintrag, der Sie interessiert.

  4. Der vollständige Build-Logeintrag wird geöffnet. Darin sehen Sie die betroffene Datei, eine Beschreibung des Fehlers – in diesem Fall eine fehlende Klammer in pom.xml – sowie die Zeile und die Spalte des Fehlers.

    Screenshot mit Build-Logeintrag

Optionen für Image-Registry

Cloud Functions (2. Generation) verwendet ausschließlich Artifact Registry, um die aus Ihrem Funktionsquellcode erstellten Images zu speichern. Images werden in einem Repository mit dem Namen REGION-docker.pkg.dev/PROJECT_ID/gcf-artifacts gespeichert.

Cloud Functions (1. Generation) verwendet standardmäßig Container Registry, ermöglicht aber auch die Verwendung von Artifact Registry. In Cloud Functions (1. Generation) können Sie eine Artifact Registry-basierte Funktion erstellen oder aktualisieren. Gehen Sie dazu so vor:

Console

  1. Rufen Sie die Seite "Cloud Functions" in der Google Cloud Console auf:
    Zur Seite "Cloud Functions"

  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, Verbindungen und Sicherheitseinstellungen, um die erweiterten Konfigurationsoptionen zu maximieren.

  5. Klicken Sie auf Sicherheit und Image-Repository, um den Tab Sicherheit zu öffnen.

  6. Wählen Sie unter Image-Repository > Containerstandort 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 Next (Weiter).

  9. Klicken Sie auf Deploy.

gcloud

Führen Sie für Vom Kunden verwaltete Artifact Registry den folgenden Befehl aus:

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

Dabei gilt:

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

Verwenden Sie für von Google verwaltete Artifact Registry Folgendes:

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

Ausführliche Preisinformationen finden Sie unter Cloud 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 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.

    Cloud Console

    Wählen Sie auf der Seite Create function im Abschnitt Runtime, build and connections settings den Tab Build aus und geben Sie in das Textfeld Build worker pools Selected environment den Wert PRIVATE_POOL_NAME ein, wobei PRIVATE_POOL_NAME der Namen Ihres Pools.

    Screenshot der Cloud Console