

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.

# 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/*"
    }
  ]
}
```