Batch ist ein vollständig verwalteter Dienst, mit dem Sie planen, in die Warteschlange stellen und ausführen Batchverarbeitung auf Compute Engine-VM-Instanzen. Batch stellt Ressourcen bereit und verwaltet die Kapazität für Sie, sodass Ihre Batcharbeitslasten in großem Maßstab ausgeführt werden können.
Mit Workflows können Sie die von Ihnen in einer von Ihnen definierten Reihenfolge, die mithilfe der Funktion Workflows-Syntax.
In dieser Anleitung verwenden Sie die Methode Workflows-Connector für Batch zum Planen und Ausführen eines Batch-Jobs, der sechs Aufgaben auf zwei Compute Engine-VMs parallel. Beide Batches verwenden und Workflows ermöglicht es Ihnen, und den gesamten Prozess effizient bereitstellen und orchestrieren.
Lernziele
In dieser Anleitung werden Sie:- Erstellen Sie ein Artifact Registry-Repository für ein Docker-Container-Image.
- Rufen Sie den Code für die Batchverarbeitungsarbeitslast von GitHub ab: einem Beispielprogramm die Primzahlen in Batches von 10.000 generiert.
- Erstellen Sie das Docker-Image für die Arbeitslast.
- Stellen Sie einen Workflow bereit und führen Sie ihn aus, der Folgendes ausführt:
- Erstellt einen Cloud Storage-Bucket zum Speichern der Ergebnisse der Prime Zahlengenerator.
- Hier wird ein Batchjob geplant und ausgeführt, bei dem der Docker-Container als sechs Aufgaben parallel auf zwei Compute Engine-VMs ausgeführt wird.
- Optional wird der Batchjob nach Abschluss gelöscht.
- Bestätigen Sie, dass die Ergebnisse den Erwartungen entsprechen und die Batches der generierten Primzahlen werden in Cloud Storage gespeichert.
Sie können die meisten der folgenden Befehle in der Google Cloud Console oder alle die Befehle über die Google Cloud CLI in Ihrem Terminal oder in Cloud Shell ausführen.
Kosten
In diesem Dokument verwenden Sie die folgenden kostenpflichtigen Komponenten von Google Cloud:
Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen.
Hinweise
Von Ihrer Organisation definierte Sicherheitsbeschränkungen verhindern möglicherweise, dass die folgenden Schritte ausgeführt werden. Informationen zur Fehlerbehebung finden Sie unter Anwendungen in einer eingeschränkten Google Cloud-Umgebung entwickeln.
Console
Wählen Sie in der Google Cloud Console auf der Seite der Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines.
Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein. So prüfen Sie, ob die Abrechnung für ein Projekt aktiviert ist.
Artifact Registry, Batch, Cloud Build, Compute Engine, Workflowausführungen und Workflows APIs.
Erstellen Sie ein Dienstkonto für Ihren Workflow zur Authentifizierung bei anderen Google Cloud-Diensten und weisen Sie ihm die entsprechenden Rollen zu:
Wechseln Sie in der Google Cloud Console zur Seite Dienstkonto erstellen.
Wählen Sie Ihr Projekt aus.
Geben Sie im Feld Dienstkontoname einen Namen ein. Die Google Cloud Console füllt das Feld Dienstkonto-ID anhand dieses Namens aus.
Geben Sie im Feld Dienstkontobeschreibung eine Beschreibung ein. Beispiel:
Service account for tutorial
Klicken Sie auf Erstellen und fortfahren.
Filtern Sie in der Liste Rolle auswählen nach den folgenden zu gewährenden Rollen auf das nutzerverwaltete Dienstkonto, das Sie im vorherigen Schritt erstellt haben:
- Bearbeiter von Batchjobs: zum Bearbeiten von Batchjobs.
- Logautor: zum Schreiben von Logs.
- Storage Admin: Damit können Sie Cloud Storage-Ressourcen verwalten.
Klicken Sie auf
Weitere Rolle hinzufügen, um weitere Rollen hinzuzufügen.Klicken Sie auf Weiter.
Klicken Sie zum Abschließen der Erstellung des Kontos auf Fertig.
Weisen Sie dem nutzerverwalteten Dienstkonto, das Sie im vorherigen Schritt erstellt haben, die Rolle „IAM-Dienstkontonutzer“ für das Standarddienstkonto zu. Nachdem Sie die Compute Engine API aktiviert haben, ist das Compute Engine-Standarddienstkonto (
PROJECT_NUMBER[email protected]
), Die Berechtigung wird in der Regel über die Rolleroles/iam.serviceAccountUser
.Klicken Sie auf der Seite Dienstkonten auf die E-Mail-Adresse des Standarddienstkonto (
PROJECT_NUMBER[email protected]
).Klicken Sie auf den Tab Berechtigungen.
Klicken Sie auf die Schaltfläche
Erteilung Zugriff.Geben Sie die E-Mail-Adresse Ihres Dienstkontos ein, um ein neues Hauptkonto hinzuzufügen (
SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
).Wählen Sie in der Liste Rolle auswählen die Rolle Dienstkonten > Dienstkontonutzer aus.
Klicken Sie auf Speichern.
gcloud
In the Google Cloud console, 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.
Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein. So prüfen Sie, ob die Abrechnung für ein Projekt aktiviert ist.
Artifact Registry, Batch, Cloud Build, Compute Engine Workflow Executions und Workflows APIs.
gcloud services enable artifactregistry.googleapis.com \ batch.googleapis.com \ cloudbuild.googleapis.com \ compute.googleapis.com \ workflowexecutions.googleapis.com \ workflows.googleapis.com
Erstellen Sie ein Dienstkonto für Ihren Workflow zur Authentifizierung bei anderen Google Cloud-Diensten und weisen ihm die entsprechenden Rollen zu.
Erstellen Sie das Dienstkonto:
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
Ersetzen Sie
SERVICE_ACCOUNT_NAME
durch einen Namen für das Dienstkonto.Weisen Sie dem nutzerverwalteten Dienstkonto Rollen zu, das Sie im vorherigen Schritt. Führen Sie den folgenden Befehl jeweils einmal aus: IAM-Rollen:
roles/batch.jobsEditor
: zum Bearbeiten von Batchjobs.roles/logging.logWriter
: Zum Schreiben von Logs.roles/storage.admin
: zum Steuern von Cloud Storage-Ressourcen.
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \ --role=ROLE
Ersetzen Sie Folgendes:
PROJECT_ID
: die ID des Projekts, in dem Sie das Dokument erstellt haben das DienstkontoROLE
: die zu gewährende Rolle
Weisen Sie dem nutzerverwalteten Dienstkonto, das Sie im vorherigen Schritt erstellt haben, die IAM-Rolle „Service Account User“ (roles/iam.serviceAccountUser) für das Standarddienstkonto zu. Nachdem Sie die Compute Engine API aktiviert haben, wird als Standarddienstkonto das Compute Engine-Standarddienstkonto (
PROJECT_NUMBER[email protected]
) verwendet. Die Berechtigung wird in der Regel über die Rolleroles/iam.serviceAccountUser
zugewiesen.PROJECT_NUMBER=$(gcloud projects describe PROJECT_ID --format='value(projectNumber)') gcloud iam service-accounts add-iam-policy-binding \ $PROJECT_NUMBER[email protected] \ --member=serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/iam.serviceAccountUser
Artifact Registry-Repository erstellen
Erstellen Sie ein Repository zum Speichern Ihres Docker-Container-Images.
Console
Rufen Sie in der Google Cloud Console die Seite Repositories auf.
Klicken Sie auf
. Repository erstellen.Geben Sie containers als Repository-Namen ein.
Wählen Sie als Format die Option Docker aus.
Wählen Sie als Standorttyp die Option Region aus.
Wählen Sie in der Liste Region die Option us-central1 aus.
Klicken Sie auf Erstellen.
gcloud
Führen Sie dazu diesen Befehl aus:
gcloud artifacts repositories create containers \
--repository-format=docker \
--location=us-central1
Sie haben ein Artifact Registry-Repository mit dem Namen containers
im
us-central1
. Weitere Informationen zu unterstützten Regionen finden Sie unter
Artifact Registry-Speicherorte
Codebeispiele abrufen
Google Cloud speichert den Anwendungsquellcode für diese Anleitung in GitHub Sie können dieses Repository klonen oder die Beispiele herunterladen.
Klonen Sie das Repository der Beispiel-App auf Ihren lokalen Computer:
git clone https://github.com/GoogleCloudPlatform/batch-samples.git
Alternativ können Sie Beispiele in der Datei
main.zip
herunterladen und extrahieren sie.Wechseln Sie zu dem Verzeichnis, das den Beispielcode enthält:
cd batch-samples/primegen
Sie haben nun den Quellcode für die Anwendung in Ihrer Entwicklungsumgebung.
Docker-Image mit Cloud Build erstellen
Dockerfile
enthält die Informationen, die zum Erstellen eines Docker-Images erforderlich sind.
mit Cloud Build. Führen Sie den folgenden Befehl aus, um es zu erstellen:
gcloud builds submit \
-t us-central1-docker.pkg.dev/PROJECT_ID/containers/primegen-service:v1 PrimeGenService/
Ersetzen Sie PROJECT_ID
durch die Google Cloud-Projekt-ID.
Wenn der Build abgeschlossen ist, sollte die Ausgabe in etwa so aussehen:
DONE
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
ID: a54818cc-5d14-467b-bfda-5fc9590af68c
CREATE_TIME: 2022-07-29T01:48:50 00:00
DURATION: 48S
SOURCE: gs://project-name_cloudbuild/source/1659059329.705219-17aee3a424a94679937a7200fab15bcf.tgz
IMAGES: us-central1-docker.pkg.dev/project-name/containers/primegen-service:v1
STATUS: SUCCESS
Mit einem Dockerfile haben Sie ein Docker-Image namens primegen-service
erstellt und
Das Image wurde per Push an ein Artifact Registry-Repository mit dem Namen containers
übertragen.
Workflow bereitstellen, der einen Batchjob plant und ausführt
Mit dem folgenden Workflow wird ein Batchjob geplant und ausgeführt, der ausgeführt wird. einem Docker-Container mit sechs parallelen Aufgaben auf zwei Compute Engine-VMs. Die die Generierung von sechs Batches von Primzahlen, Cloud Storage-Bucket.
Console
Öffnen Sie in der Google Cloud Console die Seite Workflows.
Klicken Sie auf
Erstellen.Geben Sie einen Namen für den neuen Workflow ein, z. B.
batch-workflow
.Wählen Sie in der Liste Region die Option us-central1 aus.
Wählen Sie das zuvor erstellte Dienstkonto aus.
Klicken Sie auf Weiter.
Geben Sie im Workflow-Editor die folgende Definition für den Workflow ein:
YAML
JSON
Klicken Sie auf Bereitstellen.
gcloud
Erstellen Sie eine Quellcodedatei für Ihren Workflow:
touch batch-workflow.JSON_OR_YAML
Ersetzen Sie „
JSON_OR_YAML
“ durch „yaml
“ oder „json
“ je nach Format des Workflows.Kopieren Sie in einem Texteditor den folgenden Workflow in Ihre Quellcodedatei:
YAML
JSON
Stellen Sie den Workflow bereit. Geben Sie hierzu den folgenden Befehl ein:
gcloud workflows deploy batch-workflow \ --source=batch-workflow.yaml \ --location=us-central1 \ --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
Ersetzen Sie
SERVICE_ACCOUNT_NAME
durch den Namen von das zuvor erstellte Dienstkonto.
Workflow ausführen
Bei der Ausführung eines Workflows wird die aktuelle Workflowdefinition ausgeführt, die dem Workflow zugeordnet ist.
Console
Öffnen Sie in der Google Cloud Console die Seite Workflows.
Klicken Sie auf der Seite Workflows auf das batch-workflow, um die zugehörige Detailseite aufzurufen.
Klicken Sie auf der Seite Workflowdetails auf play_arrow Ausführen.
Klicken Sie noch einmal auf Ausführen.
Die Ausführung des Workflows sollte einige Minuten dauern.
Sehen Sie sich die Ergebnisse des Workflows im Bereich Ausgabe an.
Die Antwort sollte in etwa so aussehen:
{ "bucket": "project-name-job-primegen-TIMESTAMP", "jobId": "job-primegen-TIMESTAMP" }
gcloud
Führen Sie den Workflow aus:
gcloud workflows run batch-workflow \ --location=us-central1
Die Ausführung des Workflows sollte einige Minuten dauern.
Sie können den Status einer lang andauernden Ausführung prüfen.
Führen Sie folgenden Befehl aus, um den Status der letzten abgeschlossenen Ausführung abzurufen: Befehl:
gcloud workflows executions describe-last
Die Ergebnisse sollten in etwa so aussehen:
name: projects/PROJECT_NUMBER/locations/us-central1/workflows/batch-workflow/executions/EXECUTION_ID result: '{"bucket":"project-name-job-primegen-TIMESTAMP","jobId":"job-primegen-TIMESTAMP"}' startTime: '2022-07-29T16:08:39.725306421Z' state: SUCCEEDED status: currentSteps: - routine: main step: returnResult workflowRevisionId: 000001-9ba
Objekte im Ausgabe-Bucket auflisten
Sie können bestätigen, dass die Ergebnisse Ihren Erwartungen entsprechen, indem Sie die Objekte in der Cloud Storage-Ausgabe-Bucket.
Console
- Wechseln Sie in der Cloud Console zur Seite Cloud Storage-Buckets.
Klicken Sie in der Bucket-Liste auf den Namen des Buckets, dessen Inhalt Sie sehen möchten.
Die Ergebnisse sollten in etwa so aussehen (insgesamt sechs Dateien), und jede Auflistung einen Batch von 10.000 Primzahlen enthält:
primes-1-10000.txt primes-10001-20000.txt primes-20001-30000.txt primes-30001-40000.txt primes-40001-50000.txt primes-50001-60000.txt
gcloud
Rufen Sie den Namen Ihres Ausgabe-Buckets ab:
gcloud storage ls
Die entsprechende Ausgabe sieht etwa so aus:
gs://PROJECT_ID-job-primegen-TIMESTAMP/
Objekte in Ihrem Bucket auflisten:
gcloud storage ls gs://PROJECT_ID-job-primegen-TIMESTAMP/** --recursive
Ersetzen Sie
TIMESTAMP
durch den von mit dem vorherigen Befehl.Die Ausgabe sollte in etwa so aussehen: Insgesamt sechs Dateien, in denen jeweils 10.000 Primzahlen aufgelistet sind:
gs://project-name-job-primegen-TIMESTAMP/primes-1-10000.txt gs://project-name-job-primegen-TIMESTAMP/primes-10001-20000.txt gs://project-name-job-primegen-TIMESTAMP/primes-20001-30000.txt gs://project-name-job-primegen-TIMESTAMP/primes-30001-40000.txt gs://project-name-job-primegen-TIMESTAMP/primes-40001-50000.txt gs://project-name-job-primegen-TIMESTAMP/primes-50001-60000.txt
Bereinigen
Wenn Sie ein neues Projekt für diese Anleitung erstellt haben, löschen Sie das Projekt. Wenn Sie ein vorhandenes Projekt verwendet haben und es beibehalten möchten, ohne die Änderungen in dieser Anleitung hinzuzufügen, löschen Sie die für die Anleitung erstellten Ressourcen.
Projekt löschen
Am einfachsten vermeiden Sie weitere Kosten durch Löschen des für die Anleitung erstellten Projekts.
So löschen Sie das Projekt:
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
In dieser Anleitung erstellte Ressourcen löschen
So löschen Sie den Batchjob:
Rufen Sie zuerst den Jobnamen ab:
gcloud batch jobs list --location=us-central1
Die Ausgabe sollte in etwa so aussehen:
NAME: projects/project-name/locations/us-central1/jobs/job-primegen-TIMESTAMP STATE: SUCCEEDED
Dabei ist
job-primegen-TIMESTAMP
der Name des Batches. Job.Löschen Sie den Job:
gcloud batch jobs delete BATCH_JOB_NAME --location us-central1
So löschen Sie den Workflow:
gcloud workflows delete WORKFLOW_NAME
Löschen Sie das Container-Repository:
gcloud artifacts repositories delete REPOSITORY_NAME --location=us-central1
Cloud Build verwendet Cloud Storage zum Speichern von Build-Ressourcen. Informationen zum Löschen eines Cloud Storage-Bucket finden Sie unter Buckets löschen