

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Trabajos de matrices
<a name="array_jobs"></a>

Un trabajo de matriz es un trabajo que comparte parámetros comunes, como la definición del trabajoCPUs, v y la memoria. Se ejecuta como un conjunto de trabajos básicos relacionados, pero independientes, que se pueden distribuir en varios hosts y pueden ejecutarse de forma simultánea. Los trabajos de matrices son la manera más eficiente de ejecutar trabajos que ocurren todos en paralelo, como simulaciones Monte Carlo, barridos paramétricos o grandes trabajos de representación.

AWS Batch Los trabajos de matriz se envían igual que los trabajos normales. Sin embargo, es necesario especificar un tamaño de matriz (entre 2 y 10 000) para definir la cantidad de trabajos secundarios que deberían ejecutarse en la matriz. Si envía un trabajo con un tamaño de matriz de 1 000, se ejecuta un solo trabajo que genera 1 000 trabajos secundarios. El trabajo de matriz es una referencia o un puntero para administrar todos los trabajos secundarios. Esto permite enviar grandes cargas de trabajo con una sola consulta. El tiempo de espera especificado en el parámetro `attemptDurationSeconds` se aplica a cada trabajo secundario. El trabajo de matriz principal no tiene tiempo de espera.

Al enviar un trabajo de matriz, el trabajo de matriz principal recibe un ID de AWS Batch trabajo normal. Cada trabajo secundario tiene el mismo ID base. Cada trabajo secundario tiene el mismo ID de base, pero su índice de matriz se añade al final del ID principal, por ejemplo, `example_job_ID:0` para el primer trabajo secundario de la matriz. 

El trabajo de matriz principal puede introducir un estado `SUBMITTED`, `PENDING`, `FAILED` o `SUCCEEDED`. El trabajo de matriz principal se actualiza a `PENDING` cuando se actualiza cualquier trabajo secundario a `RUNNABLE`. Para obtener más información acerca de estas dependencias, consulte [Dependencias de trabajos](job_dependencies.md).

Durante el tiempo de ejecución, la variable de entorno `AWS_BATCH_JOB_ARRAY_INDEX` se establece en el número de índice del trabajo de matriz correspondiente del contenedor. Al primer índice de trabajo de matriz se le asigna el número `0`, y los trabajos secundarios posteriores se numeran en orden ascendente (por ejemplo, 1, 2, 3, etc.). Puede utilizar este valor de índice para controlar la forma en la que se diferencian los elementos secundarios del trabajo de matriz. Para obtener más información, consulte [Uso del índice de trabajo de matriz para controlar la diferenciación de trabajos](array_index_example.md).

En las dependencias de trabajo de matriz, puede especificar un tipo para la dependencia, como, por ejemplo, `SEQUENTIAL` o `N_TO_N`. Puede especificar una dependencia de tipo `SEQUENTIAL` (sin especificar un ID de trabajo) para que cada trabajo de matriz secundario se complete de forma secuencial, comenzando a partir del índice 0. Por ejemplo, si envía un trabajo de matriz con un tamaño de matriz de 100, y especifica una dependencia de tipo `SEQUENTIAL`, se generan 100 trabajos secundarios de forma secuencial, cada uno de los cuales debe completarse correctamente para que comience el siguiente. En la ilustración siguiente se muestra Job A, un trabajo de matriz con un tamaño de matriz de 10. Cada trabajo del índice secundario de Job A depende del trabajo secundario anterior. Job A:1 no puede comenzar hasta que termine Job A:0.

![\[Flowchart showing Job-A with sequential child jobs A:0 through A:9, connected by arrows.\]](http://docs.aws.amazon.com/es_es/batch/latest/userguide/images/sequential-dep.png)


También puede especificar una dependencia de tipo `N_TO_N` con un ID de trabajo para los trabajos de matriz. De esta forma, cada índice secundario de este trabajo debe esperar a que se complete el índice secundario correspondiente de cada dependencia antes de comenzar. En la ilustración siguiente se muestran Job A y Job B, dos trabajos de matrices con un tamaño de matriz de 10 000. Cada trabajo del índice secundario de Job B depende del índice correspondiente de Job A. Job B:1 no puede comenzar hasta que termine Job A:1. 

![\[Two array jobs, Job-A and Job-B, with 10,000 indexed tasks each, showing N_TO_N dependency.\]](http://docs.aws.amazon.com/es_es/batch/latest/userguide/images/n-to-n-dep.png)


Si cancela o termina un trabajo de matriz principal, todos los trabajos secundarios se cancelan o terminan con él. Puede cancelar o terminar trabajos secundarios por separado (con lo que adoptarán el estado `FAILED`) sin afectar al resto de trabajos secundarios. Sin embargo, si un trabajo de matriz secundario produce un error (durante su ejecución o por una cancelación/terminación manual), el trabajo principal también producirá un error. En este escenario, el trabajo principal cambia a `FAILED` cuando se completan todos los trabajos secundarios.

Para obtener más información sobre la búsqueda y el filtrado de trabajos de matriz, consulte[Buscar para trabajos en una cola de trabajos](searching-filtering-jobs.md).

**Topics**
+ [Ejemplo de un flujo de trabajos de matriz](example_array_job.md)
+ [Uso del índice de trabajo de matriz para controlar la diferenciación de trabajos](array_index_example.md)

# Ejemplo de un flujo de trabajos de matriz
<a name="example_array_job"></a>

Un flujo de trabajo habitual para AWS Batch los clientes consiste en ejecutar un trabajo de configuración previo, ejecutar una serie de comandos en un gran número de tareas de entrada y, a continuación, concluir con un trabajo que agregue los resultados y escriba datos resumidos en Amazon S3, DynamoDB, Amazon Redshift o Aurora.

Por ejemplo:
+ `JobA`: un trabajo estándar que no es de matriz, que realiza un listado rápido y una validación de metadatos de los objetos de un bucket `BucketA` de Amazon S3. La sintaxis de [SubmitJob](https://docs.aws.amazon.com/batch/latest/APIReference/API_SubmitJob.html)JSON es la siguiente.

  ```
  {
      "jobName": "JobA",
      "jobQueue": "ProdQueue",
      "jobDefinition": "JobA-list-and-validate:1"
  }
  ```
+ `JobB`: un trabajo de matriz con 10 000 copias que depende de `JobA`, que ejecuta comandos con un uso intensivo de la CPU en cada objeto de `BucketA` y que carga los resultados en `BucketB`. La sintaxis de [SubmitJob](https://docs.aws.amazon.com/batch/latest/APIReference/API_SubmitJob.html)JSON es la siguiente.

  ```
  {
      "jobName": "JobB",
      "jobQueue": "ProdQueue",
      "jobDefinition": "JobB-CPU-Intensive-Processing:1",
      "containerOverrides": {
          "resourceRequirements": [
              {
                  "type": "MEMORY",
                  "value": "4096"
              },
              {
                  "type": "VCPU",
                  "value": "32"
              }
          ]
     }
      "arrayProperties": {
          "size": 10000
      },
      "dependsOn": [
          {
              "jobId": "JobA_job_ID"
    }
      ]
  }
  ```
+ `JobC`: otro trabajo de matriz de 10 000 copias que depende de `JobB` con un modelo de dependencia `N_TO_N`, que ejecuta comandos con un uso intensivo de la memoria en cada elemento de `BucketB`, escribe los metadatos en DynamoDB y carga la salida obtenida en `BucketC` . La sintaxis de [SubmitJob](https://docs.aws.amazon.com/batch/latest/APIReference/API_SubmitJob.html)JSON es la siguiente.

  ```
  {
      "jobName": "JobC",
      "jobQueue": "ProdQueue",
      "jobDefinition": "JobC-Memory-Intensive-Processing:1",
      "containerOverrides": {
          "resourceRequirements": [
              {
                  "type": "MEMORY",
                  "value": "32768"
              },
              {
                  "type": "VCPU",
                  "value": "1"
              }
          ]
     }
      "arrayProperties": {
          "size": 10000
      },
      "dependsOn": [
          {
              "jobId": "JobB_job_ID",
              "type": "N_TO_N"
          }
      ]
  }
  ```
+ `JobD`: un trabajo de matriz que realiza 10 pasos de validación que requieren consultar DynamoDB y que pueden interactuar con cualquiera de los buckets de Amazon S3 anteriores. Cada uno de los pasos de `JobD` ejecuta el mismo comando. Sin embargo, el comportamiento es diferente en función del valor de la variable de entorno `AWS_BATCH_JOB_ARRAY_INDEX` del contenedor del trabajo. Estos pasos de validación se ejecutan de forma secuencial (por ejemplo `JobD:0` y, a continuación, `JobD:1`). La sintaxis de [SubmitJob](https://docs.aws.amazon.com/batch/latest/APIReference/API_SubmitJob.html)JSON es la siguiente.

  ```
  {
      "jobName": "JobD",
      "jobQueue": "ProdQueue",
      "jobDefinition": "JobD-Sequential-Validation:1",
      "containerOverrides": {
          "resourceRequirements": [
              {
                  "type": "MEMORY",
                  "value": "32768"
              },
              {
                  "type": "VCPU",
                  "value": "1"
              }
          ]
     }
      "arrayProperties": {
          "size": 10
      },
      "dependsOn": [
          {
              "jobId": "JobC_job_ID"
          },
          {
              "type": "SEQUENTIAL"
          },
   
      ]
  }
  ```
+ `JobE`: un trabajo final que no es de matriz, que realiza varias operaciones de limpieza sencillas, y que envía una notificación de Amazon SNS con un mensaje que indica que la canalización se ha completado y que incluye un enlace con la URL de salida. La sintaxis de [SubmitJob](https://docs.aws.amazon.com/batch/latest/APIReference/API_SubmitJob.html)JSON es la siguiente.

  ```
  {
      "jobName": "JobE",
      "jobQueue": "ProdQueue",
      "jobDefinition": "JobE-Cleanup-and-Notification:1",
      "parameters": {
          "SourceBucket": "s3://amzn-s3-demo-source-bucket",
          "Recipient": "pipeline-notifications@mycompany.com"
      },
      "dependsOn": [
          {
              "jobId": "JobD_job_ID"
          }
      ]
  }
  ```

# Uso del índice de trabajo de matriz para controlar la diferenciación de trabajos
<a name="array_index_example"></a>

En este tutorial se describe cómo utilizar la variable de entorno de `AWS_BATCH_JOB_ARRAY_INDEX` para diferenciar los trabajos secundarios. Cada trabajo secundario se asigna a esta variable. El ejemplo utiliza el número de índice del trabajo secundario para leer una línea específica de un archivo. A continuación, sustituye el parámetro asociado a ese número de línea por un comando incluido en el contenedor del trabajo. El resultado es que puede tener varios AWS Batch trabajos que ejecuten la misma imagen de Docker y los mismos argumentos de comando. Sin embargo, los resultados son diferentes porque el índice de trabajos de la matriz se usa como modificador.

En este tutorial, creará un archivo de texto que tiene todos los colores del arco iris, cada uno en su propia línea. A continuación, creará un script de punto de entrada para un contenedor de Docker que convierte el índice en un valor que se puede utilizar como número de línea en el archivo de colores. El índice comienza en cero, pero los números de línea comienzan en uno. Creará un Dockerfile que copia los archivos de colores y de índice en la imagen del contenedor y establece el valor `ENTRYPOINT` de la imagen en el script de punto de entrada. El Dockerfile y los recursos se compilarán en una imagen de Docker que se enviará a Amazon ECR. A continuación, registras una definición de trabajo que usa tu nueva imagen de contenedor, envías un trabajo de AWS Batch matriz con esa definición de trabajo y ves los resultados.

**Topics**
+ [Requisitos previos](array-tutorial-prereqs.md)
+ [Creación de una imagen de contenedor](build-index-container.md)
+ [Enviar la imagen a Amazon ECR](push-array-image.md)
+ [Crear y registrar una definición de trabajo](create-array-job-def.md)
+ [Envíe un trabajo AWS Batch de matriz](submit-array-job.md)
+ [Ver los registros del trabajo de matriz](#array-tutorial-logs)

# Requisitos previos
<a name="array-tutorial-prereqs"></a>

Este flujo de trabajo de tutorial tiene los requisitos previos siguientes:
+ Un entorno AWS Batch informático. Para obtener más información, consulte [Creación de un entorno de computación](create-compute-environment.md).
+ Una cola de AWS Batch trabajos y un entorno informático asociado. Para obtener más información, consulte [Creación de una cola de trabajos](create-job-queue.md).
+ Están AWS CLI instalados en su sistema local. Para obtener más información, consulte [ >Instalación de AWS Command Line Interface](https://docs.aws.amazon.com/cli/latest/userguide/installing.html) en la *Guía del usuario de AWS Command Line Interface *.
+ Docker debe estar instalado en el sistema local. Para obtener más información, consulte [About Docker CE](https://docs.docker.com/install/) en la documentación de Docker.

# Creación de una imagen de contenedor
<a name="build-index-container"></a>

Puede utilizar el `AWS_BATCH_JOB_ARRAY_INDEX` en una definición de trabajo en el parámetro de comando. Sin embargo, se recomienda crear una imagen contenedor que utilice la variable en un script de punto de entrada en su lugar. En esta sección, se describe cómo crear dicha imagen de contenedor.

**Para compilar la imagen de contenedor de Docker**

1. Cree un directorio nuevo para utilizarlo como espacio de trabajo de la imagen de Docker y desplácese a él.

1. Cree un archivo denominado `colors.txt` en el directorio del espacio de trabajo y pegue en él el contenido siguiente.

   ```
   red
   orange
   yellow
   green
   blue
   indigo
   violet
   ```

1. Cree un archivo denominado `print-color.sh` en el directorio del espacio de trabajo y pegue en él el contenido siguiente.
**nota**  
La variable `LINE` se establece en `AWS_BATCH_JOB_ARRAY_INDEX` \$1 1 debido a que el índice de matriz empieza en 0, pero los números de línea empiezan en 1. La variable `COLOR` se establece en el color de `colors.txt` que está asociado a su número de línea.

   ```
   #!/bin/sh
   LINE=$((AWS_BATCH_JOB_ARRAY_INDEX + 1))
   COLOR=$(sed -n ${LINE}p /tmp/colors.txt)
   echo My favorite color of the rainbow is $COLOR.
   ```

1. Cree un archivo denominado `Dockerfile` en el directorio del espacio de trabajo y pegue en él el contenido siguiente. Este Dockerfile copia los archivos anteriores en el contenedor y configura el script de punto de entrada para que se ejecute al iniciarse el contenedor.

   ```
   FROM busybox
   COPY print-color.sh /tmp/print-color.sh
   COPY colors.txt /tmp/colors.txt
   RUN chmod +x /tmp/print-color.sh
   ENTRYPOINT /tmp/print-color.sh
   ```

1. Compile la imagen de Docker.

   ```
   $ docker build -t print-color .
   ```

1. Pruebe el contenedor con el script siguiente. Este script establece la variable `AWS_BATCH_JOB_ARRAY_INDEX` en 0 localmente y, a continuación, incrementa su valor para simular lo que haría un trabajo de matriz con siete elementos secundarios.

   ```
   $ AWS_BATCH_JOB_ARRAY_INDEX=0
   while [ $AWS_BATCH_JOB_ARRAY_INDEX -le 6 ]
   do
       docker run -e AWS_BATCH_JOB_ARRAY_INDEX=$AWS_BATCH_JOB_ARRAY_INDEX print-color
       AWS_BATCH_JOB_ARRAY_INDEX=$((AWS_BATCH_JOB_ARRAY_INDEX + 1))
   done
   ```

   Se genera la siguiente salida.

   ```
   My favorite color of the rainbow is red.
   My favorite color of the rainbow is orange.
   My favorite color of the rainbow is yellow.
   My favorite color of the rainbow is green.
   My favorite color of the rainbow is blue.
   My favorite color of the rainbow is indigo.
   My favorite color of the rainbow is violet.
   ```

# Enviar la imagen a Amazon ECR
<a name="push-array-image"></a>

Ahora que ha compilado y probado el contenedor de Docker, debe enviarlo a un repositorio de imágenes. En este ejemplo se utiliza Amazon ECR, pero puede utilizar otro registro, como DockerHub.

1. Cree un repositorio de imágenes de Amazon ECR para almacenar la imagen de contenedor. En este ejemplo solo se utiliza el AWS CLI, pero también se puede utilizar el Consola de administración de AWS. Para obtener más información, consulte [Creación de un repositorio](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-create.html) en la *Guía del usuario de Amazon Elastic Container Registry*.

   ```
   $ aws ecr create-repository --repository-name print-color
   ```

1. Etiquete la imagen `print-color` con el URI del repositorio de Amazon ECR que se obtuvo del paso anterior.

   ```
   $ docker tag print-color aws_account_id.dkr.ecr.region.amazonaws.com/print-color
   ```

1. Inicie sesión en su registro Amazon ECR. Para obtener más información, consulte [Autenticación de registros](https://docs.aws.amazon.com/AmazonECR/latest/userguide/Registries.html#registry_auth) en la *Guía del usuario de Amazon Elastic Container Registry*.

   ```
   $ aws ecr get-login-password \
       --region region | docker login \
       --username AWS \
       --password-stdin aws_account_id.dkr.ecr.region.amazonaws.com
   ```

1. Envíe la imagen a Amazon ECR.

   ```
   $ docker push aws_account_id.dkr.ecr.region.amazonaws.com/print-color
   ```

# Crear y registrar una definición de trabajo
<a name="create-array-job-def"></a>

Ahora que su imagen de Docker está en un registro de imágenes, puede especificarla en una definición de AWS Batch trabajo. Posteriormente, puede utilizarlo para ejecutar un trabajo de matriz. En este ejemplo se utiliza la API de AWS CLI. Sin embargo, también puede utilizar la Consola de administración de AWS. Para obtener más información, consulte [Creación de una definición de trabajo de un solo nodo](create-job-definition.md).

**Para crear una definición de trabajo**

1. Cree un archivo denominado `print-color-job-def.json` en el directorio del espacio de trabajo y pegue en él el contenido siguiente. Reemplace el URI del repositorio de imágenes por el URI de su propia imagen.

   ```
   {
     "jobDefinitionName": "print-color",
     "type": "container",
     "containerProperties": {
       "image": "aws_account_id.dkr.ecr.region.amazonaws.com/print-color",
       "resourceRequirements": [
           {
               "type": "MEMORY",
               "value": "250"
           },
           {
               "type": "VCPU",
               "value": "1"
           }
       ]
     }
   }
   ```

1. Registre la definición del trabajo con AWS Batch.

   ```
   $ aws batch register-job-definition --cli-input-json file://print-color-job-def.json
   ```

# Envíe un trabajo AWS Batch de matriz
<a name="submit-array-job"></a>

Después de registrar la definición de su trabajo, puede enviar un trabajo de AWS Batch matriz que utilice su nueva imagen de contenedor.

**Para enviar un trabajo AWS Batch de matriz**

1. Cree un archivo denominado `print-color-job.json` en el directorio del espacio de trabajo y pegue en él el contenido siguiente.
**nota**  
En este ejemplo, se utiliza la cola de trabajos mencionada en la sección [Requisitos previos](array-tutorial-prereqs.md).

   ```
   {
     "jobName": "print-color",
     "jobQueue": "existing-job-queue",
     "arrayProperties": {
       "size": 7
     },
     "jobDefinition": "print-color"
   }
   ```

1. Envíe el trabajo a su lista de AWS Batch trabajos. Anote el ID de trabajo que se devuelve como resultado.

   ```
   $ aws batch submit-job --cli-input-json file://print-color-job.json
   ```

1. Describa el estado del trabajo y espere a que el trabajo adopte el valor `SUCCEEDED`.

## Ver los registros del trabajo de matriz
<a name="array-tutorial-logs"></a>

Cuando su trabajo alcance el `SUCCEEDED` estado, podrá ver los CloudWatch registros desde el contenedor del trabajo.

**Para ver los registros de su trabajo en CloudWatch Registros**

1. Abre la AWS Batch consola en [https://console.aws.amazon.com/batch/](https://console.aws.amazon.com/batch/).

1. En el panel de navegación izquierdo, elija **Jobs (Trabajos)**.

1. En **Job queue (Cola de trabajos)**, seleccione una cola. 

1. En la sección **Status (Estado)**, elija **succeeded (realizado correctamente)**.

1. Para mostrar todos los trabajos secundarios del trabajo de matriz, seleccione el ID de trabajo que se ha obtenido en la sección anterior.

1. Para ver los logs del contenedor del trabajo, seleccione uno de los trabajos secundarios y elija **View logs (Ver logs)**.  
![\[Registros del contenedor de trabajos de matriz\]](http://docs.aws.amazon.com/es_es/batch/latest/userguide/images/array-logs.png)

1. Vea los logs del otro trabajo secundario. Cada trabajo devuelve un color diferente del arco iris.