Batch est un service entièrement géré qui vous permet planifier, mettre en file d'attente et exécuter traitement par lot sur des instances de machines virtuelles (VM) Compute Engine. Batch provisionne les ressources et gère la capacité pour permettre l'exécution de vos charges de travail par lot à grande échelle.
Workflows vous permet d'exécuter les services que vous dans un ordre que vous définissez et décrit à l'aide de la Syntaxe des workflows.
Dans ce tutoriel, vous allez utiliser la Connecteur de workflows pour Batch pour planifier et exécuter un job par lot qui exécute six tâches en parallèle sur deux VM Compute Engine. Utiliser à la fois Batch et Workflows vous permettent de combiner les avantages qu'ils offrent et de provisionner et orchestrer efficacement l'ensemble du processus.
Objectifs
Au cours de ce tutoriel, vous allez :- Créez un dépôt Artifact Registry pour une image de conteneur Docker.
- Obtenez le code de la charge de travail de traitement par lot sur GitHub: un exemple de programme qui génère des nombres premiers par lots de 10 000.
- Créez l'image Docker pour la charge de travail.
- Déployez et exécutez un workflow qui:
- crée un bucket Cloud Storage pour stocker les résultats de la requête générateur de nombres.
- Il programme et exécute un job par lot qui exécute le Docker en tant que six tâches en parallèle sur deux VM Compute Engine.
- Il supprime éventuellement le job Batch une fois celui-ci terminé.
- Vérifiez que les résultats sont conformes aux attentes et que les lots de nombres premiers sont stockés dans Cloud Storage.
Vous pouvez exécuter la plupart des commandes suivantes dans la console Google Cloud, ou les à l'aide de la Google Cloud CLI dans votre terminal ou dans Cloud Shell.
Coûts
Dans ce document, vous utilisez les composants facturables suivants de Google Cloud :
Obtenez une estimation des coûts en fonction de votre utilisation prévue à l'aide du simulateur de coût.
Avant de commencer
Les contraintes de sécurité définies par votre organisation peuvent vous empêcher d'effectuer les étapes suivantes. Pour obtenir des informations de dépannage, consultez la page Développer des applications dans un environnement Google Cloud limité.
Console
Dans la console Google Cloud, sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud.
Vérifiez que la facturation est activée pour votre projet Google Cloud. Découvrez comment vérifier si la facturation est activée sur un projet.
Activez Artifact Registry, Batch, Cloud Build les API Compute Engine, Workflow Executions et Workflows.
Créez un compte de service que votre workflow utilisera pour l'authentification avec d'autres services Google Cloud et attribuez-lui les rôles appropriés:
Dans la console Google Cloud, accédez à la page Créer un compte de service.
Sélectionnez votre projet.
Dans le champ Nom du compte de service, saisissez un nom. La console Google Cloud remplit le champ ID du compte de service en fonction de ce nom.
Dans le champ Description du compte de service, saisissez une description. Exemple :
Service account for tutorial
.Cliquez sur Créer et continuer.
Dans la liste Sélectionnez un rôle, filtrez les rôles suivants à attribuer au compte de service géré par l'utilisateur que vous avez créé à l'étape précédente:
- Éditeur de jobs par lot: permet de modifier des jobs Batch.
- Rédacteur de journaux: pour écrire des journaux.
- Administrateur Storage: pour contrôler les ressources Cloud Storage.
Pour ajouter des rôles supplémentaires, cliquez sur
Ajouter un autre rôle et ajoutez chaque rôle supplémentaire.Cliquez sur Continuer.
Pour terminer la création du compte, cliquez sur OK.
Attribuez le rôle d'utilisateur du compte de service IAM vers le compte de service géré par l'utilisateur créé à l'étape étape. Une fois l'API Compute Engine activée, le compte de service par défaut est le compte de service Compute Engine par défaut (
PROJECT_NUMBER[email protected]
), L'autorisation est généralement attribuée via la Rôleroles/iam.serviceAccountUser
.Sur la page Comptes de service, cliquez sur l'adresse e-mail du compte de service par défaut (
PROJECT_NUMBER[email protected]
).Cliquez sur l'onglet Autorisations.
Cliquez sur le bouton
Attribuer d'accès.Pour ajouter un compte principal, saisissez l'adresse e-mail de votre compte de service (
SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
).Dans la liste Sélectionnez un rôle, choisissez Comptes de service. > Utilisateur du compte de service.
Cliquez sur Enregistrer.
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.
Vérifiez que la facturation est activée pour votre projet Google Cloud. Découvrez comment vérifier si la facturation est activée sur un projet.
Activez Artifact Registry, Batch, Cloud Build Exécutions de workflows Compute Engine et API Workflows.
gcloud services enable artifactregistry.googleapis.com \ batch.googleapis.com \ cloudbuild.googleapis.com \ compute.googleapis.com \ workflowexecutions.googleapis.com \ workflows.googleapis.com
Créez un compte de service que votre workflow utilisera pour l'authentification avec d'autres services Google Cloud et attribuez-lui les rôles appropriés.
Créez le compte de service :
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
Remplacez
SERVICE_ACCOUNT_NAME
par le nom le compte de service.Attribuez des rôles au compte de service géré par l'utilisateur que vous avez créé dans la à l'étape précédente. Exécutez la commande ci-dessous une fois pour chacun des éléments suivants : Rôles IAM:
roles/batch.jobsEditor
: permet de modifier des jobs Batch.roles/logging.logWriter
: permet d'écrire des journaux.roles/storage.admin
: permet de contrôler les ressources Cloud Storage.
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \ --role=ROLE
Remplacez les éléments suivants :
PROJECT_ID
: ID du projet dans lequel vous avez créé le compte de serviceROLE
: rôle à accorder
Attribuez le rôle d'utilisateur du compte de service IAM compte de service vers le compte de service géré par l'utilisateur que vous avez créé à l'étape précédente. Une fois l'API Compute Engine activée, le service par défaut est le compte de service Compute Engine par défaut (
PROJECT_NUMBER[email protected]
), L'autorisation est généralement attribuée via la Rôleroles/iam.serviceAccountUser
.PROJECT_NUMBER=$(gcloud projects describe PROJECT_ID --format='value(projectNumber)') gcloud iam service-accounts add-iam-policy-binding \ [email protected] \ --member=serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/iam.serviceAccountUser
Créer un dépôt Artifact Registry
Créez un dépôt pour stocker votre image de conteneur Docker.
Console
Dans la console Google Cloud, accédez à la page Dépôts.
Cliquez sur
. Créer un dépôtSaisissez containers comme nom de dépôt.
Dans le champ Format, choisissez Docker.
Dans le champ Type d'emplacement, choisissez Région.
Dans la liste Région, sélectionnez us-central1.
Cliquez sur Créer.
gcloud
Exécutez la commande suivante :
gcloud artifacts repositories create containers \
--repository-format=docker \
--location=us-central1
Vous avez créé un dépôt Artifact Registry nommé containers
dans
Région us-central1
. Pour en savoir plus sur les régions disponibles, consultez
Emplacements Artifact Registry :
Obtenir les exemples de code
Google Cloud stocke le code source de l'application pour ce tutoriel dans GitHub. Vous pouvez cloner ce dépôt ou télécharger les exemples.
Clonez le dépôt de l'exemple d'application sur votre machine locale :
git clone https://github.com/GoogleCloudPlatform/batch-samples.git
Vous pouvez également Téléchargez les exemples dans le fichier
main.zip
. et l'extraire.Accédez au répertoire qui contient l'exemple de code :
cd batch-samples/primegen
Le code source de l'application est maintenant disponible dans votre environnement de développement.
Créer l'image Docker à l'aide de Cloud Build
Le fichier Dockerfile
contient les informations nécessaires à la compilation d'une image Docker.
à l'aide de Cloud Build. Exécutez la commande suivante pour le compiler:
gcloud builds submit \
-t us-central1-docker.pkg.dev/PROJECT_ID/containers/primegen-service:v1 PrimeGenService/
Remplacez PROJECT_ID
par l'ID de votre projet Google Cloud.
Une fois la compilation terminée, un résultat semblable aux lignes suivantes doit s'afficher:
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
À l'aide d'un Dockerfile, vous avez créé une image Docker nommée primegen-service
et
a transféré l'image vers un dépôt Artifact Registry nommé containers
.
Déployer un workflow qui planifie et exécute un job par lot
Le workflow suivant planifie et exécute un job par lot qui s'exécute un conteneur Docker sous la forme de six tâches en parallèle sur deux VM Compute Engine. La le résultat est la génération de six lots de nombres premiers, stockés dans un bucket Cloud Storage.
Console
Dans la console Google Cloud, accédez à la page Workflows.
Cliquez sur
Créer.Saisissez un nom pour le nouveau workflow, par exemple
batch-workflow
.Dans la liste Région, sélectionnez us-central1.
Sélectionnez le compte de service que vous avez créé précédemment.
Cliquez sur Suivant.
Dans l'éditeur de workflow, saisissez la définition suivante pour votre workflow:
YAML
JSON
Cliquez sur Déployer.
gcloud
Créez un fichier de code source pour votre workflow:
touch batch-workflow.JSON_OR_YAML
Remplacer
JSON_OR_YAML
paryaml
oujson
en fonction du format de votre flux de travail.Dans un éditeur de texte, copiez le workflow suivant dans votre fichier de code source:
YAML
JSON
Déployez le workflow en saisissant la commande suivante :
gcloud workflows deploy batch-workflow \ --source=batch-workflow.yaml \ --location=us-central1 \ --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
Remplacez
SERVICE_ACCOUNT_NAME
par le nom de compte de service créé précédemment.
Exécuter le workflow
L'exécution d'un workflow exécute la définition actuelle du workflow associé au workflow.
Console
Dans la console Google Cloud, accédez à la page Workflows.
Sur la page Workflows, cliquez sur le batch-workflow pour accéder à la page d'informations associée.
Sur la page Détails du workflow, cliquez sur play_arrow Exécuter.
Cliquez à nouveau sur Exécuter.
L'exécution du workflow devrait prendre quelques minutes.
Affichez les résultats du workflow dans le volet Output (Résultat).
Le résultat doit ressembler à ce qui suit :
{ "bucket": "project-name-job-primegen-TIMESTAMP", "jobId": "job-primegen-TIMESTAMP" }
gcloud
Exécutez le workflow :
gcloud workflows run batch-workflow \ --location=us-central1
L'exécution du workflow devrait prendre quelques minutes.
Vous pouvez vérifier l'état d'une exécution de longue durée.
Pour obtenir l'état de la dernière exécution terminée, exécutez la commande suivante : commande:
gcloud workflows executions describe-last
Les résultats doivent ressembler à ce qui suit:
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
Lister les objets du bucket de sortie
Vous pouvez vérifier que les résultats sont conformes à vos attentes en répertoriant les objets dans votre bucket de sortie Cloud Storage.
Console
- Dans la console Google Cloud, accédez à la page Buckets Cloud Storage.
Dans la liste des buckets, cliquez sur le nom du bucket dont vous souhaitez afficher le contenu.
Les résultats devraient ressembler à ce qui suit, avec six fichiers au total, avec chacune un lot de 10 000 nombres premiers:
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
Récupérez le nom de votre bucket de sortie :
gcloud storage ls
Le résultat ressemble à ce qui suit :
gs://PROJECT_ID-job-primegen-TIMESTAMP/
Listez les objets d'un bucket :
gcloud storage ls gs://PROJECT_ID-job-primegen-TIMESTAMP/** --recursive
Remplacez
TIMESTAMP
par l'horodatage renvoyé par la commande précédente.Le résultat doit ressembler à ce qui suit, avec six fichiers au total : avec chacune un lot de 10 000 nombres premiers:
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
Effectuer un nettoyage
Si vous avez créé un projet pour ce tutoriel, supprimez-le. Si vous avez utilisé un projet existant et que vous souhaitez le conserver sans les modifications du présent tutoriel, supprimez les ressources créées pour ce tutoriel.
Supprimer le projet
Le moyen le plus simple d'empêcher la facturation est de supprimer le projet que vous avez créé pour ce tutoriel.
Pour supprimer le projet :
- Dans la console Google Cloud, accédez à la page Gérer les ressources.
- Dans la liste des projets, sélectionnez le projet que vous souhaitez supprimer, puis cliquez sur Supprimer.
- Dans la boîte de dialogue, saisissez l'ID du projet, puis cliquez sur Arrêter pour supprimer le projet.
Supprimer les ressources créées dans ce tutoriel
Supprimez le job Batch:
Commencez par récupérer le nom du job:
gcloud batch jobs list --location=us-central1
La sortie devrait ressembler à ce qui suit :
NAME: projects/project-name/locations/us-central1/jobs/job-primegen-TIMESTAMP STATE: SUCCEEDED
Où
job-primegen-TIMESTAMP
est le nom du lot. tâche.Supprimez le job:
gcloud batch jobs delete BATCH_JOB_NAME --location us-central1
Supprimez le workflow:
gcloud workflows delete WORKFLOW_NAME
Supprimez le dépôt de conteneurs:
gcloud artifacts repositories delete REPOSITORY_NAME --location=us-central1
Cloud Build utilise Cloud Storage pour stocker les ressources de compilation. Pour supprimer un bucket Cloud Storage, consultez Supprimez des buckets.