Ejecutar un trabajo de Batch con Workflows


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.

Objetivos

En este tutorial, aprenderás a hacer lo siguiente:

  1. Crea un repositorio de Artifact Registry para una imagen de contenedor Docker.
  2. Obtén el código de la carga de trabajo de procesamiento por lotes de GitHub: un programa de ejemplo que genera números primos en lotes de 10.000.
  3. Compila la imagen de Docker de la carga de trabajo.
  4. Despliega y ejecuta un flujo de trabajo que haga lo siguiente:
    1. Crea un segmento de Cloud Storage para almacenar los resultados del generador de números primos.
    2. Programa y ejecuta una tarea de Batch que ejecuta el contenedor Docker como seis tareas en paralelo en dos máquinas virtuales de Compute Engine.
    3. Elimina la tarea de Batch de forma opcional una vez que se haya completado.
  5. 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 Google Cloud consola o todos los comandos mediante la CLI de Google Cloud en tu terminal o en Cloud Shell.

Costes

En este documento, se utilizan los siguientes componentes facturables de Google Cloud:

Para generar una estimación de costes basada en el uso previsto, utiliza la calculadora de precios.

Los usuarios nuevos Google Cloud pueden disfrutar de una prueba gratuita.

Antes de empezar

Es posible que las restricciones de seguridad definidas por tu organización te impidan completar los siguientes pasos. Para obtener información sobre cómo solucionar problemas, consulta el artículo Desarrollar aplicaciones en un entorno limitado Google Cloud .

Consola

  1. En la Google Cloud consola, en la página del selector de proyectos, selecciona o crea un Google Cloud proyecto.

    Ir al selector de proyectos

  2. Comprueba que la facturación esté habilitada en tu Google Cloud proyecto. Consulta cómo comprobar si la facturación está habilitada en un proyecto.

  3. Habilita las APIs Artifact Registry, Batch, Cloud Build, Compute Engine, Workflow Executions y Workflows.

    Habilita las APIs

  4. Crea una cuenta de servicio para que tu flujo de trabajo la use para autenticarse con otros servicios de Google Cloud y concédele los roles adecuados:

    1. En la Google Cloud consola, ve a la página Crear cuenta de servicio.

      Ir a Crear cuenta de servicio

    2. Selecciona el proyecto.

    3. En el campo Nombre de cuenta de servicio, escribe un nombre. La Google Cloud consola rellena el campo ID de cuenta de servicio con este nombre.

      En el campo Descripción de la cuenta de servicio, escribe una descripción. Por ejemplo, Service account for tutorial.

    4. Haz clic en Crear y continuar.

    5. En la lista Selecciona un rol, filtra los siguientes roles para asignarlos a la cuenta de servicio gestionada por el usuario que has creado en el paso anterior:

      • Editor de tareas por lotes: para editar tareas por lotes.
      • Editor de registros: para escribir registros.
      • Administrador de almacenamiento: para controlar los recursos de Cloud Storage.

      Para añadir más roles, haz clic en Añadir otro rol y añade cada rol adicional.

    6. Haz clic en Continuar.

    7. Para terminar de crear la cuenta, haga clic en Hecho.

  5. Asigna el rol Usuario de cuenta de servicio de IAM en la cuenta de servicio predeterminada a la cuenta de servicio gestionada por el usuario que has creado en el paso anterior. Después de habilitar la API 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 se suele asignar a través del rol roles/iam.serviceAccountUser.

    .
    1. En la página Cuentas de servicio, haz clic en la dirección de correo de la cuenta de servicio predeterminada (PROJECT_NUMBER-compute@developer.gserviceaccount.com).

    2. Haz clic en la pestaña Permisos.

    3. Haz clic en el botón Conceder acceso.

    4. Para añadir un nuevo principal, introduce la dirección de correo de tu cuenta de servicio (SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com).

    5. En la lista Seleccionar un rol, selecciona el rol Cuentas de servicio > Usuario de cuenta de servicio.

    6. Haz clic en Guardar.

gcloud

  1. In the Google Cloud console, activate Cloud Shell.

    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.

  2. Comprueba que la facturación esté habilitada en tu Google Cloud proyecto. Consulta cómo comprobar si la facturación está habilitada en un proyecto.

  3. Habilita las APIs Artifact Registry, Batch, Cloud Build, Compute Engine Workflow Executions y Workflows.

    gcloud services enable artifactregistry.googleapis.com \
      batch.googleapis.com \
      cloudbuild.googleapis.com \
      compute.googleapis.com \
      workflowexecutions.googleapis.com \
      workflows.googleapis.com
  4. Crea una cuenta de servicio para que tu flujo de trabajo la use para autenticarse con otros servicios de Google Cloud y concédele los roles adecuados.

    1. Crea la cuenta de servicio:

      gcloud iam service-accounts create SERVICE_ACCOUNT_NAME

      Sustituye SERVICE_ACCOUNT_NAME por el nombre de la cuenta de servicio.

    2. Asigna roles a la cuenta de servicio gestionada por el usuario que has creado en el paso anterior. Ejecuta el siguiente comando una vez por cada uno de los siguientes roles de gestión de identidades y accesos:

      • roles/batch.jobsEditor: para editar trabajos por lotes.
      • roles/logging.logWriter: para escribir registros.
      • roles/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

      Haz los cambios siguientes:

      • PROJECT_ID: el ID del proyecto en el que has creado la cuenta de servicio
      • ROLE: el rol que se va a conceder
  5. Asigna el rol Usuario de cuenta de servicio de IAM en la cuenta de servicio predeterminada a la cuenta de servicio gestionada por el usuario que has creado en el paso anterior. Después de habilitar la API 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 se suele asignar a través del rol roles/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

Crear un repositorio de Artifact Registry

Crea un repositorio para almacenar tu imagen de contenedor Docker.

Consola

  1. En la Google Cloud consola, ve a la página Repositorios.

    Ir a Repositorios

  2. Haz clic en Crear repositorio.

  3. Introduce containers como nombre del repositorio.

  4. En Formato, elige Docker.

  5. En Tipo de ubicación, elige Región.

  6. En la lista Región, selecciona us-central1.

  7. 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.

  1. 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.

  2. 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 enviado la imagen a 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

  1. En la Google Cloud consola, ve a la página Flujos de trabajo.

    Ve a Workflows

  2. Haz clic en Crear.

  3. Escribe un nombre para el nuevo flujo de trabajo, como batch-workflow.

  4. En la lista Región, selecciona us-central1.

  5. Selecciona la cuenta de servicio que has creado anteriormente.

  6. Haz clic en Siguiente.

  7. En el editor del flujo de trabajo, introduce la siguiente definición para tu flujo de trabajo:

    YAML

    main:
      params: [args]
      steps:
        - init:
            assign:
              - projectId: ${sys.get_env("GOOGLE_CLOUD_PROJECT_ID")}
              - region: "us-central1"
              - imageUri: ${region + "-docker.pkg.dev/" + projectId + "/containers/primegen-service:v1"}
              - jobId: ${"job-primegen-" + string(int(sys.now()))}
              - bucket: ${projectId + "-" + jobId}
        - createBucket:
            call: googleapis.storage.v1.buckets.insert
            args:
              query:
                project: ${projectId}
              body:
                name: ${bucket}
        - logCreateBucket:
            call: sys.log
            args:
              data: ${"Created bucket " + bucket}
        - logCreateBatchJob:
            call: sys.log
            args:
              data: ${"Creating and running the batch job " + jobId}
        - createAndRunBatchJob:
            call: googleapis.batch.v1.projects.locations.jobs.create
            args:
                parent: ${"projects/" + projectId + "/locations/" + region}
                jobId: ${jobId}
                body:
                  taskGroups:
                    taskSpec:
                      runnables:
                        - container:
                            imageUri: ${imageUri}
                          environment:
                            variables:
                              BUCKET: ${bucket}
                    # Run 6 tasks on 2 VMs
                    taskCount: 6
                    parallelism: 2
                  logsPolicy:
                    destination: CLOUD_LOGGING
            result: createAndRunBatchJobResponse
        # You can delete the batch job or keep it for debugging
        - logDeleteBatchJob:
            call: sys.log
            args:
              data: ${"Deleting the batch job " + jobId}
        - deleteBatchJob:
            call: googleapis.batch.v1.projects.locations.jobs.delete
            args:
                name: ${"projects/" + projectId + "/locations/" + region + "/jobs/" + jobId}
            result: deleteResult
        - returnResult:
            return:
              jobId: ${jobId}
              bucket: ${bucket}

    JSON

    {
      "main": {
        "params": [
          "args"
        ],
        "steps": [
          {
            "init": {
              "assign": [
                {
                  "projectId": "${sys.get_env(\"GOOGLE_CLOUD_PROJECT_ID\")}"
                },
                {
                  "region": "us-central1"
                },
                {
                  "imageUri": "${region + \"-docker.pkg.dev/\" + projectId + \"/containers/primegen-service:v1\"}"
                },
                {
                  "jobId": "${\"job-primegen-\" + string(int(sys.now()))}"
                },
                {
                  "bucket": "${projectId + \"-\" + jobId}"
                }
              ]
            }
          },
          {
            "createBucket": {
              "call": "googleapis.storage.v1.buckets.insert",
              "args": {
                "query": {
                  "project": "${projectId}"
                },
                "body": {
                  "name": "${bucket}"
                }
              }
            }
          },
          {
            "logCreateBucket": {
              "call": "sys.log",
              "args": {
                "data": "${\"Created bucket \" + bucket}"
              }
            }
          },
          {
            "logCreateBatchJob": {
              "call": "sys.log",
              "args": {
                "data": "${\"Creating and running the batch job \" + jobId}"
              }
            }
          },
          {
            "createAndRunBatchJob": {
              "call": "googleapis.batch.v1.projects.locations.jobs.create",
              "args": {
                "parent": "${\"projects/\" + projectId + \"/locations/\" + region}",
                "jobId": "${jobId}",
                "body": {
                  "taskGroups": {
                    "taskSpec": {
                      "runnables": [
                        {
                          "container": {
                            "imageUri": "${imageUri}"
                          },
                          "environment": {
                            "variables": {
                              "BUCKET": "${bucket}"
                            }
                          }
                        }
                      ]
                    },
                    "taskCount": 6,
                    "parallelism": 2
                  },
                  "logsPolicy": {
                    "destination": "CLOUD_LOGGING"
                  }
                }
              },
              "result": "createAndRunBatchJobResponse"
            }
          },
          {
            "logDeleteBatchJob": {
              "call": "sys.log",
              "args": {
                "data": "${\"Deleting the batch job \" + jobId}"
              }
            }
          },
          {
            "deleteBatchJob": {
              "call": "googleapis.batch.v1.projects.locations.jobs.delete",
              "args": {
                "name": "${\"projects/\" + projectId + \"/locations/\" + region + \"/jobs/\" + jobId}"
              },
              "result": "deleteResult"
            }
          },
          {
            "returnResult": {
              "return": {
                "jobId": "${jobId}",
                "bucket": "${bucket}"
              }
            }
          }
        ]
      }
    }
    
  8. Haz clic en Desplegar.

gcloud

  1. Crea un archivo de código fuente para tu flujo de trabajo:

    touch batch-workflow.JSON_OR_YAML

    Sustituye JSON_OR_YAML por yaml o json en función del formato de tu flujo de trabajo.

  2. En un editor de texto, copia el siguiente flujo de trabajo en tu archivo de código fuente:

    YAML

    main:
      params: [args]
      steps:
        - init:
            assign:
              - projectId: ${sys.get_env("GOOGLE_CLOUD_PROJECT_ID")}
              - region: "us-central1"
              - imageUri: ${region + "-docker.pkg.dev/" + projectId + "/containers/primegen-service:v1"}
              - jobId: ${"job-primegen-" + string(int(sys.now()))}
              - bucket: ${projectId + "-" + jobId}
        - createBucket:
            call: googleapis.storage.v1.buckets.insert
            args:
              query:
                project: ${projectId}
              body:
                name: ${bucket}
        - logCreateBucket:
            call: sys.log
            args:
              data: ${"Created bucket " + bucket}
        - logCreateBatchJob:
            call: sys.log
            args:
              data: ${"Creating and running the batch job " + jobId}
        - createAndRunBatchJob:
            call: googleapis.batch.v1.projects.locations.jobs.create
            args:
                parent: ${"projects/" + projectId + "/locations/" + region}
                jobId: ${jobId}
                body:
                  taskGroups:
                    taskSpec:
                      runnables:
                        - container:
                            imageUri: ${imageUri}
                          environment:
                            variables:
                              BUCKET: ${bucket}
                    # Run 6 tasks on 2 VMs
                    taskCount: 6
                    parallelism: 2
                  logsPolicy:
                    destination: CLOUD_LOGGING
            result: createAndRunBatchJobResponse
        # You can delete the batch job or keep it for debugging
        - logDeleteBatchJob:
            call: sys.log
            args:
              data: ${"Deleting the batch job " + jobId}
        - deleteBatchJob:
            call: googleapis.batch.v1.projects.locations.jobs.delete
            args:
                name: ${"projects/" + projectId + "/locations/" + region + "/jobs/" + jobId}
            result: deleteResult
        - returnResult:
            return:
              jobId: ${jobId}
              bucket: ${bucket}

    JSON

    {
      "main": {
        "params": [
          "args"
        ],
        "steps": [
          {
            "init": {
              "assign": [
                {
                  "projectId": "${sys.get_env(\"GOOGLE_CLOUD_PROJECT_ID\")}"
                },
                {
                  "region": "us-central1"
                },
                {
                  "imageUri": "${region + \"-docker.pkg.dev/\" + projectId + \"/containers/primegen-service:v1\"}"
                },
                {
                  "jobId": "${\"job-primegen-\" + string(int(sys.now()))}"
                },
                {
                  "bucket": "${projectId + \"-\" + jobId}"
                }
              ]
            }
          },
          {
            "createBucket": {
              "call": "googleapis.storage.v1.buckets.insert",
              "args": {
                "query": {
                  "project": "${projectId}"
                },
                "body": {
                  "name": "${bucket}"
                }
              }
            }
          },
          {
            "logCreateBucket": {
              "call": "sys.log",
              "args": {
                "data": "${\"Created bucket \" + bucket}"
              }
            }
          },
          {
            "logCreateBatchJob": {
              "call": "sys.log",
              "args": {
                "data": "${\"Creating and running the batch job \" + jobId}"
              }
            }
          },
          {
            "createAndRunBatchJob": {
              "call": "googleapis.batch.v1.projects.locations.jobs.create",
              "args": {
                "parent": "${\"projects/\" + projectId + \"/locations/\" + region}",
                "jobId": "${jobId}",
                "body": {
                  "taskGroups": {
                    "taskSpec": {
                      "runnables": [
                        {
                          "container": {
                            "imageUri": "${imageUri}"
                          },
                          "environment": {
                            "variables": {
                              "BUCKET": "${bucket}"
                            }
                          }
                        }
                      ]
                    },
                    "taskCount": 6,
                    "parallelism": 2
                  },
                  "logsPolicy": {
                    "destination": "CLOUD_LOGGING"
                  }
                }
              },
              "result": "createAndRunBatchJobResponse"
            }
          },
          {
            "logDeleteBatchJob": {
              "call": "sys.log",
              "args": {
                "data": "${\"Deleting the batch job \" + jobId}"
              }
            }
          },
          {
            "deleteBatchJob": {
              "call": "googleapis.batch.v1.projects.locations.jobs.delete",
              "args": {
                "name": "${\"projects/\" + projectId + \"/locations/\" + region + \"/jobs/\" + jobId}"
              },
              "result": "deleteResult"
            }
          },
          {
            "returnResult": {
              "return": {
                "jobId": "${jobId}",
                "bucket": "${bucket}"
              }
            }
          }
        ]
      }
    }
    
  3. 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

  1. En la Google Cloud consola, ve a la página Flujos de trabajo.

    Ve a Workflows

  2. En la página Workflows (Flujos de trabajo), haz clic en el flujo de trabajo batch-workflow (flujo de trabajo por lotes) para ir a su página de detalles.

  3. En la página Detalles del flujo de trabajo, haz clic en Ejecutar.

  4. Vuelve a hacer clic en Ejecutar.

    La ejecución del flujo de trabajo debería tardar unos minutos.

  5. 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

  1. 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.

  2. Puedes consultar el estado de una ejecución de larga duración.

  3. 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 del segmento de salida de Cloud Storage.

Consola

  1. En la Google Cloud consola, ve a la página Segmentos de Cloud Storage.

    Ir a Contenedores

  2. 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

  1. Recupera el nombre del segmento de salida:

    gcloud storage ls

    El resultado debería ser similar al siguiente:

    gs://PROJECT_ID-job-primegen-TIMESTAMP/

  2. 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
    

Limpieza

Si has creado un proyecto para este tutorial, elimínalo. Si has usado un proyecto y quieres conservarlo sin los cambios que se han añadido en este tutorial, elimina los recursos creados para el tutorial.

Eliminar el proyecto

La forma más fácil de evitar que te cobren es eliminar el proyecto que has creado para el tutorial.

Para ello, sigue las instrucciones que aparecen a continuación:

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

Eliminar los recursos creados en este tutorial

  1. Elimina el trabajo por lotes:

    1. Primero, recupera el nombre del trabajo:

      gcloud batch jobs list --location=us-central1

      La salida debería ser similar a la siguiente:

      NAME: projects/project-name/locations/us-central1/jobs/job-primegen-TIMESTAMP
      STATE: SUCCEEDED
      

      Donde job-primegen-TIMESTAMP es el nombre del trabajo por lotes.

    2. Elimina el trabajo:

      gcloud batch jobs delete BATCH_JOB_NAME --location us-central1
  2. Elimina el flujo de trabajo:

    gcloud workflows delete WORKFLOW_NAME
  3. Elimina el repositorio de contenedores:

    gcloud artifacts repositories delete REPOSITORY_NAME --location=us-central1
  4. Cloud Build usa Cloud Storage para almacenar recursos de compilación. Para eliminar un segmento de Cloud Storage, consulta Eliminar segmentos.

Siguientes pasos