Scopri i modelli di integrazione dei servizi in Step Functions - AWS Step Functions

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

Scopri i modelli di integrazione dei servizi in Step Functions

AWS Step Functions si integra con i servizi direttamente in Amazon States Language. Puoi controllarli AWS servizi che utilizzano tre modelli di integrazione dei servizi:

  • Chiama un servizio e lascia che Step Functions passi allo stato successivo subito dopo aver ricevuto una HTTP risposta.

  • Chiama un servizio e chiedi a Step Functions di attendere il completamento di un lavoro.

  • Chiama un servizio con un task token e fai in modo che Step Functions attenda che quel token venga restituito con un payload.

Ciascuno di questi modelli di integrazione dei servizi è controllato dal modo in cui ne crei uno URI nel "Resource" campo della definizione dell'attività.

Per informazioni sulla configurazione AWS Identity and Access Management (IAM) per i servizi integrati, vedereIn che modo Step Functions genera IAM politiche per servizi integrati.

Supporto dei modelli di integrazione

I flussi di lavoro standard e i flussi di lavoro Express supportano le stesse integrazioni ma non gli stessi modelli di integrazione.

  • I flussi di lavoro standard supportano le integrazioni Request Response. Alcuni servizi supportano Run a Job (.sync) o Wait for Callback (. waitForTaskToken) ed entrambi in alcuni casi. Consulta la seguente tabella di integrazioni ottimizzate per i dettagli.

  • Express Workflows supporta solo le integrazioni Request Response.

Per aiutarti a decidere tra i due tipi, consulta. Scelta del tipo di flusso di lavoro in Step Functions

AWS SDKintegrazioni in Step Functions

Servizio integrato Richiesta e risposta Esegui un Job - .sync Attendi la richiamata -. waitForTaskToken
Oltre duecento servizi Standard ed Express Non supportato Standard

Integrazioni ottimizzate in Step Functions

Servizio integrato Richiesta e risposta Esegui un Job - .sync Attendi la richiamata -. waitForTaskToken
Amazon API Gateway Standard ed Express Non supportato Standard
Amazon Athena Standard ed Express Standard Non supportato
AWS Batch Standard ed Express Standard Non supportato
Amazon Bedrock Standard ed Express Standard Standard
AWS CodeBuild Standard ed Express Standard Non supportato
Amazon DynamoDB Standard ed Express Non supportato Non supportata
Amazon ECS/Fargate Standard ed Express Standard Standard
Amazon EKS Standard ed Express Standard Standard
Amazon EMR Standard ed Express Standard Non supportato
Amazon EMR on EKS Standard ed Express Standard Non supportato
Amazon EMR Serverless Standard ed Express Standard Non supportato
Amazon EventBridge Standard ed Express Non supportato Standard
AWS Glue Standard ed Express Standard Non supportato
AWS Glue DataBrew Standard ed Express Standard Non supportato
AWS Lambda Standard ed Express Non supportato Standard
AWS Elemental MediaConvert Standard ed Express Standard Non supportato
Amazon SageMaker Standard ed Express Standard Non supportato
Amazon SNS Standard ed Express Non supportato Standard
Amazon SQS Standard ed Express Non supportato Standard
AWS Step Functions Standard ed Express Standard Standard

Richiesta e risposta

Quando si specifica un servizio nella "Resource" stringa dello stato dell'attività e si fornisce solo la risorsa, Step Functions attenderà una HTTP risposta e quindi passerà allo stato successivo. Step Functions non aspetterà il completamento di un lavoro.

L'esempio seguente mostra come pubblicare un SNS argomento Amazon.

"Send message to SNS":{ "Type":"Task", "Resource":"arn:aws:states:::sns:publish", "Parameters":{ "TopicArn":"arn:aws:sns:us-east-1:123456789012:myTopic", "Message":"Hello from Step Functions!" }, "Next":"NEXT_STATE" }

Questo esempio fa riferimento a Publish API of AmazonSNS. Il flusso di lavoro passa allo stato successivo dopo aver chiamato il PublishAPI.

Suggerimento

Per distribuire un flusso di lavoro di esempio che utilizza il modello di integrazione del servizio Request Response nel Account AWS, vedere Modulo 2 - Richiesta di risposta di The AWS Step Functions Workshop.

Esegui un processo (.sync)

Per servizi integrati come AWS Batch e AmazonECS, Step Functions possono attendere il completamento di una richiesta prima di passare allo stato successivo. Per far attendere Step Functions, specifica il "Resource" campo nella definizione dello stato dell'attività con il .sync suffisso aggiunto dopo la risorsa. URI

Ad esempio, quando invii un AWS Batch job, usa il "Resource" campo nella definizione della macchina a stati come mostrato in questo esempio.

"Manage Batch task": { "Type": "Task", "Resource": "arn:aws:states:::batch:submitJob.sync", "Parameters": { "JobDefinition": "arn:aws:batch:us-east-2:123456789012:job-definition/testJobDefinition", "JobName": "testJob", "JobQueue": "arn:aws:batch:us-east-2:123456789012:job-queue/testQueue" }, "Next": "NEXT_STATE" }

Avere la .sync parte aggiunta alla risorsa Amazon Resource Name (ARN) significa che Step Functions attende il completamento del lavoro. Dopo aver chiamato AWS Batch submitJob, il flusso di lavoro si interrompe. Una volta completato il lavoro, Step Functions passa allo stato successivo. Per ulteriori informazioni, vedere AWS Batch progetto di esempio:Gestisci un lavoro in batch con AWS Batch e Amazon SNS.

Se un'attività che utilizza questo modello di integrazione del servizio (.sync) viene interrotta e Step Functions non è in grado di annullarla, potrebbero essere addebitati costi aggiuntivi dal servizio integrato. Un'attività può essere interrotta se:

  • L'esecuzione della macchina a stati viene interrotta.

  • Un ramo diverso di uno stato parallelo fallisce con un errore non rilevato.

  • Un'iterazione di uno stato della mappa fallisce e viene restituito un errore non rilevato.

Step Functions farà del suo meglio per annullare l'operazione. Ad esempio, se un'states:startExecution.syncattività Step Functions viene interrotta, chiamerà l'StopExecutionAPIazione Step Functions. Tuttavia, è possibile che Step Functions non sia in grado di annullare l'operazione. I motivi di ciò includono, a titolo esemplificativo ma non esaustivo:

  • Il tuo ruolo di IAM esecuzione non è autorizzato a effettuare la API chiamata corrispondente.

  • Si è verificata un'interruzione temporanea del servizio.

Quando si utilizza il modello di integrazione dei .sync servizi, Step Functions utilizza il polling che utilizza la quota e gli eventi assegnati per monitorare lo stato di un lavoro. Per .sync le chiamate all'interno dello stesso account, Step Functions utilizza EventBridge gli eventi e i sondaggi APIs specificati nello stato. Task Per le chiamate tra più account.sync, Step Functions utilizza solo il polling. Ad esempio, perstates:StartExecution.sync, Step Functions esegue il polling sulla quota assegnata DescribeExecutionAPIe la utilizza.

Suggerimento

Per distribuire un flusso di lavoro di esempio che utilizza il modello di integrazione del servizio Run a Job (.sync) sul Account AWS, vedi Modulo 3 - Esegui un Job (.sync) di The AWS Step Functions Workshop.

Per consultare un elenco di ciò che supportano i servizi integrati in attesa del completamento di un processo (.sync), vedi Integrazione dei servizi con Step Functions.

Nota

Le integrazioni di servizi che utilizzano i .waitForTaskToken modelli .sync or richiedono IAM autorizzazioni aggiuntive. Per ulteriori informazioni, consulta In che modo Step Functions genera IAM politiche per servizi integrati.

In alcuni casi, potresti volere che Step Functions continui il flusso di lavoro prima che il lavoro sia completamente completato. È possibile ottenere ciò nello stesso modo in cui si utilizza il modello Attendi una richiamata con Task Token di integrazione dei servizi. A tale scopo, passa un token di attività al job, quindi restituiscilo utilizzando una SendTaskFailureAPIchiamata SendTaskSuccesso. Step Functions utilizzerà i dati forniti in quella chiamata per completare l'attività, interrompere il monitoraggio del lavoro e continuare il flusso di lavoro.

Attendi una richiamata con Task Token

Le attività di callback forniscono un modo per mettere in pausa un flusso di lavoro finché non viene restituito il token dell’attività. Per un'operazione potrebbe essere necessario attendere un’approvazione umana, integrarsi con una terza parte oppure chiamare i sistemi legacy. Per attività come queste, puoi mettere in pausa Step Functions finché l'esecuzione del flusso di lavoro non raggiunge la quota di servizio di un anno (vedi,Quote relative alla limitazione statale) e attendere il completamento di un processo o flusso di lavoro esterno. In queste situazioni, Step Functions consente di passare un token di attività al AWS SDKintegrazioni di servizi e anche ad alcune integrazioni di servizi ottimizzati. L'attività verrà messa in pausa finché non riceverà la restituzione del token con una chiamata SendTaskSuccess o SendTaskFailure.

Se uno Task stato che utilizza il token di attività di callback scade, viene generato un nuovo token casuale. È possibile accedere ai token delle attività dall'oggetto context.

Nota

Un task token deve contenere almeno un carattere e non può superare i 1024 caratteri.

Da utilizzare .waitForTaskToken con un AWS SDKintegrazione, API è necessario utilizzare un campo di parametri in cui inserire il token dell'attività.

Nota

È necessario passare i token delle attività dai responsabili all'interno dello stesso AWS conto. I token non funzioneranno se li invii dai principali in un altro AWS conto.

Suggerimento

Per distribuire un flusso di lavoro di esempio che utilizza un modello di integrazione del servizio di token di attività di callback nel Account AWS, vedi Modulo 4 - Attendi una richiamata con il Task Token di The AWS Step Functions Workshop.

Per consultare un elenco di ciò che supportano i servizi integrati in attesa del token di un'attività (.waitForTaskToken), vedi Integrazione dei servizi con Step Functions.

Esempio di token di un’attività

In questo esempio, un flusso di lavoro Step Functions deve integrarsi con un microservizio esterno per eseguire una verifica del credito come parte di un flusso di lavoro di approvazione. Step Functions pubblica un SQS messaggio Amazon che include un task token come parte del messaggio. Un sistema esterno si integra con Amazon SQS e rimuove il messaggio dalla coda. Al termine, restituisce il risultato e il task token originale. Step Functions continua quindi con il suo flusso di lavoro.

SQSattività in attesa della restituzione di un token di attività

Il "Resource" campo della definizione dell'attività che fa riferimento ad Amazon SQS include .waitForTaskToken aggiunto alla fine.

"Send message to SQS": { "Type": "Task", "Resource": "arn:aws:states:::sqs:sendMessage.waitForTaskToken", "Parameters": { "QueueUrl": "https://sqs.us-east-2.amazonaws.com/123456789012/myQueue", "MessageBody": { "Message": "Hello from Step Functions!", "TaskToken.$": "$$.Task.Token" } }, "Next": "NEXT_STATE" }

Questo dice a Step Functions di mettere in pausa e attendere il task token. Quando si specifica una risorsa utilizzando .waitForTaskToken, il token di attività è accessibile nel campo "Parameters" della definizione dello stato con una designazione speciale di percorso ($$.Task.Token). Il $$. iniziale indica che il percorso accede all’oggetto contestuale e ottiene il token di attività per l'attività corrente in un’esecuzione in corso.

Quando viene completato, il servizio esterno chiama SendTaskSuccess o SendTaskFailure con taskToken incluso. Solo allora il flusso di lavoro procede allo stato successivo.

Nota

Per evitare un'attesa indefinita se un processo non riesce a inviare il token di attività insieme a SendTaskSuccess o SendTaskFailure, consulta Configurazione di un timeout Heartbeat per un’operazione in attesa.

Ottieni un Token dall’oggetto contestuale

L'oggetto context è un JSON oggetto interno che contiene informazioni sull'esecuzione. Come input di stato, è possibile accedervi con un percorso dal campo "Parameters" durante un'esecuzione. Quando l’accesso viene eseguito dall'interno di una definizione di attività, include informazioni sull'esecuzione specifica, tra cui il token dell’attività.

{ "Execution": { "Id": "arn:aws:states:us-east-1:123456789012:execution:stateMachineName:executionName", "Input": { "key": "value" }, "Name": "executionName", "RoleArn": "arn:aws:iam::123456789012:role...", "StartTime": "2019-03-26T20:14:13.192Z" }, "State": { "EnteredTime": "2019-03-26T20:14:13.192Z", "Name": "Test", "RetryCount": 3 }, "StateMachine": { "Id": "arn:aws:states:us-east-1:123456789012:stateMachine:stateMachineName", "Name": "name" }, "Task": { "Token": "h7XRiCdLtd/83p1E0dMccoxlzFhglsdkzpK9mBVKZsp7d9yrT1W" } }

È possibile accedere al token dell’attività utilizzando un percorso speciale dall'interno del campo "Parameters" della definizione dell'attività. Per accedere all’input o all’oggetto contestuale, specificare per prima cosa che il parametro sarà un percorso aggiungendo .$ al nome del parametro. Quanto segue specifica i nodi sia dall'input sia dall’oggetto contestuale in una specifica "Parameters".

"Parameters": { "Input.$": "$", "TaskToken.$": "$$.Task.Token" },

In entrambi i casi, l'aggiunta .$ al nome del parametro indica a Step Functions di aspettarsi un percorso. Nel primo caso, "$" è un percorso che include l'intero input. Nel secondo caso, $$. specifica che il percorso potrà accedere all'oggetto contestuale e $$.Task.Token imposta il parametro al valore del token di attività nell’oggetto contestuale di un’esecuzione.

Nell'SQSesempio di Amazon, .waitForTaskToken nel "Resource" campo indica a Step Functions di attendere la restituzione del token dell'attività. Il "TaskToken.$": "$$.Task.Token" parametro passa quel token come parte del SQS messaggio Amazon.

"Send message to SQS": { "Type": "Task", "Resource": "arn:aws:states:::sqs:sendMessage.waitForTaskToken", "Parameters": { "QueueUrl": "https://sqs.us-east-2.amazonaws.com/123456789012/myQueue", "MessageBody": { "Message": "Hello from Step Functions!", "TaskToken.$": "$$.Task.Token" } }, "Next": "NEXT_STATE" }

Per ulteriori informazioni sugli oggetti contesto, vedi Oggetto Context nella sezione Elaborazione di input e output di questa guida.

Configurazione di un timeout Heartbeat per un’operazione in attesa

Un'operazione in attesa del token di attività attenderà che l'esecuzione raggiunga la quota di servizio di un anno (vedi Quote relative alla limitazione statale). Per evitare il blocco delle esecuzioni è possibile configurare un intervallo di timeout heartbeat nella definizione della macchina a stati. Utilizzare il campo HeartbeatSeconds per specificare l'intervallo di timeout.

{ "StartAt": "Push to SQS", "States": { "Push to SQS": { "Type": "Task", "Resource": "arn:aws:states:::sqs:sendMessage.waitForTaskToken", "HeartbeatSeconds": 600, "Parameters": { "MessageBody": { "myTaskToken.$": "$$.Task.Token" }, "QueueUrl": "https://sqs.us-east-1.amazonaws.com/123456789012/push-based-queue" }, "ResultPath": "$.SQS", "End": true } } }

In questa definizione di macchina a stati, un'attività invia un messaggio ad Amazon SQS e attende che un processo esterno la richiami con il token di attività fornito. Il campo "HeartbeatSeconds": 600 imposta l'intervallo di timeout heartbeat su 10 minuti. L'attività attenderà la restituzione del token dell'attività con una di queste API azioni:

Se l'attività di attesa non riceve un token di attività valido in un periodo di 10 minuti, l'operazione ha esito negativo con nome di errore States.Timeout.

Per ulteriori informazioni, consulta il progetto di esempio dell'attività di callback: Crea un esempio di pattern di callback con Amazon SQSSNS, Amazon e Lambda.