

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.

# Integración de servicios optimizados con Step Functions
<a name="integrate-optimized"></a>

Su flujo de trabajo puede llamar a servicios optimizados directamente mediante el campo `Resource` de un estado `Task`. En los siguientes temas se explican los parámetros y la request/response sintaxis admitidos APIs en Amazon States Language para la coordinación de AWS servicios. 

Según el tipo de flujo de trabajo y la disponibilidad, sus flujos de trabajo llaman a los servicios mediante uno de los tres patrones de integración de servicios:
+ [Solicitar una respuesta (predeterminada)](connect-to-resource.md#connect-default): esperar una respuesta HTTP y pasar al siguiente estado
+ [Ejecutar un trabajo (`.sync`)](connect-to-resource.md#connect-sync): esperar a que se complete el trabajo
+ [Esperar a la devolución de llamada (`.waitForTaskToken`)](connect-to-resource.md#connect-wait-token): pausar un flujo de trabajo hasta que se devuelva un token de tarea

Los flujos de trabajo estándar y los flujos de trabajo rápidos son compatibles con las mismas **integraciones**, pero no con los mismos **patrones de integración**. 
+  **Los flujos de trabajo estándar** admiten integraciones de *Respuesta de la solicitud*. Algunos servicios admiten *Run a Job (.sync)* o *Wait for Callback (. waitForTaskToken)* y, en algunos casos, ambas cosas. Para obtener detalles, consulte la siguiente tabla de integraciones optimizadas. 
+  **Los flujos de trabajo rápidos** solo admiten integraciones de *Respuesta de la solicitud*. 

 Para ayudarle a decidir entre los dos tipos, consulte [Elegir el tipo de flujo de trabajo en Step Functions](choosing-workflow-type.md). 



**AWSIntegraciones de SDK en Step Functions**


| Servicio integrado | Respuesta de la solicitud | Ejecutar un trabajo: *.sync* | *Espere a que Callback -. waitForTaskSímbolo* | 
| --- | --- | --- | --- | 
| [Más de doscientos servicios](supported-services-awssdk.md#supported-services-awssdk-list) | Estándar y exprés | No compatible | Standard | 

**Integraciones optimizadas en Step Functions**


| Servicio integrado | Respuesta de la solicitud | Ejecutar un trabajo: *.sync* | *Espere a que Callback -. waitForTaskSímbolo* | 
| --- | --- | --- | --- | 
| [Amazon API Gateway](connect-api-gateway.md) | Estándar y exprés | No compatible | Standard | 
| [Amazon Athena](connect-athena.md) | Estándar y exprés | Standard | No compatible | 
| [AWS Batch](connect-batch.md) | Estándar y exprés | Standard | No compatible | 
| [Amazon Bedrock](connect-bedrock.md) | Estándar y exprés | Standard | Standard | 
| [AWS CodeBuild](connect-codebuild.md) | Estándar y exprés | Standard | No compatible | 
| [Amazon DynamoDB](connect-ddb.md) | Estándar y exprés | No admitido | No admitido | 
| [Amazon ECS/Fargate](connect-ecs.md) | Estándar y exprés | Standard | Standard | 
| [Amazon EKS](connect-eks.md) | Estándar y exprés | Standard | Standard | 
| [Amazon EMR](connect-emr.md) | Estándar y exprés | Standard | No compatible | 
| [Amazon EMR on EKS](connect-emr-eks.md) | Estándar y exprés | Standard | No compatible | 
| [Amazon EMR Serverless](connect-emr-serverless.md) | Estándar y exprés | Standard | No compatible | 
| [Amazon EventBridge](connect-eventbridge.md) | Estándar y exprés | No compatible | Standard | 
| [AWS Glue](connect-glue.md) | Estándar y exprés | Standard | No compatible | 
| [AWS Glue DataBrew](connect-databrew.md) | Estándar y exprés | Standard | No compatible | 
| [AWS Lambda](connect-lambda.md) | Estándar y exprés | No compatible | Standard | 
| [AWS Elemental MediaConvert](connect-mediaconvert.md) | Estándar y exprés | Standard | No compatible | 
| [Amazon SageMaker AI](connect-sagemaker.md) | Estándar y exprés | Standard | No compatible | 
| [Amazon SNS](connect-sns.md) | Estándar y exprés | No compatible | Standard | 
| [Amazon SQS](connect-sqs.md) | Estándar y exprés | No compatible | Standard | 
| [AWS Step Functions](connect-stepfunctions.md) | Estándar y exprés | Standard | Standard | 

# Cree API Gateway REST APIs con Step Functions
<a name="connect-api-gateway"></a>

Aprenda a utilizar Amazon API Gateway para crear, publicar, mantener y supervisar HTTP y REST APIs con Step Functions. Para la integración con API Gateway, se debe definir un estado `Task` en Step Functions que llame directamente a un punto de conexión HTTP o REST de API Gateway, sin necesidad de escribir código ni depender de otra infraestructura. Una definición de estado `Task` incluye toda la información necesaria para la llamada a la API. También puede seleccionar distintos métodos de autorización.

Para obtener más 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 principales de la integración optimizada de API Gateway**  
`apigateway:invoke:`no tiene equivalente en la integración de servicios del AWS SDK. En su lugar, el servicio optimizado de API Gateway llama directamente a su punto de conexión de API Gateway.

## Compatibilidad con características de API Gateway
<a name="connect-api-gateway-support"></a>

La integración de API Gateway de Step Functions admite algunas características de API Gateway, pero no todas. Para obtener una lista más detallada de las características compatibles, consulte lo siguiente. 
+ Compatible con las integraciones de la API de REST y HTTP de API Gateway de Step Functions:
  + **Autorizadores**: IAM (con [Signature Version 4](https://docs.aws.amazon.com/general/latest/gr/sigv4_signing.html)), sin autenticación, autorizadores Lambda (basados en parámetros de solicitud y basados en tokens con encabezado personalizado)
  + **Tipos de API:** regionales
  + **Administración de API**: nombres de dominio de API Gateway, etapa de API, ruta, parámetros de consulta, cuerpo de la solicitud
+ Compatible con la integración de la API de HTTP de API Gateway de Step Functions. No se admite la integración de la API REST de Step Functions API Gateway que ofrece la opción de optimización APIs perimetral.
+ No compatible con la integración de la API Gateway de Step Functions:
  +  **Autorizadores**: Amazon Cognito, Open ID Connect OAuth /2.0 nativo, encabezado de autorización para autorizadores Lambda basados en tokens 
  +  **Tipos de API:** privadas 
  +  **Administración de API**: nombres de dominio personalizados 

Para obtener más información sobre API Gateway y sus protocolos HTTP y REST APIs, consulte lo siguiente.
+  La página [Conceptos de Amazon API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-basic-concept.html). 
+  [Cómo elegir entre HTTP APIs y REST APIs](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-vs-rest.html) en la guía para desarrolladores de API Gateway. 

## Formato de las solicitudes
<a name="connect-api-gateway-requests"></a>

Al crear la definición de estado `Task`, Step Functions valida los parámetros, genera la URL necesaria para realizar la llamada y, posteriormente, llama a la API. La respuesta incluye el código de estado HTTP, los encabezados y el cuerpo de respuesta. El formato de solicitud tiene parámetros obligatorios y opcionales.

### Parámetros de solicitud obligatorios
<a name="connect-api-gateway-requests-required"></a>
+ `ApiEndpoint`
  + Tipo: `String`
  + El nombre de host de una URL de API Gateway. El formato es `<API ID>.execute-api.region.amazonaws.com`.

    El ID de API solo puede contener una combinación de los siguientes caracteres alfanuméricos: `0123456789abcdefghijklmnopqrstuvwxyz`
+ `Method`
  + Tipo: `Enum`
  + El método HTTP, que debe ser uno de los siguientes: 
    + `GET`
    + `POST`
    + `PUT`
    + `DELETE`
    + `PATCH`
    + `HEAD`
    + `OPTIONS`

### Parámetros de solicitudes opcionales
<a name="connect-api-gateway-requests-optional"></a>
+ `Headers`
  + Tipo: `JSON`
  + Los encabezados HTTP permiten una lista de valores asociados a la misma clave.
+ `Stage`
  + Tipo: `String`
  + El nombre de la fase en la que se implementa la API en API Gateway. Es opcional para cualquier API de HTTP que utilice la fase `$default`. 
+ `Path`
  + Tipo: `String`
  + Parámetros de ruta que se anexan después del punto de conexión de la API. 
+ `QueryParameters`
  + Tipo: `JSON`
  + Las cadenas de consulta solo permiten una lista de valores asociados a la misma clave. 
+ `RequestBody`
  + Tipo: `JSON` o `String`
  + El cuerpo de la solicitud HTTP Su tipo puede ser un objeto `JSON` o`String`. `RequestBody` solo es compatible con los métodos HTTP `PATCH`, `POST` y `PUT`.
+ `AllowNullValues`
  + Tipo: `BOOLEAN` — valor predeterminado: `false`
  + Con la configuración predeterminada, los valores **nulos** que se encuentren en el estado de entrada de la solicitud **no** se enviarán a su API. En el siguiente ejemplo, el campo `category` **no** se incluirá en la solicitud, a menos que `AllowNullValues` esté configurado como `true` en la definición de la máquina de estado.

    ```
    {
        "NewPet": {
            "type": "turtle",
            "price": 123,
            "category": null
        }
    }
    ```
**nota**  
De forma predeterminada, los campos con valores **nulos** en el estado de entrada de la solicitud **no** se enviarán a su API. Puede forzar el envío de valores nulos a su API configurando `AllowNullValues` como `true` en su definición de máquina de estado.
+ `AuthType`
  + Tipo: `JSON`
  + El método de autenticación. El método predeterminado es `NO_AUTH`. Los valores permitidos son: 
    + `NO_AUTH`
    + `IAM_ROLE`
    + `RESOURCE_POLICY`

    Para obtener más información, consulte **Autenticación y autorización**.

**nota**  
Por motivos de seguridad, actualmente no se permiten las siguientes claves de encabezado HTTP:  
Cualquiera que tenga el prefijo `X-Forwarded`, `X-Amz` o `X-Amzn`.
`Authorization`
`Connection`
`Content-md5`
`Expect`
`Host`
`Max-Forwards`
`Proxy-Authenticate`
`Server`
`TE`
`Transfer-Encoding`
`Trailer`
`Upgrade`
`Via`
`Www-Authenticate`

En el siguiente ejemplo de código se muestra cómo invocar API Gateway mediante Step Functions.

```
{
    "Type": "Task", 
    "Resource":"arn:aws:states:::apigateway:invoke", 
    "Arguments": {
        "ApiEndpoint": "example.execute-api.us-east-1.amazonaws.com",
        "Method": "GET", 
        "Headers": { 
            "key": ["value1", "value2"] 
        },
        "Stage": "prod",
        "Path": "bills",
        "QueryParameters": {
            "billId": ["123456"]
        },
        "RequestBody": {},
        "AuthType": "NO_AUTH"
    } 
}
```

## Autenticación y autorización
<a name="connect-api-gateway-auth"></a>

Puede usar los siguientes métodos de autenticación:
+ **Sin autorización**: llama a la API directamente sin ningún método de autorización.
+ **Rol de IAM**: con este método, Step Functions asume el rol de la máquina de estado, firma la solicitud con [Signature Version 4](https://docs.aws.amazon.com/general/latest/gr/sigv4_signing.html) (SiGv4) y, posteriormente, llama a la API.
+ **Política de recursos**: Step Functions autentica la solicitud y luego llama a la API. Debe adjuntar una política de recursos a la API que especifique lo siguiente:

  1. La máquina de estado que invocará API Gateway.
**importante**  
Debe especificar su máquina de estado para limitar el acceso a ella. Si no lo hace, se concederá acceso a cualquier máquina de estado que autentique su solicitud de API Gateway con la autenticación de la **política de recursos** en su API.

  1. Esa Step Functions es el servicio que llama a API Gateway: `"Service": "states.amazonaws.com"`.

  1. El recurso al que desea obtener acceso, que incluye:
     + La *region*.
     + *account-id*En la región especificada.
     + La *api-id*.
     + La *stage-name*.
     + El *HTTP-VERB* (método).
     + La *resource-path-specifier*.

  Para ver una política de recursos de ejemplo, consulte las [Políticas de IAM para Step Functions y API Gateway](#api-gateway-iam). 

  Para obtener más información acerca del formato de recursos, consulte [Formato de Resource de permisos para ejecutar la API en API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-control-access-using-iam-policies-to-invoke-api.html#api-gateway-iam-policy-resource-format-for-executing-api) en la Guía para desarrolladores de API Gateway.
**nota**  
Las políticas de recursos solo se admiten en la API de REST.

## Patrones de integración de servicios
<a name="connect-api-gateway-patterns"></a>

La integración de API Gateway admite dos patrones de integración de servicios: 
+ [Respuesta de la solicitud](connect-to-resource.md#connect-default), que es el patrón de integración predeterminado. Permite que Step Functions avance al siguiente paso justo después de recibir una respuesta HTTP.
+ [Cómo esperar una devolución de llamada con el token de tarea](connect-to-resource.md#connect-wait-token) (`.waitForTaskToken`), que espera a que se devuelva un token de tarea con una carga. Para usar el `.waitForTaskToken` patrón, añada. waitForTaskSímbolo al final del campo de **recursos** de la definición de la tarea, como se muestra en el siguiente ejemplo: 

  ```
  {
      "Type": "Task", 
      "Resource":"arn:aws:states:::apigateway:invoke.waitForTaskToken", 
      "Arguments": {
          "ApiEndpoint": "example.execute-api.us-east-1.amazonaws.com",
          "Method": "POST", 
          "Headers": { 
              "TaskToken": "{% $states.context.Task.Token %}"
          },
          "Stage": "prod",
          "Path": "bills/add",
          "QueryParameters": {},
          "RequestBody": {
              "billId": "my-new-bill"
          },
          "AuthType": "IAM_ROLE"
      } 
  }
  ```

## Formato de salida
<a name="connect-api-gateway-output"></a>

Debe proporcionar los siguientes parámetros de salida:


| Name | Tipo | Description (Descripción) | 
| --- | --- | --- | 
| ResponseBody | JSON o String | Cuerpo de la respuesta de la llamada a la API. | 
| Headers | JSON | Encabezados de respuesta. | 
| StatusCode | Integer | Código de estado HTTP de la respuesta. | 
| StatusText | String | Texto de estado de la respuesta. | 

Respuesta de ejemplo:

```
{
    "ResponseBody": {
        "myBills": []
    },
    "Headers": { 
        "key": ["value1", "value2"]
    }, 
    "StatusCode": 200,
    "StatusText": "OK" 
}
```

## Gestión de errores
<a name="connect-api-gateway-errors"></a>

Cuando se produce un error, se devuelve `error` y `cause` de la siguiente manera: 
+ Si el código de estado HTTP está disponible, el error se devolverá en el formato `ApiGateway.<HTTP Status Code>`.
+ Si el código de estado HTTP no está disponible, el error se devolverá en el formato `ApiGateway.<Exception>`.

En ambos casos, `cause` se devuelve como una cadena.

En el siguiente ejemplo se muestra una respuesta en la que se ha producido un error:

```
{
    "error": "ApiGateway.403", 
    "cause": "{\"message\":\"Missing Authentication Token\"}"
}
```

**nota**  
Un código de estado de `2XX` indica que se ha realizado correctamente y no se devolverá ningún error. El resto de códigos de estado o excepciones emitidas generarán un error.

## Políticas de IAM para llamadas a Amazon API Gateway
<a name="api-gateway-iam"></a>

En las siguientes plantillas de ejemplo, se muestra cómo se AWS Step Functions generan las 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).

*Recursos:*

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Action": [
                "execute-api:Invoke"
            ],
            "Resource": [
                "arn:aws:execute-api:us-east-1:123456789012:ENDPOINT/STAGE/GET/pets",
                "arn:aws:execute-api:us-east-1:123456789012:ENDPOINT/STAGE/POST/pets"
            ],
            "Effect": "Allow"
        }
    ]
}
```

En el siguiente ejemplo de código se muestra una política de recursos para llamar a API Gateway.

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "states.amazonaws.com"
            },
            "Action": "execute-api:Invoke",
            "Resource": "arn:aws:execute-api:us-east-1:123456789012:myApi-id/stage-name/HTTP-VERB/resource-path-specifier",
            "Condition": {
                "StringEquals": {
                    "aws:SourceArn": [
                        "<SourceStateMachineArn>"
                    ]
                }
            }
        }
    ]
}
```

# Ejecución de consultas de Athena con Step Functions
<a name="connect-athena"></a>

Puede realizar la integración AWS Step Functions con Amazon Athena para iniciar y detener la ejecución de consultas y obtener resultados de consultas con Step Functions. Con Step Functions, puede ejecutar consultas de datos ad hoc o programadas y recuperar resultados dirigidos a sus lagos de datos S3. Athena no requiere un servidor, por lo que no hay que configurar ni administrar ninguna infraestructura y solo pagará por las consultas que ejecute. Esta página muestra los estados de Athena compatibles APIs y proporciona un ejemplo de `Task` estado para iniciar una consulta de Athena.

Para obtener más 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 principales de la integración optimizada de Athena**  
Se admite el patrón de integración [Ejecutar un trabajo (.sync)](connect-to-resource.md#connect-sync).
No hay optimizaciones específicas para el patrón de integración [Respuesta de la solicitud](connect-to-resource.md#connect-default).
No se admite el patrón de integración [Cómo esperar una devolución de llamada con el token de tarea](connect-to-resource.md#connect-wait-token).

Para la integración AWS Step Functions con Amazon Athena, utiliza la integración del servicio Athena proporcionada. APIs

La integración del servicio APIs es la misma que la del APIs Athena correspondiente. No todos APIs admiten todos los patrones de integración, como se muestra en la siguiente tabla.


| API | Respuesta de la solicitud | Ejecutar un trabajo (.sync) | 
| --- | --- | --- | 
| StartQueryExecution | Soportado | Soportado | 
| StopQueryExecution |  compatible | No compatible | 
| GetQueryExecution |  compatible | No compatible | 
| GetQueryResults |  compatible | No compatible | 

El ejemplo siguiente incluye un estado Task que comienza un trabajo de Athena.

```
"Start an Athena query": {
  "Type": "Task",
  "Resource": "arn:aws:states:::athena:startQueryExecution.sync",
  "Arguments": {
    "QueryString": "SELECT * FROM \"myDatabase\".\"myTable\" limit 1",
    "WorkGroup": "primary",
    "ResultConfiguration": {
       "OutputLocation": "s3://amzn-s3-demo-bucket"
    }
  },
  "Next": "Get results of the query"
}
```

## Amazon APIs Athena optimizada:
<a name="connect-athena-api"></a>
+ [https://docs.aws.amazon.com/athena/latest/APIReference/API_StartQueryExecution.html](https://docs.aws.amazon.com/athena/latest/APIReference/API_StartQueryExecution.html)
+ [https://docs.aws.amazon.com/athena/latest/APIReference/API_StopQueryExecution.html](https://docs.aws.amazon.com/athena/latest/APIReference/API_StopQueryExecution.html)
+ [https://docs.aws.amazon.com/athena/latest/APIReference/API_GetQueryExecution.html](https://docs.aws.amazon.com/athena/latest/APIReference/API_GetQueryExecution.html)
+ [https://docs.aws.amazon.com/athena/latest/APIReference/API_GetQueryResults.html](https://docs.aws.amazon.com/athena/latest/APIReference/API_GetQueryResults.html)

**Cuota para datos de entrada o de resultados**  
Al enviar o recibir datos entre servicios, la entrada o resultado máximo de una tarea es de 256 KiB de datos como cadena codificada en UTF-8. Consulte [Cuotas relacionadas con ejecuciones de máquinas de estado](service-quotas.md#service-limits-state-machine-executions).

## Políticas de IAM para llamar a Amazon Athena
<a name="athena-iam"></a>

En las siguientes plantillas de ejemplo, se muestra cómo se AWS Step Functions generan las políticas de IAM en función de los recursos de la definición de su máquina de estado. 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).

**nota**  
Además de las políticas de IAM, es posible que tengas que AWS Lake Formation utilizarlas para conceder acceso a los datos en servicios, como Amazon S3 y elAWS Glue Data Catalog. Para obtener más información, consulte [Uso de Athena para consultar los datos registrados](https://docs.aws.amazon.com/athena/latest/ug/security-athena-lake-formation.html) en. AWS Lake Formation 

### `StartQueryExecution`
<a name="athena-iam-startqueryexecution"></a>

*Recursos estáticos*

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement":[
    {
        "Effect": "Allow",
        "Action": [
            "athena:startQueryExecution",
            "athena:stopQueryExecution",
            "athena:getQueryExecution",
            "athena:getDataCatalog",
            "athena:GetWorkGroup",
            "athena:BatchGetQueryExecution",
            "athena:GetQueryResults",
            "athena:ListQueryExecutions"
        ],
        "Resource": [
            "arn:aws:athena:us-east-1:123456789012:workgroup/myWorkGroup",
            "arn:aws:athena:us-east-1:123456789012:datacatalog/*"
        ]
    },
        {
        "Effect": "Allow",
        "Action": [
            "s3:GetBucketLocation",
            "s3:GetObject",
            "s3:ListBucket",
            "s3:ListBucketMultipartUploads",
            "s3:ListMultipartUploadParts",
            "s3:AbortMultipartUpload",
            "s3:CreateBucket",
            "s3:PutObject"
        ],
        "Resource": [
            "arn:aws:s3:::*"
        ]
    },
    {
        "Effect": "Allow",
        "Action": [
            "glue:CreateDatabase",
            "glue:GetDatabase",
            "glue:GetDatabases",
            "glue:UpdateDatabase",
            "glue:DeleteDatabase",
            "glue:CreateTable",
            "glue:UpdateTable",
            "glue:GetTable",
            "glue:GetTables",
            "glue:DeleteTable",
            "glue:BatchDeleteTable",
            "glue:BatchCreatePartition",
            "glue:CreatePartition",
            "glue:UpdatePartition",
            "glue:GetPartition",
            "glue:GetPartitions",
            "glue:BatchGetPartition",
            "glue:DeletePartition",
            "glue:BatchDeletePartition"
        ],
        "Resource": [
            "arn:aws:glue:us-east-1:123456789012:catalog",
            "arn:aws:glue:us-east-1:123456789012:database/*",
            "arn:aws:glue:us-east-1:123456789012:table/*",
            "arn:aws:glue:us-east-1:123456789012:userDefinedFunction/*"
        ]
    },
    {
        "Effect": "Allow",
        "Action": [
            "lakeformation:GetDataAccess"
        ],
        "Resource": [
            "*"
        ]
    }
]
}
```

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement":[
    {
        "Effect": "Allow",
        "Action": [
            "athena:startQueryExecution",
            "athena:getDataCatalog"
        ],
        "Resource": [
            "arn:aws:athena:us-east-1:123456789012:workgroup/myWorkGroup",
            "arn:aws:athena:us-east-1:123456789012:datacatalog/*"
        ]
    },
        {
        "Effect": "Allow",
        "Action": [
            "s3:GetBucketLocation",
            "s3:GetObject",
            "s3:ListBucket",
            "s3:ListBucketMultipartUploads",
            "s3:ListMultipartUploadParts",
            "s3:AbortMultipartUpload",
            "s3:CreateBucket",
            "s3:PutObject"
        ],
        "Resource": [
            "arn:aws:s3:::*"
        ]
    },
    {
        "Effect": "Allow",
        "Action": [
            "glue:CreateDatabase",
            "glue:GetDatabase",
            "glue:GetDatabases",
            "glue:UpdateDatabase",
            "glue:DeleteDatabase",
            "glue:CreateTable",
            "glue:UpdateTable",
            "glue:GetTable",
            "glue:GetTables",
            "glue:DeleteTable",
            "glue:BatchDeleteTable",
            "glue:BatchCreatePartition",
            "glue:CreatePartition",
            "glue:UpdatePartition",
            "glue:GetPartition",
            "glue:GetPartitions",
            "glue:BatchGetPartition",
            "glue:DeletePartition",
            "glue:BatchDeletePartition"
        ],
        "Resource": [
            "arn:aws:glue:us-east-1:123456789012:catalog",
            "arn:aws:glue:us-east-1:123456789012:database/*",
            "arn:aws:glue:us-east-1:123456789012:table/*",
            "arn:aws:glue:us-east-1:123456789012:userDefinedFunction/*"
        ]
    },
    {
        "Effect": "Allow",
        "Action": [
            "lakeformation:GetDataAccess"
        ],
        "Resource": [
            "*"
        ]
    }
]
}
```

------

*Recursos dinámicos*

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement":[
    {
        "Effect": "Allow",
        "Action": [
            "athena:startQueryExecution",
            "athena:stopQueryExecution",
            "athena:getQueryExecution",
            "athena:getDataCatalog",
            "athena:GetWorkGroup",
            "athena:BatchGetQueryExecution",
            "athena:GetQueryResults",
            "athena:ListQueryExecutions"
        ],
        "Resource": [
            "arn:aws:athena:us-east-1:123456789012:workgroup/*",
            "arn:aws:athena:us-east-1:123456789012:datacatalog/*"
        ]
    },
        {
        "Effect": "Allow",
        "Action": [
            "s3:GetBucketLocation",
            "s3:GetObject",
            "s3:ListBucket",
            "s3:ListBucketMultipartUploads",
            "s3:ListMultipartUploadParts",
            "s3:AbortMultipartUpload",
            "s3:CreateBucket",
            "s3:PutObject"
        ],
        "Resource": [
            "arn:aws:s3:::*"
        ]
    },
    {
        "Effect": "Allow",
        "Action": [
            "glue:CreateDatabase",
            "glue:GetDatabase",
            "glue:GetDatabases",
            "glue:UpdateDatabase",
            "glue:DeleteDatabase",
            "glue:CreateTable",
            "glue:UpdateTable",
            "glue:GetTable",
            "glue:GetTables",
            "glue:DeleteTable",
            "glue:BatchDeleteTable",
            "glue:BatchCreatePartition",
            "glue:CreatePartition",
            "glue:UpdatePartition",
            "glue:GetPartition",
            "glue:GetPartitions",
            "glue:BatchGetPartition",
            "glue:DeletePartition",
            "glue:BatchDeletePartition"
        ],
        "Resource": [
            "arn:aws:glue:us-east-1:123456789012:catalog",
            "arn:aws:glue:us-east-1:123456789012:database/*",
            "arn:aws:glue:us-east-1:123456789012:table/*",
            "arn:aws:glue:us-east-1:123456789012:userDefinedFunction/*"
        ]
    },
    {
        "Effect": "Allow",
        "Action": [
            "lakeformation:GetDataAccess"
        ],
        "Resource": [
            "*"
        ]
    }
]
}
```

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement":[
    {
        "Effect": "Allow",
        "Action": [
            "athena:startQueryExecution",
            "athena:getDataCatalog"
        ],
        "Resource": [
            "arn:aws:athena:us-east-1:123456789012:workgroup/*",
            "arn:aws:athena:us-east-1:123456789012:datacatalog/*"
        ]
    },
        {
        "Effect": "Allow",
        "Action": [
            "s3:GetBucketLocation",
            "s3:GetObject",
            "s3:ListBucket",
            "s3:ListBucketMultipartUploads",
            "s3:ListMultipartUploadParts",
            "s3:AbortMultipartUpload",
            "s3:CreateBucket",
            "s3:PutObject"
        ],
        "Resource": [
            "arn:aws:s3:::*"
        ]
    },
    {
        "Effect": "Allow",
        "Action": [
            "glue:CreateDatabase",
            "glue:GetDatabase",
            "glue:GetDatabases",
            "glue:UpdateDatabase",
            "glue:DeleteDatabase",
            "glue:CreateTable",
            "glue:UpdateTable",
            "glue:GetTable",
            "glue:GetTables",
            "glue:DeleteTable",
            "glue:BatchDeleteTable",
            "glue:BatchCreatePartition",
            "glue:CreatePartition",
            "glue:UpdatePartition",
            "glue:GetPartition",
            "glue:GetPartitions",
            "glue:BatchGetPartition",
            "glue:DeletePartition",
            "glue:BatchDeletePartition"
        ],
        "Resource": [
            "arn:aws:glue:us-east-1:123456789012:catalog",
            "arn:aws:glue:us-east-1:123456789012:database/*",
            "arn:aws:glue:us-east-1:123456789012:table/*",
            "arn:aws:glue:us-east-1:123456789012:userDefinedFunction/*"
        ]
    },
    {
        "Effect": "Allow",
        "Action": [
            "lakeformation:GetDataAccess"
        ],
        "Resource": [
            "*"
        ]
    }
]
}
```

------

### `StopQueryExecution`
<a name="athena-iam-stopqueryexecution"></a>

*Recursos*

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement":[
    {
        "Effect": "Allow",
        "Action": [
            "athena:stopQueryExecution"
        ],
        "Resource": [
            "arn:aws:athena:us-east-1:123456789012:workgroup/*"
        ]
    }
    ]
}
```

### `GetQueryExecution`
<a name="athena-iam-getqueryexecution"></a>

*Recursos*

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement":[
    {
        "Effect": "Allow",
        "Action": [
            "athena:getQueryExecution"
        ],
        "Resource": [
            "arn:aws:athena:us-east-1:123456789012:workgroup/*"
        ]
    }
    ]
}
```

### `GetQueryResults`
<a name="athena-iam-getqueryresults"></a>

*Recursos*

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement":[
    {
        "Effect": "Allow",
        "Action": [
            "athena:getQueryResults"
        ],
        "Resource": [
            "arn:aws:athena:us-east-1:123456789012:workgroup/*"
        ]
    },
    {
        "Effect": "Allow",
        "Action": [
            "s3:GetObject"
        ],
        "Resource": [
            "arn:aws:s3:::*"
        ]
    }
    ]
}
```

# Ejecute 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 la AWS nube. En esta página se enumeran los estados compatibles AWS Batch APIs y se proporciona un ejemplo de `Task` estado para realizar una tarea de procesamiento por lotes.

Para obtener más 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 principales de la AWS Batch integración optimizada**  
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 de `Task` estado en el que se envía un AWS Batch trabajo y se 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,
        "Arguments": {
        "Key1": "value1",
        "Key2": 100
        },
        "RetryStrategy": {
        "Attempts": 1
        },
        "Tags": {
        "Tag": "TAG"
        },
        "Timeout": {
        "AttemptDurationSeconds": 10
        }
    }
}
```

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

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

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

En las siguientes plantillas de ejemplo, se muestra cómo se AWS Step Functions generan las 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": "*"
        }
    ]
}
```

------

# Invocación y personalización de los modelos de Amazon Bedrock con Step Functions
<a name="connect-bedrock"></a>

Puede integrar Step Functions con Amazon Bedrock para invocar un modelo de Amazon Bedrock específico y crear un trabajo de ajuste para personalizar un modelo. En esta página se muestra el Amazon Bedrock optimizado APIs y se proporciona un `Task` estado de ejemplo para extraer el resultado de la invocación de un modelo.

Para obtener más 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).

**sugerencia**  
Para implementar un ejemplo de flujo de trabajo que se integre con Amazon Bedrock, consulte[Realizar encadenamiento de peticiones de IA con Amazon Bedrock](sample-bedrock-prompt-chaining.md).

## Amazon Bedrockintegración de servicios APIs
<a name="connect-bedrock-custom-apis"></a>

Para realizar AWS Step Functions la integraciónAmazon Bedrock, puede utilizar lo siguiente APIs. APIs Son similares a los correspondientes Amazon Bedrock APIs, excepto que *InvokeModel*tienen campos de solicitud adicionales.

**API de Amazon Bedrock - [CreateModelCustomizationJob](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_CreateModelCustomizationJob.html)**  
Crea un trabajo de microajuste para personalizar un modelo base. Puedes invocar la API de integración de Step Functions **CreateModelCustomizationJob**para los patrones de integración *Request Response* o **CreateModelCustomizationJob.sync** para *Run a Job (.sync)*. No hay diferencias en los campos de las llamadas a la API.

**API de Amazon Bedrock - [InvokeModel](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_InvokeModel.html)**  
Invoca el modelo de Amazon Bedrock especificado para ejecutar la inferencia utilizando la entrada proporcionada en el cuerpo de la solicitud `InvokeModel` sirve para ejecutar la inferencia para modelos de texto, modelos de imagen y modelos de incrustación.

El cuerpo de la solicitud de la API de integración de Amazon Bedrock servicios *InvokeModel*incluye los siguientes parámetros adicionales.
+ `Body`: especifica los datos de entrada en el formato especificado en el encabezado de la solicitud del tipo de contenido. `Body` contiene parámetros específicos del modelo de destino.

  Si utiliza la API `InvokeModel`, debe especificar el parámetro `Body`. Step Functions no valida la entrada que proporcionada en `Body`.

  Al especificar `Body` utilizando la integración optimizada de Amazon Bedrock, puede especificar una carga útil de hasta 256 KiB. Si su carga útil supera 256 KiB, le recomendamos que utilice `Input`.
+ `Input`: especifica el origen del que se van a recuperar los datos de entrada. Este campo opcional es específico de una integración optimizada de Amazon Bedrock con Step Functions. En este campo, puede especificar un `S3Uri`.

  Puede especificar `Body` en los Parámetros o `Input`, pero no ambos.

  Si especifica `Input` sin especificar `ContentType`, el tipo de contenido del origen de datos de entrada pasa a ser el valor de `ContentType`.
+ `Output`: especifica el destino en el que se escribe la respuesta de la API. Este campo opcional es específico de una integración optimizada de Amazon Bedrock con Step Functions. En este campo, puede especificar un `S3Uri`.

  Si especifica este campo, el cuerpo de la respuesta de la API se sustituye por una referencia a la ubicación de Amazon S3 de la salida original.

En el siguiente ejemplo, se muestra la sintaxis de la InvokeModel API para Amazon Bedrock la integración.

```
{
    "ModelId": String,  // required
    "Accept": String,  // default: application/json
    "ContentType": String,  // default: application/json
    "Input": {  // not from Bedrock API
        "S3Uri": String
    },  
    "Output": {  // not from Bedrock API
        "S3Uri": String
    } 
}
```

## Definición del estado Task para la integración de Amazon Bedrock
<a name="connect-bedrock-task-definition"></a>

La siguiente definición del estado Task muestra cómo puede integrar Amazon Bedrock en sus máquinas de estado. Este ejemplo muestra un estado Task que extrae el resultado completo de la invocación del modelo especificada en la ruta, `result_one`. Se basa en los [parámetros de inferencia de los modelos fundacionales](https://docs.aws.amazon.com/bedrock/latest/userguide/model-parameters.html). En este ejemplo se utiliza el modelo de lenguaje grande (LLM) de Cohere Command.

```
{
  "Type": "Task",
  "Resource": "arn:aws:states:::bedrock:invokeModel",
  "Arguments": {
    "ModelId": "cohere.command-text-v14",
    "Body": {
      "prompt": "{% states.input.prompt_one %}",
      "max_tokens": 20
    },
    "ContentType": "application/json",
    "Accept": "*/*"
  },
  "End": true
}
```

## IAM policies for calling Amazon Bedrock
<a name="bedrock-iam"></a>

Al crear una máquina de estado mediante la consola, Step Functions crea automáticamente un rol de ejecución para la máquina de estado con los privilegios mínimos necesarios. Estas IAM funciones generadas automáticamente son válidas para la máquina Región de AWS en la que se crea la máquina de estados.

Le recomendamos que, al crear políticas de IAM, no incluya caracteres comodín en las políticas. Como práctica recomendada de seguridad, debe reducir el alcance de las políticas en la medida de lo posible. Debe usar políticas dinámicas solo cuando no se conozcan ciertos parámetros de entrada durante el tiempo de ejecución.

Las siguientes plantillas de ejemplo muestran cómo se AWS Step Functions generan las 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).

### Ejemplos de políticas de IAM para la integración de Amazon Bedrock
<a name="bedrock-iam-policy-eg"></a>

En la siguiente sección se describen los permisos de IAM que necesita según la API de Amazon Bedrock que utilice para un modelo fundacional o aprovisionado específico. En esta sección también se incluyen ejemplos de políticas que otorgan acceso total.

Recuerde sustituir el *italicized* texto por la información específica del recurso.
+ [IAMejemplo de política para acceder a un modelo de base específico utilizando InvokeModel](#bedrock-policy-invoke-foundation-model)
+ [IAMejemplo de política para acceder a un modelo aprovisionado específico mediante InvokeModel](#bedrock-policy-invoke-provisioned-model)
+ [Ejemplo de IAM política de acceso completo a utilizar InvokeModel](#bedrock-policy-invokemodel-full-access)
+ [Ejemplo de política de IAM para acceder a un modelo fundacional específico como modelo base](#bedrock-policy-foundation-model)
+ [Ejemplo de política de IAM para acceder a un modelo personalizado específico como modelo base](#bedrock-policy-custom-model)
+ [Ejemplo de IAM política de acceso completo para usar CreateModelCustomizationJob .sync](#bedrock-policy-createmodel-full-access)
+ [IAMejemplo de política para acceder a un modelo básico específico mediante CreateModelCustomizationJob .sync](#bedrock-policy-createmodel-sync-foundation-model)
+ [IAMejemplo de política para acceder a un modelo personalizado mediante .sync CreateModelCustomizationJob](#bedrock-policy-createmodel-sync-custom-model)
+ [Ejemplo de IAM política de acceso completo para usar .sync CreateModelCustomizationJob](#bedrock-policy-createmodel-sync-full-access)

#### IAMejemplo de política para acceder a un modelo de base específico utilizando InvokeModel
<a name="bedrock-policy-invoke-foundation-model"></a>

El siguiente es un ejemplo IAM de política para una máquina de estados que accede a un modelo básico específico denominado `amazon.titan-text-express-v1` mediante la acción de la [InvokeModel](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_InvokeModel.html)API.

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Sid": "InvokeModel1",
            "Action": [
                "bedrock:InvokeModel"
            ],
            "Resource": [
                "arn:aws:bedrock:us-east-1::foundation-model/amazon.titan-text-express-v1"
            ]
        }
    ]
}
```

#### IAMejemplo de política para acceder a un modelo aprovisionado específico mediante InvokeModel
<a name="bedrock-policy-invoke-provisioned-model"></a>

El siguiente es un ejemplo IAM de política para una máquina de estados que accede a un modelo aprovisionado específico denominado `c2oi931ulksx` mediante la acción de la [InvokeModel](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_InvokeModel.html)API.

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Sid": "InvokeModel1",
      "Action": [
        "bedrock:InvokeModel"
      ],
      "Resource": [
        "arn:aws:bedrock:us-east-1:123456789012:provisioned-model/c2oi931ulksx"
      ]
    }
  ]
}
```

#### Ejemplo de IAM política de acceso completo a utilizar InvokeModel
<a name="bedrock-policy-invokemodel-full-access"></a>

El siguiente es un ejemplo IAM de política para una máquina de estados que proporciona acceso total cuando se utiliza la acción de la [InvokeModel](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_InvokeModel.html)API.

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Sid": "InvokeModel1",
            "Action": [
                "bedrock:InvokeModel"
            ],
            "Resource": [
                "arn:aws:bedrock:us-east-1::foundation-model/*",
                "arn:aws:bedrock:us-east-1:123456789012:provisioned-model/*"
            ]
        }
    ]
}
```

#### Ejemplo de política de IAM para acceder a un modelo fundacional específico como modelo base
<a name="bedrock-policy-foundation-model"></a>

El siguiente es un ejemplo de IAM política para que una máquina de estados acceda a un modelo básico específico `amazon.titan-text-express-v1` denominado modelo base mediante la acción de la [CreateModelCustomizationJob](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_CreateModelCustomizationJob.html)API.

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Sid": "CreateModelCustomizationJob1",
            "Action": [
                "bedrock:CreateModelCustomizationJob"
            ],
            "Resource": [
                "arn:aws:bedrock:us-east-1::foundation-model/amazon.titan-text-express-v1",
                "arn:aws:bedrock:us-east-1:123456789012:custom-model/*",
                "arn:aws:bedrock:us-east-1:123456789012:model-customization-job/*"
            ]
        },
        {
            "Effect": "Allow",
            "Sid": "CreateModelCustomizationJob2",
            "Action": [
                "iam:PassRole"
            ],
            "Resource": [
                "arn:aws:iam::123456789012:role/myRole"            
            ]
        }
    ] 
}
```

#### Ejemplo de política de IAM para acceder a un modelo personalizado específico como modelo base
<a name="bedrock-policy-custom-model"></a>

El siguiente es un ejemplo IAM de política para que una máquina de estados acceda a un modelo personalizado específico como modelo base mediante la acción de la [CreateModelCustomizationJob](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_CreateModelCustomizationJob.html)API.

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Sid": "CreateModelCustomizationJob1",
            "Action": [
                "bedrock:CreateModelCustomizationJob"
            ],
            "Resource": [
                "arn:aws:bedrock:us-east-1:123456789012:custom-model/*",
                "arn:aws:bedrock:us-east-1:123456789012:model-customization-job/*"
            ]
        },
        {
            "Effect": "Allow",
            "Sid": "CreateModelCustomizationJob2",
            "Action": [
                "iam:PassRole"
            ],
            "Resource": [
                "arn:aws:iam::123456789012:role/myRoleName"            
            ]
        }
    ] 
}
```

#### Ejemplo de IAM política de acceso completo para usar CreateModelCustomizationJob .sync
<a name="bedrock-policy-createmodel-full-access"></a>

El siguiente es un ejemplo IAM de política para una máquina de estados que proporciona acceso total cuando se utiliza la acción de la [CreateModelCustomizationJob](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_CreateModelCustomizationJob.html)API.

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Sid": "CreateModelCustomizationJob1",
            "Action": [
                "bedrock:CreateModelCustomizationJob"
            ],
            "Resource": [
                "arn:aws:bedrock:us-east-1::foundation-model/*",
                "arn:aws:bedrock:us-east-1:123456789012:custom-model/*",
                "arn:aws:bedrock:us-east-1:123456789012:model-customization-job/*"
            ]
        },
        {
            "Effect": "Allow",
            "Sid": "CreateModelCustomizationJob2",
            "Action": [
                "iam:PassRole"
            ],
            "Resource": [
                "arn:aws:iam::123456789012:role/myRole"            
            ]
        }
    ] 
}
```

#### IAMejemplo de política para acceder a un modelo básico específico mediante CreateModelCustomizationJob .sync
<a name="bedrock-policy-createmodel-sync-foundation-model"></a>

El siguiente es un ejemplo IAM de política para que una máquina de estados acceda a un modelo básico específico denominado `amazon.titan-text-express-v1` mediante la acción de la API [CreateModelCustomizationJob.sync.](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_CreateModelCustomizationJob.html)

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Sid": "CreateModelCustomizationJob1",
            "Action": [
                "bedrock:CreateModelCustomizationJob"
            ],
            "Resource": [
                "arn:aws:bedrock:us-east-1::foundation-model/amazon.titan-text-express-v1",
                "arn:aws:bedrock:us-east-1:123456789012:custom-model/*",
                "arn:aws:bedrock:us-east-1:123456789012:model-customization-job/*"
            ]
        },
        {
            "Effect": "Allow",
            "Sid": "CreateModelCustomizationJob2",
            "Action": [
                "bedrock:GetModelCustomizationJob",
                "bedrock:StopModelCustomizationJob"
            ],
            "Resource": [
                "arn:aws:bedrock:us-east-1:123456789012:model-customization-job/*"
            ]
        },
        {
            "Effect": "Allow",
            "Sid": "CreateModelCustomizationJob3",
            "Action": [
                "iam:PassRole"
            ],
            "Resource": [
                "arn:aws:iam::123456789012:role/myRole"            
            ]
        }
    ]
}
```

#### IAMejemplo de política para acceder a un modelo personalizado mediante .sync CreateModelCustomizationJob
<a name="bedrock-policy-createmodel-sync-custom-model"></a>

El siguiente es un ejemplo IAM de política para que una máquina de estados acceda a un modelo personalizado mediante la acción de la API [CreateModelCustomizationJob.sync.](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_CreateModelCustomizationJob.html)

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Sid": "CreateModelCustomizationJob1",
            "Action": [
                "bedrock:CreateModelCustomizationJob"
            ],
            "Resource": [
                "arn:aws:bedrock:us-east-1:123456789012:custom-model/*",
                "arn:aws:bedrock:us-east-1:123456789012:model-customization-job/*"
            ]
        },
        {
            "Effect": "Allow",
            "Sid": "CreateModelCustomizationJob2",
            "Action": [
                "bedrock:GetModelCustomizationJob",
                "bedrock:StopModelCustomizationJob"
            ],
            "Resource": [
                "arn:aws:bedrock:us-east-1:123456789012:model-customization-job/*"
            ]
        },
        {
            "Effect": "Allow",
            "Sid": "CreateModelCustomizationJob3",
            "Action": [
                "iam:PassRole"
            ],
            "Resource": [
                "arn:aws:iam::123456789012:role/myRole"            
            ]
        }
    ]
}
```

#### Ejemplo de IAM política de acceso completo para usar .sync CreateModelCustomizationJob
<a name="bedrock-policy-createmodel-sync-full-access"></a>

El siguiente es un ejemplo IAM de política para una máquina de estados que proporciona acceso total cuando se utiliza la acción de la API [CreateModelCustomizationJob.sync.](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_CreateModelCustomizationJob.html)

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Sid": "CreateModelCustomizationJob1",
            "Action": [
                "bedrock:CreateModelCustomizationJob"
            ],
            "Resource": [
                "arn:aws:bedrock:us-east-1::foundation-model/*",
                "arn:aws:bedrock:us-east-1:123456789012:custom-model/*",
                "arn:aws:bedrock:us-east-1:123456789012:model-customization-job/*"
            ]
        },
        {
            "Effect": "Allow",
            "Sid": "CreateModelCustomizationJob2",
            "Action": [
                "bedrock:GetModelCustomizationJob",
                "bedrock:StopModelCustomizationJob"
            ],
            "Resource": [
                "arn:aws:bedrock:us-east-1:123456789012:model-customization-job/*"
            ]
        },
        {
            "Effect": "Allow",
            "Sid": "CreateModelCustomizationJob3",
            "Action": [
                "iam:PassRole"
            ],
            "Resource": [
                "arn:aws:iam::123456789012:role/myRole"            
            ]
        }
    ]
}
```

# Administra AWS CodeBuild compilaciones con Step Functions
<a name="connect-codebuild"></a>

Puedes integrar Step Functions AWS CodeBuild para iniciar, detener y gestionar compilaciones. En esta página se enumeran las funciones compatibles CodeBuild APIs que puede utilizar con Step Functions.

Para obtener más 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).

Con la integración de Step Functions, AWS CodeBuild puedes usar Step Functions para activar, detener y gestionar compilaciones, y compartir informes de compilación. Con Step Functions puede diseñar y ejecutar canalizaciones de integración continua para validar los cambios de software para las aplicaciones.

**Características clave de la CodeBuild integración optimizada**  
Se admite el patrón de integración [Ejecutar un trabajo (.sync)](connect-to-resource.md#connect-sync).
Después de llamar `StopBuild` o`StopBuildBatch`, la compilación o el lote de compilación no se pueden eliminar inmediatamente hasta que se complete algún trabajo interno CodeBuild para finalizar el estado de la compilación o las compilaciones.   
Si se intenta usar `BatchDeleteBuilds` o `DeleteBuildBatch` durante este período, no se podrá eliminar la compilación o el lote de compilación.   
Las integraciones de servicios optimizados para `BatchDeleteBuilds` y `DeleteBuildBatch` incluyen un reintento interno para simplificar el caso de uso de eliminar justo después de detener.

No todos APIs admiten todos los patrones de integración, como se muestra en la siguiente tabla.


| API | Respuesta de la solicitud | Ejecutar un trabajo (.sync) | 
| --- | --- | --- | 
| StartBuild | Soportado | Soportado | 
| StopBuild |  compatible | No compatible | 
| BatchDeleteBuilds |  compatible | No compatible | 
| BatchGetReports |  compatible | No compatible | 
| StartBuildBatch | Soportado | Soportado | 
| StopBuildBatch |  compatible | No compatible | 
| RetryBuildBatch | Soportado | Soportado | 
| DeleteBuildBatch |  compatible | No compatible | 

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

## Optimizado CodeBuild APIs
<a name="connect-codebuild-api"></a>
+ [https://docs.aws.amazon.com/codebuild/latest/APIReference/API_StartBuild.html#API_StartBuild_RequestSyntax](https://docs.aws.amazon.com/codebuild/latest/APIReference/API_StartBuild.html#API_StartBuild_RequestSyntax)
+ [https://docs.aws.amazon.com/codebuild/latest/APIReference/API_StopBuild.html](https://docs.aws.amazon.com/codebuild/latest/APIReference/API_StopBuild.html)
+ [https://docs.aws.amazon.com/codebuild/latest/APIReference/API_BatchDeleteBuilds.html](https://docs.aws.amazon.com/codebuild/latest/APIReference/API_BatchDeleteBuilds.html)
+ [https://docs.aws.amazon.com/codebuild/latest/APIReference/API_BatchGetReports.html](https://docs.aws.amazon.com/codebuild/latest/APIReference/API_BatchGetReports.html)
+ [https://docs.aws.amazon.com/codebuild/latest/APIReference/API_StartBuildBatch.html](https://docs.aws.amazon.com/codebuild/latest/APIReference/API_StartBuildBatch.html)
+ [https://docs.aws.amazon.com/codebuild/latest/APIReference/API_StopBuildBatch.html](https://docs.aws.amazon.com/codebuild/latest/APIReference/API_StopBuildBatch.html)
+ [https://docs.aws.amazon.com/codebuild/latest/APIReference/API_RetryBuildBatch.html](https://docs.aws.amazon.com/codebuild/latest/APIReference/API_RetryBuildBatch.html)
+ [https://docs.aws.amazon.com/codebuild/latest/APIReference/API_DeleteBuildBatch.html](https://docs.aws.amazon.com/codebuild/latest/APIReference/API_DeleteBuildBatch.html)

**nota**  
Al usarlo JSONPath, puede usar el operador de descenso recursivo (`..`) para proporcionar parámetros para`BatchDeleteBuilds`. Con la matriz devuelta, puedes transformar el campo `Arn` desde `StartBuild` en un parámetro plural `Ids`, según se muestra en el siguiente ejemplo.  

```
"BatchDeleteBuilds": {
    "Type": "Task",
    "Resource": "arn:aws:states:::codebuild:batchDeleteBuilds",
    "Arguments": {
        "Ids.$": "$.Build..Arn"
    },
    "Next": "MyNextState"
},
```

## Políticas de IAM para las llamadas AWS CodeBuild
<a name="codebuild-iam"></a>

En las siguientes plantillas de ejemplo, se muestra cómo se AWS Step Functions generan las 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).

*Recursos:*

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Action": [
                "sns:Publish"
            ],
            "Resource": [
                "arn:aws:sns:us-east-1:123456789012:StepFunctionsSample-CodeBuildExecution1111-2222-3333-wJalrXUtnFEMI-SNSTopic-bPxRfiCYEXAMPLEKEY"
            ],
            "Effect": "Allow"
        },
        {
            "Action": [
                "codebuild:StartBuild",
                "codebuild:StopBuild",
                "codebuild:BatchGetBuilds",
                "codebuild:BatchGetReports"
            ],
            "Resource": "*",
            "Effect": "Allow"
        },
        {
            "Action": [
                "events:PutTargets",
                "events:PutRule",
                "events:DescribeRule"
            ],
            "Resource": [
                "arn:aws:events:us-east-1:123456789012:rule/StepFunctionsGetEventForCodeBuildStartBuildRule"
            ],
            "Effect": "Allow"
        }
    ]
}
```

### `StartBuild`
<a name="codebuild-iam-startbuild"></a>

*Recursos estáticos*

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "codebuild:StartBuild",
        "codebuild:StopBuild",
        "codebuild:BatchGetBuilds"
      ],
      "Resource": [
        "arn:aws:codebuild:us-east-1:123456789012:project/myProjectName"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "events:PutTargets",
        "events:PutRule",
        "events:DescribeRule"
      ],
      "Resource": [
        "arn:aws:events:us-east-1:123456789012:rule/StepFunctionsGetEventForCodeBuildStartBuildRule"
      ]
    }
  ]
}
```

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "codebuild:StartBuild"
      ],
      "Resource": [
        "arn:aws:codebuild:us-east-1:123456789012:project/myProjectName"
      ]
    }
  ]
}
```

------

*Recursos dinámicos*

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "codebuild:StartBuild",
        "codebuild:StopBuild",
        "codebuild:BatchGetBuilds"
      ],
      "Resource": [
        "arn:aws:codebuild:us-east-1:*:project/*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "events:PutTargets",
        "events:PutRule",
        "events:DescribeRule"
      ],
      "Resource": [
        "arn:aws:events:us-east-1:123456789012:rule/StepFunctionsGetEventForCodeBuildStartBuildRule"
      ]
    }
  ]
}
```

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "codebuild:StartBuild"
      ],
      "Resource": [
        "arn:aws:codebuild:us-east-1:*:project/*"
      ]
    }
  ]
}
```

------

### `StopBuild`
<a name="codebuild-iam-stopbuild"></a>

*Recursos estáticos*

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "codebuild:StopBuild"
      ],
      "Resource": [
        "arn:aws:codebuild:us-east-1:123456789012:project/myProjectName"
      ]
    }
  ]
}
```

*Recursos dinámicos*

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "codebuild:StopBuild"
      ],
      "Resource": [
        "arn:aws:codebuild:us-east-1:*:project/*"
      ]
    }
  ]
}
```

### `BatchDeleteBuilds`
<a name="codebuild-iam-batchdeletebuilds"></a>

*Recursos estáticos*

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "codebuild:BatchDeleteBuilds"
      ],
      "Resource": [
        "arn:aws:codebuild:us-east-1:123456789012:project/myProjectName"
      ]
    }
  ]
}
```

*Recursos dinámicos*

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "codebuild:BatchDeleteBuilds"
      ],
      "Resource": [
        "arn:aws:codebuild:us-east-1:*:project/*"
      ]
    }
  ]
}
```

### `BatchGetReports`
<a name="codebuild-iam-batchgetreports"></a>

*Recursos estáticos*

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "codebuild:BatchGetReports"
      ],
      "Resource": [
        "arn:aws:codebuild:us-east-1:123456789012:report-group/myReportName"
      ]
    }
  ]
}
```

*Recursos dinámicos*

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "codebuild:BatchGetReports"
      ],
      "Resource": [
        "arn:aws:codebuild:us-east-1:*:report-group/*"
      ]
    }
  ]
}
```

### `StartBuildBatch`
<a name="codebuild-iam-startbuildbatch"></a>

*Recursos estáticos*

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "codebuild:StartBuildBatch",
                "codebuild:StopBuildBatch",
                "codebuild:BatchGetBuildBatches"
            ],
            "Resource": [
                "arn:aws:codebuild:us-east-1:123456789012:project/myProjectName"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "events:PutTargets",
                "events:PutRule",
                "events:DescribeRule"
            ],
            "Resource": [
                "arn:aws:events:us-east-1:123456789012:rule/StepFunctionsGetEventForCodeBuildStartBuildBatchRule"
            ]
        }
    ]
}
```

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "codebuild:StartBuildBatch"
            ],
            "Resource": [
                "arn:aws:codebuild:us-east-1:123456789012:project/myProjectName"
            ]
        }
    ]
}
```

------

*Recursos dinámicos*

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "codebuild:StartBuildBatch",
                "codebuild:StopBuildBatch",
                "codebuild:BatchGetBuildBatches"
            ],
            "Resource": [
                "arn:aws:codebuild:us-east-1:123456789012:project/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "events:PutTargets",
                "events:PutRule",
                "events:DescribeRule"
            ],
            "Resource": [
                "arn:aws:events:us-east-1:123456789012:rule/StepFunctionsGetEventForCodeBuildStartBuildBatchRule"
            ]
        }
    ]
}
```

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "codebuild:StartBuildBatch"
            ],
            "Resource": [
                "arn:aws:codebuild:us-east-1:123456789012:project/*"
            ]
        }
    ]
}
```

------

### `StopBuildBatch`
<a name="codebuild-iam-stopbuildbatch"></a>

*Recursos estáticos*

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "codebuild:StopBuildBatch"
            ],
            "Resource": [
                "arn:aws:codebuild:us-east-1:123456789012:project/myProjectName"
            ]
        }
    ]
}
```

*Recursos dinámicos*

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "codebuild:StopBuildBatch"
            ],
            "Resource": [
                "arn:aws:codebuild:us-east-1:123456789012:project/*"
            ]
        }
    ]
}
```

### `RetryBuildBatch`
<a name="codebuild-iam-retrybuildbatch"></a>

*Recursos estáticos*

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "codebuild:RetryBuildBatch",
                "codebuild:StopBuildBatch",
                "codebuild:BatchGetBuildBatches"
            ],
            "Resource": [
                "arn:aws:codebuild:us-east-1:123456789012:project/myProjectName"
            ]
        }
    ]
}
```

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "codebuild:RetryBuildBatch"
            ],
            "Resource": [
                "arn:aws:codebuild:us-east-1:123456789012:project/myProjectName"
            ]
        }
    ]
}
```

------

*Recursos dinámicos*

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "codebuild:RetryBuildBatch",
                "codebuild:StopBuildBatch",
                "codebuild:BatchGetBuildBatches"
            ],
            "Resource": [
                "arn:aws:codebuild:us-east-1:123456789012:project/*"
            ]
        }
    ]
}
```

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "codebuild:RetryBuildBatch"
            ],
            "Resource": [
                "arn:aws:codebuild:us-east-1:123456789012:project/*"
            ]
        }
    ]
}
```

------

### `DeleteBuildBatch`
<a name="codebuild-iam-deletebuildbatch"></a>

*Recursos estáticos*

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "codebuild:DeleteBuildBatch"
            ],
            "Resource": [
                "arn:aws:codebuild:us-east-1:123456789012:project/myProjectName"
            ]
        }
    ]
}
```

*Recursos dinámicos*

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "codebuild:DeleteBuildBatch"
            ],
            "Resource": [
                "arn:aws:codebuild:us-east-1:123456789012:project/*"
            ]
        }
    ]
}
```

# Realización de operaciones CRUD de DynamoDB con Step Functions
<a name="connect-ddb"></a>

Puede integrar Step Functions con DynamoDB para realizar operaciones de CRUD en una tabla de DynamoDB. En esta página se enumeran los DynamoDB compatibles y se proporciona un `Task` ejemplo de estado para recuperar un elemento de APIs DynamoDB.

Para obtener más 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 principales de la integración optimizada de DynamoDB**  
No hay ninguna optimización específica para el patrón de integración [Respuesta de la solicitud](connect-to-resource.md#connect-default).
No se admite el patrón de integración [Cómo esperar una devolución de llamada con el token de tarea](connect-to-resource.md#connect-wait-token).
Solo las acciones de la API [https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_GetItem.html](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_GetItem.html), [https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_PutItem.html](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_PutItem.html), [https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_UpdateItem.html](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_UpdateItem.html) y [https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_DeleteItem.html](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_DeleteItem.html) están disponibles a través de la integración optimizada. Otras acciones de la API, como las que [https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_CreateTable.html](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_CreateTable.html)están disponibles mediante la integración del SDK de AWS DynamoDB. 

A continuación se muestra un ejemplo de estado `Task` que recupera un mensaje de DynamoDB.

```
"Read next Message from DynamoDB": {
    "Type": "Task",
    "Resource": "arn:aws:states:::dynamodb:getItem",
    "Arguments": {
        "TableName": "DYNAMO_DB_TABLE_NAME",
        "Key": {
            "MessageId": {"S": "{% $List[0] %}"}
        }
    }
```

Para ver este estado en un ejemplo de trabajo, consulte la plantilla de inicio [Transferencia de registros de datos con Lambda, DynamoDB y Amazon SQS](sample-project-transfer-data-sqs.md).

**Diferencias de prefijo de excepción**  
Cuando las conexiones estándar de DynamoDB experimentan un error, el prefijo de excepción será `DynamoDb` (mayúsculas y minúsculas combinadas).  
En el caso de las integraciones optimizadas, el prefijo de excepción será `DynamoDB` (`DB` en mayúscula). 

**Cuota para datos de entrada o de resultados**  
Al enviar o recibir datos entre servicios, la entrada o resultado máximo de una tarea es de 256 KiB de datos como cadena codificada en UTF-8. Consulte [Cuotas relacionadas con ejecuciones de máquinas de estado](service-quotas.md#service-limits-state-machine-executions).

## DynamoDB optimizado APIs
<a name="connect-dynamodb-api"></a>
+ [https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_GetItem.html](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_GetItem.html)
+ [https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_PutItem.html](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_PutItem.html)
+ [https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_DeleteItem.html](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_DeleteItem.html)
+ [https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_UpdateItem.html](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_UpdateItem.html)

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

## Políticas de IAM para llamar a DynamoDB
<a name="dynamo-iam"></a>

Las siguientes plantillas de ejemplo muestran cómo se AWS Step Functions generan las políticas de IAM en función de los recursos de la definición de su máquina estatal. 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).

*Recursos estáticos*

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "dynamodb:GetItem",
                "dynamodb:PutItem",
                "dynamodb:UpdateItem",
                "dynamodb:DeleteItem"
            ],
            "Resource": [
                "arn:aws:dynamodb:us-east-1:123456789012:table/myTableName"
            ]
        }
    ]
}
```

*Recursos dinámicos*

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "dynamodb:GetItem",
                "dynamodb:PutItem",
                "dynamodb:UpdateItem",
                "dynamodb:DeleteItem"
            ],
            "Resource": "*"
        }
    ]
}
```

*Para obtener más información sobre las políticas de IAM para todas las acciones de la API de DynamoDB, consulte [Políticas de IAM con DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/using-identity-based-policies.html) en la Guía para desarrolladores de Amazon DynamoDB*. *Además, para obtener información sobre las políticas de IAM para PartiQL para DynamoDB, consulte [Políticas de IAM con PartiQL para DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ql-iam.html) en la Guía para desarrolladores de Amazon DynamoDB*.

# Ejecución de tareas de Amazon ECS o Fargate utilizando Step Functions
<a name="connect-ecs"></a>

Aprenda a integrar Step Functions con Amazon ECS o Fargate para ejecutar y administrar tareas. En Amazon ECS, una tarea es la unidad de cálculo fundamental. Las tareas se definen mediante una definición de tareas que especifica cómo debe ejecutarse un contenedor de Docker, incluida la imagen del contenedor, los límites de CPU y memoria, la configuración de la red y otros parámetros. En esta página se enumeran las acciones de la API de Amazon ECS disponibles y se proporcionan instrucciones sobre cómo pasar datos a una tarea de Amazon ECS mediante Step Functions.

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 la ECS/Fargate integración optimizada de Amazon**  
Se admite el patrón de integración [Ejecutar un trabajo (.sync)](connect-to-resource.md#connect-sync).
`ecs:runTask` puede devolver una respuesta HTTP 200, pero tiene un campo `Failures` que no está vacío de la siguiente manera:  
**Respuesta de la solicitud**: devuelve la respuesta y no se producen errores en la tarea, lo que es igual que las integraciones no optimizadas.
**Ejecutar un trabajo o un token de tarea**: si se encuentra un campo `Failures` que no está vacío, se produce un error `AmazonECS.Unknown` en la tarea.

## Amazon optimizado ECS/Fargate APIs
<a name="connect-ecs-api"></a>
+ [https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_RunTask.html](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_RunTask.html) comienza una tarea nueva utilizando la definición de tarea especificada.

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

## Pasar datos a una tarea de Amazon ECS
<a name="connect-ecs-pass-to"></a>

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

Puede utilizar `overrides` para anular el comando predeterminado de un contenedor y pasar información de entrada a las tareas de Amazon ECS. Consulte [https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_ContainerOverride.html](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_ContainerOverride.html). En el ejemplo, hemos utilizado JsonPath para pasar valores `Task` de la entrada al `Task` estado.

El ejemplo siguiente incluye un estado `Task` que ejecuta una tarea de Amazon ECS y espera a que finalice.

```
{
 "StartAt": "Run an ECS Task and wait for it to complete",
 "States": {
   "Run an ECS Task and wait for it to complete": {
     "Type": "Task",
     "Resource": "arn:aws:states:::ecs:runTask.sync",
     "Arguments": {
                "Cluster": "cluster-arn",
                "TaskDefinition": "job-id",
                "Overrides": {
                    "ContainerOverrides": [
                        {
                            "Name": "container-name",
                            "Command": "{% $state.input.commands %}" 
                        }
                    ]
                }
            },
     "End": true
    }
  }
}
```

La línea `Command` en `ContainerOverrides` pasa los comandos de la entrada de estado al contenedor.

En la máquina de estado del ejemplo anterior, con la siguiente entrada, cada uno de los comandos se pasaría como una anulación del contenedor:

```
{
  "commands": [
    "test command 1",
    "test command 2",
    "test command 3"
  ]
}
```

El ejemplo siguiente incluye un estado `Task` que ejecuta una tarea de Amazon ECS y, a continuación, espera a que se devuelva el token de tarea. Consulte [Cómo esperar una devolución de llamada con el token de tarea](connect-to-resource.md#connect-wait-token).

```
{  
   "StartAt":"Manage ECS task",
   "States":{  
      "Manage ECS task":{  
         "Type":"Task",
         "Resource":"arn:aws:states:::ecs:runTask.waitForTaskToken",
         "Arguments":{  
            "LaunchType":"FARGATE",
            "Cluster":"cluster-arn",
            "TaskDefinition":"job-id",
            "Overrides":{  
               "ContainerOverrides":[  
                  {  
                     "Name":"container-name",
                     "Environment":[  
                        {  
                           "Name" : "TASK_TOKEN_ENV_VARIABLE",
                           "Value" : "{% $states.context.Task.Token %}"
                        }
                     ]
                  }
               ]
            }
         },
         "End":true
      }
   }
}
```

## Políticas de IAM para llamar a Amazon ECS/AWS Fargate
<a name="ecs-iam"></a>

Las siguientes plantillas de ejemplo muestran cómo se AWS Step Functions generan las 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).

Dado que el valor de `TaskId` no se conoce hasta que se envía la tarea, Step Functions crea una política de `"Resource": "*"` con más privilegios.

**nota**  
Solo se puede detener tareas de Amazon Elastic Container Service (Amazon ECS) que se hayan iniciado con Step Functions, independientemente de la política de IAM `"*"`.

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

*Recursos estáticos*

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ecs:RunTask"
            ],
            "Resource": [
                "arn:aws:ecs:region:
account-id:task-definition/taskDefinition:revisionNumber"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "ecs:StopTask",
                "ecs:DescribeTasks"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "events:PutTargets",
                "events:PutRule",
                "events:DescribeRule"
            ],
            "Resource": [
               "arn:aws:events:region:
account-id:rule/StepFunctionsGetEventsForECSTaskRule"
            ]
        }
    ]
}
```

*Recursos dinámicos*

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ecs:RunTask",
                "ecs:StopTask",
                "ecs:DescribeTasks"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "events:PutTargets",
                "events:PutRule",
                "events:DescribeRule"
            ],
            "Resource": [
               "arn:aws:events:region:
account-id:rule/StepFunctionsGetEventsForECSTaskRule"
            ]
        }
    ]
}
```

------
#### [ Request Response and Callback (.waitForTaskToken) ]

*Recursos estáticos*

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ecs:RunTask"
            ],
            "Resource": [
                "arn:aws:ecs:region:
account-id:task-definition/taskDefinition:revisionNumber"
            ]
        }
    ]
}
```

*Recursos dinámicos*

****  

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

------

Si sus tareas programadas de Amazon ECS requieren el uso de una función de ejecución de tareas, una función de tarea o una anulación de la función de tarea, debe añadir `iam:PassRole` permisos para cada función de ejecución de tareas, función de tarea o anulación de función de tarea a la función IAM de CloudWatch eventos de la entidad que realiza la llamada, que en este caso es Step Functions.

# Creación y administración de clústeres de Amazon EKS con Step Functions
<a name="connect-eks"></a>

Aprenda a integrar Step Functions con Amazon EKS para administrar los clústeres de Kubernetes. Step Functions ofrece dos tipos de integración de servicios APIs para la integración con Amazon Elastic Kubernetes Service. Una le permite usar Amazon EKS APIs para crear y administrar un clúster de Amazon EKS. El otro le permite interactuar con el clúster mediante la API de Kubernetes y ejecutar trabajos como parte del flujo de trabajo de la aplicación.

 Puede utilizar las integraciones de la API de Kubernetes con los clústeres de Amazon EKS creados con Step Functions, con los clústeres de Amazon EKS creados con la herramienta **eksctl** o la consola de [Amazon EKS](https://console.aws.amazon.com/eks/home), o métodos similares. Para obtener más información, consulte [Creación de un clúster de Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/create-cluster.html) en la Guía del usuario de Amazon EKS.

Para obtener más 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 principales de la integración optimizada de Amazon EKS**  
Se admite el patrón de integración [Ejecutar un trabajo (.sync)](connect-to-resource.md#connect-sync).
No hay optimizaciones específicas para el patrón de integración [Respuesta de la solicitud](connect-to-resource.md#connect-default).
No se admite el patrón de integración [Cómo esperar una devolución de llamada con el token de tarea](connect-to-resource.md#connect-wait-token).

**nota**  
La integración EKS de Step Functions solo es compatible con Kubernetes APIs con acceso a puntos finales públicos. De forma predeterminada, los puntos de conexión del servidor API de los clústeres EKS tienen acceso público. Para obtener más información, consulte [Control de acceso al punto de conexión del clúster de Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/cluster-endpoint.html) en la **Guía del usuario de Amazon EKS**.

Step Functions no finaliza automáticamente un clúster de Amazon EKS si se detiene la ejecución. Si su máquina de estado se detiene antes de que su clúster de Amazon EKS finalice, es posible que el clúster siga ejecutándose indefinidamente y que se acumulen cargos adicionales. Para evitarlo, asegúrese de que cualquier clúster de Amazon EKS que cree finalice correctamente. Para obtener más información, consulte lo siguiente:
+ [Eliminación de un clúster](https://docs.aws.amazon.com/eks/latest/userguide/create-cluster.html) en la Guía del usuario de Amazon EKS.
+ [Ejecutar un trabajo (.sync)](connect-to-resource.md#connect-sync) en patrones de integración de servicios

**Cuota para datos de entrada o de resultados**  
Al enviar o recibir datos entre servicios, la entrada o resultado máximo de una tarea es de 256 KiB de datos como cadena codificada en UTF-8. Consulte [Cuotas relacionadas con ejecuciones de máquinas de estado](service-quotas.md#service-limits-state-machine-executions).

## Integraciones de API de Kubernetes
<a name="connect-eks-kubernetes-apis"></a>

Step Functions es compatible con los siguientes Kubernetes APIs:

### RunJob
<a name="connect-eks-kubernetes-apis-runjob"></a>

La integración del servicio `eks:runJob` le permite ejecutar un trabajo en el clúster de Amazon EKS. Con la variante `eks:runJob.sync`, puede esperar a que se complete el trabajo y, opcionalmente, recuperar los registros.

El servidor de la API de Kubernetes debe conceder permisos al rol de IAM que utiliza la máquina de estado. Para obtener más información, consulte [Permisos](#connect-eks-permissions).

Para el patrón **Ejecutar un trabajo** (`.sync`), el estado del trabajo se determina mediante un sondeo. Step Functions sondea inicialmente a una velocidad de aproximadamente 1 sondeo por minuto. Con el tiempo, esta velocidad se reduce a aproximadamente 1 encuesta cada 5 minutos. Si necesita sondeos más frecuentes o necesita tener más control sobre la estrategia de sondeo, puede utilizar la integración `eks:call` para consultar el estado del trabajo.

La integración`eks:runJob` es específica de los trabajos de Kubernetes `batch/v1`. Para obtener más información, consulte [Trabajos](https://kubernetes.io/docs/concepts/workloads/controllers/job/) en la documentación de Kubernetes. Si quiere gestionar otros recursos de Kubernetes, incluidos los recursos personalizados, utilice la integración del servicio `eks:call`. Puede usar Step Functions para crear bucles de sondeo, como se ilustra en el proyecto de muestra [Sondeo del estado de trabajos utilizando Lambda y AWS Batch](sample-project-job-poller.md). 

Entre los parámetros admitidos se incluyen:
+ `ClusterName`: el nombre del clúster de Amazon EKS al que desea llamar.
  + `Type`: `String`
  + Obligatorio: sí
+ `CertificateAuthority`: los datos de certificados codificados en Base64 necesarios para comunicarse con el clúster. Puede obtener este valor en la [consola de Amazon EKS](https://console.aws.amazon.com/eks/home) o mediante la [DescribeCluster](https://docs.aws.amazon.com/eks/latest/APIReference/API_DescribeCluster.html)API de Amazon EKS.
  + `Type`: `String`
  + Obligatorio: sí
+ `Endpoint`: el punto de conexión del servidor de la API de Kubernetes. Puede obtener este valor en la [consola de Amazon EKS](https://console.aws.amazon.com/eks/home) o mediante la [DescribeCluster](https://docs.aws.amazon.com/eks/latest/APIReference/API_DescribeCluster.html)API de Amazon EKS.
  + `Type`: `String`
  + Obligatorio: sí
+ `Namespace`: el espacio de nombres en el que se ejecutará el trabajo. Si no se proporciona, se utiliza el espacio de nombres `default`.
  + `Type`: `String`
  + Obligatorio: no
+ `Job`: la definición del trabajo de Kubernetes. Consulte [Trabajos](https://kubernetes.io/docs/concepts/workloads/controllers/job/) en la documentación de Kubernetes. 
  + `Type`: `JSON` o `String`
  + Obligatorio: sí
+ `LogOptions`: un conjunto de opciones para controlar la recuperación opcional de registros. Solo se aplica si se utiliza el patrón de integración del servicio Ejecutar un trabajo (.sync) para esperar a que finalice el trabajo.
  + `Type`: `JSON`
  + Obligatorio: no
  + Los registros se incluyen en la respuesta, debajo de la clave `logs`. Es posible que haya varios pods en la tarea, cada uno con varios contenedores.

    ```
    { 
      ...
      "logs": { 
        "pods": { 
          "pod1": { 
            "containers": { 
              "container1": { 
                "log": <log> 
              },
              ...
            }
          },
          ...
        }
      }
    ```
  + La recuperación de registros se realiza en la medida de lo posible. Si se produce un error al recuperar un registro, en lugar del campo `log` aparecerán los campos `error` y `cause`.
+ `LogOptions.RetrieveLogs`: habilite la recuperación del registro una vez finalizado el trabajo. De forma predeterminada, los registros no se recuperan.
  + `Type`: `Boolean`
  + Obligatorio: no
+ `LogOptions.RawLogs`: si `RawLogs` se establece en true, los registros se devolverán como cadenas brutas sin intentar analizarlos para convertirlos en JSON. De forma predeterminada, los registros se deserializan en JSON si es posible. En algunos casos, este análisis puede introducir cambios no deseados, como limitar la precisión de los números que contienen muchos dígitos.
  + `Type`: `Boolean`
  + Obligatorio: no
+ `LogOptions.LogParameters`: la API Leer registro de Kubernetes admite parámetros de consulta para controlar la recuperación de registros. Por ejemplo, puede usar `tailLines` o `limitBytes` para limitar el tamaño de los registros recuperados y permanecer dentro de la cuota de tamaño de datos de Step Functions. Para obtener más información, consulte sección [Leer registro](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.27/#read-log-pod-v1-core) de la referencia de la API de Kubernetes.
  + `Type: `Mapa de `String` a `List of Strings`
  + Obligatorio: no
  + Ejemplo:

    ```
    "LogParameters": {
      "tailLines": [ "6" ]
    }
    ```

En el siguiente ejemplo se incluye un estado `Task` que ejecuta un trabajo, espera a que se complete y, posteriormente, recupera los registros del trabajo:

```
{
  "StartAt": "Run a job on EKS",
  "States": {
    "Run a job on EKS": {
      "Type": "Task",
      "Resource": "arn:aws:states:::eks:runJob.sync",
      "Arguments": {
        "ClusterName": "MyCluster",
        "CertificateAuthority": "ANPAJ2UCCR6DPCEXAMPLE",
        "Endpoint": "https://AKIAIOSFODNN7EXAMPLE.yl4.us-east-1.eks.amazonaws.com",
        "LogOptions": {
          "RetrieveLogs": true
        },
        "Job": {
          "apiVersion": "batch/v1",
          "kind": "Job",
          "metadata": {
            "name": "example-job"
          },
          "spec": {
            "backoffLimit": 0,
            "template": {
              "metadata": {
                "name": "example-job"
              },
              "spec": {
                "containers": [
                  {
                    "name": "pi-2000",
                    "image": "perl",
                    "command": [ "perl" ],
                    "args": [
                      "-Mbignum=bpi",
                      "-wle",
                      "print bpi(2000)"
                    ]
                  }
                ],
                "restartPolicy": "Never"
              }
            }
          }
        }
      },
      "End": true
    }
  }
}
```

### `Call`
<a name="connect-eks-kubernetes-apis-call"></a>

La integración del servicio `eks:call` le permite usar la API de Kubernetes para leer y escribir objetos de recursos de Kubernetes a través de un punto de conexión de la API de Kubernetes. 

El servidor de la API de Kubernetes debe conceder permisos al rol de IAM que utiliza la máquina de estado. Para obtener más información, consulte [Permisos](#connect-eks-permissions).

Para obtener más información sobre estas operaciones disponibles, consulte la [Referencia de la API de Kubernetes](https://kubernetes.io/docs/reference/kubernetes-api/).

Entre los parámetros admitidos para `Call` se incluyen:
+ `ClusterName`: el nombre del clúster de Amazon EKS al que desea llamar.
  + `Type`: cadena
  + Obligatorio: sí
+ `CertificateAuthority`: los datos de certificados codificados en Base64 necesarios para comunicarse con el clúster. Puede obtener este valor en la [consola de Amazon EKS](https://console.aws.amazon.com/eks/home) o mediante la [DescribeCluster](https://docs.aws.amazon.com/eks/latest/APIReference/API_DescribeCluster.html)API de Amazon EKS.
  + `Type`: `String`
  + Obligatorio: sí
+ `Endpoint`: el punto de conexión del servidor de la API de Kubernetes. Puede encontrar este valor en la [consola de Amazon EKS](https://console.aws.amazon.com/eks/home) o mediante la DescribeCluster API de Amazon EKS.
  + `Type`: `String`
  + Obligatorio: sí
+ `Method`: el método HTTP de su solicitud. Puede ser uno de los siguientes: `GET`, `POST`, `PUT`, `DELETE`, `HEAD` o `PATCH`.
  + `Type`: `String`
  + Obligatorio: sí
+ `Path`: la ruta HTTP de la operación de la API de REST de Kubernetes.
  + `Type`: `String`
  + Obligatorio: sí
+ `QueryParameters`: los parámetros de consulta HTTP de la operación de la API de REST de Kubernetes.
  + `Type: `Mapa de `String` a `List of Strings`
  + Obligatorio: no
  + Ejemplo:

    ```
    "QueryParameters": {
      "labelSelector": [ "job-name=example-job" ]
    }
    ```
+ `RequestBody`: el cuerpo del mensaje HTTP de la operación de la API de REST de Kubernetes.
  + `Type`: `JSON` o `String`
  + Obligatorio: no

El ejemplo siguiente incluye un estado `Task` que utiliza `eks:call` para enumerar los pods que pertenecen al trabajo `example-job`.

```
{
  "StartAt": "Call EKS",
  "States": {
    "Call EKS": {
      "Type": "Task",
      "Resource": "arn:aws:states:::eks:call",
      "Arguments": {
        "ClusterName": "MyCluster",
        "CertificateAuthority": "ANPAJ2UCCR6DPCEXAMPLE",
        "Endpoint": "https://444455556666.yl4.us-east-1.eks.amazonaws.com",
        "Method": "GET",
        "Path": "/api/v1/namespaces/default/pods",
        "QueryParameters": {
          "labelSelector": [
            "job-name=example-job"
          ]
        }
      },
      "End": true
    }
  }
}
```

El ejemplo siguiente incluye un estado `Task` que utiliza `eks:call` para eliminar el trabajo `example-job` y establece la `propagationPolicy` para garantizar que también se eliminan los pods del trabajo.

```
{
  "StartAt": "Call EKS",
  "States": {
    "Call EKS": {
      "Type": "Task",
      "Resource": "arn:aws:states:::eks:call",
      "Arguments": {
        "ClusterName": "MyCluster",
        "CertificateAuthority": "ANPAJ2UCCR6DPCEXAMPLE",
        "Endpoint": "https://444455556666.yl4.us-east-1.eks.amazonaws.com",
        "Method": "DELETE",
        "Path": "/apis/batch/v1/namespaces/default/jobs/example-job",
        "QueryParameters": {
          "propagationPolicy": [
            "Foreground"
          ]
        }
      },
      "End": true
    }
  }
}
```

## Amazon EKS optimizado APIs
<a name="connect-eks-apis"></a>

Amazon EKS APIs y la sintaxis compatibles incluyen:
+ [https://docs.aws.amazon.com/eks/latest/APIReference/API_CreateCluster.html](https://docs.aws.amazon.com/eks/latest/APIReference/API_CreateCluster.html)
  +  [Sintaxis de la solicitud](https://docs.aws.amazon.com/eks/latest/APIReference/API_CreateCluster.html#API_CreateCluster_RequestSyntax) 
  +  [Sintaxis de la respuesta](https://docs.aws.amazon.com/eks/latest/APIReference/API_CreateCluster.html#API_CreateCluster_ResponseSyntax) 

    Cuando se crea un clúster de Amazon EKS mediante la integración del servicio `eks:createCluster`, el rol de IAM se añade a la tabla de autorización de RBAC de Kubernetes como administrador (con permisos system:masters). Inicialmente, solo esa entidad de IAM puede realizar llamadas al servidor de la API de Kubernetes. Para obtener más información, consulte lo siguiente:
    + [Administración de usuarios o roles de IAM para su clúster](https://docs.aws.amazon.com/eks/latest/userguide/add-user-role.html) en la *Guía del usuario de Amazon EKS*. 
    + La sección [Permisos](#connect-eks-permissions) 

    Amazon EKS utiliza roles vinculados a un servicio que contienen los permisos que Amazon EKS necesita para llamar a otros servicios en su nombre. Si estos roles vinculados a servicios aún no existen en su cuenta, debe añadir el permiso `iam:CreateServiceLinkedRole` al rol de IAM que utiliza Step Functions. Para obtener más información, consulte [Uso de roles vinculados a servicios](https://docs.aws.amazon.com/eks/latest/userguide/using-service-linked-roles.html) en la *Guía del usuario de Amazon EKS*.

    El rol de IAM utilizado por Step Functions debe tener permisos `iam:PassRole` para transferir el rol de IAM del clúster a Amazon EKS. Para obtener más información, consulte [Rol de IAM de clúster de Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/service_IAM_role.html) en la *Guía del usuario de Amazon EKS*. 
+ [https://docs.aws.amazon.com/eks/latest/APIReference/API_DeleteCluster.html](https://docs.aws.amazon.com/eks/latest/APIReference/API_DeleteCluster.html)
  +  [Sintaxis de la solicitud](https://docs.aws.amazon.com/eks/latest/APIReference/API_DeleteCluster.html#API_DeleteCluster_RequestSyntax) 
  +  [Sintaxis de la respuesta](https://docs.aws.amazon.com/eks/latest/APIReference/API_DeleteCluster.html#API_DeleteCluster_ResponseSyntax) 

    Debe eliminar todos los perfiles o grupos de nodos de Fargate antes de eliminar un clúster.
+ [https://docs.aws.amazon.com/eks/latest/APIReference/API_CreateFargateProfile.html](https://docs.aws.amazon.com/eks/latest/APIReference/API_CreateFargateProfile.html)
  +  [Sintaxis de la solicitud](https://docs.aws.amazon.com/eks/latest/APIReference/API_CreateFargateProfile.html#API_CreateFargateProfile_RequestSyntax) 
  +  [Sintaxis de la respuesta](https://docs.aws.amazon.com/eks/latest/APIReference/API_CreateFargateProfile.html#API_CreateFargateProfile_ResponseSyntax) 

    Amazon EKS utiliza roles vinculados a un servicio que contienen los permisos que Amazon EKS necesita para llamar a otros servicios en su nombre. Si estos roles vinculados a servicios aún no existen en su cuenta, debe añadir el permiso `iam:CreateServiceLinkedRole` al rol de IAM que utiliza Step Functions. Para obtener más información, consulte [Uso de roles vinculados a servicios](https://docs.aws.amazon.com/eks/latest/userguide/using-service-linked-roles.html) en la *Guía del usuario de Amazon EKS*.

    Es posible que Amazon EKS o Fargate no estén disponibles en todas las regiones. Para obtener información sobre la disponibilidad de la región, consulte la sección sobre [Fargate](https://docs.aws.amazon.com/eks/latest/userguide/fargate.html) en la *Guía del usuario de Amazon EKS*.

    El rol de IAM utilizado por Step Functions debe tener permisos `iam:PassRole` para transferir el rol de IAM de la ejecución de pods a Amazon EKS. Para obtener más información, consulte [Rol de ejecución de pod](https://docs.aws.amazon.com/eks/latest/userguide/pod-execution-role.html) en la *guía del usuario de Amazon EKS*. 
+ [https://docs.aws.amazon.com/eks/latest/APIReference/API_DeleteFargateProfile.html](https://docs.aws.amazon.com/eks/latest/APIReference/API_DeleteFargateProfile.html)
  +  [Sintaxis de la solicitud](https://docs.aws.amazon.com/eks/latest/APIReference/API_DeleteFargateProfile.html#API_DeleteFargateProfile_RequestSyntax) 
  +  [Sintaxis de la respuesta](https://docs.aws.amazon.com/eks/latest/APIReference/API_DeleteFargateProfile.html#API_DeleteFargateProfile_ResponseSyntax) 
+ [https://docs.aws.amazon.com/eks/latest/APIReference/API_CreateNodegroup.html](https://docs.aws.amazon.com/eks/latest/APIReference/API_CreateNodegroup.html)
  +  [Sintaxis de la solicitud](https://docs.aws.amazon.com/eks/latest/APIReference/API_CreateNodegroup.html#API_CreateNodegroup_RequestSyntax) 
  +  [Sintaxis de la respuesta](https://docs.aws.amazon.com/eks/latest/APIReference/API_CreateNodegroup.html#API_CreateNodegroup_ResponseSyntax) 

    Amazon EKS utiliza roles vinculados a un servicio que contienen los permisos que Amazon EKS necesita para llamar a otros servicios en su nombre. Si estos roles vinculados a servicios aún no existen en su cuenta, debe añadir el permiso `iam:CreateServiceLinkedRole` al rol de IAM que utiliza Step Functions. Para obtener más información, consulte [Uso de roles vinculados a servicios](https://docs.aws.amazon.com/eks/latest/userguide/using-service-linked-roles.html) en la *Guía del usuario de Amazon EKS*. 

    El rol de IAM utilizado por Step Functions debe tener permisos `iam:PassRole` para transferir el rol de IAM del nodo a Amazon EKS. Para obtener más información, consulte [Uso de roles vinculados a servicios](https://docs.aws.amazon.com/eks/latest/userguide/create-node-role.html) en la *Guía del usuario de Amazon EKS*.
+ [https://docs.aws.amazon.com/eks/latest/APIReference/API_DeleteNodegroup.html](https://docs.aws.amazon.com/eks/latest/APIReference/API_DeleteNodegroup.html)
  +  [Sintaxis de la solicitud](https://docs.aws.amazon.com/eks/latest/APIReference/API_DeleteNodegroup.html#API_DeleteNodegroup_RequestSyntax) 
  +  [Sintaxis de la respuesta](https://docs.aws.amazon.com/eks/latest/APIReference/API_DeleteNodegroup.html#API_DeleteNodegroup_ResponseSyntax) 

El ejemplo siguiente incluye una `Task` que crea un clúster de Amazon EKS.

```
{
  "StartAt": "CreateCluster.sync",
  "States": {
    "CreateCluster.sync": {
      "Type": "Task",
      "Resource": "arn:aws:states:::eks:createCluster.sync",
      "Arguments": {
        "Name": "MyCluster",
        "ResourcesVpcConfig": {
          "SubnetIds": [
            "subnet-053e7c47012341234",
            "subnet-027cfea4b12341234"
          ]
        },
        "RoleArn": "arn:aws:iam::account-id:role/MyEKSClusterRole"
      },
      "End": true
    }
  }
}
```

El ejemplo siguiente incluye un estado `Task` que elimina un clúster de Amazon EKS.

```
{
  "StartAt": "DeleteCluster.sync",
  "States": {
    "DeleteCluster.sync": {
      "Type": "Task",
      "Resource": "arn:aws:states:::eks:deleteCluster.sync",
      "Arguments": {
        "Name": "MyCluster"
      },
      "End": true
    }
  }
}
```

El ejemplo siguiente incluye un estado `Task` que crea un perfil de Fargate.

```
{
  "StartAt": "CreateFargateProfile.sync",
  "States": {
    "CreateFargateProfile.sync": {
      "Type": "Task",
      "Resource": "arn:aws:states:::eks:createFargateProfile.sync",
      "Arguments": {
        "ClusterName": "MyCluster",
        "FargateProfileName": "MyFargateProfile",
        "PodExecutionRoleArn": "arn:aws:iam::account-id:role/MyFargatePodExecutionRole",
        "Selectors": [{
            "Namespace": "my-namespace",
            "Labels": { "my-label": "my-value" }
          }]
      },
      "End": true
    }
  }
}
```

El ejemplo siguiente incluye un estado `Task` que elimina un perfil de Fargate.

```
{
  "StartAt": "DeleteFargateProfile.sync",
  "States": {
    "DeleteFargateProfile.sync": {
      "Type": "Task",
      "Resource": "arn:aws:states:::eks:deleteFargateProfile.sync",
      "Arguments": {
        "ClusterName": "MyCluster",
        "FargateProfileName": "MyFargateProfile"
      },
      "End": true
    }
  }
}
```

El ejemplo siguiente incluye un estado `Task` que crea un grupo de nodos.

```
{
  "StartAt": "CreateNodegroup.sync",
  "States": {
    "CreateNodegroup.sync": {
      "Type": "Task",
      "Resource": "arn:aws:states:::eks:createNodegroup.sync",
      "Arguments": {
        "ClusterName": "MyCluster",
        "NodegroupName": "MyNodegroup",
        "NodeRole": "arn:aws:iam::account-id:role/MyNodeInstanceRole",
        "Subnets": ["subnet-09fb51df01234", "subnet-027cfea4b1234"] 
      },
      "End": true
    }
  }
}
```

El ejemplo siguiente incluye un estado `Task` que elimina un grupo de nodos.

```
{
  "StartAt": "DeleteNodegroup.sync",
  "States": {
    "DeleteNodegroup.sync": {
      "Type": "Task",
      "Resource": "arn:aws:states:::eks:deleteNodegroup.sync",
      "Arguments": {
        "ClusterName": "MyCluster",
        "NodegroupName": "MyNodegroup"
      },
      "End": true
    }
  }
}
```

## Permisos
<a name="connect-eks-permissions"></a>

Cuando se crea un clúster de Amazon EKS mediante la integración del servicio `eks:createCluster`, el rol de IAM se añade a la tabla de autorización de RBAC de Kubernetes como administrador, con permisos `system:masters`. Inicialmente, solo esa entidad de IAM puede realizar llamadas al servidor de la API de Kubernetes. Por ejemplo, no se podrá usar **kubectl** para interactuar con el servidor de API de Kubernetes, a menos que se asuma el mismo rol que su máquina de estado de Step Functions o si configura Kubernetes para conceder permisos a entidades de IAM adicionales. Para obtener más información, consulte [Administración de usuarios o roles de IAM para su clúster](https://docs.aws.amazon.com/eks/latest/userguide/add-user-role.html) en la *Guía del usuario de Amazon EKS*. 

Puede añadir permisos para entidades de IAM adicionales, como usuarios o roles, añadiéndolas al `aws-auth` `ConfigMap` en el espacio de nombres kube-system. Si va a crear el clúster a partir de Step Functions, utilice la integración del servicio `eks:call`. 

El ejemplo siguiente incluye un estado `Task` que crea un `aws-auth` `ConfigMap` y otorga un permiso `system:masters` al usuario `arn:aws:iam::account-id:user/my-user` y al rol de IAM `arn:aws:iam::account-id:role/my-role`.

```
{
  "StartAt": "Add authorized user",
  "States": {
    "Add authorized user": {
      "Type": "Task",
      "Resource": "arn:aws:states:::eks:call",
      "Arguments": {
        "ClusterName": "MyCluster",
        "CertificateAuthority": "LS0tLS1CRUd...UtLS0tLQo=",
        "Endpoint": "https://444455556666.yl4.region.eks.amazonaws.com",
        "Method": "POST",
        "Path": "/api/v1/namespaces/kube-system/configmaps",
        "RequestBody": {
           "apiVersion": "v1",
           "kind": "ConfigMap",
           "metadata": {
              "name": "aws-auth",
              "namespace": "kube-system"
           },
           "data": {
             "mapUsers": "[{ \"userarn\": \"arn:aws:iam::account-id:user/my-user\", \"username\": \"my-user\", \"groups\": [ \"system:masters\" ] } ]",
             "mapRoles": "[{ \"rolearn\": \"arn:aws:iam::account-id:role/my-role\", \"username\": \"my-role\", \"groups\": [ \"system:masters\" ] } ]"
           }
        }
      },
      "End": true
    }
  }
```

**nota**  
Puede que se vea el ARN de un rol de IAM en un formato que incluya la ruta **/service-role/**, como `arn:aws:iam::account-id:role/service-role/my-role`. Este token de ruta **service-role** no debe incluirse al enumerar el rol en `aws-auth`.

Cuando el clúster se crea por primera vez, `aws-auth` `ConfigMap` no existirá, sino que se agregará automáticamente si crea un perfil de Fargate. Puede recuperar el valor actual de `aws-auth`, añadir los permisos adicionales y `PUT` una nueva versión. Por lo general, es más sencillo crear `aws-auth` antes que el perfil de Fargate.

Si el clúster se creó fuera de Step Functions, puede configurar **kubectl** para que se comunique con su servidor de API de Kubernetes. A continuación, se crea un nuevo `aws-auth` `ConfigMap` mediante `kubectl apply -f aws-auth.yaml` o se edita uno que ya exista mediante `kubectl edit -n kube-system configmap/aws-auth`. Para obtener más información, consulte lo siguiente:
+  [Crear un kubeconfig para Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/create-kubeconfig.html) en la *Guía del usuario de Amazon EKS*. 
+  [Administración de usuarios o roles de IAM para su clúster](https://docs.aws.amazon.com/eks/latest/userguide/add-user-role.html) en la *Guía del usuario de Amazon EKS*. 

Si el rol de IAM no tiene permisos suficientes en Kubernetes, las integraciones de servicios `eks:call` o `eks:runJob` generarán el siguiente error:

```
Error:
EKS.401

Cause:
{
  "ResponseBody": {
    "kind": "Status",
    "apiVersion": "v1",
    "metadata": {},
    "status": "Failure",
    "message": "Unauthorized",
    "reason": "Unauthorized",
    "code": 401
  },
  "StatusCode": 401,
  "StatusText": "Unauthorized"
}
```

## Políticas de IAM para llamar a Amazon EKS
<a name="eks-iam"></a>

Las siguientes plantillas de ejemplo muestran cómo se AWS Step Functions generan las 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).

### `CreateCluster`
<a name="eks-iam-createcluster"></a>

*Recursos*

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "eks:CreateCluster"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "eks:DescribeCluster",
                "eks:DeleteCluster"
            ],
            "Resource": "arn:aws:eks:us-east-1:444455556666:cluster/*"
        },
        {
            "Effect": "Allow",
            "Action": "iam:PassRole",
            "Resource": [
                "arn:aws:iam::444455556666:role/StepFunctionsSample-EKSClusterManag-EKSServiceRole-ANPAJ2UCCR6DPCEXAMPLE"
            ],
            "Condition": {
                "StringEquals": {
                    "iam:PassedToService": "eks.amazonaws.com"
                }
            }
        }
    ]
}
```

```


```

### `CreateNodeGroup`
<a name="eks-iam-createnodegroup"></a>

*Recursos*

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ec2:DescribeSubnets",
                "eks:CreateNodegroup"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "eks:DescribeNodegroup",
                "eks:DeleteNodegroup"
            ],
            "Resource": "arn:aws:eks:us-east-1:444455556666:nodegroup/*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "iam:GetRole",
                "iam:ListAttachedRolePolicies"
            ],
            "Resource": "arn:aws:iam::444455556666:role/*"
        },
        {
            "Effect": "Allow",
            "Action": "iam:PassRole",
            "Resource": [
                "arn:aws:iam::444455556666:role/StepFunctionsSample-EKSClusterMan-NodeInstanceRole-ANPAJ2UCCR6DPCEXAMPLE"
            ],
            "Condition": {
                "StringEquals": {
                    "iam:PassedToService": "eks.amazonaws.com"
                }
            }
        }
    ]
}
```

### `DeleteCluster`
<a name="eks-iam-deletecluster"></a>

*Recursos*

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "eks:DeleteCluster",
                "eks:DescribeCluster"
            ],
            "Resource": [
                "arn:aws:eks:us-east-1:444455556666:cluster/ExampleCluster"
            ]
        }
    ]
}
```

### `DeleteNodegroup`
<a name="eks-iam-deletenodegroup"></a>

*Recursos*

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "eks:DeleteNodegroup",
                "eks:DescribeNodegroup"
            ],
            "Resource": [
                "arn:aws:eks:us-east-1:444455556666:nodegroup/ExampleCluster/ExampleNodegroup/*"
            ]
        }
    ]
}
```

Para obtener más información sobre cómo usar Amazon EKS con Step Functions, consulte [Creación y administración de clústeres de Amazon EKS con Step Functions](#connect-eks).

# Creación y administración de clústeres de Amazon EMR con Step Functions
<a name="connect-emr"></a>

Aprenda a realizar la integración AWS Step Functions con Amazon EMR mediante la integración del servicio Amazon EMR proporcionada. APIs La integración de servicios APIs es similar a la del Amazon EMR correspondiente APIs, con algunas diferencias en los campos que se pasan y en las respuestas que se devuelven.

Para obtener más 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 principales de la integración optimizada de Amazon EMR**  
La integración optimizada del servicio Amazon EMR tiene un conjunto personalizado APIs que envuelve el Amazon EMR APIs subyacente, que se describe a continuación. Por ello, difiere considerablemente de la integración del servicio Amazon EMR AWS SDK.
Se admite el patrón de integración [Ejecutar un trabajo (.sync)](connect-to-resource.md#connect-sync).

Step Functions no finaliza automáticamente un clúster de Amazon EMR si se detiene la ejecución. Si su máquina de estado se detiene antes de que su clúster de Amazon EMR finalice, es posible que el clúster siga ejecutándose indefinidamente y que se acumulen cargos adicionales. Para evitarlo, asegúrese de que cualquier clúster de Amazon EMR que cree finalice correctamente. Para obtener más información, consulte lo siguiente:
+ [Control de la terminación de los clústeres](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-plan-termination.html) en la guía del usuario de Amazon EMR.
+ La sección [Ejecutar un trabajo (.sync)](connect-to-resource.md#connect-sync) de Patrones de integración de servicios.

**nota**  
A partir de `emr-5.28.0`, puede especificar el parámetro `StepConcurrencyLevel` al crear un clúster para permitir que diferentes pasos se ejecuten en paralelo en un único clúster. Puede utilizar los estados `Map` y `Parallel` de Step Functions para enviar trabajo en paralelo al clúster.

La disponibilidad de la integración del servicio Amazon EMR está sujeta a la disponibilidad de Amazon EMR. APIs Consulte la documentación de [Amazon EMR](https://docs.aws.amazon.com//govcloud-us/latest/UserGuide/govcloud-emr.html) para conocer las limitaciones en regiones especiales.

**nota**  
Para su integración con Amazon EMR, Step Functions tiene una frecuencia de sondeo de trabajo codificada de 60 segundos durante los primeros 10 minutos y de 300 segundos después.

## Amazon EMR optimizado APIs
<a name="connect-emr-api"></a>

En la siguiente tabla se describen las diferencias entre cada API de integración de servicios de Amazon EMR y la correspondiente Amazon EMR. APIs


| API de integración de servicios de Amazon EMR | API de EMR correspondiente | Diferencias | 
| --- | --- | --- | 
| createCluster Crea y comienza a ejecutar un clúster (flujo de trabajo).  Amazon EMR está vinculado directamente a un tipo de rol de IAM único conocido como rol vinculado a servicio. Para que `createCluster` y `createCluster.sync` funcionen, tiene que tener configurados los permisos necesarios para crear el rol vinculado a servicios `AWSServiceRoleForEMRCleanup`. Para obtener más información al respecto, incluida una instrucción que puede añadir a la política de permisos de IAM, consulte [Uso del rol vinculado a servicios para Amazon EMR](https://docs.aws.amazon.com/emr/latest/ManagementGuide/using-service-linked-roles.html).  | [runJobFlow](https://docs.aws.amazon.com/emr/latest/APIReference/API_RunJobFlow.html) | createClusterutiliza la misma sintaxis de solicitud que [runJobFlow](https://docs.aws.amazon.com/emr/latest/APIReference/API_RunJobFlow.html), excepto en lo siguiente: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/step-functions/latest/dg/connect-emr.html)La respuesta es la siguiente: <pre>{<br />  "ClusterId": "string"<br />}</pre> Amazon EMR utiliza lo siguiente: <pre>{<br />  "JobFlowId": "string"<br />}</pre>  | 
| createCluster.sync Crea y comienza a ejecutar un clúster (flujo de trabajo).  | [runJobFlow](https://docs.aws.amazon.com/emr/latest/APIReference/API_RunJobFlow.html) | Lo mismo que createCluster, pero espera a que el clúster alcance el estado WAITING. | 
| setClusterTerminationProtección Bloquea un clúster (flujo de tareas) para que las EC2 instancias del clúster no se puedan cerrar mediante la intervención del usuario, una llamada a la API o un error en el flujo de tareas. | [setTerminationProtection](https://docs.aws.amazon.com/emr/latest/APIReference/API_SetTerminationProtection.html) | La solicitud utiliza:<pre>{<br />  "ClusterId": "string"<br />}</pre> Amazon EMR utiliza lo siguiente:<pre>{<br />  "JobFlowIds": ["string"]<br />}</pre>  | 
| terminateCluster Cierra un clúster (flujo de trabajo).  | [terminateJobFlows](https://docs.aws.amazon.com/emr/latest/APIReference/API_TerminateJobFlows.html) | La solicitud utiliza:<pre>{<br />  "ClusterId": "string"<br />}</pre> Amazon EMR utiliza lo siguiente:<pre>{<br />  "JobFlowIds": ["string"]<br />}</pre> | 
| terminateCluster.syncCierra un clúster (flujo de trabajo). | [terminateJobFlows](https://docs.aws.amazon.com/emr/latest/APIReference/API_TerminateJobFlows.html) | Lo mismo que terminateCluster, pero espera a que el clúster finalice. | 
| addStep Agrega un nuevo paso a un clúster en ejecución. Si lo desea, también puede especificar el parámetro `[ExecutionRoleArn](https://docs.aws.amazon.com/emr/latest/APIReference/API_AddJobFlowSteps.html#EMR-AddJobFlowSteps-request-ExecutionRoleArn)` mientras se utiliza esta API. | [addJobFlowPasos](https://docs.aws.amazon.com/emr/latest/APIReference/API_AddJobFlowSteps.html) | La solicitud utiliza la clave "ClusterId". Amazon EMR utiliza "JobFlowId". La solicitud utiliza un solo paso.<pre>{<br />  "Step": <"StepConfig object"><br />}</pre> Amazon EMR utiliza lo siguiente:<pre>{<br />  "Steps": [<StepConfig objects>]<br />}</pre> La respuesta es la siguiente:<pre>{<br />  "StepId": "string"<br />}</pre> Amazon EMR devuelve lo siguiente:<pre>{<br />  "StepIds": [<strings>]<br />}</pre>  | 
| addStep.sync Agrega un nuevo paso a un clúster en ejecución. Si lo desea, también puede especificar el parámetro `[ExecutionRoleArn](https://docs.aws.amazon.com/emr/latest/APIReference/API_AddJobFlowSteps.html#EMR-AddJobFlowSteps-request-ExecutionRoleArn)` mientras se utiliza esta API. | [addJobFlowPasos](https://docs.aws.amazon.com/emr/latest/APIReference/API_AddJobFlowSteps.html) | Lo mismo que addStep, pero espera a que el paso se complete. | 
| cancelStep Cancela un paso pendiente en un clúster en ejecución. | [cancelSteps](https://docs.aws.amazon.com/emr/latest/APIReference/API_CancelSteps.html) |  La solicitud utiliza:<pre>{<br />  "StepId": "string"<br />}</pre> Amazon EMR utiliza lo siguiente:<pre>{<br />  "StepIds": [<strings>]<br />}</pre> La respuesta es la siguiente:<pre>{<br />  "CancelStepsInfo": <CancelStepsInfo object><br />}</pre> Amazon EMR utiliza lo siguiente:<pre>{<br />  "CancelStepsInfoList": [<CancelStepsInfo objects>]<br />}</pre>  | 
| modifyInstanceFleetByName Modifica las capacidades de Spot de destino y de destino bajo demanda para la flota de instancias con el `InstanceFleetName` especificado. | [modifyInstanceFleet](https://docs.aws.amazon.com/emr/latest/APIReference/API_ModifyInstanceFleet.html) | La solicitud es la misma que para modifyInstanceFleet, excepto por lo siguiente: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/step-functions/latest/dg/connect-emr.html)  | 
| modifyInstanceGroupByName Modifica el número de nodos y las opciones de configuración de un grupo de instancias. | [modifyInstanceGroups](https://docs.aws.amazon.com/emr/latest/APIReference/API_ModifyInstanceGroups.html) | La solicitud es la siguiente:<pre>{<br />  "ClusterId": "string",<br />  "InstanceGroup": <InstanceGroupModifyConfig object><br />}</pre> Amazon EMR utiliza una lista: <pre>{<br />  "ClusterId": ["string"],<br />  "InstanceGroups": [<InstanceGroupModifyConfig objects>]<br />}</pre> En el objeto `InstanceGroupModifyConfig`, el campo `InstanceGroupId` no está permitido. Se ha añadido un nuevo campo, `InstanceGroupName`. En el tiempo de ejecución, el `InstanceGroupId` lo determina automáticamente la integración del servicio mediante una llamada a `ListInstanceGroups` y un análisis del resultado.  | 

## Ejemplo de flujo de trabajo
<a name="connect-emr-api-examples"></a>

El código siguiente incluye un estado `Task` que crea un clúster.

```
"Create_Cluster": {
    "Type": "Task",
    "Resource": "arn:aws:states:::elasticmapreduce:createCluster.sync",
    "Arguments": {
        "Name": "MyWorkflowCluster",
        "VisibleToAllUsers": true,
        "ReleaseLabel": "emr-5.28.0",
        "Applications": [
            {
                "Name": "Hive"
            }
        ],
        "ServiceRole": "EMR_DefaultRole",
        "JobFlowRole": "EMR_EC2_DefaultRole",
        "LogUri": "s3n://aws-logs-account-id-us-east-1/elasticmapreduce/",
        "Instances": {
            "KeepJobFlowAliveWhenNoSteps": true,
            "InstanceFleets": [
                {
                    "InstanceFleetType": "MASTER",
                    "Name": "MASTER",   
                    "TargetOnDemandCapacity": 1,
                    "InstanceTypeConfigs": [
                        {
                            "InstanceType": "m4.xlarge"
                        }
                    ]
                },
                {
                    "InstanceFleetType": "CORE",
                    "Name": "CORE",
                    "TargetOnDemandCapacity": 1,
                    "InstanceTypeConfigs": [
                        {
                            "InstanceType": "m4.xlarge"
                        }
                    ]
                }
            ]
        }
    },
    "End": true
}
```

El código siguiente incluye un estado `Task` que habilita la protección de la terminación. 

```
"Enable_Termination_Protection": {
    "Type": "Task",
    "Resource": "arn:aws:states:::elasticmapreduce:setClusterTerminationProtection",
    "Arguments": {
        "ClusterId": "{% $ClusterId %}",
        "TerminationProtected": true
    },
    "End": true
}
```

El código siguiente incluye un estado `Task` que envía un paso a un clúster. 

```
"Step_One": {
    "Type": "Task",
    "Resource": "arn:aws:states:::elasticmapreduce:addStep.sync",
    "Arguments": {
        "ClusterId": "{% $ClusterId %}",
        "ExecutionRoleArn": "arn:aws:iam::account-id:role/myEMR-execution-role",
        "Step": {
            "Name": "The first step",
            "ActionOnFailure": "TERMINATE_CLUSTER",
            "HadoopJarStep": {
                "Jar": "command-runner.jar",
                "Args": [
                    "hive-script",
                    "--run-hive-script",
                    "--args",
                    "-f",
                    "s3://region.elasticmapreduce.samples/cloudfront/code/Hive_CloudFront.q",
                    "-d",
                    "INPUT=s3://region.elasticmapreduce.samples",
                    "-d",
                    "OUTPUT=s3://<amzn-s3-demo-bucket>/MyHiveQueryResults/"
                ]
            }
        }
    },
    "End": true
}
```

El código siguiente incluye un estado `Task` que cancela un paso. 

```
"Cancel_Step_One": {
    "Type": "Task",
    "Resource": "arn:aws:states:::elasticmapreduce:cancelStep",
    "Arguments": {
        "ClusterId": "{% $ClusterId %}",
        "StepId": "{% $AddStepsResult.StepId %}"
    },
    "End": true
}
```

El código siguiente incluye un estado `Task` que termina un clúster. 

```
"Terminate_Cluster": {
    "Type": "Task",
    "Resource": "arn:aws:states:::elasticmapreduce:terminateCluster.sync",
    "Arguments": {
        "ClusterId": "{% $ClusterId %}",
    },
    "End": true
}
```

El código siguiente incluye un estado `Task` que escala un clúster hacia arriba o hacia abajo para un grupo de instancias.

```
"ModifyInstanceGroupByName": {
    "Type": "Task",
    "Resource": "arn:aws:states:::elasticmapreduce:modifyInstanceGroupByName",
    "Arguments": {
        "ClusterId": "j-account-id3",
        "InstanceGroupName": "MyCoreGroup",
        "InstanceGroup": {
            "InstanceCount": 8
        }
    },
    "End": true
}
```

El código siguiente incluye un estado `Task` que escala un clúster hacia arriba o hacia abajo para una flota de instancias.

```
"ModifyInstanceFleetByName": {
    "Type": "Task",
    "Resource": "arn:aws:states:::elasticmapreduce:modifyInstanceFleetByName",
    "Arguments": {
        "ClusterId": "j-account-id3",
        "InstanceFleetName": "MyCoreFleet",
        "InstanceFleet": {
            "TargetOnDemandCapacity": 8,
            "TargetSpotCapacity": 0
        }
    },
    "End": true
}
```

## Políticas de IAM para llamar a Amazon EMR
<a name="emr-iam"></a>

En las siguientes plantillas de ejemplo, se muestra cómo se AWS Step Functions generan las políticas de IAM en función de los recursos de la definición de su máquina de estado. 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).

### `addStep`
<a name="emr-iam-addstep"></a>

*Recursos estáticos*

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "elasticmapreduce:AddJobFlowSteps",
                "elasticmapreduce:DescribeStep",
                "elasticmapreduce:CancelSteps"
            ],
            "Resource": [
                "arn:aws:elasticmapreduce:us-east-1:123456789012:cluster/clusterId"
            ]
        }
    ]
}
```

*Recursos dinámicos*

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "elasticmapreduce:AddJobFlowSteps",
        "elasticmapreduce:DescribeStep",
        "elasticmapreduce:CancelSteps"
      ],
      "Resource": "arn:aws:elasticmapreduce:*:*:cluster/*"
    }
  ]
}
```

### `cancelStep`
<a name="emr-iam-cancelstep"></a>

*Recursos estáticos*

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "elasticmapreduce:CancelSteps",
            "Resource": [
                "arn:aws:elasticmapreduce:us-east-1:123456789012:cluster/myCluster-id"
            ]
        }
    ]
}
```

*Recursos dinámicos*

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "elasticmapreduce:CancelSteps",
            "Resource": "arn:aws:elasticmapreduce:*:*:cluster/*"
        }
    ]
}
```

### `createCluster`
<a name="emr-iam-createcluster"></a>

*Recursos estáticos*

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "elasticmapreduce:RunJobFlow",
        "elasticmapreduce:DescribeCluster",
        "elasticmapreduce:TerminateJobFlows"
      ],
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": "iam:PassRole",
      "Resource": [
        "arn:aws:iam::123456789012:role/myRoleName"
      ]
    }
  ]
}
```

### `setClusterTerminationProtection`
<a name="emr-iam-clusterterminationprotection"></a>

*Recursos estáticos*

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "elasticmapreduce:SetTerminationProtection",
            "Resource": [
                "arn:aws:elasticmapreduce:us-east-1:123456789012:cluster/myCluster-id"
            ]
        }
    ]
}
```

*Recursos dinámicos*

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "elasticmapreduce:SetTerminationProtection",
            "Resource": "arn:aws:elasticmapreduce:*:*:cluster/*"
        }
    ]
}
```

### `modifyInstanceFleetByName`
<a name="emr-iam-modifyinstancefleetbyname"></a>

*Recursos estáticos*

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "elasticmapreduce:ModifyInstanceFleet",
                "elasticmapreduce:ListInstanceFleets"
            ],
            "Resource": [
                "arn:aws:elasticmapreduce:us-east-1:123456789012:cluster/myCluster-id"
            ]
        }
    ]
}
```

*Recursos dinámicos*

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "elasticmapreduce:ModifyInstanceFleet",
                "elasticmapreduce:ListInstanceFleets"
            ],
            "Resource": "arn:aws:elasticmapreduce:*:*:cluster/*"
        }
    ]
}
```

### `modifyInstanceGroupByName`
<a name="emr-iam-modifyinstancegroupbyname"></a>

*Recursos estáticos*

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "elasticmapreduce:ModifyInstanceGroups",
                "elasticmapreduce:ListInstanceGroups"
            ],
            "Resource": [
                "arn:aws:elasticmapreduce:us-east-1:123456789012:cluster/myCluster-id"
            ]
        }
    ]
}
```

*Recursos dinámicos*

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "elasticmapreduce:ModifyInstanceGroups",
                "elasticmapreduce:ListInstanceGroups"
            ],
            "Resource": "*"
        }
    ]
}
```

### `terminateCluster`
<a name="emr-iam-terminatecluster"></a>

*Recursos estáticos*

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "elasticmapreduce:TerminateJobFlows",
        "elasticmapreduce:DescribeCluster"
      ],
      "Resource": [
        "arn:aws:elasticmapreduce:us-east-1:123456789012:cluster/myCluster-id"
      ]
    }
  ]
}
```

*Recursos dinámicos*

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "elasticmapreduce:TerminateJobFlows",
        "elasticmapreduce:DescribeCluster"
      ],
      "Resource": "arn:aws:elasticmapreduce:*:*:cluster/*"
    }
  ]
}
```

# Cree y gestione clústeres de Amazon EMR en EKS con AWS Step Functions
<a name="connect-emr-eks"></a>

Aprenda a realizar la integración AWS Step Functions con Amazon EMR en EKS mediante la integración del servicio Amazon EMR en EKS. APIs La integración de servicios APIs es la misma que la de Amazon EMR correspondiente en EKS APIs, pero no todas APIs admiten todos los patrones de integración, como se muestra en la siguiente tabla.

Para obtener más 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).

**En qué se diferencia la integración optimizada de Amazon EMR en EKS de la integración de Amazon EMR en el SDK de EKS AWS**  
Se admite el patrón de integración [Ejecutar un trabajo (.sync)](connect-to-resource.md#connect-sync).
No hay optimizaciones específicas para el patrón de integración [Respuesta de la solicitud](connect-to-resource.md#connect-default).
No se admite el patrón de integración [Cómo esperar una devolución de llamada con el token de tarea](connect-to-resource.md#connect-wait-token).

**nota**  
Para su integración con Amazon EMR, Step Functions tiene una frecuencia de sondeo de trabajo codificada de 60 segundos durante los primeros 10 minutos y de 300 segundos después.


| API | Respuesta de la solicitud | Ejecutar un trabajo (.sync) | 
| --- | --- | --- | 
| CreateVirtualCluster |  compatible | No compatible | 
| DeleteVirtualCluster | Soportado | Soportado | 
| StartJobRun | Soportado |  compatible | 

Amazon EMR compatible en EKS: APIs

**Cuota para datos de entrada o de resultados**  
Al enviar o recibir datos entre servicios, la entrada o resultado máximo de una tarea es de 256 KiB de datos como cadena codificada en UTF-8. Consulte [Cuotas relacionadas con ejecuciones de máquinas de estado](service-quotas.md#service-limits-state-machine-executions).


+ [https://docs.aws.amazon.com/emr-on-eks/latest/APIReference/API_CreateVirtualCluster.html](https://docs.aws.amazon.com/emr-on-eks/latest/APIReference/API_CreateVirtualCluster.html)
  + [Sintaxis de la solicitud](https://docs.aws.amazon.com/emr-on-eks/latest/APIReference/API_CreateVirtualCluster.html#API_CreateVirtualCluster_RequestSyntax)
  + [Parámetros admitidos](https://docs.aws.amazon.com/emr-on-eks/latest/APIReference/API_CreateVirtualCluster.html#API_CreateVirtualCluster_RequestBody)
  + [Sintaxis de la respuesta](https://docs.aws.amazon.com/emr-on-eks/latest/APIReference/API_CreateVirtualCluster.html#API_CreateVirtualCluster_ResponseSyntax)
+ [https://docs.aws.amazon.com/emr-on-eks/latest/APIReference/API_DeleteVirtualCluster.html](https://docs.aws.amazon.com/emr-on-eks/latest/APIReference/API_DeleteVirtualCluster.html)
  + [Sintaxis de la solicitud](https://docs.aws.amazon.com/emr-on-eks/latest/APIReference/API_DeleteVirtualCluster.html#API_DeleteVirtualCluster_RequestSyntax)
  + [Parámetros admitidos](https://docs.aws.amazon.com/emr-on-eks/latest/APIReference/API_DeleteVirtualCluster.html#API_DeleteVirtualCluster_RequestParameters)
  + [Sintaxis de la respuesta](https://docs.aws.amazon.com/emr-on-eks/latest/APIReference/API_CreateVirtualCluster.html#API_CreateVirtualCluster_ResponseSyntax)
+ [https://docs.aws.amazon.com/emr-on-eks/latest/APIReference/API_StartJobRun.html](https://docs.aws.amazon.com/emr-on-eks/latest/APIReference/API_StartJobRun.html)
  + [Sintaxis de la solicitud](https://docs.aws.amazon.com/emr-on-eks/latest/APIReference/API_StartJobRun.html#API_StartJobRun_RequestSyntax)
  + [Parámetros admitidos](https://docs.aws.amazon.com/emr-on-eks/latest/APIReference/API_StartJobRun.html#API_StartJobRun_RequestParameters)
  + [Sintaxis de la respuesta](https://docs.aws.amazon.com/emr-on-eks/latest/APIReference/API_StartJobRun.html#API_StartJobRun_ResponseSyntax)

El ejemplo siguiente incluye un estado `Task` que crea un clúster virtual.

```
"Create_Virtual_Cluster": {
  "Type": "Task",
  "Resource": "arn:aws:states:::emr-containers:createVirtualCluster",
  "Arguments": {
    "Name": "MyVirtualCluster",
    "ContainerProvider": {
      "Id": "EKSClusterName",
      "Type": "EKS",
      "Info": {
        "EksInfo": {
          "Namespace": "Namespace"
        }
      }
    }
  },
  "End": true
}
```

El ejemplo siguiente incluye un estado `Task` que envía un trabajo a un clúster virtual y espera a que finalice.

```
"Submit_Job": {
    "Type": "Task",
    "Resource": "arn:aws:states:::emr-containers:startJobRun.sync",
    "Arguments": {
      "Name": "MyJobName",
      "VirtualClusterId": "{% $VirtualClusterId %}",
      "ExecutionRoleArn": "arn:aws:iam::<accountId>:role/job-execution-role",
      "ReleaseLabel": "emr-6.2.0-latest",
      "JobDriver": {
        "SparkSubmitJobDriver": {
          "EntryPoint": "s3://<amzn-s3-demo-bucket>/jobs/trip-count.py",
          "EntryPointArguments": [
            "60"
          ],
          "SparkSubmitParameters": "--conf spark.driver.cores=2 --conf spark.executor.instances=10 --conf spark.kubernetes.pyspark.pythonVersion=3 --conf spark.executor.memory=10G --conf spark.driver.memory=10G --conf spark.executor.cores=1 --conf spark.dynamicAllocation.enabled=false"
        }
      },
      "ConfigurationOverrides": {
        "ApplicationConfiguration": [
          {
            "Classification": "spark-defaults",
            "Properties": {
              "spark.executor.instances": "2",
              "spark.executor.memory": "2G"
            }
          }
        ],
        "MonitoringConfiguration": {
          "PersistentAppUI": "ENABLED",
          "CloudWatchMonitoringConfiguration": {
            "LogGroupName": "MyLogGroupName",
            "LogStreamNamePrefix": "MyLogStreamNamePrefix"
          },
          "S3MonitoringConfiguration": {
            "LogUri": "s3://<amzn-s3-demo-logging-bucket1>"
          }
        }
      },
      "Tags": {
        "taskType": "jobName"
      }
    },
    "End": true
}
```

El ejemplo siguiente incluye un estado `Task` que elimina un clúster virtual y espera a que finalice.

```
"Delete_Virtual_Cluster": {
  "Type": "Task",
  "Resource": "arn:aws:states:::emr-containers:deleteVirtualCluster.sync",
  "Arguments": {
    "Id": "{% $states.input.VirtualClusterId %}",
  },
  "End": true
}
```

Para obtener información sobre cómo configurar IAM los permisos cuando se utilizan Step Functions con otros AWS servicios, consulte[Generación de políticas de IAM para servicios integrados por Steps Functions](service-integration-iam-templates.md).

# Creación y administración de aplicaciones Amazon EMR Serverless con Step Functions
<a name="connect-emr-serverless"></a>

Aprenda a crear, iniciar, detener y eliminar aplicaciones en EMR sin servidor mediante Step Functions. En esta página se enumeran los estados compatibles APIs y se proporcionan ejemplos de `Task` estados para realizar casos de uso comunes.

Para obtener más 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 principales de la integración optimizada de EMR Serverless**  
 La integración EMR Serverless de servicios optimizada tiene un conjunto personalizado [APIs](#connect-emr-serverless-custom-apis)que envuelve lo subyacente EMR Serverless APIs. Debido a esta personalización, la EMR Serverless integración optimizada difiere considerablemente de la integración del servicio del AWS SDK. 
Además, la integración de EMR Serverless optimizada admite el patrón de integración [Ejecutar un trabajo (.sync)](connect-to-resource.md#connect-sync).
**No** se admite el patrón de integración [Cómo esperar una devolución de llamada con el token de tarea](connect-to-resource.md#connect-wait-token).

## EMR Serverlessintegración de servicios APIs
<a name="connect-emr-serverless-custom-apis"></a>

Para realizar AWS Step Functions la integraciónEMR Serverless, puede utilizar las seis integraciones EMR Serverless de servicios siguientes APIs. Estas integraciones de servicios APIs son similares a las correspondientes EMR Serverless APIs, con algunas diferencias en los campos que se transfieren y en las respuestas que se devuelven.

En la siguiente tabla se describen las diferencias entre cada API de integración de servicios de EMR Serverless y sus API de EMR Serverless correspondientes.


| API de integración de servicios de EMR Serverless | API de EMR Serverless correspondiente | Diferencias | 
| --- | --- | --- | 
|  *createApplication* Crea una aplicación. EMR Serverless está vinculado a un tipo de rol de IAM único conocido como rol vinculado a servicio. Para que `createApplication` y `createApplication.sync` funcionen, tiene que tener configurados los permisos necesarios para crear el rol vinculado a servicios `AWSServiceRoleForAmazonEMRServerless`. Para obtener más información al respecto, incluida una instrucción que puede añadir a la política de permisos de IAM, consulte [Uso de roles vinculados a servicios para EMR Serverless](https://docs.aws.amazon.com/emr/latest/EMR-Serverless-UserGuide/using-service-linked-roles.html).  |  [CreateApplication](https://docs.aws.amazon.com/emr-serverless/latest/APIReference/API_CreateApplication.html)  | Ninguno | 
|  *createApplication.sync* Crea una aplicación.  |  [CreateApplication](https://docs.aws.amazon.com/emr-serverless/latest/APIReference/API_CreateApplication.html)  |  No hay diferencias entre las solicitudes y las respuestas de la API de EMR Serverless y la API de integración de servicios de EMR Serverless. Sin embargo, *createApplication.sync* espera a que la aplicación alcance el estado `CREATED`.  | 
|  *startApplication* Inicia una aplicación especificada e inicializa la capacidad inicial de la aplicación si está configurada.  |  [StartApplication](https://docs.aws.amazon.com/emr-serverless/latest/APIReference/API_StartApplication.html)  |  La respuesta de la API de EMR Serverless no contiene ningún dato, pero la respuesta de la API de integración de servicio EMR Serverless incluye los siguientes datos. <pre>{<br />  "ApplicationId": "string"<br />}</pre>  | 
|  *startApplication.sync* Inicia una aplicación específica e inicializa la capacidad inicial si está configurada.  |  [StartApplication](https://docs.aws.amazon.com/emr-serverless/latest/APIReference/API_StartApplication.html)  |  La respuesta de la API de EMR Serverless no contiene ningún dato, pero la respuesta de la API de integración de servicio EMR Serverless incluye los siguientes datos. <pre>{<br />  "ApplicationId": "string"<br />}</pre> Además, *startApplication.sync* espera a que la aplicación alcance el estado `STARTED`.  | 
|  *stopApplication* Detiene una aplicación especificada y libera la capacidad inicial si está configurada. Todos los trabajos programados y en ejecución deben completarse o cancelarse antes de detener una aplicación.  |  [StopApplication](https://docs.aws.amazon.com/emr-serverless/latest/APIReference/API_StopApplication.html)  |  La respuesta de la API de EMR Serverless no contiene ningún dato, pero la respuesta de la API de integración de servicio EMR Serverless incluye los siguientes datos. <pre>{<br />  "ApplicationId": "string"<br />}</pre>  | 
|  *stopApplication.sync* Detiene una aplicación especificada y libera la capacidad inicial si está configurada. Todos los trabajos programados y en ejecución deben completarse o cancelarse antes de detener una aplicación.  |  [StopApplication](https://docs.aws.amazon.com/emr-serverless/latest/APIReference/API_StopApplication.html)  |  La respuesta de la API de EMR Serverless no contiene ningún dato, pero la respuesta de la API de integración de servicio EMR Serverless incluye los siguientes datos. <pre>{<br />  "ApplicationId": "string"<br />}</pre> Además, *stopApplication.sync* espera a que la aplicación alcance el estado `STOPPED`.  | 
|  *deleteApplication* Elimina una aplicación. Para poder eliminarla, una aplicación debe estar en el estado `STOPPED` o `CREATED`.  |  [DeleteApplication](https://docs.aws.amazon.com/emr-serverless/latest/APIReference/API_DeleteApplication.html)  |  La respuesta de la API de EMR Serverless no contiene ningún dato, pero la respuesta de la API de integración de servicio EMR Serverless incluye los siguientes datos. <pre>{<br />  "ApplicationId": "string"<br />}</pre>  | 
|  *deleteApplication.sync* Elimina una aplicación. Para poder eliminarla, una aplicación debe estar en el estado `STOPPED` o `CREATED`.  |  [DeleteApplication](https://docs.aws.amazon.com/emr-serverless/latest/APIReference/API_DeleteApplication.html)  |  La respuesta de la API de EMR Serverless no contiene ningún dato, pero la respuesta de la API de integración de servicio EMR Serverless incluye los siguientes datos. <pre>{<br />  "ApplicationId": "string"<br />}</pre> Además, *stopApplication.sync* espera a que la aplicación alcance el estado `TERMINATED`.  | 
|  *startJobRun* Inicia una ejecución de trabajo.  |  [StartJobRun](https://docs.aws.amazon.com/emr-serverless/latest/APIReference/API_StartJobRun.html)  | Ninguno | 
|  *startJobRun.sync* Inicia una ejecución de trabajo.  |  [StartJobRun](https://docs.aws.amazon.com/emr-serverless/latest/APIReference/API_StartJobRun.html)  |  No hay diferencias entre las solicitudes y las respuestas de la API de EMR Serverless y la API de integración de servicios de EMR Serverless. Sin embargo, *startJobRun.sync* espera a que la aplicación alcance el estado. `SUCCESS`  | 
|  *cancelJobRun* Cancela una ejecución de trabajo.  |  [CancelJobRun](https://docs.aws.amazon.com/emr-serverless/latest/APIReference/API_CancelJobRun.html)  | Ninguno | 
|  *cancelJobRun.sync* Cancela una ejecución de trabajo.  |  [CancelJobRun](https://docs.aws.amazon.com/emr-serverless/latest/APIReference/API_CancelJobRun.html)  |  No hay diferencias entre las solicitudes y las respuestas de la API de EMR Serverless y la API de integración de servicios de EMR Serverless. Sin embargo, *cancelJobRun.sync* espera a que la aplicación alcance el estado. `CANCELLED`  | 

## Casos de uso de integración de EMR sin servidor
<a name="connect-emr-serverless-use-cases"></a>

Para la integración optimizada del servicio de EMR Serverless, se recomienda crear una sola aplicación y, a continuación, utilizarla para ejecutar varios trabajos. Por ejemplo, en una máquina de un solo estado, puede incluir varias [startJobRun](https://docs.aws.amazon.com/emr-serverless/latest/APIReference/API_StartJobRun.html)solicitudes, todas las cuales utilizan la misma aplicación. Los siguientes ejemplos de [Estado de un flujo de trabajo de tarea](state-task.md) estados muestran casos de uso EMR Serverless APIs con los que realizar la integraciónStep Functions. Para obtener información sobre otros casos de uso de EMR Serverless, consulte [Qué es Amazon EMR Serverless](https://docs.aws.amazon.com/emr/latest/EMR-Serverless-UserGuide/emr-serverless.html).

**sugerencia**  
Para implementar un ejemplo de una máquina de estado que se integre con EMR Serverless para ejecutar varios trabajos, consulte [Ejecutar un trabajo de EMR Serverless](sample-emr-serverless-job.md).
+ [Crear una aplicación](#connect-emr-serverless-task-state-createapp)
+ [Iniciar una aplicación](#connect-emr-serverless-task-state-startapp)
+ [Detener una aplicación](#connect-emr-serverless-task-state-stopapp)
+ [Eliminación de una aplicación de](#connect-emr-serverless-task-state-deleteapp)
+ [Iniciar un trabajo en una aplicación](#connect-emr-serverless-task-state-startjobrun)
+ [Cancelar un trabajo en una aplicación](#connect-emr-serverless-task-state-canceljobrun)

Para obtener información sobre cómo configurar IAM los permisos cuando se utilizan Step Functions con otros AWS servicios, consulte[Generación de políticas de IAM para servicios integrados por Steps Functions](service-integration-iam-templates.md).

En los ejemplos que se muestran en los siguientes casos de uso, sustituya el *italicized* texto por la información específica del recurso. Por ejemplo, *yourApplicationId* sustitúyalo por el ID de tu EMR Serverless aplicación, como. `00yv7iv71inak893`

### Crear una aplicación
<a name="connect-emr-serverless-task-state-createapp"></a>

En el siguiente ejemplo de estado Task se crea una aplicación mediante la API de integración del servicio *CreateApplication.sync*.

```
"Create_Application": {
    "Type": "Task",
    "Resource": "arn:aws:states:::emr-serverless:createApplication.sync",
    "Arguments": {
        "Name": "MyApplication",
        "ReleaseLabel": "emr-6.9.0",
        "Type": "SPARK"
    },
    "End": true
}
```

### Iniciar una aplicación
<a name="connect-emr-serverless-task-state-startapp"></a>

En el siguiente ejemplo de estado Task se inicia una aplicación mediante la API de integración del servicio *StartApplication.sync*.

```
"Start_Application": {
    "Type": "Task",
    "Resource": "arn:aws:states:::emr-serverless:startApplication.sync",
    "Arguments": {
        "ApplicationId": "yourApplicationId"
    },
    "End": true
}
```

### Detener una aplicación
<a name="connect-emr-serverless-task-state-stopapp"></a>

En el siguiente ejemplo de estado Task se detiene una aplicación mediante la API de integración del servicio *StopApplication.sync*.

```
"Stop_Application": {
    "Type": "Task",
    "Resource": "arn:aws:states:::emr-serverless:stopApplication.sync",
    "Arguments": {
        "ApplicationId": "yourApplicationId"
    },
    "End": true
}
```

### Eliminación de una aplicación de
<a name="connect-emr-serverless-task-state-deleteapp"></a>

En el siguiente ejemplo de estado Task se elimina una aplicación mediante la API de integración del servicio *DeleteApplication.sync*.

```
"Delete_Application": {
    "Type": "Task",
    "Resource": "arn:aws:states:::emr-serverless:deleteApplication.sync",
    "Arguments": {
        "ApplicationId": "yourApplicationId"
    },
    "End": true
}
```

### Iniciar un trabajo en una aplicación
<a name="connect-emr-serverless-task-state-startjobrun"></a>

El siguiente ejemplo de estado de tarea inicia un trabajo en una aplicación mediante la API de integración de servicios *startJobRun.sync.*

```
"Start_Job": {
    "Type": "Task",
    "Resource": "arn:aws:states:::emr-serverless:startJobRun.sync",
    "Arguments": {
        "ApplicationId": "yourApplicationId",
        "ExecutionRoleArn": "arn:aws:iam::account-id:role/myEMRServerless-execution-role",
        "JobDriver": {
            "SparkSubmit": {
                "EntryPoint": "s3://<amzn-s3-demo-bucket>/sample.py",
                "EntryPointArguments": ["1"],
                "SparkSubmitParameters": "--conf spark.executor.cores=4 --conf spark.executor.memory=4g --conf spark.driver.cores=2 --conf spark.driver.memory=4g --conf spark.executor.instances=1"
            }
        }
    },
    "End": true
}
```

### Cancelar un trabajo en una aplicación
<a name="connect-emr-serverless-task-state-canceljobrun"></a>

En el siguiente ejemplo de estado de tarea, se cancela un trabajo en una aplicación mediante la API de integración de servicios *cancelJobRun.sync.*

```
"Cancel_Job": {
    "Type": "Task",
    "Resource": "arn:aws:states:::emr-serverless:cancelJobRun.sync",
    "Arguments": {
        "ApplicationId": "{% $states.input.ApplicationId %}",
        "JobRunId": "{% $states.input.JobRunId %}"
    },
    "End": true
}
```

## Políticas de IAM para las llamadas a Amazon EMR Serverless
<a name="emr-serverless-iam"></a>

Al crear una máquina de estado mediante la consola, Step Functions crea automáticamente un rol de ejecución para la máquina de estado con los privilegios mínimos necesarios. Estas IAM funciones generadas automáticamente son válidas para la máquina Región de AWS en la que se crea la máquina de estados.

Las siguientes plantillas de ejemplo muestran cómo se AWS Step Functions generan las 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).

Le recomendamos que, al crear políticas de IAM, no incluya caracteres comodín en las políticas. Como práctica recomendada de seguridad, debe reducir el alcance de las políticas en la medida de lo posible. Debe usar políticas dinámicas solo cuando no se conozcan ciertos parámetros de entrada durante el tiempo de ejecución.

Además, los usuarios administradores deben tener cuidado al conceder roles de ejecución a los usuarios que no sean administradores para ejecutar las máquinas de estado. Le recomendamos que incluya políticas de PassRole en los roles de ejecución si va a crear políticas por su cuenta. También le recomendamos que añada las claves de contexto `aws:SourceARN` y `aws:SourceAccount` en los roles de ejecución.

### Ejemplos de políticas de IAM para la integración sin servidor de EMR con Step Functions
<a name="emr-serverless-iam-policy-eg"></a>
+ [Ejemplo de política de IAM para CreateApplication](#emr-serverless-policy-createapp)
+ [Ejemplo de política de IAM para StartApplication](#emr-serverless-policy-startapp)
+ [Ejemplo de política de IAM para StopApplication](#emr-serverless-policy-stopapp)
+ [Ejemplo de política de IAM para DeleteApplication](#emr-serverless-policy-deleteapp)
+ [Ejemplo de política de IAM para StartJobRun](#emr-serverless-policy-startjobrun)
+ [Ejemplo de política de IAM para CancelJobRun](#emr-serverless-policy-canceljobrun)

#### Ejemplo de política de IAM para CreateApplication
<a name="emr-serverless-policy-createapp"></a>

El siguiente es un ejemplo de política de IAM para una máquina de estados con un CreateApplication [Estado de un flujo de trabajo de tarea](state-task.md) estado.

**nota**  
Debe especificar los CreateServiceLinkedRole permisos en sus políticas de IAM durante la creación de la primera aplicación en su cuenta. A partir de entonces, ya no necesitará añadir este permiso. Para obtener más información al respecto CreateServiceLinkedRole, consulte la https://docs.aws.amazon.com/IAM/ última [CreateServiceLinkedRole](https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateServiceLinkedRole.html)APIReferenceversión de//.

Los recursos estáticos y dinámicos de las siguientes políticas son los mismos.

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "emr-serverless:CreateApplication"
            ],
            "Resource": [
                "arn:aws:emr-serverless:us-east-1:123456789012:/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "emr-serverless:GetApplication",
                "emr-serverless:DeleteApplication"
            ],
            "Resource": [
                "arn:aws:emr-serverless:us-east-1:123456789012:/applications/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "events:PutTargets",
                "events:PutRule",
                "events:DescribeRule"
            ],
            "Resource": [
                "arn:aws:events:us-east-1:123456789012:rule/StepFunctionsGetEventsForEMRServerlessApplicationRule"
            ]
        },
        {
            "Effect": "Allow",
            "Action": "iam:CreateServiceLinkedRole",
            "Resource": "arn:aws:iam::123456789012:role/aws-service-role/ops.emr-serverless.amazonaws.com/AWSServiceRoleForAmazonEMRServerless*",
            "Condition": {
                "StringLike": {
                    "iam:AWSServiceName": "ops.emr-serverless.amazonaws.com"
                }
            }
        }
   ]
}
```

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   
   "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "emr-serverless:CreateApplication"
            ],
            "Resource": [
                "arn:aws:emr-serverless:us-east-1:123456789012:/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": "iam:CreateServiceLinkedRole",
            "Resource": "arn:aws:iam::123456789012:role/aws-service-role/ops.emr-serverless.amazonaws.com/AWSServiceRoleForAmazonEMRServerless*",
            "Condition": {
                "StringLike": {
                    "iam:AWSServiceName": "ops.emr-serverless.amazonaws.com"
                }
            }
        }
    ]
}
```

------

#### Ejemplo de política de IAM para StartApplication
<a name="emr-serverless-policy-startapp"></a>

**Recursos estáticos**  
A continuación, se muestran ejemplos de políticas de IAM para recursos estáticos cuando se utiliza una máquina de estados con un StartApplication [Estado de un flujo de trabajo de tarea](state-task.md) estado.

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
        {
           "Effect": "Allow",
           "Action": [
               "emr-serverless:StartApplication",
               "emr-serverless:GetApplication",
               "emr-serverless:StopApplication"
            ],
           "Resource": [
                "arn:aws:emr-serverless:us-east-1:123456789012:/applications/applicationId"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "events:PutTargets",
                "events:PutRule",
                "events:DescribeRule"
            ],
            "Resource": [
                "arn:aws:events:us-east-1:123456789012:rule/StepFunctionsGetEventsForEMRServerlessApplicationRule"
            ]
        }
    ]
}
```

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
        {
           "Effect": "Allow",
           "Action": [
               "emr-serverless:StartApplication"
            ],
           "Resource": [
                "arn:aws:emr-serverless:us-east-1:123456789012:/applications/applicationId"
            ]
        }
    ]
}
```

------

**Recursos dinámicos**  
Los siguientes son ejemplos de políticas de IAM para recursos dinámicos cuando se utiliza una máquina de estados con un StartApplication [Estado de un flujo de trabajo de tarea](state-task.md) estado.

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
        {
           "Effect": "Allow",
           "Action": [
               "emr-serverless:StartApplication",
               "emr-serverless:GetApplication",
               "emr-serverless:StopApplication"
            ],
           "Resource": [
                "arn:aws:emr-serverless:us-east-1:123456789012:/applications/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "events:PutTargets",
                "events:PutRule",
                "events:DescribeRule"
            ],
            "Resource": [
                "arn:aws:events:us-east-1:123456789012:rule/StepFunctionsGetEventsForEMRServerlessApplicationRule"
            ]
        }
    ]
}
```

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
        {
           "Effect": "Allow",
           "Action": [
               "emr-serverless:StartApplication"
            ],
           "Resource": [
                "arn:aws:emr-serverless:us-east-1:123456789012:/applications/*"
            ]
        }
    ]
}
```

------

#### Ejemplo de política de IAM para StopApplication
<a name="emr-serverless-policy-stopapp"></a>

**Recursos estáticos**  
A continuación, se muestran ejemplos de políticas de IAM para recursos estáticos cuando se utiliza una máquina de estados con un StopApplication [Estado de un flujo de trabajo de tarea](state-task.md) estado.

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
        {
           "Effect": "Allow",
           "Action": [
               "emr-serverless:StopApplication",
               "emr-serverless:GetApplication"
            ],
           "Resource": [
                "arn:aws:emr-serverless:us-east-1:123456789012:/applications/applicationId"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "events:PutTargets",
                "events:PutRule",
                "events:DescribeRule"
            ],
            "Resource": [
                "arn:aws:events:us-east-1:123456789012:rule/StepFunctionsGetEventsForEMRServerlessApplicationRule"
            ]
        }
    ]
}
```

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
        {
           "Effect": "Allow",
           "Action": [
               "emr-serverless:StopApplication"
            ],
           "Resource": [
                "arn:aws:emr-serverless:us-east-1:123456789012:/applications/applicationId"
            ]
        }
    ]
}
```

------

**Recursos dinámicos**  
Los siguientes son ejemplos de políticas de IAM para recursos dinámicos cuando se utiliza una máquina de estados con un StopApplication [Estado de un flujo de trabajo de tarea](state-task.md) estado.

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
        {
           "Effect": "Allow",
           "Action": [
               "emr-serverless:StopApplication",
               "emr-serverless:GetApplication"
            ],
           "Resource": [
                "arn:aws:emr-serverless:us-east-1:123456789012:/applications/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "events:PutTargets",
                "events:PutRule",
                "events:DescribeRule"
            ],
            "Resource": [
                "arn:aws:events:us-east-1:123456789012:rule/StepFunctionsGetEventsForEMRServerlessApplicationRule"
            ]
        }
    ]
}
```

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
        {
           "Effect": "Allow",
           "Action": [
               "emr-serverless:StopApplication"
            ],
           "Resource": [
                "arn:aws:emr-serverless:us-east-1:123456789012:/applications/*"
            ]
        }
    ]
}
```

------

#### Ejemplo de política de IAM para DeleteApplication
<a name="emr-serverless-policy-deleteapp"></a>

**Recursos estáticos**  
A continuación, se muestran ejemplos de políticas de IAM para recursos estáticos cuando se utiliza una máquina de estados con un DeleteApplication [Estado de un flujo de trabajo de tarea](state-task.md) estado.

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
        {
           "Effect": "Allow",
           "Action": [
               "emr-serverless:DeleteApplication",
               "emr-serverless:GetApplication"
            ],
           "Resource": [
                "arn:aws:emr-serverless:us-east-1:123456789012:/applications/applicationId"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "events:PutTargets",
                "events:PutRule",
                "events:DescribeRule"
            ],
            "Resource": [
                "arn:aws:events:us-east-1:123456789012:rule/StepFunctionsGetEventsForEMRServerlessApplicationRule"
            ]
        }
    ]
}
```

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
        {
           "Effect": "Allow",
           "Action": [
               "emr-serverless:DeleteApplication"
            ],
           "Resource": [
                "arn:aws:emr-serverless:us-east-1:123456789012:/applications/applicationId"
            ]
        }
    ]
}
```

------

**Recursos dinámicos**  
Los siguientes son ejemplos de políticas de IAM para recursos dinámicos cuando se utiliza una máquina de estados con un DeleteApplication [Estado de un flujo de trabajo de tarea](state-task.md) estado.

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
        {
           "Effect": "Allow",
           "Action": [
               "emr-serverless:DeleteApplication",
               "emr-serverless:GetApplication"
            ],
           "Resource": [
                "arn:aws:emr-serverless:us-east-1:123456789012:/applications/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "events:PutTargets",
                "events:PutRule",
                "events:DescribeRule"
            ],
            "Resource": [
                "arn:aws:events:us-east-1:123456789012:rule/StepFunctionsGetEventsForEMRServerlessApplicationRule"
            ]
        }
    ]
}
```

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
        {
           "Effect": "Allow",
           "Action": [
               "emr-serverless:DeleteApplication"
            ],
           "Resource": [
                "arn:aws:emr-serverless:us-east-1:123456789012:/applications/*"
            ]
        }
    ]
}
```

------

#### Ejemplo de política de IAM para StartJobRun
<a name="emr-serverless-policy-startjobrun"></a>

**Recursos estáticos**  
A continuación, se muestran ejemplos de políticas de IAM para recursos estáticos cuando se utiliza una máquina de estados con un StartJobRun [Estado de un flujo de trabajo de tarea](state-task.md) estado.

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
        {
           "Effect": "Allow",
           "Action": [
               "emr-serverless:StartJobRun"
            ],
           "Resource": [
                "arn:aws:emr-serverless:us-east-1:123456789012:/applications/applicationId"
            ]
        },
        {
            "Effect": "Allow",
            "Action": "iam:PassRole",
            "Resource": [
                "arn:aws:iam::123456789012:role/jobExecutionRoleArn"
            ],
            "Condition": {
                "StringEquals": {
                    "iam:PassedToService": "emr-serverless.amazonaws.com"
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": [
                "emr-serverless:GetJobRun",
                "emr-serverless:CancelJobRun"
            ],
            "Resource": [
                "arn:aws:emr-serverless:us-east-1:123456789012:/applications/applicationId/jobruns/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "events:PutTargets",
                "events:PutRule",
                "events:DescribeRule"
            ],
            "Resource": [
                "arn:aws:events:us-east-1:123456789012:rule/StepFunctionsGetEventsForEMRServerlessJobRule"
            ]
        }
    ]
}
```

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
        {
           "Effect": "Allow",
           "Action": [
               "emr-serverless:StartJobRun"
            ],
           "Resource": [
                "arn:aws:emr-serverless:us-east-1:123456789012:/applications/applicationId"
            ]
        },
        {
            "Effect": "Allow",
            "Action": "iam:PassRole",
            "Resource": [
                "arn:aws:iam::123456789012:role/jobExecutionRoleArn"
            ],
            "Condition": {
                "StringEquals": {
                    "iam:PassedToService": "emr-serverless.amazonaws.com"
                }
            }
        }
    ]
}
```

------

**Recursos dinámicos**  
Los siguientes son ejemplos de políticas de IAM para recursos dinámicos cuando se utiliza una máquina de estados con un StartJobRun [Estado de un flujo de trabajo de tarea](state-task.md) estado.

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
        {
           "Effect": "Allow",
           "Action": [
               "emr-serverless:StartJobRun",
               "emr-serverless:GetJobRun",
               "emr-serverless:CancelJobRun"
            ],
           "Resource": [
                "arn:aws:emr-serverless:us-east-1:123456789012:/applications/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": "iam:PassRole",
            "Resource": [
                "arn:aws:iam::123456789012:role/jobExecutionRoleArn"
            ],
            "Condition": {
                "StringEquals": {
                    "iam:PassedToService": "emr-serverless.amazonaws.com"
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": [
                "events:PutTargets",
                "events:PutRule",
                "events:DescribeRule"
            ],
            "Resource": [
                "arn:aws:events:us-east-1:123456789012:rule/StepFunctionsGetEventsForEMRServerlessJobRule"
            ]
        }
    ]
}
```

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
        {
           "Effect": "Allow",
           "Action": [
               "emr-serverless:StartJobRun"
            ],
           "Resource": [
                "arn:aws:emr-serverless:us-east-1:123456789012:/applications/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": "iam:PassRole",
            "Resource": [
                "arn:aws:iam::123456789012:role/jobExecutionRoleArn"
            ],
            "Condition": {
                "StringEquals": {
                    "iam:PassedToService": "emr-serverless.amazonaws.com"
                }
            }
        }
    ]
}
```

------

#### Ejemplo de política de IAM para CancelJobRun
<a name="emr-serverless-policy-canceljobrun"></a>

**Recursos estáticos**  
A continuación, se muestran ejemplos de políticas de IAM para recursos estáticos cuando se utiliza una máquina de estados con un CancelJobRun [Estado de un flujo de trabajo de tarea](state-task.md) estado.

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
        {
           "Effect": "Allow",
           "Action": [
               "emr-serverless:CancelJobRun",
               "emr-serverless:GetJobRun"
            ],
           "Resource": [
                "arn:aws:emr-serverless:us-east-1:123456789012:/applications/applicationId/jobruns/jobRunId"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "events:PutTargets",
                "events:PutRule",
                "events:DescribeRule"
            ],
            "Resource": [
                "arn:aws:events:us-east-1:123456789012:rule/StepFunctionsGetEventsForEMRServerlessJobRule"
            ]
        }
    ]
}
```

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
        {
           "Effect": "Allow",
           "Action": [
               "emr-serverless:CancelJobRun"
            ],
           "Resource": [
                "arn:aws:emr-serverless:us-east-1:123456789012:/applications/applicationId/jobruns/jobRunId"
            ]
        }
    ]
}
```

------

**Recursos dinámicos**  
Los siguientes son ejemplos de políticas de IAM para recursos dinámicos cuando se utiliza una máquina de estados con un CancelJobRun [Estado de un flujo de trabajo de tarea](state-task.md) estado.

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
        {
           "Effect": "Allow",
           "Action": [
               "emr-serverless:CancelJobRun",
               "emr-serverless:GetJobRun"
            ],
           "Resource": [
                "arn:aws:emr-serverless:us-east-1:123456789012:/applications/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "events:PutTargets",
                "events:PutRule",
                "events:DescribeRule"
            ],
            "Resource": [
                "arn:aws:events:us-east-1:123456789012:rule/StepFunctionsGetEventsForEMRServerlessJobRule"
            ]
        }
    ]
}
```

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
        {
           "Effect": "Allow",
           "Action": [
               "emr-serverless:CancelJobRun"
            ],
           "Resource": [
                "arn:aws:emr-serverless:us-east-1:123456789012:/applications/*"
            ]
        }
    ]
}
```

------

# Agrega EventBridge eventos con Step Functions
<a name="connect-eventbridge"></a>

Step Functions proporciona una API de integración de servicios para la integración con Amazon EventBridge. Aprenda a crear aplicaciones impulsadas por eventos enviando eventos personalizados directamente desde los flujos de trabajo de Step Functions.

Para obtener más 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 principales de la EventBridge integración optimizada**  
El ARN de ejecución y el ARN de la máquina de estado se añaden automáticamente al campo `Resources` de cada `PutEventsRequestEntry`.
Si la respuesta de `PutEvents` contiene un `FailedEntryCount` distinto de cero, el estado `Task` genera el error `EventBridge.FailedEntry`.

 Para usar la `PutEvents` API, tendrás que crear una EventBridge regla en tu cuenta que coincida con el patrón específico de los eventos que vas a enviar. Por ejemplo, puede: 
+ Cree una función Lambda en su cuenta que reciba e imprima un evento que coincida con una EventBridge regla.
+  Cree una EventBridge regla en su cuenta en el bus de eventos predeterminado que coincida con un patrón de eventos específico y se dirija a la función Lambda. 

 Para obtener más información, consulte lo siguiente:
+ [Añadir EventBridge eventos de Amazon PutEvents](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-putevents.html) en la Guía EventBridge del usuario.
+ [Cómo esperar una devolución de llamada con el token de tarea](connect-to-resource.md#connect-wait-token) en patrones de integración de servicios

El siguiente ejemplo incluye una `Task` que envía un evento personalizado:

```
{
  "Type": "Task",
  "Resource": "arn:aws:states:::events:putEvents",
  "Arguments": {
    "Entries": [
      {
        "Detail": {
          "Message": "MyMessage"
        },
        "DetailType": "MyDetailType",
        "EventBusName": "MyEventBus",
        "Source": "my.source"
      }
    ]
  },
  "End": true
}
```

**Cuota para datos de entrada o de resultados**  
Al enviar o recibir datos entre servicios, la entrada o resultado máximo de una tarea es de 256 KiB de datos como cadena codificada en UTF-8. Consulte [Cuotas relacionadas con ejecuciones de máquinas de estado](service-quotas.md#service-limits-state-machine-executions).

## EventBridge API optimizada
<a name="connect-eventbridge-apis"></a>

La EventBridge API y la sintaxis compatibles incluyen:
+ [https://docs.aws.amazon.com/eventbridge/latest/APIReference/API_PutEvents.html](https://docs.aws.amazon.com/eventbridge/latest/APIReference/API_PutEvents.html)

## Gestión de errores
<a name="connect-eventbridge-error"></a>

La API de `PutEvents` acepta una matriz de entradas como entrada y, a continuación, devuelve una matriz de entradas de resultados. Siempre y cuando la acción `PutEvents` se haya realizado correctamente, `PutEvents` devolverá una respuesta HTTP 200, incluso si una o varias entradas generaron un error. `PutEvents` devuelve el número de entradas con error en el campo `FailedEntryCount`.

Step Functions comprueba si `FailedEntryCount` es mayor que cero. Si es mayor que cero, Step Functions genera el error `EventBridge.FailedEntry`. Esto le permite usar el control de errores integrado de Step Functions en los estados de las tareas para detectar o reintentar entradas con error, en lugar de tener que usar un estado adicional para analizar el `FailedEntryCount` de la respuesta.

**nota**  
Si ha implementado la idempotencia y puede reintentarlo de forma segura en todas las entradas, puede utilizar la lógica de reintento de Step Functions. Step Functions no elimina las entradas correctas de la matriz de entradas `PutEvents` antes de volver a intentarlo. En su lugar, lo vuelve a intentar con la matriz original de entradas. 

## Políticas de IAM para las llamadas EventBridge
<a name="eventbridge-iam"></a>

En las siguientes plantillas de ejemplo, se muestra cómo se AWS Step Functions generan las 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).

### `PutEvents`
<a name="eventbridge-iam-listconnections"></a>

*Recursos estáticos*

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Action": [
                "events:PutEvents"
            ],
            "Resource": [
                "arn:aws:events:us-east-1:123456789012:event-bus/my-project-eventbus"
            ],
            "Effect": "Allow"
        }
    ]
}
```

*Recursos dinámicos*

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "events:PutEvents"
            ],
            "Resource": "arn:aws:events:*:*:event-bus/*"
        }
    ]
}
```

# Comience un AWS Glue trabajo con Step Functions
<a name="connect-glue"></a>

Aprenda a usar Step Functions para empezar a ejecutar un trabajo AWS Glue. En esta página se enumeran las acciones de API compatibles y se proporciona un ejemplo de `Task` estado para iniciar un AWS Glue trabajo.

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 principales de la AWS Glue integración optimizada**  
El patrón de integración [Ejecutar un trabajo (.sync)](connect-to-resource.md#connect-sync) está disponible.
El campo `JobName` se extrae de la solicitud y se inserta en la respuesta, que normalmente solo contiene `JobRunID`.

A continuación se incluye un `Task` estado que inicia un AWS Glue trabajo.

```
"Glue StartJobRun": {
      "Type": "Task",
      "Resource": "arn:aws:states:::glue:startJobRun.sync",
      "Arguments": {
        "JobName": "GlueJob-JTrRO5l98qMG"
      },
      "Next": "ValidateOutput"
    },
```

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

## Optimizado AWS Glue APIs
<a name="connect-glue-api"></a>
+ [https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-jobs-runs.html#aws-glue-api-jobs-runs-StartJobRun](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-jobs-runs.html#aws-glue-api-jobs-runs-StartJobRun)

## Políticas de IAM para llamadas AWS Glue
<a name="glue-iam"></a>

Las siguientes plantillas de ejemplo muestran cómo se AWS Step Functions generan las 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).

AWS Glueno tiene un control basado en los recursos.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "glue:StartJobRun",
                "glue:GetJobRun",
                "glue:GetJobRuns",
                "glue:BatchStopJobRun"
            ],
            "Resource": "*"
        }
    ]
}
```

------
#### [ Request Response and Callback (.waitForTaskToken) ]

****  

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

------

# Inicie AWS Glue DataBrew trabajos con Step Functions
<a name="connect-databrew"></a>

Descubra cómo puede utilizar la DataBrew integración para añadir pasos de limpieza y normalización de datos a sus flujos de trabajo de análisis y aprendizaje automático con Step Functions.

Para obtener más 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).

A continuación se incluye un `Task` estado que inicia un trabajo de solicitud-respuesta DataBrew.

```
"DataBrew StartJobRun": {
            "Type": "Task",
            "Resource": "arn:aws:states:::databrew:startJobRun",
            "Arguments": {
               "Name": "sample-proj-job-1"
            },
            "Next": "NEXT_STATE"
          },
```

A continuación se incluye un `Task` estado que inicia un trabajo de sincronización DataBrew .

```
"DataBrew StartJobRun": {
           "Type": "Task",
           "Resource": "arn:aws:states:::databrew:startJobRun.sync",
           "Arguments": {
              "Name": "sample-proj-job-1"
           },
           "Next": "NEXT_STATE"
          },
```

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

## Soportado DataBrew APIs
<a name="connect-databrew-api"></a>
+ `[https://docs.aws.amazon.com/databrew/latest/dg/API_StartJobRun.html](https://docs.aws.amazon.com/databrew/latest/dg/API_StartJobRun.html)`

## Políticas de IAM para llamadas DataBrew
<a name="databrew-iam"></a>

En las siguientes plantillas de ejemplo, se muestra cómo se AWS Step Functions generan las 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).

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "databrew:startJobRun",
                "databrew:listJobRuns",
                "databrew:stopJobRun"
            ],
            "Resource": [
                "arn:aws:databrew:us-east-1:123456789012:job/*"
            ]
        }
    ]
}
```

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "databrew:startJobRun"
            ],
            "Resource": [
                "arn:aws:databrew:us-east-1:123456789012:job/*"
            ]
        }
    ]
}
```

------

# Invoca una AWS Lambda función con Step Functions
<a name="connect-lambda"></a>

Aprenda a usar Step Functions para invocar funciones de Lambda de forma sincrónica o asíncrona como parte de una aplicación sin servidor basada en eventos.

Para obtener más 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 principales de la integración optimizada de Lambda**  
El campo `Payload` de la respuesta se analiza de Json de escape a Json.
Si se genera una excepción en la función de Lambda, se produce un error en la tarea. Para ver un ejemplo práctico, consulte [Tratamiento de condiciones de error en una máquina de estado de Step Functions](tutorial-handling-error-conditions.md). 

## Lambda optimizada APIs
<a name="connect-lambda-api"></a>
+ [https://docs.aws.amazon.com/lambda/latest/dg/API_Invoke.html](https://docs.aws.amazon.com/lambda/latest/dg/API_Invoke.html)

## Ejemplos de flujo de trabajo
<a name="connect-lambda-api-examples"></a>

El ejemplo siguiente incluye un estado `Task` que invoca una función de Lambda.

```
{  
   "StartAt":"CallLambda",
   "States":{  
      "CallLambda":{  
         "Type":"Task",
         "Resource":"arn:aws:states:::lambda:invoke",
         "Arguments":{  
            "FunctionName":"arn:aws:lambda:region:account-id:function:MyFunction"
         },
         "End":true
      }
   }
}
```

El ejemplo siguiente incluye un estado `Task` que implementa el patrón de integración de servicios de [devolución de llamada](connect-to-resource.md#connect-wait-token).

```
{  
   "StartAt":"GetManualReview",
   "States":{  
      "GetManualReview":{  
         "Type":"Task",
         "Resource":"arn:aws:states:::lambda:invoke.waitForTaskToken",
         "Arguments":{  
            "FunctionName":"arn:aws:lambda:region:account-id:function:get-model-review-decision",
            "Payload":{  
               "model":"{% $states.input.my-model %}",
               "TaskToken": "{% $states.context.Task.Token %}"
            },
            "Qualifier":"prod-v1"
         },
         "End":true
      }
   }
}
```

Al invocar una función de Lambda, la ejecución esperará a que se complete la función. Si invoca la función de Lambda con una tarea de devolución de llamada, el tiempo de espera del latido no comienza a contar hasta que la función de Lambda haya terminado de ejecutarse y haya devuelto un resultado. Siempre y cuando se ejecute la función de Lambda, no se aplicará el tiempo de espera de latido.

También es posible llamar a Lambda de forma asíncrona mediante el parámetro `InvocationType`, como se muestra en el siguiente ejemplo:

```
{

  "Comment": "A Hello World example of the Amazon States Language using Pass states",
  "StartAt": "Hello",
  "States": {
    "Hello": {
      "Type": "Task",
      "Resource": "arn:aws:states:::lambda:invoke",
      "Arguments": {
        "FunctionName": "arn:aws:lambda:region:account-id:function:echo",
        "InvocationType": "Event"
      },
      "End": true
    }
  }
}
```

**nota**  
Para las invocaciones asíncronas de funciones de Lambda, el período de tiempo de espera del latido comienza de inmediato.

 Cuando se devuelve el resultado `Task`, el resultado de la función se anida dentro de un diccionario de metadatos. Por ejemplo:

```
{

   "ExecutedVersion":"$LATEST",
   "Payload":"FUNCTION OUTPUT",
   "SdkHttpMetadata":{
      "HttpHeaders":{
         "Connection":"keep-alive",
         "Content-Length":"4",
         "Content-Type":"application/json",
         "Date":"Fri, 26 Mar 2021 07:42:02 GMT",
         "X-Amz-Executed-Version":"$LATEST",
         "x-amzn-Remapped-Content-Length":"0",
         "x-amzn-RequestId":"0101aa0101-1111-111a-aa55-1010aaa1010",
         "X-Amzn-Trace-Id":"root=1-1a1a000a2a2-fe0101aa10ab;sampled=0"
      },
      "HttpStatusCode":200
   },
   "SdkResponseMetadata":{
      "RequestId":"6b3bebdb-9251-453a-ae45-512d9e2bf4d3"
   },
   "StatusCode":200
}
```

## Recurso de función especificado directamente
<a name="w2aac33c40c13"></a>

Como alternativa, puede invocar una función de Lambda especificando el ARN de una función directamente en el campo «Recurso». Cuando se invoca una función de Lambda de esta manera, no se puede especificar `.waitForTaskToken` y el resultado de la tarea solo contiene el resultado de la función.

```
{  
   "StartAt":"CallFunction",
   "States":{  
      "CallFunction": {  
         "Type":"Task",
         "Resource":"arn:aws:lambda:region:account-id:function:HelloFunction",
         "End": true
      }
   }
}
```

Con esta forma de integración, la función podría funcionar correctamente y, al mismo tiempo, enviar una respuesta que contenga un campo `FunctionError`. En ese escenario, la tarea del flujo de trabajo producirá un error.

Puede invocar un alias o una versión de la función de Lambda específica mediante la introducción de estas opciones en el ARN, en el campo `Resource`. Consulte los siguientes temas en la documentación de Lambda:
+ [Control de versiones de AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/versioning-intro.html)
+ [AWS Lambdaalias](https://docs.aws.amazon.com/lambda/latest/dg/aliases-intro.html)

## políticas de IAM para llamadas AWS Lambda
<a name="lambda-iam"></a>

En las siguientes plantillas de ejemplo, se muestra cómo se AWS Step Functions generan las 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).

En el siguiente ejemplo, una máquina de estados con dos estados de AWS Lambda tareas que invocan `function1` y`function2`, la política generada automáticamente, incluye `lambda:Invoke` permisos para ambas funciones.

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "lambda:InvokeFunction"
            ],
            "Resource": [
                "arn:aws:lambda:us-east-1:123456789012:function:myFn1",
                "arn:aws:lambda:us-east-1:123456789012:function:myFn2"
            ]
        }
    ]
}
```

# Crea un AWS Elemental MediaConvert trabajo con Step Functions
<a name="connect-mediaconvert"></a>

Aprenda a usar Step Functions para crear un AWS Elemental MediaConvert trabajo mediante la [https://docs.aws.amazon.com/mediaconvert/latest/apireference/jobs.html#jobspost](https://docs.aws.amazon.com/mediaconvert/latest/apireference/jobs.html#jobspost)API.

**Experimenta con Step Functions y MediaConvert**  
Aprenda a utilizar la integración MediaConvert optimizada en un flujo de trabajo que detecta y elimina las barras de color SMTPE de longitud desconocida del principio de un videoclip. Lea la entrada del blog del 12 de abril de 2024: Flujos de trabajo con [https://aws.amazon.com/blogs/media/low-code-workflows-with-aws-elemental-mediaconvert/](https://aws.amazon.com/blogs/media/low-code-workflows-with-aws-elemental-mediaconvert/)

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 principales de la MediaConvert integración optimizada**  
Se admiten los patrones de integración [Ejecutar un trabajo (.sync)](connect-to-resource.md#connect-sync) y [Respuesta de la solicitud](connect-to-resource.md#connect-default).
Step Functions añadirá la siguiente etiqueta personalizada a los MediaConvert trabajos: `ManagedByService: AWSStepFunctions`
No hay ninguna optimización para los patrones de integración [Cómo esperar una devolución de llamada con el token de tarea](connect-to-resource.md#connect-wait-token).

A continuación se incluye un `Task` estado que envía un MediaConvert trabajo y espera a que se complete.

```
{
    "StartAt": "MediaConvert_CreateJob",
    "States": {
        "MediaConvert_CreateJob": {
        "Type": "Task",
        "Resource": "arn:aws:states:::mediaconvert:createJob.sync",
        "Arguments": {
            "Role": "arn:aws:iam::111122223333:role/Admin",
            "Settings": {
            "OutputGroups": [
                {
                "Outputs": [
                    {
                    "ContainerSettings": {
                        "Container": "MP4"
                    },
                    "VideoDescription": {
                        "CodecSettings": {
                        "Codec": "H_264",
                        "H264Settings": {
                            "MaxBitrate": 1000,
                            "RateControlMode": "QVBR",
                            "SceneChangeDetect": "TRANSITION_DETECTION"
                        }
                        }
                    },
                    "AudioDescriptions": [
                        {
                        "CodecSettings": {
                            "Codec": "AAC",
                            "AacSettings": {
                            "Bitrate": 96000,
                            "CodingMode": "CODING_MODE_2_0",
                            "SampleRate": 48000
                            }
                        }
                        }
                    ]
                    }
                ],
                "OutputGroupSettings": {
                    "Type": "FILE_GROUP_SETTINGS",
                    "FileGroupSettings": {
                    "Destination": "s3://amzn-s3-demo-destination-bucket/"
                    }
                }
                }
            ],
            "Inputs": [
                {
                "AudioSelectors": {
                    "Audio Selector 1": {
                    "DefaultSelection": "DEFAULT"
                    }
                },
                "FileInput": "s3://amzn-s3-demo-bucket/DOC-EXAMPLE-SOURCE_FILE"
                }
            ]
            }
        },
        "End": true
        }
    }
}
```

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

## Optimizado MediaConvert APIs
<a name="connect-mediaconvert-api"></a>
+ [https://docs.aws.amazon.com/mediaconvert/latest/apireference/jobs.html#jobspost](https://docs.aws.amazon.com/mediaconvert/latest/apireference/jobs.html#jobspost)
  + [Sintaxis de la solicitud](https://docs.aws.amazon.com/mediaconvert/latest/apireference/jobs.html#jobs-request-body-post-example)
  + Parámetros admitidos:
    + [https://docs.aws.amazon.com/mediaconvert/latest/apireference/jobs.html#jobs-prop-createjobrequest-role](https://docs.aws.amazon.com/mediaconvert/latest/apireference/jobs.html#jobs-prop-createjobrequest-role) (Obligatorio)
    + [https://docs.aws.amazon.com/mediaconvert/latest/apireference/jobs.html#jobs-prop-createjobrequest-settings](https://docs.aws.amazon.com/mediaconvert/latest/apireference/jobs.html#jobs-prop-createjobrequest-settings) (Obligatorio)
    + [https://docs.aws.amazon.com/mediaconvert/latest/apireference/jobs.html#jobs-model-createjobrequest](https://docs.aws.amazon.com/mediaconvert/latest/apireference/jobs.html#jobs-model-createjobrequest) (opcional)
  + [Sintaxis de respuesta](https://docs.aws.amazon.com/mediaconvert/latest/apireference/jobs.html#jobs-response-examples): consulte **CreateJobResponse el esquema**

## Políticas de IAM para las llamadas AWS Elemental MediaConvert
<a name="mediaconvert-iam"></a>

Las siguientes plantillas de ejemplo muestran cómo se AWS Step Functions generan las 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).

La política de IAM para las acciones `GetJob` y `CancelJob` está limitada para permitir únicamente el acceso a los trabajos con la etiqueta `ManagedByService: AWSStepFunctions`.

**Política basada en etiquetas**  
La modificación de la etiqueta `ManagedByService: AWSStepFunctions` generada automáticamente provocará que se produzca un error en las ejecuciones de las máquina de estado.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "MediaConvertCreateJob",
            "Effect": "Allow",
            "Action": [
                "mediaconvert:CreateJob"
            ],
            "Resource": [
                "arn:aws:mediaconvert:us-east-1:123456789012:queues/*",
                "arn:aws:mediaconvert:us-east-1:123456789012:jobTemplates/*",
                "arn:aws:mediaconvert:us-east-1:123456789012:presets/*"
            ]
        },
        {
            "Sid": "MediaConvertManageJob",
            "Effect": "Allow",
            "Action": [
                "mediaconvert:GetJob",
                "mediaconvert:CancelJob"
            ],
            "Resource": "arn:aws:mediaconvert:us-east-1:123456789012:jobs/*",
            "Condition": {
                "StringEquals": {
                    "aws:ResourceTag/ManagedByService": "AWSStepFunctions"
                }
            }
        },
        {
            "Sid": "IamPassRole",
            "Effect": "Allow",
            "Action": [
                "iam:PassRole"
            ],
            "Resource": [
                "arn:aws:iam::123456789012:role/myRoleName"
            ],
            "Condition": {
                "StringEquals": {
                    "iam:PassedToService": [
                        "mediaconvert.amazonaws.com"
                    ]
                }
            }
        }, 
        {
            "Sid": "EventBridgeManageRule",
            "Effect": "Allow",
            "Action": [
                "events:PutTargets",
                "events:PutRule",
                "events:DescribeRule"
            ],
            "Resource": [
                "arn:aws:events:us-east-1:123456789012:rule/StepFunctionsGetEventsForMediaConvertJobRule"
            ]
        }
    ]
}
```

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "MediaConvertCreateJob",
            "Effect": "Allow",
            "Action": [
                "mediaconvert:CreateJob"
            ],
            "Resource": [
                "arn:aws:mediaconvert:us-east-1:123456789012:queues/*",
                "arn:aws:mediaconvert:us-east-1:123456789012:jobTemplates/*",
                "arn:aws:mediaconvert:us-east-1:123456789012:presets/*"
            ]
        },
        {
            "Sid": "IamPassRole",
            "Effect": "Allow",
            "Action": [
                "iam:PassRole"
            ],
            "Resource": [
                "arn:aws:iam::123456789012:role/myRoleName"
            ],
            "Condition": {
                "StringEquals": {
                    "iam:PassedToService": [
                        "mediaconvert.amazonaws.com"
                    ]
                }
            }
        }
    ]
}
```

------

# Crea y gestiona trabajos de Amazon SageMaker AI con Step Functions
<a name="connect-sagemaker"></a>

Aprenda a usar Step Functions para crear y gestionar puestos de trabajo en SageMaker IA. En esta página se enumeran las acciones de la API de SageMaker IA compatibles y se proporcionan ejemplos de `Task` estados para crear trabajos de transformación, formación, etiquetado y procesamiento de SageMaker IA.

Para obtener más 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 la integración optimizada de la SageMaker IA**  
Se admite el patrón de integración [Ejecutar un trabajo (.sync)](connect-to-resource.md#connect-sync).
No hay optimizaciones específicas para el patrón de integración [Respuesta de la solicitud](connect-to-resource.md#connect-default).
No se admite el patrón de integración [Cómo esperar una devolución de llamada con el token de tarea](connect-to-resource.md#connect-wait-token).

## SageMaker IA optimizada APIs
<a name="connect-sagemaker-api"></a>
+ [https://docs.aws.amazon.com/sagemaker/latest/dg/API_CreateEndpoint.html](https://docs.aws.amazon.com/sagemaker/latest/dg/API_CreateEndpoint.html)
+ [https://docs.aws.amazon.com/sagemaker/latest/dg/API_CreateEndpointConfig.html](https://docs.aws.amazon.com/sagemaker/latest/dg/API_CreateEndpointConfig.html)
+ [https://docs.aws.amazon.com/sagemaker/latest/dg/API_CreateHyperParameterTuningJob.html](https://docs.aws.amazon.com/sagemaker/latest/dg/API_CreateHyperParameterTuningJob.html): es compatible con el patrón de integración `.sync`.
+ [https://docs.aws.amazon.com/sagemaker/latest/dg/API_CreateLabelingJob.html](https://docs.aws.amazon.com/sagemaker/latest/dg/API_CreateLabelingJob.html): es compatible con el patrón de integración `.sync`.
+ [https://docs.aws.amazon.com/sagemaker/latest/dg/API_CreateModel.html](https://docs.aws.amazon.com/sagemaker/latest/dg/API_CreateModel.html)
+ [https://docs.aws.amazon.com/sagemaker/latest/dg/API_CreateProcessingJob.html](https://docs.aws.amazon.com/sagemaker/latest/dg/API_CreateProcessingJob.html): es compatible con el patrón de integración `.sync`.
+ [https://docs.aws.amazon.com/sagemaker/latest/dg/API_CreateTrainingJob.html](https://docs.aws.amazon.com/sagemaker/latest/dg/API_CreateTrainingJob.html): es compatible con el patrón de integración `.sync`.
+ [https://docs.aws.amazon.com/sagemaker/latest/dg/API_CreateTransformJob.html](https://docs.aws.amazon.com/sagemaker/latest/dg/API_CreateTransformJob.html): es compatible con el patrón de integración `.sync`.
+ [https://docs.aws.amazon.com/sagemaker/latest/dg/API_UpdateEndpoint.html](https://docs.aws.amazon.com/sagemaker/latest/dg/API_UpdateEndpoint.html)

**nota**  
AWS Step Functionsno creará automáticamente una política para`CreateTransformJob`. Debe asociar una política insertada al rol que se ha creado. Para obtener más información, consulte esta política de IAM de ejemplo: [`CreateTrainingJob`](#sagemaker-iam-createtrainingjob).

## SageMaker Ejemplo de trabajo de transformación de IA
<a name="sagemaker-example-transform"></a>

A continuación se incluye un `Task` estado que crea un trabajo de transformación de Amazon SageMaker AI y especifica la ubicación de Amazon S3 para `DataSource` y`TransformOutput`.

```
{
"SageMaker CreateTransformJob": {
  "Type": "Task",
  "Resource": "arn:aws:states:::sagemaker:createTransformJob.sync",
  "Arguments": {
    "ModelName": "SageMakerCreateTransformJobModel-9iFBKsYti9vr",
    "TransformInput": {
      "CompressionType": "None",
      "ContentType": "text/csv",
      "DataSource": {
        "S3DataSource": {
          "S3DataType": "S3Prefix",
          "S3Uri": "s3://amzn-s3-demo-source-bucket1/TransformJobDataInput.txt"
        }
      }
    },
    "TransformOutput": {
      "S3OutputPath": "s3://amzn-s3-demo-source-bucket1/TransformJobOutputPath"
    },
    "TransformResources": {
      "InstanceCount": 1,
      "InstanceType": "ml.m4.xlarge"
    },
    "TransformJobName": "sfn-binary-classification-prediction"
  },
  "Next": "ValidateOutput"
},
```

## SageMaker Ejemplo de trabajo de formación en IA
<a name="sagemaker-example-training"></a>

A continuación se incluye un `Task` estado que crea un trabajo de formación en Amazon SageMaker AI.

```
{  
   "SageMaker CreateTrainingJob":{  
      "Type":"Task",
      "Resource":"arn:aws:states:::sagemaker:createTrainingJob.sync",
      "Arguments":{  
         "TrainingJobName":"search-model",
         "ResourceConfig":{  
            "InstanceCount":4,
            "InstanceType":"ml.c4.8xlarge",
            "VolumeSizeInGB":20
         },
         "HyperParameters":{  
            "mode":"batch_skipgram",
            "epochs":"5",
            "min_count":"5",
            "sampling_threshold":"0.0001",
            "learning_rate":"0.025",
            "window_size":"5",
            "vector_dim":"300",
            "negative_samples":"5",
            "batch_size":"11"
         },
         "AlgorithmSpecification":{  
            "TrainingImage":"...",
            "TrainingInputMode":"File"
         },
         "OutputDataConfig":{  
            "S3OutputPath":"s3://amzn-s3-demo-destination-bucket1/doc-search/model"
         },
         "StoppingCondition":{  
            "MaxRuntimeInSeconds":100000
         },
         "RoleArn":"arn:aws:iam::account-id:role/docsearch-stepfunction-iam-role",
         "InputDataConfig":[  
            {  
               "ChannelName":"train",
               "DataSource":{  
                  "S3DataSource":{  
                     "S3DataType":"S3Prefix",
                     "S3Uri":"s3://amzn-s3-demo-destination-bucket1/doc-search/interim-data/training-data/",
                     "S3DataDistributionType":"FullyReplicated"
                  }
               }
            }
         ]
      },
      "Retry":[  
         {  
            "ErrorEquals":[  
               "SageMaker.AmazonSageMakerException"
            ],
            "IntervalSeconds":1,
            "MaxAttempts":100,
            "BackoffRate":1.1
         },
         {  
            "ErrorEquals":[  
               "SageMaker.ResourceLimitExceededException"
            ],
            "IntervalSeconds":60,
            "MaxAttempts":5000,
            "BackoffRate":1
         },
         {  
            "ErrorEquals":[  
               "States.Timeout"
            ],
            "IntervalSeconds":1,
            "MaxAttempts":5,
            "BackoffRate":1
         }
      ],
      "Catch":[  
         {  
            "ErrorEquals":[  
               "States.ALL"
            ],
            "Next":"Sagemaker Training Job Error"
         }
      ],
      "Next":"Delete Interim Data Job"
   }
}
```

## SageMaker Ejemplo de trabajo de etiquetado con IA
<a name="sagemaker-example-labeling"></a>

A continuación se incluye un `Task` estado que crea un trabajo de etiquetado de Amazon SageMaker AI.

```
{
  "StartAt": "SageMaker CreateLabelingJob",
  "TimeoutSeconds": 3600,
  "States": {
    "SageMaker CreateLabelingJob": {
      "Type": "Task",
      "Resource": "arn:aws:states:::sagemaker:createLabelingJob.sync",
      "Arguments": {
        "HumanTaskConfig": {
          "AnnotationConsolidationConfig": {
            "AnnotationConsolidationLambdaArn": "arn:aws:lambda:region:123456789012:function:ACS-TextMultiClass"
          },
          "NumberOfHumanWorkersPerDataObject": 1,
          "PreHumanTaskLambdaArn": "arn:aws:lambda:region:123456789012:function:PRE-TextMultiClass",
          "TaskDescription": "Classify the following text",
          "TaskKeywords": [
            "tc",
            "Labeling"
          ],
          "TaskTimeLimitInSeconds": 300,
          "TaskTitle": "Classify short bits of text",
          "UiConfig": {
            "UiTemplateS3Uri": "s3://amzn-s3-demo-bucket/TextClassification.template"
          },
          "WorkteamArn": "arn:aws:sagemaker:region:123456789012:workteam/private-crowd/ExampleTesting"
        },
        "InputConfig": {
          "DataAttributes": {
            "ContentClassifiers": [
              "FreeOfPersonallyIdentifiableInformation",
              "FreeOfAdultContent"
            ]
          },
          "DataSource": {
            "S3DataSource": {
              "ManifestS3Uri": "s3://amzn-s3-demo-bucket/manifest.json"
            }
          }
        },
        "LabelAttributeName": "Categories",
        "LabelCategoryConfigS3Uri": "s3://amzn-s3-demo-bucket/labelcategories.json",
        "LabelingJobName": "example-job-name",
        "OutputConfig": {
          "S3OutputPath": "s3://amzn-s3-demo-bucket/output"
        },
        "RoleArn": "arn:aws:iam::123456789012:role/service-role/AmazonSageMaker-ExecutionRole",
        "StoppingConditions": {
          "MaxHumanLabeledObjectCount": 10000,
          "MaxPercentageOfInputDatasetLabeled": 100
        }
      },
      "Next": "ValidateOutput"
    },
    "ValidateOutput": {
        "Type": "Choice",
        "Choices": [
            {
                "Next": "Success",
                "Condition": "{% $states.input.LabelingJobArn != '' %}"
            }
        ],
        "Default": "Fail"
        },
        "Success": {
            "Type": "Succeed"
        },
        "Fail": {
            "Type": "Fail",
            "Error": "InvalidOutput",
            "Cause": "Output is not what was expected. This could be due to a service outage or a misconfigured service integration."
        }
    }
}
```

## SageMaker Ejemplo de trabajo de procesamiento de IA
<a name="sagemaker-example-processing"></a>

A continuación se incluye un `Task` estado que crea un trabajo de procesamiento de Amazon SageMaker AI.

```
{
  "StartAt": "SageMaker CreateProcessingJob Sync",
  "TimeoutSeconds": 3600,
  "States": {
    "SageMaker CreateProcessingJob Sync": {
      "Type": "Task",
      "Resource": "arn:aws:states:::sagemaker:createProcessingJob.sync",
      "Arguments": {
        "AppSpecification": {
          "ImageUri": "737474898029.dkr.ecr.sa-east-1.amazonaws.com/sagemaker-scikit-learn:0.20.0-cpu-py3"
        },
        "ProcessingResources": {
          "ClusterConfig": {
            "InstanceCount": 1,
            "InstanceType": "ml.t3.medium",
            "VolumeSizeInGB": 10
          }
        },
        "RoleArn": "arn:aws:iam::account-id:role/SM-003-CreateProcessingJobAPIExecutionRole",
        "ProcessingJobName.$": "$.id"
      },
      "Next": "ValidateOutput"
    },
    "ValidateOutput": {
      "Type": "Choice",
      "Choices": [
        {
          "Not": {
            "Variable": "$.ProcessingJobArn",
            "StringEquals": ""
          },
          "Next": "Succeed"
        }
      ],
      "Default": "Fail"
    },
    "Succeed": {
      "Type": "Succeed"
    },
    "Fail": {
      "Type": "Fail",
      "Error": "InvalidConnectorOutput",
      "Cause": "Connector output is not what was expected. This could be due to a service outage or a misconfigured connector."
    }
  }
}
```

## Políticas de IAM para llamar a Amazon AI SageMaker
<a name="sagemaker-iam"></a>

En las siguientes plantillas de ejemplo, se muestra cómo se AWS Step Functions generan las políticas de IAM en función de los recursos de la definición de su máquina estatal. 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).

**nota**  
Para estos ejemplos, `roleArn` hace referencia al nombre de recurso de Amazon (ARN) de la función de IAM que la SageMaker IA utiliza para acceder a los artefactos del modelo y a las imágenes de docker para su implementación en instancias de procesamiento de aprendizaje automático o para trabajos de transformación por lotes. Para obtener más información, consulte [Amazon SageMaker Roles](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-roles.html).

### `CreateTrainingJob`
<a name="sagemaker-iam-createtrainingjob"></a>

*Recursos estáticos*

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "sagemaker:CreateTrainingJob",
        "sagemaker:DescribeTrainingJob",
        "sagemaker:StopTrainingJob"
      ],
      "Resource": [
        "arn:aws:sagemaker:us-east-1:123456789012:training-job/myJobName*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "sagemaker:ListTags",
        "sagemaker:AddTags"
      ],
      "Resource": [
        "*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "iam:PassRole"
      ],
      "Resource": [
        "arn:aws:iam::123456789012:role/MyExampleRole"
      ],
      "Condition": {
        "StringEquals": {
          "iam:PassedToService": "sagemaker.amazonaws.com"
        }
      }
    },
    {
      "Effect": "Allow",
      "Action": [
        "events:PutTargets",
        "events:PutRule",
        "events:DescribeRule"
      ],
      "Resource": [
        "arn:aws:events:us-east-1:123456789012:rule/StepFunctionsGetEventsForSageMakerTrainingJobsRule"
      ]
    }
  ]
}
```

------
#### [ Request Response and Callback (.waitForTaskToken) ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "sagemaker:CreateTrainingJob"
      ],
      "Resource": [
        "arn:aws:sagemaker:us-east-1:123456789012:training-job/myJobName*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "sagemaker:ListTags",
        "sagemaker:AddTags"
      ],
      "Resource": [
        "*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "iam:PassRole"
      ],
      "Resource": [
        "arn:aws:iam::123456789012:role/MyExampleRole"
      ],
      "Condition": {
        "StringEquals": {
          "iam:PassedToService": "sagemaker.amazonaws.com"
        }
      }
    }
  ]
}
```

------

*Recursos dinámicos*

------
#### [ .sync or .waitForTaskToken ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "sagemaker:CreateTrainingJob",
        "sagemaker:DescribeTrainingJob",
        "sagemaker:StopTrainingJob"
      ],
      "Resource": [
        "arn:aws:sagemaker:us-east-1:123456789012:training-job/*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "sagemaker:ListTags",
        "sagemaker:AddTags"
      ],
      "Resource": [
        "*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "iam:PassRole"
      ],
      "Resource": [
        "arn:aws:iam::123456789012:role/MyExampleRole"
      ],
      "Condition": {
        "StringEquals": {
          "iam:PassedToService": "sagemaker.amazonaws.com"
        }
      }
    },
    {
      "Effect": "Allow",
      "Action": [
        "events:PutTargets",
        "events:PutRule",
        "events:DescribeRule"
      ],
      "Resource": [
        "arn:aws:events:us-east-1:123456789012:rule/StepFunctionsGetEventsForSageMakerTrainingJobsRule"
      ]
    }
  ]
}
```

------
#### [ Request Response and Callback (.waitForTaskToken) ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "sagemaker:CreateTrainingJob"
      ],
      "Resource": [
        "arn:aws:sagemaker:us-east-1:123456789012:training-job/*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "sagemaker:ListTags",
        "sagemaker:AddTags"
      ],
      "Resource": [
        "*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "iam:PassRole"
      ],
      "Resource": [
        "arn:aws:iam::123456789012:role/MyExampleRole"
      ],
      "Condition": {
        "StringEquals": {
          "iam:PassedToService": "sagemaker.amazonaws.com"
        }
      }
    }
  ]
}
```

------

### `CreateTransformJob`
<a name="sagemaker-iam-createtransformjob"></a>

**nota**  
AWS Step Functionsno creará automáticamente una política para `CreateTransformJob` cuando cree una máquina de estados que se integre con la SageMaker IA. Se debe asociar una política insertada al rol que se ha creado basándose en uno de los siguientes ejemplos de IAM.

*Recursos estáticos*

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "sagemaker:CreateTransformJob",
        "sagemaker:DescribeTransformJob",
        "sagemaker:StopTransformJob"
      ],
      "Resource": [
        "arn:aws:sagemaker:us-east-1:123456789012:transform-job/myJobName*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "sagemaker:ListTags",
        "sagemaker:AddTags"
      ],
      "Resource": [
        "*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "iam:PassRole"
      ],
      "Resource": [
        "arn:aws:iam::123456789012:role/MyExampleRole"
      ],
      "Condition": {
        "StringEquals": {
          "iam:PassedToService": "sagemaker.amazonaws.com"
        }
      }
    },
    {
      "Effect": "Allow",
      "Action": [
        "events:PutTargets",
        "events:PutRule",
        "events:DescribeRule"
      ],
      "Resource": [
        "arn:aws:events:us-east-1:123456789012:rule/StepFunctionsGetEventsForSageMakerTransformJobsRule"
      ]
    }
  ]
}
```

------
#### [ Request Response and Callback (.waitForTaskToken) ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "sagemaker:CreateTransformJob"
      ],
      "Resource": [
        "arn:aws:sagemaker:us-east-1:123456789012:transform-job/myJobName*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "sagemaker:ListTags",
        "sagemaker:AddTags"
      ],
      "Resource": [
        "*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "iam:PassRole"
      ],
      "Resource": [
        "arn:aws:iam::123456789012:role/MyExampleRole"
      ],
      "Condition": {
        "StringEquals": {
          "iam:PassedToService": "sagemaker.amazonaws.com"
        }
      }
    }
  ]
}
```

------

*Recursos dinámicos*

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "sagemaker:CreateTransformJob",
        "sagemaker:DescribeTransformJob",
        "sagemaker:StopTransformJob"
      ],
      "Resource": [
        "arn:aws:sagemaker:us-east-1:123456789012:transform-job/*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "sagemaker:ListTags",
        "sagemaker:AddTags"
      ],
      "Resource": [
        "*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "iam:PassRole"
      ],
      "Resource": [
        "arn:aws:iam::123456789012:role/MyExampleRole"
      ],
      "Condition": {
        "StringEquals": {
          "iam:PassedToService": "sagemaker.amazonaws.com"
        }
      }
    },
    {
      "Effect": "Allow",
      "Action": [
        "events:PutTargets",
        "events:PutRule",
        "events:DescribeRule"
      ],
      "Resource": [
        "arn:aws:events:us-east-1:123456789012:rule/StepFunctionsGetEventsForSageMakerTransformJobsRule"
      ]
    }
  ]
}
```

------
#### [ Request Response and Callback (.waitForTaskToken) ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "sagemaker:CreateTransformJob"
      ],
      "Resource": [
        "arn:aws:sagemaker:us-east-1:123456789012:transform-job/*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "sagemaker:ListTags",
        "sagemaker:AddTags"
      ],
      "Resource": [
        "*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "iam:PassRole"
      ],
      "Resource": [
        "arn:aws:iam::123456789012:role/MyExampleRole"
      ],
      "Condition": {
        "StringEquals": {
          "iam:PassedToService": "sagemaker.amazonaws.com"
        }
      }
    }
  ]
}
```

------

# Publicación de mensajes en un tema de Amazon SNS mediante Step Functions
<a name="connect-sns"></a>

Aprenda a usar Step Functions para publicar mensajes en un tema de Amazon SNS. En esta página se enumeran las acciones de la API de Amazon SNS compatibles y se proporcionan estados `Task` de ejemplo para publicar mensajes en Amazon SNS.

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 principales de la integración optimizada de Amazon SNS**  
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).

El ejemplo siguiente incluye un estado `Task` que publica en un tema de Amazon Simple Notification Service (Amazon SNS).

```
{
 "StartAt": "Publish to SNS",
 "States": {
   "Publish to SNS": {
     "Type": "Task",
     "Resource": "arn:aws:states:::sns:publish",
     "Arguments": {
       "TopicArn": "arn:aws:sns:region:account-id:myTopic",
       "Message": "{% states.input.message %}",
       "MessageAttributes": {
         "my_attribute_no_1": {
           "DataType": "String",
           "StringValue": "value of my_attribute_no_1"
         },
         "my_attribute_no_2": {
           "DataType": "String",
           "StringValue": "value of my_attribute_no_2"
         }
       }
     },
     "End": true
    }
  }
}
```

**Pasar valores dinámicos**. Puede modificar el ejemplo anterior para pasar dinámicamente un atributo de esta carga de JSON:

```
{
  "message": "Hello world",
  "SNSDetails": {
    "attribute1": "some value",
    "attribute2": "some other value",
  }
}
```

Lo siguiente establece los valores mediante JSONata expresiones para los `StringValue` campos:

```
"MessageAttributes": {
  "my_attribute_no_1": {
      "DataType": "String",
      "StringValue": "{% $states.input.SNSDetails.attribute1 %}"
  },
  "my_attribute_no_2": {
      "DataType": "String",
      "StringValue": "{% $states.input.SNSDetails.attribute2 %}"
  }
```

El siguiente ejemplo incluye un estado `Task` que publica en un tema de Amazon SNS y, a continuación, espera a que se devuelva el token de tarea. Consulte [Cómo esperar una devolución de llamada con el token de tarea](connect-to-resource.md#connect-wait-token).

```
{  
   "StartAt":"Send message to SNS",
   "States":{  
      "Send message to SNS":{  
         "Type":"Task",
         "Resource":"arn:aws:states:::sns:publish.waitForTaskToken",
         "Arguments":{  
            "TopicArn":"arn:aws:sns:region:account-id:myTopic",
            "Message":{  
               "Input":"{% states.input.message %}",
               "TaskToken": "{% $states.context.Task.Token %}"
            }
         },
         "End":true
      }
   }
}
```

## Amazon SNS optimizado APIs
<a name="connect-sns-api"></a>
+ [https://docs.aws.amazon.com/sns/latest/api/API_Publish.html](https://docs.aws.amazon.com/sns/latest/api/API_Publish.html)

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

**Cuota para datos de entrada o de resultados**  
Al enviar o recibir datos entre servicios, la entrada o resultado máximo de una tarea es de 256 KiB de datos como cadena codificada en UTF-8. Consulte [Cuotas relacionadas con ejecuciones de máquinas de estado](service-quotas.md#service-limits-state-machine-executions).

## Políticas de IAM para llamar a Amazon SNS
<a name="sns-iam"></a>

Las siguientes plantillas de ejemplo muestran cómo se AWS Step Functions generan las políticas de IAM en función de los recursos de la definición de su máquina estatal. 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).

*Recursos estáticos*

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "sns:Publish"
            ],
            "Resource": [
                "arn:aws:sns:us-east-1:123456789012:myTopicName"
            ]
        }
    ]
}
```

*Recursos basados en una ruta o publicación en `TargetArn` o `PhoneNumber`*

****  

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

# Envío de mensajes a una cola de Amazon SQS
<a name="connect-sqs"></a>

Puede enviar mensajes a una cola de Amazon SQS mediante las siguientes acciones de la API de Amazon SQS y un código de estado `Task` ejemplo para los flujos de trabajo de Step Functions.

Para obtener más 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).

Para obtener más información acerca de la recepción de mensajes en Amazon SQS, consulte [Recepción y eliminación del mensaje](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/step-receive-delete-message.html) en la *Guía para desarrolladores de Amazon Simple Queue Service*.

El siguiente ejemplo incluye un `Task` estado (JSONata) que envía un mensaje de Amazon Simple Queue Service (Amazon SQS) con la opción opcional: **MessageAttributes**

```
{
 "StartAt": "Send to SQS",
 "States": {
   "Send to SQS": {
     "Type": "Task",
     "Resource": "arn:aws:states:::sqs:sendMessage",
     "Arguments": {
       "QueueUrl": "https://sqs.us-east-1.amazonaws.com/account-id/myQueue",
       "MessageBody": "{% $states.input.message %}",
       "MessageAttributes": {
         "my_attribute_no_1": {
           "DataType": "String",
           "StringValue": "attribute1"
         },
         "my_attribute_no_2": {
           "DataType": "String",
           "StringValue": "attribute2"
         }
       }
     },
     "End": true
    }
  }
}
```

La siguiente máquina de estado incluye un estado `Task` que publica en una cola de Amazon SQS y, a continuación, espera a que se devuelva el token de tarea. Consulte [Cómo esperar una devolución de llamada con el token de tarea](connect-to-resource.md#connect-wait-token).

```
{  
   "StartAt":"Send message to SQS",
   "States":{  
      "Send message to SQS":{  
         "Type":"Task",
         "Resource":"arn:aws:states:::sqs:sendMessage.waitForTaskToken",
         "Arguments":{  
            "QueueUrl":"https://sqs.us-east-1.amazonaws.com/account-id/myQueue",
            "MessageBody":{  
               "Input" : "{% $states.input.message %}",
               "MyTaskToken" : "{% $states.context.Task.Token %}"
            }
         },
         "End":true
      }
   }
}
```

## Amazon SQS optimizado APIs
<a name="connect-sqs-api"></a>
+ [https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html)

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

**Cuota para datos de entrada o de resultados**  
Al enviar o recibir datos entre servicios, la entrada o resultado máximo de una tarea es de 256 KiB de datos como cadena codificada en UTF-8. Consulte [Cuotas relacionadas con ejecuciones de máquinas de estado](service-quotas.md#service-limits-state-machine-executions).

## Políticas de IAM para llamar a Amazon SQS
<a name="sqs-iam"></a>

Las siguientes plantillas de ejemplo muestran cómo se AWS Step Functions generan las políticas de IAM en función de los recursos de la definición de su máquina estatal. 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).

*Recursos estáticos*

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "sqs:SendMessage"
            ],
            "Resource": [
                "arn:aws:sqs:us-east-1:123456789012:myQueueName"
            ]
        }
    ]
}
```

*Recursos dinámicos*

****  

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

# Iniciar una nueva máquina de AWS Step Functions estados a partir de una ejecución en ejecución
<a name="connect-stepfunctions"></a>

Step Functions se integra con su propia API como integración de servicios. Aprenda cómo usar Step Functions para iniciar una nueva ejecución de una máquina de estado directamente desde el estado de la tarea de una ejecución en curso. Al crear nuevos flujos de trabajo, utilice las [ejecuciones de flujos de trabajo anidados](concepts-nested-workflows.md) para reducir la complejidad de los flujos de trabajo principales y para reutilizar los procesos comunes.

**Características principales de la integración optimizada de Step Functions**  
El patrón de integración [Ejecutar un trabajo (.sync)](connect-to-resource.md#connect-sync) está disponible.

Para obtener más información, consulte los siguientes temas:
+ [Empezar desde una tarea](concepts-nested-workflows.md)
+ [Integración de los servicios de ](integrate-services.md)
+ [Cómo pasar parámetros a una API de servicio en Step Functions](connect-parameters.md)

## Funciones Step Functions optimizadas APIs
<a name="connect-stepfunctions-api"></a>
+ [https://docs.aws.amazon.com/step-functions/latest/apireference/API_StartExecution.html](https://docs.aws.amazon.com/step-functions/latest/apireference/API_StartExecution.html)

## Ejemplos de flujo de trabajo
<a name="connect-stepfunctions-api-examples"></a>

El ejemplo siguiente incluye un estado `Task` que inicia una ejecución de otra máquina de estado y espera a que se complete.

```
{  
   "Type":"Task",
   "Resource":"arn:aws:states:::states:startExecution.sync:2",
   "Arguments":{  
      "Input":{
        "Comment": "Hello world!"
       },
      "StateMachineArn":"arn:aws:states:region:account-id:stateMachine:HelloWorld",
      "Name":"ExecutionName"
   },
   "End":true
}
```

El ejemplo siguiente incluye un estado `Task` que inicia una ejecución de otra máquina de estado.

```
{  
   "Type":"Task",
   "Resource":"arn:aws:states:::states:startExecution",
   "Arguments":{  
      "Input":{
        "Comment": "Hello world!"
       },
      "StateMachineArn":"arn:aws:states:region:account-id:stateMachine:HelloWorld",
      "Name":"ExecutionName"
   },
   "End":true
}
```

El ejemplo siguiente incluye un estado `Task` que implementa el patrón de integración de servicios de [devolución de llamada](connect-to-resource.md#connect-wait-token).

```
{ 
   "Type":"Task",
   "Resource":"arn:aws:states:::states:startExecution.waitForTaskToken",
   "Arguments":{ 
      "Input":{
        "Comment": "Hello world!",
        "token": "{% $states.context.Task.Token %}"
       },
      "StateMachineArn":"arn:aws:states:region:account-id:stateMachine:HelloWorld",
      "Name":"ExecutionName"
   },
   "End":true
}
```

Para asociar una ejecución de flujo de trabajo anidado a la ejecución principal que la inició, pase un parámetro denominado especialmente que incluya el ID de ejecución extraído del [objeto Context](input-output-contextobject.md). Al iniciar una ejecución anidada, utilice un parámetro denominado `AWS_STEP_FUNCTIONS_STARTED_BY_EXECUTION_ID`. Pase el ID de ejecución y haga referencia al ID en el objeto Context con `$states.context.Execution.Id` él. Para obtener más información, consulte [Acceso al objeto Contexto](input-output-contextobject.md#contextobject-access).

```
{  
   "Type":"Task",
   "Resource":"arn:aws:states:::states:startExecution.sync",
   "Arguments":{  
      "Input":{
        "Comment": "Hello world!",
        "AWS_STEP_FUNCTIONS_STARTED_BY_EXECUTION_ID": "{% $states.context.Execution.Id %}"
       },
      "StateMachineArn":"arn:aws:states:region:account-id:stateMachine:HelloWorld",
      "Name":"ExecutionName"
   },
   "End":true
}
```

 Las máquinas de estado anidadas devuelven lo siguiente: 


| Recurso | Output | 
| --- | --- | 
| startExecution.sync | Cadena | 
| startExecution.sync:2 | JSON | 

Ambos esperarán a que se complete la máquina de estado anidada, pero devuelven diferentes formatos `Output`. Por ejemplo, si crea una función de Lambda que devuelve el objeto `{ "MyKey": "MyValue" }`, obtendría las siguientes respuestas:

Para startExecution.sync:

```
{
   <other fields>
   "Output": "{ \"MyKey\": \"MyValue\" }" 
}
```

Para startExecution.sync:2:

```
{
   <other fields> 
   "Output": {
      "MyKey": "MyValue"
   }
}
```

### Configuración de los permisos de IAM para máquinas de estado anidadas
<a name="nested-stepfunctions-iam-permissions"></a>

Una máquina de estado principal determina si una máquina de estado secundaria ha completado la ejecución mediante sondeos y eventos. Las votaciones requieren permiso, `states:DescribeExecution` mientras que los eventos enviados EventBridge a Step Functions requieren permisos para `events:PutTargets``events:PutRule`, y`events:DescribeRule`. Si faltan estos permisos en su rol de IAM, es posible que se produzca un retraso antes de que una máquina de estado principal se dé cuenta de que se ha completado la ejecución de la máquina de estado secundaria.

Para una máquina de estado que llame a `StartExecution` para una única ejecución de flujo de trabajo anidado, utilice una política de IAM que limite los permisos a esa máquina de estado. 

## Políticas de IAM para llamar a flujos de trabajo anidados de Step Functions
<a name="stepfunctions-iam"></a>

Para una máquina de estado que llame a `StartExecution` para una única ejecución de flujo de trabajo anidado, utilice una política de IAM que limite los permisos a esa máquina de estado. 

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "states:StartExecution"
            ],
            "Resource": [
                "arn:aws:states:us-east-1:123456789012:stateMachine:myStateMachineName"
            ]
        }
    ]
}
```

Para obtener más información, consulte los siguientes temas:
+ [Integración de servicios con Step Functions](integrate-services.md)
+ [Cómo pasar parámetros a una API de servicio en Step Functions](connect-parameters.md)
+ [Iniciar una nueva máquina de AWS Step Functions estados a partir de una ejecución en ejecución](#connect-stepfunctions)

------
#### [ Synchronous ]<a name="sync-async-iam-policies"></a>

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "states:StartExecution"
            ],
            "Resource": [
                "arn:aws:states:us-east-1:123456789012:stateMachine:stateMachineName"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "states:DescribeExecution",
                "states:StopExecution"
            ],
            "Resource": [
               "arn:aws:states:us-east-1:123456789012:execution:myStateMachineName:*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "events:PutTargets",
                "events:PutRule",
                "events:DescribeRule"
            ],
            "Resource": [
               "arn:aws:events:us-east-1:123456789012:rule/StepFunctionsGetEventsForStepFunctionsExecutionRule"
            ]
        }
    ]
}
```

------
#### [ Asynchronous ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "states:StartExecution"
            ],
            "Resource": [
                "arn:aws:states:us-east-1:123456789012:stateMachine:myStateMachineName"
            ]
        }
    ]
}
```

------

**Tipos de ARN necesarios**  
En la política de **Síncrono**, tenga en cuenta que `states:StartExecution` requiere un ARN de máquina de estado mientras que `states:DescribeExecution` y `states:StopExecution` requieren un ARN de ejecución.  
Si combina las tres acciones por error, el JSON será válido pero la política de IAM será incorrecta. Una política incorrecta puede provocar problemas de and/or acceso a los flujos de trabajo atascados durante la ejecución del flujo de trabajo.

Para obtener más información acerca de las ejecuciones de flujos de trabajo anidados, consulte [Iniciar ejecuciones de flujo de trabajo desde un estado de tarea en Step Functions.](concepts-nested-workflows.md).