

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Crea e gestisci cluster Amazon EMR con Step Functions
<a name="connect-emr"></a>

Scopri come integrarti AWS Step Functions con Amazon EMR utilizzando l'integrazione del servizio Amazon EMR fornito. APIs L'integrazione APIs del servizio è simile a quella del corrispondente Amazon EMR APIs, con alcune differenze nei campi che vengono passati e nelle risposte restituite.

Per ulteriori informazioni sull'integrazione con AWS i servizi in Step Functions, vedere [Integrazione dei servizi ](integrate-services.md) e[Passaggio di parametri a un'API di servizio in Step Functions](connect-parameters.md).

**Caratteristiche principali dell'integrazione ottimizzata con Amazon EMR**  
L'integrazione ottimizzata del servizio Amazon EMR dispone di un set personalizzato APIs che racchiude l'Amazon EMR APIs sottostante, descritto di seguito. Per questo motivo, si differenzia in modo significativo dall'integrazione del servizio SDK Amazon AWS EMR.
Il modello di [Esegui un processo (.sync)](connect-to-resource.md#connect-sync) integrazione è supportato.

Step Functions non termina automaticamente un cluster Amazon EMR se l'esecuzione viene interrotta. Se la macchina a stati si arresta prima della chiusura del cluster Amazon EMR, il cluster potrebbe continuare a funzionare a tempo indeterminato e potrebbe comportare costi aggiuntivi. Per evitare ciò, assicurati che tutti i cluster Amazon EMR che crei siano terminati correttamente. Per ulteriori informazioni, consulta:
+ [Controlla la terminazione del cluster](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-plan-termination.html) nella Guida per l'utente di Amazon EMR.
+ La sezione Service Integration Patterns. [Esegui un processo (.sync)](connect-to-resource.md#connect-sync)

**Nota**  
A partire da `emr-5.28.0` ora, puoi specificare il parametro `StepConcurrencyLevel` durante la creazione di un cluster per consentire l'esecuzione di più passaggi in parallelo su un singolo cluster. È possibile utilizzare Step Functions `Map` e `Parallel` gli stati per inviare il lavoro in parallelo al cluster.

La disponibilità dell'integrazione del servizio Amazon EMR è soggetta alla disponibilità di Amazon EMR. APIs Consulta la documentazione di [Amazon EMR](https://docs.aws.amazon.com//govcloud-us/latest/UserGuide/govcloud-emr.html) per le limitazioni nelle regioni speciali.

**Nota**  
Per l'integrazione con Amazon EMR, Step Functions utilizza una frequenza di polling dei job codificata di 60 secondi per i primi 10 minuti e per i 300 secondi successivi.

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

La tabella seguente descrive le differenze tra ogni API di integrazione del servizio Amazon EMR e Amazon EMR corrispondente. APIs


| API di integrazione dei servizi Amazon EMR | API EMR corrispondente | Differenze | 
| --- | --- | --- | 
| createClusterCrea e avvia l'esecuzione di un cluster (flusso di lavoro). <br /> Amazon EMR è collegato direttamente a un tipo unico di ruolo IAM noto come ruolo collegato ai servizi. Perché `createCluster` e `createCluster.sync` funzionino, è necessario aver configurato le autorizzazioni necessarie per creare il ruolo collegato al servizio `AWSServiceRoleForEMRCleanup`. Per ulteriori informazioni su questo argomento, inclusa una dichiarazione che puoi aggiungere alla tua politica di autorizzazioni IAM, consulta [Using the Service-Linked Role for 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) | createClusterutilizza la stessa sintassi di richiesta di [runJobFlow](https://docs.aws.amazon.com/emr/latest/APIReference/API_RunJobFlow.html), ad eccezione di quanto segue: [See the AWS documentation website for more details](http://docs.aws.amazon.com/it_it/step-functions/latest/dg/connect-emr.html)La risposta è: <pre>{<br />  "ClusterId": "string"<br />}</pre> Amazon EMR utilizza questo: <pre>{<br />  "JobFlowId": "string"<br />}</pre>  | 
| createCluster.syncCrea e avvia l'esecuzione di un cluster (flusso di lavoro).  | [runJobFlow](https://docs.aws.amazon.com/emr/latest/APIReference/API_RunJobFlow.html) | Lo stesso di createCluster, ma attende che il cluster raggiunga lo stato WAITING. | 
| setClusterTerminationProtezioneBlocca un cluster (flusso di lavoro) in modo che le EC2 istanze nel cluster non possano essere terminate dall'intervento dell'utente, da una chiamata API o da un errore del flusso di lavoro. | [setTerminationProtection](https://docs.aws.amazon.com/emr/latest/APIReference/API_SetTerminationProtection.html) | La richiesta utilizza questo:<pre>{<br />  "ClusterId": "string"<br />}</pre> Amazon EMR utilizza questo:<pre>{<br />  "JobFlowIds": ["string"]<br />}</pre>  | 
| terminateClusterArresta un cluster (flusso di lavoro). | [terminateJobFlows](https://docs.aws.amazon.com/emr/latest/APIReference/API_TerminateJobFlows.html) | La richiesta utilizza questo:<pre>{<br />  "ClusterId": "string"<br />}</pre> Amazon EMR utilizza questo:<pre>{<br />  "JobFlowIds": ["string"]<br />}</pre> | 
| terminateCluster.syncArresta un cluster (flusso di lavoro). | [terminateJobFlows](https://docs.aws.amazon.com/emr/latest/APIReference/API_TerminateJobFlows.html) | Lo stesso di terminateCluster, ma attende che il cluster venga terminato. | 
| addStepAggiunge un nuovo passaggio a un cluster in esecuzione.<br />Facoltativamente, puoi anche specificare il `[ExecutionRoleArn](https://docs.aws.amazon.com/emr/latest/APIReference/API_AddJobFlowSteps.html#EMR-AddJobFlowSteps-request-ExecutionRoleArn)` parametro durante l'utilizzo di questa API. | [addJobFlowFasi](https://docs.aws.amazon.com/emr/latest/APIReference/API_AddJobFlowSteps.html) | La richiesta utilizza la chiave"ClusterId". Usi di Amazon EMR. "JobFlowId" La richiesta utilizza un singolo passaggio.<pre>{<br />  "Step": <"StepConfig object"><br />}</pre> Amazon EMR utilizza questo:<pre>{<br />  "Steps": [<StepConfig objects>]<br />}</pre> La risposta è:<pre>{<br />  "StepId": "string"<br />}</pre> Amazon EMR restituisce questo:<pre>{<br />  "StepIds": [<strings>]<br />}</pre>  | 
| addStep.syncAggiunge un nuovo passaggio a un cluster in esecuzione.<br />Facoltativamente, puoi anche specificare il `[ExecutionRoleArn](https://docs.aws.amazon.com/emr/latest/APIReference/API_AddJobFlowSteps.html#EMR-AddJobFlowSteps-request-ExecutionRoleArn)` parametro durante l'utilizzo di questa API. | [addJobFlowFasi](https://docs.aws.amazon.com/emr/latest/APIReference/API_AddJobFlowSteps.html) | Come addStep, ma attende il completamento del passaggio. | 
| cancelStepAnnulla un passaggio in sospeso in un cluster in esecuzione. | [cancelSteps](https://docs.aws.amazon.com/emr/latest/APIReference/API_CancelSteps.html) |  La richiesta utilizza questo:<pre>{<br />  "StepId": "string"<br />}</pre> Amazon EMR utilizza questo:<pre>{<br />  "StepIds": [<strings>]<br />}</pre> La risposta è:<pre>{<br />  "CancelStepsInfo": <CancelStepsInfo object><br />}</pre> Amazon EMR utilizza questo:<pre>{<br />  "CancelStepsInfoList": [<CancelStepsInfo objects>]<br />}</pre>  | 
| modifyInstanceFleetByNameModifica le capacità Spot target e on demand per il parco di istanze con il `InstanceFleetName` specificato. | [modifyInstanceFleet](https://docs.aws.amazon.com/emr/latest/APIReference/API_ModifyInstanceFleet.html) | La richiesta è la stessa di quella di modifyInstanceFleet, ad eccezione di quanto segue: [See the AWS documentation website for more details](http://docs.aws.amazon.com/it_it/step-functions/latest/dg/connect-emr.html)  | 
| modifyInstanceGroupByNameModifica il numero di nodi e le impostazioni di configurazione di un gruppo di istanze. | [modifyInstanceGroups](https://docs.aws.amazon.com/emr/latest/APIReference/API_ModifyInstanceGroups.html) | La richiesta è questa:<pre>{<br />  "ClusterId": "string",<br />  "InstanceGroup": <InstanceGroupModifyConfig object><br />}</pre> Amazon EMR utilizza un elenco: <pre>{<br />  "ClusterId": ["string"],<br />  "InstanceGroups": [<InstanceGroupModifyConfig objects>]<br />}</pre>All'interno dell'oggetto `InstanceGroupModifyConfig` il campo `InstanceGroupId` non è consentito.<br />È stato aggiunto un nuovo campo, `InstanceGroupName`. In fase di esecuzione `InstanceGroupId` viene determinato automaticamente dall'integrazione del servizio chiamando `ListInstanceGroups` e analizzando il risultato. | 

## Esempio di workflow
<a name="connect-emr-api-examples"></a>

L'esempio seguente include uno stato `Task` che crea un 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
}
```

Di seguito è riportato uno stato `Task` che consente la protezione di terminazione. 

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

Di seguito è riportato uno stato `Task` che invia un passaggio a un 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
}
```

Di seguito è riportato uno stato `Task` che annulla un passaggio. 

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

Di seguito è riportato uno stato `Task` che termina un cluster. 

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

Di seguito è riportato uno stato `Task` che consente di scalare un cluster verso l'alto o verso il basso per un gruppo di istanze.

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

Di seguito è riportato uno stato `Task` che consente di scalare un cluster verso l'alto o verso il basso per un parco di istanze.

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

## Politiche IAM per le chiamate ad Amazon EMR
<a name="emr-iam"></a>

I seguenti modelli di esempio mostrano come AWS Step Functions generare le politiche IAM in base alle risorse nella definizione della macchina a stati. Per ulteriori informazioni, consultare [In che modo Step Functions genera policy IAM per servizi integrati](service-integration-iam-templates.md) e [Scopri i modelli di integrazione dei servizi in Step Functions](connect-to-resource.md).

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

*Risorse statiche*

****  

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

*Risorse dinamiche*

****  

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

*Risorse statiche*

****  

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

*Risorse dinamiche*

****  

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

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

*Risorse statiche*

****  

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

*Risorse statiche*

****  

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

*Risorse dinamiche*

****  

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

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

*Risorse statiche*

****  

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

*Risorse dinamiche*

****  

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

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

*Risorse statiche*

****  

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

*Risorse dinamiche*

****  

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

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

*Risorse statiche*

****  

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

*Risorse dinamiche*

****  

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