Batch es un servicio totalmente gestionado que te permite programar, poner en cola y ejecutar cargas de trabajo de procesamiento por lotes en instancias de máquina virtual de Compute Engine. Batch aprovisiona recursos y gestiona la capacidad en tu nombre, lo que permite que tus 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 tutorial, usarás el conector de Workflows para Batch para programar y ejecutar un trabajo de Batch que ejecute seis tareas en paralelo en dos VMs de Compute Engine. Si usas tanto Batch como Workflows, podrás combinar las ventajas que ofrecen y aprovisionar y orquestar todo el proceso de forma eficiente.
Crear un repositorio de Artifact Registry
Crea un repositorio para almacenar tu imagen de contenedor Docker.
Consola
En la Google Cloud consola, ve a la página Repositorios.
Haz clic en
Crear repositorio.Introduce 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
Has creado 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.
Obtener los códigos de ejemplo
Google Cloud almacena el código fuente de la aplicación de este tutorial en GitHub. Puedes clonar ese repositorio o descargar las muestras.
Clona el repositorio de aplicaciones de muestra en la máquina local:
git clone https://github.com/GoogleCloudPlatform/batch-samples.git
También puedes descargar las muestras en el archivo
main.zip
y extraerlo.Accede 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.
Compilar la imagen Docker con Cloud Build
El archivo Dockerfile
contiene la información necesaria para crear 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/
Sustituye PROJECT_ID
por el ID de tu proyecto. Google Cloud
Cuando se haya completado la compilación, debería 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, has creado una imagen Docker llamada primegen-service
y has insertado la imagen en un repositorio de Artifact Registry llamado containers
.
Desplegar un flujo de trabajo que programe y ejecute una tarea de Batch
El siguiente flujo de trabajo programa y ejecuta una tarea de Batch que ejecuta un contenedor Docker como seis tareas en paralelo en dos máquinas virtuales de Compute Engine. El resultado es la generación de seis lotes de números primos, almacenados en un segmento de Cloud Storage.
Consola
En la Google Cloud consola, ve a la página Flujos de trabajo.
Haz clic en
Crear.Escribe un nombre para el nuevo flujo de trabajo, como
batch-workflow
.En la lista Región, selecciona us-central1.
Selecciona la cuenta de servicio que has creado anteriormente.
Haz clic en Siguiente.
En el editor del flujo de trabajo, introduce la siguiente definición para tu flujo de trabajo:
YAML
JSON
Haz clic en Desplegar.
gcloud
Crea un archivo de código fuente para tu flujo de trabajo:
touch batch-workflow.JSON_OR_YAML
Sustituye
JSON_OR_YAML
poryaml
ojson
en función del 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 desplegar el flujo de trabajo, introduce 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
Sustituye
SERVICE_ACCOUNT_NAME
por el nombre de la cuenta de servicio que has creado anteriormente.
Ejecutar el flujo de trabajo
Al ejecutar un flujo de trabajo, se ejecuta la definición del flujo de trabajo actual asociada al flujo de trabajo.
Consola
En la Google Cloud consola, ve a la página Flujos de trabajo.
En la página Flujos de trabajo, haz clic en el flujo de trabajo batch-workflow para ir a su página de detalles.
En la página Detalles del flujo de trabajo, haz clic en play_arrow Ejecutar.
Vuelve a hacer clic en Ejecutar.
La ejecución del flujo de trabajo debería tardar unos minutos.
Consulta los resultados del flujo de trabajo en el panel Información.
Los resultados deberían ser similares a los siguientes:
{ "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 consultar el estado de una ejecución de larga duración.
Para obtener el estado de la última ejecución completada, 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
Mostrar los objetos del segmento de salida
Para confirmar que los resultados son los esperados, enumera los objetos de tu segmento de salida de Cloud Storage.
Consola
- En la Google Cloud consola, ve a la página Segmentos de Cloud Storage.
En la lista de segmentos, haga clic en el nombre del segmento cuyo contenido quiera ver.
Los resultados deberían ser similares a los siguientes, con seis archivos en total y 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 del segmento de salida:
gcloud storage ls
El resultado debería ser similar al siguiente:
gs://PROJECT_ID-job-primegen-TIMESTAMP/
Lista los objetos del segmento de salida:
gcloud storage ls gs://PROJECT_ID-job-primegen-TIMESTAMP/** --recursive
Sustituye
TIMESTAMP
por la marca de tiempo devuelta por el comando anterior.La salida debería ser similar a la siguiente, con seis archivos en total, y cada uno de ellos 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