

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Criar e gerenciar clusters do Amazon EMR com o Step Functions
<a name="connect-emr"></a>

Saiba como fazer a integração AWS Step Functions com o Amazon EMR usando a integração do serviço Amazon EMR fornecida. APIs A integração do serviço APIs é semelhante à do Amazon EMR correspondente APIs, com algumas diferenças nos campos que são passados e nas respostas que são retornadas.

Para saber mais sobre a integração com AWS serviços no Step Functions, consulte [Integração de produtos da ](integrate-services.md) e. [Transmitir parâmetros a uma API de serviço no Step Functions](connect-parameters.md)

**Principais recursos da integração otimizada ao Amazon EMR**  
A integração otimizada do serviço Amazon EMR tem um conjunto personalizado APIs que envolve o Amazon EMR APIs subjacente, descrito abaixo. Por causa disso, ela difere significativamente da integração de serviços do AWS SDK do Amazon EMR.
O padrão de integração [Executar um trabalho (.sync)](connect-to-resource.md#connect-sync) é compatível.

O Step Functions não encerra automaticamente um cluster do Amazon EMR se a execução for interrompida. Se sua máquina de estado parar antes do encerramento do cluster do Amazon EMR, seu cluster poderá continuar funcionando indefinidamente e poderá acumular cobranças adicionais. Para evitar isso, certifique-se de que qualquer cluster do Amazon EMR criado por você seja encerrado corretamente. Para obter mais informações, consulte:
+ [Controle o encerramento do cluster](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-plan-termination.html) no Guia do Usuário do Amazon EMR.
+ A seção [Executar um trabalho (.sync)](connect-to-resource.md#connect-sync) de padrões de integração de serviços.

**nota**  
A partir de `emr-5.28.0`, você pode especificar o parâmetro `StepConcurrencyLevel` ao criar um cluster para permitir que várias etapas sejam executadas em paralelo em um único cluster. Você pode usar os estados de `Map` e `Parallel` do Step Functions para enviar trabalho em paralelo ao cluster.

A disponibilidade da integração do serviço Amazon EMR está sujeita à disponibilidade do Amazon EMR. APIs Consulte a documentação do [Amazon EMR](https://docs.aws.amazon.com//govcloud-us/latest/UserGuide/govcloud-emr.html) quanto a limitações em regiões especiais.

**nota**  
Para integração com o Amazon EMR, o Step Functions tem uma frequência de pesquisa de trabalhos de codificação rígida de 60 segundos para os primeiros 10 minutos e 300 segundos depois disso.

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

A tabela a seguir descreve as diferenças entre cada API de integração de serviços do Amazon EMR e o Amazon EMR correspondente. APIs


| API de integração de serviços do Amazon EMR | API do EMR correspondente | Diferenças | 
| --- | --- | --- | 
| createCluster Cria e inicia a execução de um cluster (fluxo de trabalho).  O Amazon EMR está vinculado diretamente a um tipo exclusivo de perfil do IAM conhecido como função vinculada ao serviço. Para que `createCluster` e `createCluster.sync` funcionem, você deve ter configurado as permissões necessárias para criar a função vinculada ao serviço `AWSServiceRoleForEMRCleanup`. Para obter mais informações sobre isso, incluindo uma instrução que você pode adicionar à política de permissões IAM, consulte [Usar a função vinculada ao serviço para o 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) | createClusterusa a mesma sintaxe de solicitação que [runJobFlow](https://docs.aws.amazon.com/emr/latest/APIReference/API_RunJobFlow.html), exceto pelo seguinte: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/step-functions/latest/dg/connect-emr.html)A resposta é a seguinte: <pre>{<br />  "ClusterId": "string"<br />}</pre> O Amazon EMR usa o seguinte: <pre>{<br />  "JobFlowId": "string"<br />}</pre>  | 
| createCluster.sync Cria e inicia a execução de um cluster (fluxo de trabalho).  | [runJobFlow](https://docs.aws.amazon.com/emr/latest/APIReference/API_RunJobFlow.html) | O mesmo que createCluster, mas espera que o cluster atinja o estado WAITING. | 
| setClusterTerminationProteção Bloqueia um cluster (fluxo de trabalho) para que as EC2 instâncias no cluster não possam ser encerradas por intervenção do usuário, uma chamada de API ou um erro de fluxo de trabalho. | [setTerminationProtection](https://docs.aws.amazon.com/emr/latest/APIReference/API_SetTerminationProtection.html) | A solicitação usa o seguinte:<pre>{<br />  "ClusterId": "string"<br />}</pre> O Amazon EMR usa o seguinte:<pre>{<br />  "JobFlowIds": ["string"]<br />}</pre>  | 
| terminateCluster Desliga um cluster (fluxo de trabalho).  | [terminateJobFlows](https://docs.aws.amazon.com/emr/latest/APIReference/API_TerminateJobFlows.html) | A solicitação usa o seguinte:<pre>{<br />  "ClusterId": "string"<br />}</pre> O Amazon EMR usa o seguinte:<pre>{<br />  "JobFlowIds": ["string"]<br />}</pre> | 
| terminateCluster.syncDesliga um cluster (fluxo de trabalho). | [terminateJobFlows](https://docs.aws.amazon.com/emr/latest/APIReference/API_TerminateJobFlows.html) | O mesmo que terminateCluster, mas aguarda o encerramento do cluster. | 
| addStep Adiciona uma nova etapa a um cluster em execução. Se preferir, você também poderá especificar o parâmetro `[ExecutionRoleArn](https://docs.aws.amazon.com/emr/latest/APIReference/API_AddJobFlowSteps.html#EMR-AddJobFlowSteps-request-ExecutionRoleArn)` ao usar essa API. | [addJobFlowEtapas](https://docs.aws.amazon.com/emr/latest/APIReference/API_AddJobFlowSteps.html) | A solicitação usa a chave "ClusterId". O Amazon EMR usa o "JobFlowId". A solicitação usa uma única etapa.<pre>{<br />  "Step": <"StepConfig object"><br />}</pre> O Amazon EMR usa o seguinte:<pre>{<br />  "Steps": [<StepConfig objects>]<br />}</pre> A resposta é a seguinte:<pre>{<br />  "StepId": "string"<br />}</pre> O Amazon EMR retorna o seguinte:<pre>{<br />  "StepIds": [<strings>]<br />}</pre>  | 
| addStep.sync Adiciona uma nova etapa a um cluster em execução. Se preferir, você também poderá especificar o parâmetro `[ExecutionRoleArn](https://docs.aws.amazon.com/emr/latest/APIReference/API_AddJobFlowSteps.html#EMR-AddJobFlowSteps-request-ExecutionRoleArn)` ao usar essa API. | [addJobFlowEtapas](https://docs.aws.amazon.com/emr/latest/APIReference/API_AddJobFlowSteps.html) | O mesmo que addStep, mas aguarda a etapa ser concluída. | 
| cancelStep Cancela uma etapa pendente em um cluster em execução. | [cancelSteps](https://docs.aws.amazon.com/emr/latest/APIReference/API_CancelSteps.html) |  A solicitação usa o seguinte:<pre>{<br />  "StepId": "string"<br />}</pre> O Amazon EMR usa o seguinte:<pre>{<br />  "StepIds": [<strings>]<br />}</pre> A resposta é a seguinte:<pre>{<br />  "CancelStepsInfo": <CancelStepsInfo object><br />}</pre> O Amazon EMR usa o seguinte:<pre>{<br />  "CancelStepsInfoList": [<CancelStepsInfo objects>]<br />}</pre>  | 
| modifyInstanceFleetByName Modifica as capacidades sob demanda e spot de destino para a frota de instâncias com o `InstanceFleetName` especificado. | [modifyInstanceFleet](https://docs.aws.amazon.com/emr/latest/APIReference/API_ModifyInstanceFleet.html) | O pedido é o mesmo que para modifyInstanceFleet, exceto pelo seguinte: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/step-functions/latest/dg/connect-emr.html)  | 
| modifyInstanceGroupByName Modifica o número de nós e as configurações de um grupo de instâncias. | [modifyInstanceGroups](https://docs.aws.amazon.com/emr/latest/APIReference/API_ModifyInstanceGroups.html) | O pedido é o seguinte:<pre>{<br />  "ClusterId": "string",<br />  "InstanceGroup": <InstanceGroupModifyConfig object><br />}</pre> O Amazon EMR usa uma lista: <pre>{<br />  "ClusterId": ["string"],<br />  "InstanceGroups": [<InstanceGroupModifyConfig objects>]<br />}</pre> Dentro do objeto `InstanceGroupModifyConfig`, o campo `InstanceGroupId` não é permitido. Um novo campo, `InstanceGroupName`, foi adicionado. Em tempo de execução, o `InstanceGroupId` é determinado automaticamente pela integração do serviço chamando `ListInstanceGroups` e analisando o resultado.  | 

## Exemplo de fluxo de trabalho
<a name="connect-emr-api-examples"></a>

Veja a seguir um estado `Task` que cria um cluster.

```
"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
}
```

Veja a seguir um estado `Task` que habilita a proteção contra encerramento. 

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

Veja a seguir um estado `Task` que envia uma etapa para um cluster. 

```
"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
}
```

Veja a seguir um estado `Task` que cancela uma etapa. 

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

Veja a seguir um estado `Task` que encerra um cluster. 

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

Veja a seguir um estado `Task` que expande ou reduz um cluster para um grupo de instâncias.

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

Veja a seguir um estado `Task` que expande ou reduz um cluster para uma frota de instâncias.

```
"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 do IAM para chamar o Amazon EMR
<a name="emr-iam"></a>

Os modelos de exemplo a seguir mostram como AWS Step Functions gera políticas do IAM com base nos recursos na definição da sua máquina de estado. Para obter mais informações, consulte [Como o Step Functions gera políticas do IAM para serviços integrados](service-integration-iam-templates.md) e [Descobrir padrões de integração de serviços no 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/*"
    }
  ]
}
```