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à

Gestione dello stato e trasformazione dei dati

Step Functions ha recentemente aggiunto variabili e JSONata per gestire lo stato e trasformare i dati.

Scopri come passare dati con variabili e trasformare dati con JSONata.

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 una AWS Lambda funzione, integrandosi con altre supportate o Servizi AWS richiamando una HTTPSAPI, 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'HTTPSAPIendpoint.

Invoca una funzione con Arguments JSONata

La seguente definizione dello stato dell'attività (JSONata) richiama una funzione Lambda denominata. priceWatcher

Notate l'uso di JSONata espressioni per interrogare i dati di input da utilizzare in Arguments e il risultato dell'attività nel campo assign.

"Get Current Price": { "Type": "Task", "QueryLanguage" : "JSONata", "Resource": "arn:aws:states:::lambda:invoke", "Next": "Check Price", "Arguments": { "Payload": { "product": "{% $states.context.Execution.Input.product %}" }, "FunctionName": "arn:aws:lambda:<region>:123456789012:function:priceWatcher:$LATEST" }, "Assign": { "currentPrice": "{% $states.result.Payload.current_price %}" } }

Invoca una funzione con parametri JSONPath

La seguente definizione dello stato dell'attività (JSONPath) 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 un HTTPSAPI, utilizzano la seguente sintassi. Per informazioni sulla sintassi del Task, vedere. HTTP Flussi di lavoro Call HTTPS APIs in Step Functions

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

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

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

  • partitionè la AWS Step Functions partizione da utilizzare più comunemente. aws

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

    • states per un'attività

    • lambdaper una funzione Lambda. Se esegui l'integrazione con altri Servizi AWS, ad esempio Amazon SNS o Amazon DynamoDB, usa o. sns dynamodb

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

  • accountè l' 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 o AWS SDKintegrazione ottimizzata) utilizzato 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 SDK integrazione 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, aggiungila .sync alla 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.

Arguments(Solo facoltativo) JSONata

Utilizzato per passare informazioni alle API azioni delle risorse connesse. I valori possono includere JSONata espressioni. Per ulteriori informazioni, consulta Trasformazione dei dati con Step JSONata Functions.

Output(JSONataSolo facoltativo)

Utilizzato per specificare e trasformare l'output dello stato. Quando specificato, il valore ha la precedenza sullo stato di output predefinito.

Il campo di output accetta qualsiasi JSON valore (oggetto, array, stringa, numero, booleano, null). Qualsiasi valore di stringa, compresi quelli contenuti negli oggetti o negli array, verrà valutato come JSONata se fosse circondato da {%%} caratteri.

Output accetta anche direttamente un'JSONataespressione, ad esempio: «Output»: «{% jsonata expression%}»

Per ulteriori informazioni, consultare Elaborazione di input e output.

Parameters(Solo facoltativo) JSONPath

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 relativi alle credenziali dello stato dell'attività Per un esempio di utilizzo di questo campo per accedere a una AWS risorsa tra account diversi dalla macchina a stati, vediAccesso a più account AWS risorse in Step Functions.

Nota

Questo campo è supportato da chi utilizza le Tipi di attività funzioni Lambda e da un servizio supportato AWS.

ResultPath(JSONPathSolo 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(JSONPathSolo opzionale)

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(Solo facoltativo) JSONPath

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(JSONPathSolo facoltativo)

Se si desidera fornire un valore del battito cardiaco in modo dinamico a partire dallo stato immesso utilizzando un percorso di riferimento, utilizzare. 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, al termine del AWS Glue processo, verrà eseguito lo stato successivo.

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

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

Esempi di campi relativi alle credenziali dello stato dell'attività

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)" }, ... } } }