Batch es un servicio completamente administrado que te permite programar, poner en cola y ejecutar cargas de trabajo de procesamiento por lotes en instancias de máquina virtual (VM) de Compute Engine. Batch aprovisiona recursos y administra la capacidad en tu nombre, lo que permite que las cargas de trabajo por lotes se ejecuten a gran escala.
Workflows te permite ejecutar los servicios que necesitas en el orden que definas mediante la sintaxis de Workflows.
En este instructivo, usarás el conector de flujos de trabajo para Batch a fin de programar y ejecutar un trabajo por lotes que ejecute seis tareas en paralelo en dos VM de Compute Engine. Usar Batch y Workflows te permite combinar las ventajas que ofrecen, y aprovisionar y organizar de manera eficiente el proceso completo.
Objetivos
En este instructivo, realizarás las siguientes acciones:- Crea un repositorio de Artifact Registry para una imagen de contenedor de Docker.
- Obtén el código para la carga de trabajo de procesamiento por lotes de GitHub, un programa de muestra que genera números primos en lotes de 10,000.
- Compilar la imagen de Docker para la carga de trabajo
- Implementar y ejecutar un flujo de trabajo que realice las siguientes acciones:
- Crea un bucket de Cloud Storage para almacenar los resultados del generador de números primos.
- Programa y ejecuta un trabajo por lotes que ejecuta el contenedor de Docker como seis tareas en paralelo en dos VM de Compute Engine.
- De forma opcional, borra el trabajo por lotes después de que se haya completado.
- Confirma que los resultados son los esperados y que los lotes de números primos generados se almacenan en Cloud Storage.
Puedes ejecutar la mayoría de los siguientes comandos en la consola de Google Cloud o todos usando Google Cloud CLI en la terminal o en Cloud Shell.
Costos
En este documento, usarás los siguientes componentes facturables de Google Cloud:
Para generar una estimación de costos en función del uso previsto, usa la calculadora de precios.
Antes de comenzar
Es posible que las restricciones de seguridad que define tu organización no te permitan completar los siguientes pasos. Para obtener información sobre la solución de problemas, consulta Desarrolla aplicaciones en un entorno de Google Cloud restringido.
Console
En la página del selector de proyectos de la consola de Google Cloud, elige o crea un proyecto de Google Cloud.
Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud. Obtén información sobre cómo verificar si la facturación está habilitada en un proyecto.
Habilita las APIs de Artifact Registry, Batch, Cloud Build, Compute Engine, Workflow Executions y Workflows.
Crea una cuenta de servicio para que tu flujo de trabajo la use en la autenticación con otros servicios de Google Cloud y otórgale los roles adecuados:
En la consola de Google Cloud, ve a la página Crear cuenta de servicio.
Elige tu proyecto.
Escribe un nombre en el campo Nombre de cuenta de servicio. La consola de Google Cloud completa el campo ID de la cuenta de servicio en función de este nombre.
Opcional: en el campo Descripción de la cuenta de servicio, escribe una descripción. Por ejemplo,
Service account for tutorial
.Haz clic en Crear y continuar.
En la lista Seleccionar una función, filtra según las siguientes funciones que se otorgarán a la cuenta de servicio administrada por el usuario que creaste en el paso anterior:
- Editor de trabajos por lotes: Para editar trabajos por lotes.
- Escritor de registros: Para escribir registros
- Administrador de almacenamiento: Para controlar los recursos de Cloud Storage.
Para obtener roles adicionales, haz clic en
Agregar otro rol y agrega cada rol adicional.Haz clic en Continuar.
Para terminar de crear la cuenta, haz clic en Listo.
Otorga la función de usuario de cuenta de servicio de IAM en la cuenta de servicio predeterminada a la cuenta de servicio administrada por el usuario que se creó en el paso anterior. Después de habilitar la API de Compute Engine, la cuenta de servicio predeterminada es la cuenta de servicio predeterminada de Compute Engine (
PROJECT_NUMBER-compute@developer.gserviceaccount.com
) y, por lo general, el permiso se asigna a través de la funciónroles/iam.serviceAccountUser
.En la página Cuentas de servicio, haz clic en la dirección de correo electrónico de la cuenta de servicio predeterminada (
PROJECT_NUMBER-compute@developer.gserviceaccount.com
).Haz clic en la pestaña Permisos.
Haz clic en el botón
Otorgar acceso.Para agregar una principal nueva, ingresa la dirección de correo electrónico de tu cuenta de servicio (
SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
).En la lista Selecciona un rol, elige el rol Cuentas de servicio > Usuario de cuenta de servicio.
Haz clic en Guardar.
gcloud
En la consola de Google Cloud, activa Cloud Shell.
En la parte inferior de la consola de Google Cloud, se inicia una sesión de Cloud Shell en la que se muestra una ventana de línea de comandos. Cloud Shell es un entorno de shell con Google Cloud CLI ya instalada y con valores ya establecidos para el proyecto actual. La sesión puede tardar unos segundos en inicializarse.
Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud. Obtén información sobre cómo verificar si la facturación está habilitada en un proyecto.
Habilita Artifact Registry, Batch, Cloud Build, las ejecuciones de flujo de trabajo de Compute Engine y las APIs de Workflows.
gcloud services enable artifactregistry.googleapis.com \ batch.googleapis.com \ cloudbuild.googleapis.com \ compute.googleapis.com \ workflowexecutions.googleapis.com \ workflows.googleapis.com
Crea una cuenta de servicio para que tu flujo de trabajo la use en la autenticación con otros servicios de Google Cloud y otórgale las funciones adecuadas.
Crea la cuenta de servicio:
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
Reemplaza
SERVICE_ACCOUNT_NAME
por un nombre para la cuenta de servicio.Otorga roles a la cuenta de servicio administrada por el usuario que creaste en el paso anterior. Ejecuta el siguiente comando una vez para cada una de las siguientes funciones de IAM:
roles/batch.jobsEditor
: Para editar trabajos por lotesroles/logging.logWriter
: Para escribir registrosroles/storage.admin
: Para controlar los recursos de Cloud Storage
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \ --role=ROLE
Reemplaza lo siguiente:
PROJECT_ID
: El ID del proyecto en el que creaste la cuenta de servicioROLE
: el rol a otorgar
Otorga la función de usuario de cuenta de servicio de IAM en la cuenta de servicio predeterminada a la cuenta de servicio administrada por el usuario que creaste en el paso anterior. Después de habilitar la API de Compute Engine, la cuenta de servicio predeterminada es la cuenta de servicio predeterminada de Compute Engine (
PROJECT_NUMBER-compute@developer.gserviceaccount.com
), y el permiso suele asignarse a través de la funciónroles/iam.serviceAccountUser
.PROJECT_NUMBER=$(gcloud projects describe PROJECT_ID --format='value(projectNumber)') gcloud iam service-accounts add-iam-policy-binding \ $PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --member=serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/iam.serviceAccountUser
Crea un repositorio de Artifact Registry
Crea un repositorio para almacenar tu imagen de contenedor de Docker.
Console
En la consola de Google Cloud, ve a la página Repositorios.
Haz clic en
Crear repositorio.Ingresa containers como nombre del repositorio.
En Formato, elige Docker.
En Tipo de ubicación, elige Región.
En la lista Región, selecciona us-central1.
Haz clic en Crear.
gcloud
Ejecuta el siguiente comando:
gcloud artifacts repositories create containers \
--repository-format=docker \
--location=us-central1
Creaste un repositorio de Artifact Registry llamado containers
en la
región us-central1
. Para obtener más información sobre las regiones admitidas, consulta
Ubicaciones de Artifact Registry.
Obtén las muestras de código
Google Cloud almacena el código fuente de la aplicación para este instructivo en GitHub. Puedes clonar ese repositorio o descargar las muestras.
Clona el repositorio de la app de muestra en tu máquina local:
git clone https://github.com/GoogleCloudPlatform/batch-samples.git
Como alternativa, puedes descargar las muestras en el archivo
main.zip
y extraerlas.Dirígete al directorio que contiene el código de muestra:
cd batch-samples/primegen
Ahora tienes el código fuente de la aplicación en tu entorno de desarrollo.
Compila la imagen de Docker con Cloud Build
El objeto Dockerfile
contiene la información necesaria para compilar una imagen de Docker con Cloud Build. Ejecuta el siguiente comando para compilarlo:
gcloud builds submit \
-t us-central1-docker.pkg.dev/PROJECT_ID/containers/primegen-service:v1 PrimeGenService/
Reemplaza PROJECT_ID
por el ID del proyecto de Google Cloud.
Cuando se complete la compilación, deberías ver un resultado similar al siguiente:
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
Con un Dockerfile, compilaste una imagen de Docker llamada primegen-service
y
enviaste la imagen a un repositorio de Artifact Registry llamado containers
.
Implementa un flujo de trabajo que programe y ejecute un trabajo por lotes
El siguiente flujo de trabajo programa y ejecuta un trabajo por lotes que ejecuta un contenedor de Docker como seis tareas en paralelo en dos VM de Compute Engine. El resultado es la generación de seis lotes de números primos, almacenados en un bucket de Cloud Storage.
Console
En la consola de Google Cloud, ve a la página Flujos de trabajo.
Haz clic en
Crear.Ingresa un nombre para el flujo de trabajo nuevo, como
batch-workflow
.En la lista Región, selecciona us-central1.
Selecciona la cuenta de servicio que creaste antes.
Haz clic en Siguiente.
En el editor de flujo de trabajo, ingresa la siguiente definición para tu flujo de trabajo:
YAML
JSON
Haz clic en Implementar.
gcloud
Crea un archivo de código fuente para tu flujo de trabajo:
touch batch-workflow.JSON_OR_YAML
Reemplaza
JSON_OR_YAML
poryaml
ojson
, según el formato de tu flujo de trabajo.En un editor de texto, copia el siguiente flujo de trabajo en tu archivo de código fuente:
YAML
JSON
Para implementar el flujo de trabajo, ingresa el siguiente comando:
gcloud workflows deploy batch-workflow \ --source=batch-workflow.yaml \ --location=us-central1 \ --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
Reemplaza
SERVICE_ACCOUNT_NAME
por el nombre de la cuenta de servicio que creaste antes.
Ejecuta el flujo de trabajo
Cuando se ejecuta un flujo de trabajo, se ejecuta la definición actual del flujo de trabajo asociada con este.
Console
En la consola de Google Cloud, ve a la página Flujos de trabajo.
En la página Flujos de trabajo, haz clic en el flujo de trabajo por lotes para ir a la página de detalles.
En la página Detalles del flujo de trabajo, haz clic en play_arrow Ejecutar.
Haz clic de nuevo en Ejecutar.
La ejecución del flujo de trabajo debería tardar unos minutos.
Visualiza los resultados del flujo de trabajo en el panel Resultado.
Los resultados debería ser similar al siguiente:
{ "bucket": "project-name-job-primegen-TIMESTAMP", "jobId": "job-primegen-TIMESTAMP" }
gcloud
Ejecuta el flujo de trabajo:
gcloud workflows run batch-workflow \ --location=us-central1
La ejecución del flujo de trabajo debería tardar unos minutos.
Puedes verificar el estado de una ejecución de larga duración.
Para obtener el estado de la última ejecución que se completó, ejecuta el siguiente comando:
gcloud workflows executions describe-last
Los resultados deberían ser similares a los siguientes:
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
Obtén una lista de los objetos en el bucket de salida
Puedes confirmar que los resultados son los esperados; para ello, enumera los objetos en tu bucket de salida de Cloud Storage.
Console
- En la consola de Google Cloud, ve a la página Buckets de Cloud Storage.
En la lista de bucket s, haz clic en el nombre del bucket que posee el contenido que deseas ver.
Los resultados deberían ser similares a los siguientes, con seis archivos en total, cada uno con un lote de 10,000 números primos:
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
Recupera el nombre de tu bucket de salida:
gsutil ls
El resultado es similar al siguiente:
gs://PROJECT_ID-job-primegen-TIMESTAMP/
Obtén una lista de los objetos en tu bucket de salida:
gsutil ls -r gs://PROJECT_ID-job-primegen-TIMESTAMP/**
Reemplaza
TIMESTAMP
por la marca de tiempo que muestra el comando anterior.El resultado debería ser similar al siguiente, con seis archivos en total, cada uno con un lote de 10,000 números primos:
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
Limpia
Si creaste un proyecto nuevo para este instructivo, bórralo. Si usaste un proyecto existente y deseas conservarlo sin los cambios que se agregaron en este instructivo, borra los recursos creados para el instructivo.
Borra el proyecto
La manera más fácil de eliminar la facturación es borrar el proyecto que creaste para el instructivo.
Para borrar el proyecto, haz lo siguiente:
- En la consola de Google Cloud, ve a la página Administrar recursos.
- En la lista de proyectos, elige el proyecto que quieres borrar y haz clic en Borrar.
- En el diálogo, escribe el ID del proyecto y, luego, haz clic en Cerrar para borrar el proyecto.
Borra los recursos que se crearon en este instructivo
Borra el trabajo por lotes:
Primero, recupera el nombre del trabajo:
gcloud batch jobs list --location=us-central1
El resultado debería ser similar al siguiente ejemplo:
NAME: projects/project-name/locations/us-central1/jobs/job-primegen-TIMESTAMP STATE: SUCCEEDED
En el ejemplo anterior,
job-primegen-TIMESTAMP
es el nombre del trabajo por lotes.Borra el trabajo:
gcloud batch jobs delete BATCH_JOB_NAME --location us-central1
Borra el flujo de trabajo:
gcloud workflows delete WORKFLOW_NAME
Borra el repositorio del contenedor:
gcloud artifacts repositories delete REPOSITORY_NAME --location=us-central1
Cloud Build usa Cloud Storage para almacenar recursos de compilación. Para borrar un bucket de Cloud Storage, consulta Borra buckets.