Ejecuta un trabajo por lotes con Workflows


Batch es un servicio completamente administrado que te permite programar, poner en cola y ejecutar procesamiento por lotes cargas de trabajo en instancias de máquina virtual (VM) de Compute Engine. Batch aprovisiona recursos y administra la capacidad en tu lo que permite que tus cargas de trabajo por lotes se ejecuten a gran escala.

Workflows te permite ejecutar los servicios que que necesites en el orden que definas describiendo Sintaxis de flujos de trabajo.

En este instructivo, usarás la Conector de flujos de trabajo para Batch programar y ejecutar un trabajo por lotes que ejecute seis tareas en en paralelo en dos VMs de Compute Engine. Usa Batch y Workflows te permite combinar las ventajas que ofrecen y aprovisione y organice todo el proceso de forma eficiente.

Objetivos

En este instructivo, realizarás las siguientes acciones:

  1. Crea un repositorio de Artifact Registry para una imagen de contenedor de Docker.
  2. 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.
  3. Compilar la imagen de Docker para la carga de trabajo
  4. Implementa y ejecuta un flujo de trabajo que haga lo siguiente:
    1. Crea un bucket de Cloud Storage para almacenar los resultados de la instancia principal. generador de números.
    2. Programa y ejecuta un trabajo por lotes que ejecute el Docker. contenedor como seis tareas en paralelo en dos VMs de Compute Engine.
    3. De manera opcional, borra el trabajo por lotes después de que se complete.
  5. Confirma que los resultados sean los esperados y que los lotes de los números primos se almacenan en Cloud Storage.

Puedes ejecutar la mayoría de los siguientes comandos en la consola de Google Cloud o ejecutar todos los comandos con Google Cloud CLI en tu 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. Es posible que los usuarios nuevos de Google Cloud califiquen para obtener una prueba gratuita.

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

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

    Ir al selector de proyectos

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

  3. Habilita Artifact Registry, Batch, Cloud Build, Compute Engine, Ejecuciones de flujos de trabajo y APIs de Workflows.

    Habilita las API

  4. Crea una cuenta de servicio para que tu flujo de trabajo la use como autenticación con otros servicios de Google Cloud y otorgarle los roles adecuados:

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

      Ve a Crear cuenta de servicio

    2. Elige tu proyecto.

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

    4. Haz clic en Crear y continuar.

    5. En la lista Seleccionar un rol, filtra los siguientes roles para otorgar. a la cuenta de servicio administrada por el usuario que creaste en el paso anterior:

      • Editor de trabajos por lotes: Permite editar trabajos por lotes.
      • Escritor de registros: se usa para escribir registros.
      • Administrador de almacenamiento: Controla los recursos de Cloud Storage.

      Para obtener roles adicionales, haz clic en Agregar otro rol y agrega cada rol adicional.

    6. Haga clic en Continuar.

    7. Para terminar de crear la cuenta, haz clic en Listo.

  5. Otorga el rol Usuario de cuenta de servicio de IAM en de servicio a la cuenta de servicio administrada por el usuario que se creó paso. 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 generalmente se asigna a través del Rol roles/iam.serviceAccountUser.

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

    2. Haz clic en la pestaña Permisos.

    3. Haz clic en el otorgamiento . de acceso directo.

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

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

    6. Haz clic en Guardar.

gcloud

  1. En la consola de Google Cloud, activa Cloud Shell.

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

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

  3. Habilita Artifact Registry, Batch, Cloud Build, Ejecuciones de flujos de trabajo de Compute Engine y APIs de 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 como autenticación con otros servicios de Google Cloud y otorgarle los roles adecuados.

    1. Cree la cuenta de servicio:

      gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
      

      Reemplaza SERVICE_ACCOUNT_NAME por un nombre para la cuenta de servicio.

    2. 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 uno de los siguientes elementos: Roles de IAM:

      • roles/batch.jobsEditor: Permite 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
      

      Reemplaza lo siguiente:

      • PROJECT_ID: Es el ID del proyecto en el que creaste. la cuenta de servicio
      • ROLE: el rol a otorgar
  5. Otorga el rol Usuario de cuenta de servicio de IAM en de servicio a la cuenta de servicio administrada por el usuario que creaste en el paso anterior. Después de habilitar la API de Compute Engine, el servicio es la cuenta de servicio predeterminada de Compute Engine (PROJECT_NUMBER-compute@developer.gserviceaccount.com), y el permiso generalmente se asigna 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
    

Crea un repositorio de Artifact Registry

Crear un repositorio para almacenar tu imagen de contenedor de Docker

Console

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

    Ir a Repositorios

  2. Haz clic en . Crear repositorio.

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

Creaste un repositorio de Artifact Registry con el nombre containers en la us-central1 región. 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.

  1. 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 descarga las muestras del archivo main.zip y extraerlo.

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

Dockerfile contiene la información necesaria para compilar una imagen de Docker. con Cloud Build. Ejecuta el siguiente comando para compilarla:

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 y envió la imagen a un repositorio de Artifact Registry con el nombre 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 se ejecuta un contenedor de Docker como seis tareas en paralelo en dos VMs de Compute Engine. El resultado es la generación de seis lotes de números primos, almacenados en un bucket de Cloud Storage.

Console

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

    Ir a Workflows

  2. Haz clic en  Crear.

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

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

  5. Selecciona la Cuenta de servicio que creaste con anterioridad.

  6. Haz clic en Siguiente.

  7. En el editor de flujos de trabajo, ingresa 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. Haga clic en Implementar.

gcloud

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

    touch batch-workflow.JSON_OR_YAML
    

    Reemplaza JSON_OR_YAML por yaml o json. según el 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 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 previamente.

Ejecuta el flujo de trabajo

Cuando se ejecuta un flujo de trabajo, se ejecuta la definición del flujo de trabajo actual asociada con el en el flujo de trabajo.

Console

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

    Ir a Workflows

  2. En la página Flujos de trabajo, haz clic en el batch-workflow para ir a la página de detalles.

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

  4. Haz clic de nuevo en Ejecutar.

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

  5. Observa los resultados del flujo de trabajo en el panel Output.

    Los resultados debería ser similar al siguiente:

    {
      "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 Verificar 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
    

Genera una lista de los objetos del bucket de salida

Puedes confirmar que los resultados son los esperados con una lista de los objetos de tu Bucket de salida de Cloud Storage.

Console

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

    Ir a Buckets

  2. 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: y cada una enumera 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 de tu bucket de salida:

    gcloud storage ls

    El resultado es similar al siguiente:

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

  2. Genera una lista de los objetos de tu bucket de salida:

    gcloud storage ls gs://PROJECT_ID-job-primegen-TIMESTAMP/** --recursive

    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: y cada una enumera 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, sigue estos pasos:

  1. En la consola de Google Cloud, ve a la página Administrar recursos.

    Ir a Administrar recursos

  2. En la lista de proyectos, elige el proyecto que quieres borrar y haz clic en Borrar.
  3. 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

  1. Borra el trabajo por lotes:

    1. 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 que job-primegen-TIMESTAMP es el nombre del lote el trabajo.

    2. Borra el trabajo:

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

    gcloud workflows delete WORKFLOW_NAME
    
  3. Borra el repositorio del contenedor:

    gcloud artifacts repositories delete REPOSITORY_NAME --location=us-central1
    
  4. Cloud Build usa Cloud Storage para almacenar recursos de compilación. Para borrar un bucket de Cloud Storage, consulta Borra buckets.

¿Qué sigue?