

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.

# Ejecutar AWS Batch cargas de trabajo con Step Functions
<a name="connect-batch"></a>

Puede integrar Step Functions con AWS Batch para ejecutar cargas de trabajo de computación por lotes en AWS nube. En esta página se enumeran las API AWS Batch compatibles y se proporciona un ejemplo de estado `Task` para realizar una tarea de procesamiento por lotes.

Para obtener información sobre la integración con AWS los servicios de Step Functions, consulte [Integración de los servicios de ](integrate-services.md) y [Cómo pasar parámetros a una API de servicio en Step Functions](connect-parameters.md).

**Características clave de Optimized AWS Batch integración**  
El patrón de integración [Ejecutar un trabajo (.sync)](connect-to-resource.md#connect-sync) está disponible.
Tenga en cuenta que no hay optimizaciones específicas para los patrones de integración [Respuesta de la solicitud](connect-to-resource.md#connect-default) o [Cómo esperar una devolución de llamada con el token de tarea](connect-to-resource.md#connect-wait-token).

A continuación se muestra un ejemplo `Task` estado que presenta un AWS Batch trabajo y espera a que se complete. Muchos de los argumentos que se muestran son opcionales.

```
"Submit Batch Job": {
    "Type": "Task",
    "Resource": "arn:aws:states:::batch:submitJob.sync",
    "Arguments": {
        "JobName": "{{BATCH_NAME}}",
        "JobQueue": "{{BATCH_QUEUE_ARN}}",
        "JobDefinition": "{{BATCH_JOB_DEFINITION_ARN}}",
        "ArrayProperties": {
            "Size": 10
        },
        "ContainerOverrides": {
            "ResourceRequirements": [
                {
                    "Type": "VCPU",
                    "Value": "4"
                }
            ]
        },
        "DependsOn": [
            {
                "JobId": "myJobId",
                "Type": "SEQUENTIAL"
            }
        ],
        "PropagateTags": true,
        "Parameters": {
            "Key1": "value1",
            "Key2": "100"
        },
        "RetryStrategy": {
            "Attempts": 1
        },
        "Tags": {
            "Tag": "{{TAG}}"
        },
        "Timeout": {
            "AttemptDurationSeconds": 10
        }
    }
}
```

## Ejecute trabajos paralelos de varios contenedores, Amazon EKS y múltiples nodos
<a name="connect-batch-multicontainer"></a>

Con `batch:submitJob.sync`, trabajos que utilizan `ecsProperties` o `eksProperties` necesita la anulación correspondiente en el `Task` estado. Sin la anulación, el `Task` el estado falla con `Batch.ClientException`.

Para `ecsProperties` para tareas, utilice la siguiente anulación mínima:

```
"EcsPropertiesOverride": {
    "TaskProperties": [ {} ]
}
```

Para `eksProperties` para tareas, utilice la siguiente anulación mínima:

```
"EksPropertiesOverride": {
    "PodProperties": {}
}
```

**importante**  
Para estos trabajos y para los trabajos paralelos de varios nodos, Step Functions detecta la finalización únicamente mediante una llamada `DescribeJobs`. Estas llamadas cuentan para las de tu cuenta `DescribeJobs` cuota. Si AWS Batch estrangula estas llamadas, el `Task` el estado puede permanecer en curso una vez finalizado el trabajo, hasta que una llamada posterior tenga éxito.

Para informar de que se ha completado antes, pasa el token de la tarea al trabajo en `Parameters`. Cuando termine el trabajo, llama `SendTaskSuccess` o `SendTaskFailure` del trabajo con esa ficha.

```
"Parameters": {
    "TaskToken": "{% $states.context.Task.Token %}"
}
```

En la definición del trabajo, haga referencia al token en el comando del contenedor como `Ref::TaskToken`. Para obtener más información, consulte [Ejecutar un trabajo (.sync)](connect-to-resource.md#connect-sync).

## Optimizado AWS Batch API:
<a name="connect-batch-api"></a>
+ [`SubmitJob`](https://docs.aws.amazon.com/batch/latest/APIReference/API_SubmitJob.html)

**Parámetros en Funciones escalonadas se expresan en PascalCase**  
Incluso si la API del servicio nativo está en CamelCase, por ejemplo, la acción de la API `startSyncExecution`, los parámetros se especifican en PascalCase, como: `StateMachineArn`.

## Políticas de IAM para llamar AWS Batch
<a name="batch-iam"></a>

En las siguientes plantillas de ejemplo se muestra cómo AWS Step Functions genera políticas de IAM en función de los recursos de la definición de su máquina de estados. Para obtener más información, consulte [Generación de políticas de IAM para servicios integrados por Steps Functions](service-integration-iam-templates.md) y [Descubrimiento de los patrones de integración de servicios en Step Functions](connect-to-resource.md).

Puesto que se generan los identificadores de trabajo `SubmitJob` y `TerminateJob` y, por lo tanto, solo se conocen en tiempo de ejecución, no puede crear una política que restrinja el acceso en función de un recurso específico. 

**Consejo para un control de acceso preciso**  
Para agregar un acceso preciso a `SubmitJob` y`TerminateJob`, considere la posibilidad de utilizar etiquetas para los trabajos y de crear una política que limite el acceso en función de sus etiquetas. Además, la cola de trabajos, la definición y los recursos consumibles pueden restringirse para `SubmitJob` mediante el uso de recursos conocidos.

------
#### [ Run a Job (.sync) ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "batch:SubmitJob",
                "batch:DescribeJobs",
                "batch:TerminateJob"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "events:PutTargets",
                "events:PutRule",
                "events:DescribeRule"
            ],
            "Resource": [
               "arn:aws:events:{{us-east-1}}:{{123456789012}}:rule/StepFunctionsGetEventsForBatchJobsRule"
            ]
        }
    ]
}
```

------
#### [ Request Response ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "batch:SubmitJob"
            ],
            "Resource": "*"
        }
    ]
}
```

------