Stato del flusso di lavoro delle attività - 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à.

Stato del flusso di lavoro delle attività

Uno stato Task ("Type": "Task") rappresenta una singola unità di lavoro eseguita da una macchina a stati. Un'attività esegue il lavoro utilizzando un'attività o un AWS Lambda funzione, integrandosi con altre supportate Servizi AWSo invocando una terza parteAPI, come Stripe.

Amazon States Language rappresenta le attività impostando il tipo di stato Task e fornendo all'attività l'Amazon Resource Name (ARN) dell'attività, della funzione Lambda o dell'endpoint di terze partiAPI. La seguente definizione dello stato dell'attività richiama una funzione Lambda denominata. HelloFunction

"Lambda Invoke": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "Parameters": { "Payload.$": "$", "FunctionName": "arn:aws:lambda:us-east-2:123456789012:function:HelloFunction:$LATEST" }, "End": true }

Tipi di attività

Step Functions supporta i seguenti tipi di attività che è possibile specificare in una definizione dello stato dell'attività:

È possibile specificare un tipo di attività fornendolo ARN nel Resource campo di una definizione dello stato dell'attività. L'esempio seguente mostra la sintassi del Resource campo. Tutti i tipi di task tranne quello che richiama una terza parte utilizzano la API seguente sintassi. Per informazioni sulla sintassi del Task, vedere. HTTP Chiama terze parti APIs nei flussi di lavoro Step Functions

Nella definizione dello stato dell'attività, sostituite il testo in corsivo nella seguente sintassi con AWS informazioni specifiche sulla risorsa.

arn:partition:service:region:account:task_type:name

L'elenco seguente illustra i singoli componenti di questa sintassi:

  • partitionè il AWS Step Functions partizione da usare, più comunementeaws.

  • serviceindica il Servizio AWS utilizzato per eseguire l'operazione e può avere uno dei seguenti valori:

    • states per un'attività

    • lambdaper una funzione Lambda. Se ti integri con altri Servizi AWS, ad esempio, Amazon SNS o Amazon DynamoDB, usa o. sns dynamodb

  • regionè il AWS Codice regionale in cui l'attività di Step Functions o il tipo di macchina a stati, la funzione Lambda o qualsiasi altra AWS la risorsa è stata creata.

  • accountè il Account AWS ID in cui è stata definita la risorsa.

  • task_type è il tipo di task da eseguire. Può essere uno dei seguenti valori:

  • nameè il nome della risorsa registrata (nome dell'attività, nome della funzione Lambda o API azione del servizio).

Nota

Step Functions non supporta il riferimento ARNs tra partizioni o regioni. Ad esempio, non è aws-cn possibile richiamare attività nella aws partizione e viceversa.

Nelle sezioni seguenti vengono fornite ulteriori informazioni su ogni tipo di task.

Attività

Le attività rappresentano lavoratori (processi o thread), da te implementati e ospitati, che eseguono un task specifico. Sono supportati solo dai flussi di lavoro standard, non dai flussi di lavoro Express.

L'attività Resource ARNs utilizza la seguente sintassi.

arn:partition:states:region:account:activity:name
Nota

È necessario creare attività con Step Functions (utilizzando un'CreateActivityAPIazione o la console Step Functions) prima del loro primo utilizzo.

Per ulteriori informazioni sulla creazione di un'attività e l'implementazione di lavoratori, consultare Attività.

Funzioni Lambda

Le attività Lambda eseguono una funzione utilizzando AWS Lambda. Per specificare una funzione Lambda, usa la ARN funzione Lambda nel campo. Resource

A seconda del tipo di integrazione (Integrazione ottimizzata o AWS SDKintegrazione) utilizzata per specificare una funzione Lambda, la sintassi del campo della funzione Lambda varia. Resource

La seguente sintassi di Resource campo è un esempio di integrazione ottimizzata con una funzione Lambda.

"arn:aws:states:::lambda:invoke"

La seguente sintassi di Resource campo è un esempio di AWS SDKintegrazione con una funzione Lambda.

"arn:aws:states:::aws-sdk:lambda:invoke"

La seguente definizione di Task stato mostra un esempio di integrazione ottimizzata con una funzione Lambda denominata. HelloWorld

"LambdaState": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "OutputPath": "$.Payload", "Parameters": { "Payload.$": "$", "FunctionName": "arn:aws:lambda:us-east-1:function:HelloWorld:$LATEST" }, "Next": "NextState" }

Una volta completata la funzione Lambda specificata nel Resource campo, il relativo output viene inviato allo stato identificato nel Next campo (» «). NextState

A supportata Servizio AWS

Quando si fa riferimento a una risorsa connessa, Step Functions richiama direttamente le API azioni di un servizio supportato. Specifica il servizio e l'operazione nel campo Resource.

Il servizio connesso Resource ARNs utilizza la seguente sintassi.

arn:partition:states:region:account:servicename:APIname
Nota

Per creare una connessione sincrona a una risorsa connessa, aggiungi .sync a APIname voce in. ARN Per ulteriori informazioni, consulta Integrazione dei servizi .

Per esempio:

{ "StartAt": "BATCH_JOB", "States": { "BATCH_JOB": { "Type": "Task", "Resource": "arn:aws:states:::batch:submitJob.sync", "Parameters": { "JobDefinition": "preprocessing", "JobName": "PreprocessingBatchJob", "JobQueue": "SecondaryQueue", "Parameters.$": "$.batchjob.parameters", "RetryStrategy": { "attempts": 5 } }, "End": true } } }

campi relativi allo stato dell'attività

Oltre ai campi di stato comuni, gli stati Task hanno i seguenti campi.

Resource (Obbligatorio)

AURI, in particolare uno ARN che identifica in modo univoco l'attività specifica da eseguire.

Parameters (facoltativo).

Utilizzato per passare informazioni alle API azioni delle risorse connesse. I parametri possono utilizzare una combinazione di elementi statici JSON e JsonPath. Per ulteriori informazioni, consulta Passaggio di parametri a un servizio API in Step Functions.

Credentials (facoltativo).

Specifica un ruolo di destinazione che il ruolo di esecuzione della macchina a stati deve assumere prima di richiamare quello specificato. Resource In alternativa, è anche possibile specificare un JSONPath valore o una funzione intrinseca che si risolva in un IAM ruolo in fase di esecuzione in base ARN all'input di esecuzione. Se si specifica un JSONPath valore, è necessario prefissarlo con la notazione. $.

Per esempi di utilizzo di questo campo nello Task stato, vedi. Esempi di campi Credentials di Task State Per un esempio di utilizzo di questo campo per accedere a un account multiplo AWS risorsa dalla tua macchina a stati, vediAccesso a più account AWS risorse in Step Functions.

Nota

Questo campo è supportato dalle funzioni Lambda Tipi di attività che utilizzano e da AWS servizio.

ResultPath (facoltativo).

Specifica dove (nell'input) posizionare i risultati dell'esecuzione del task specificato in Resource. L'input viene quindi filtrato come specificato dal campo OutputPath (se presente) prima di essere utilizzato come output dello stato. Per ulteriori informazioni, consultare Elaborazione di input e output.

ResultSelector (facoltativo).

Passa una raccolta di coppie chiave-valore, in cui i valori sono statici o selezionati dal risultato. Per ulteriori informazioni, consulta ResultSelector.

Retry (facoltativo).

Un array di oggetti, denominati retrier, che definiscono una policy per i nuovi tentativi se si verificano errori di runtime nello stato. Per ulteriori informazioni, consulta Esempi di macchine a stati che utilizzano Retry e Catch.

Catch (facoltativo).

Un array di oggetti, denominati catcher, che definiscono uno stato di fallback. Questo stato viene eseguito se rileva errori di runtime e la relativa policy per i nuovi tentativi è esaurita o non è definita. Per ulteriori informazioni, consulta Stati di fallback.

TimeoutSeconds (facoltativo).

Speciifica il tempo massimo di esecuzione di un'attività o di un'attività prima che scada con l'States.Timeouterrore e abbia esito negativo. Il valore di timeout deve essere positivo, un numero intero diverso da zero. Il valore predefinito è 99999999.

Il conteggio dei timeout inizia dopo l'avvio di un'attività, ad esempio quando LambdaFunctionStarted gli eventi ActivityStarted o gli eventi vengono registrati nella cronologia degli eventi di esecuzione. Per le attività, il conteggio inizia quando GetActivityTask riceve un token e ActivityStarted viene registrato nella cronologia degli eventi di esecuzione.

All'avvio di un'attività, Step Functions attende una risposta positiva o negativa da parte dell'operatore dell'attività o dell'addetto all'attività entro la TimeoutSeconds durata specificata. Se l'operatore dell'attività o dell'attività non risponde entro questo periodo, Step Functions contrassegna l'esecuzione del flusso di lavoro come non riuscita.

Nota

HTTPil timeout dell'attività ha un massimo di 60 secondi, anche se TimeoutSeconds supera tale limite. Consulta la sezione Quote relative a HTTP Task

TimeoutSecondsPath (facoltativo).

Se desideri fornire un valore di timeout in modo dinamico dall'input dello stato utilizzando un percorso di riferimento, usa. TimeoutSecondsPath Una volta risolto, il percorso di riferimento deve selezionare campi i cui valori sono numeri interi positivi.

Nota

Uno Task stato non può includere entrambi TimeoutSeconds eTimeoutSecondsPath. HTTPil timeout dell'attività ha un massimo di 60 secondi, anche se il TimeoutSecondsPath valore supera tale limite.

HeartbeatSeconds (facoltativo).

Determina la frequenza dei segnali del battito cardiaco che un addetto all'attività invia durante l'esecuzione di un'attività. I battiti cardiaci indicano che un'attività è ancora in esecuzione e richiede più tempo per essere completata. I battiti cardiaci impediscono che un'attività o un'attività scada entro la durata prevista. TimeoutSeconds

HeartbeatSecondsdeve essere un valore intero positivo, diverso da zero, inferiore al valore del campo. TimeoutSeconds Il valore predefinito è 99999999. Se trascorre più tempo dei secondi specificati tra i battiti cardiaci dell'operazione, lo stato dell'operazione ha esito negativo e viene generato un errore. States.Timeout

Per le attività, il conteggio inizia quando GetActivityTask riceve un token e ActivityStarted viene registrato nella cronologia degli eventi di esecuzione.

HeartbeatSecondsPath (facoltativo).

Se desideri fornire un valore del battito cardiaco in modo dinamico dall'input dello stato utilizzando un percorso di riferimento, usa. HeartbeatSecondsPath Una volta risolto, il percorso di riferimento deve selezionare campi i cui valori sono numeri interi positivi.

Nota

Uno Task stato non può includere entrambi HeartbeatSeconds eHeartbeatSecondsPath.

Uno stato Task deve impostare il campo End su true se lo stato termina l'esecuzione oppure deve fornire uno stato nel campo Next che verrà eseguito al completamento dello stato Task.

Esempi di definizione dello stato dell'attività

Gli esempi seguenti mostrano come specificare la definizione dello stato dell'attività in base alle proprie esigenze.

Timeout dello stato delle attività e intervalli di battito cardiaco

È buona norma impostare un valore di timeout e un intervallo di heartbeat per le attività di lunga durata. Questa operazione può essere eseguita specificando i valori di timeout e heartbeat o impostandoli dinamicamente.

Esempio di notifica di timeout statico e battito cardiaco

Al completamento di HelloWorld, verrà eseguito lo stato successivo (qui denominato NextState).

Se non viene completato entro 300 secondi o non invia notifiche heartbeat a intervalli di 60 secondi, questo task viene contrassegnato come failed.

"ActivityState": { "Type": "Task", "Resource": "arn:aws:states:us-east-1:123456789012:activity:HelloWorld", "TimeoutSeconds": 300, "HeartbeatSeconds": 60, "Next": "NextState" }

Esempio di notifica dinamica del timeout delle attività e del battito cardiaco

In questo esempio, quando AWS Glue il processo viene completato, verrà eseguito lo stato successivo.

Se questa attività non viene completata entro l'intervallo impostato dinamicamente dal AWS Glue lavoro, l'attività è contrassegnata come. failed

"GlueJobTask": { "Type": "Task", "Resource": "arn:aws:states:::glue:startJobRun.sync", "Parameters": { "JobName": "myGlueJob" }, "TimeoutSecondsPath": "$.params.maxTime", "Next": "NextState" }

Esempi di campi Credentials di Task State

Specificazione di un ruolo codificato IAM ARN

L'esempio seguente specifica un ruolo di destinazione che IAM il ruolo di esecuzione di una macchina a stati deve assumere per accedere a una funzione Lambda multiaccount denominata. Echo In questo esempio, il ruolo di destinazione ARN viene specificato come valore codificato.

{ "StartAt": "Cross-account call", "States": { "Cross-account call": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "Credentials": { "RoleArn": "arn:aws:iam::111122223333:role/LambdaRole" }, "Parameters": { "FunctionName": "arn:aws:lambda:us-east-2:111122223333:function:Echo" }, "End": true } } }

Specificazione come ruolo JSONPath IAM ARN

L'esempio seguente specifica un JSONPath valore, che si risolverà in un IAM ruolo in ARN fase di esecuzione.

{ "StartAt": "Lambda", "States": { "Lambda": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "Credentials": { "RoleArn.$": "$.roleArn" }, ... } } }

Specificare una funzione intrinseca come ruolo IAM ARN

L'esempio seguente utilizza la funzione States.Formatintrinseca, che si risolve in un ruolo in fase di esecuzione. IAM ARN

{ "StartAt": "Lambda", "States": { "Lambda": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "Credentials": { "RoleArn.$": "States.Format('arn:aws:iam::{}:role/ROLENAME', $.accountId)" }, ... } } }