Scopri di più su Activities 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 di più su Activities in Step Functions

Le attività sono una AWS Step Functions funzionalità che ti consente di avere un'attività nella tua macchina a stati in cui il lavoro viene eseguito da un lavoratore che può essere ospitato su Amazon Elastic Compute Cloud (AmazonEC2), Amazon Elastic Container Service (AmazonECS), dispositivi mobili, praticamente ovunque.

Panoramica

In AWS Step Functions, le attività sono un modo per associare codice in esecuzione da qualche parte (noto come activity worker) a un'attività specifica in una macchina a stati. Puoi creare un'attività utilizzando la console Step Functions o chiamandoCreateActivity. Ciò fornisce un Amazon Resource Name (ARN) per lo stato dell'attività. Usalo ARN per verificare lo stato dell'attività lavorativa nel tuo Activity Worker.

Nota

Le attività non hanno versioni e dovrebbero essere retrocompatibili. Se devi apportare una modifica incompatibile con le versioni precedenti a un'attività, crea una nuova attività in Step Functions utilizzando un nome univoco.

Un activity worker può essere un'applicazione in esecuzione su un'EC2istanza Amazon, una AWS Lambda funzione, un dispositivo mobile: qualsiasi applicazione in grado di stabilire una HTTP connessione, ospitata ovunque. Quando Step Functions raggiunge lo stato di un'attività, il flusso di lavoro attende che un addetto all'attività effettui il sondaggio per un'attività. Un activity worker interroga Step Functions utilizzando GetActivityTask e inviando ARN l'attività correlata. GetActivityTaskrestituisce una risposta che include input (una stringa di JSON input per l'attività) e un taskToken(un identificatore univoco per l'attività). Dopo aver completato il lavoro, il lavoratore di attività può fornire un report dell'esito positivo o negativo utilizzando SendTaskSuccess o SendTaskFailure. Queste due chiamate utilizzano il taskToken offerto da GetActivityTask per associare il risultato al task.

APIsRelativo alle attività (attività)

Step Functions consente APIs di creare ed elencare attività, richiedere un'attività e gestire il flusso della macchina a stati in base ai risultati del lavoratore.

Le seguenti sono le Step Functions APIs correlate alle attività:

Nota

Il polling per i task di attività con GetActivityTask può risultare in una latenza in alcune implementazioni. Per informazioni, consulta Evitare la latenza durante il polling delle attività.

Attesa del completamento di un task di attività

Configura il periodo di attesa di uno stato impostando TimeoutSeconds nella definizione del task. Per mantenere il task attivo e in attesa, invia periodicamente un heartbeat dal tuo lavoratore di attività utilizzando SendTaskHeartbeat entro l'intervallo di tempo configurato in TimeoutSeconds. Configurando una lunga durata di timeout e inviando attivamente un heartbeat, un'attività in Step Functions può attendere fino a un anno prima che l'esecuzione venga completata.

Se ad esempio hai bisogno di un flusso di lavoro che attenda l'esito di un processo lungo, esegui le operazioni descritte di seguito:

  1. Crea un'attività tramite la console oppure utilizzando CreateActivity. Prendi nota dell'attività. ARN

  2. Fate riferimento ARN a ciò nello stato di un'attività nella definizione e nel set della macchina a statiTimeoutSeconds.

  3. Implementa un activity worker che effettui sondaggi sul lavoro utilizzandoGetActivityTask, facendo riferimento a tale attività. ARN

  4. Utilizza SendTaskHeartbeat periodicamente entro l'intervallo di tempo impostato in HeartbeatSeconds nella definizione di task della tua macchina a stati per impedire il timeout del task.

  5. Avvia un'esecuzione della tua macchina a stati.

  6. Avvia il processo del lavoratore di attività.

L'esecuzione si ferma nello stato task di attività e attende che il tuo lavoratore di attività effettui il polling di un task. Una volta fornito un taskToken al tuo lavoratore di attività, il flusso di lavoro attenderà che SendTaskSuccess o SendTaskFailure fornisca uno stato. Se l'esecuzione non ottiene risultati o una chiamata SendTaskHeartbeat prima dell'intervallo di tempo configurato in TimeoutSeconds, l'esecuzione avrà esito negativo e la cronologia delle esecuzioni conterrà un evento ExecutionTimedOut.

Esempio: Activity Worker in Ruby

Quello che segue è un esempio di Activity Worker che utilizza il AWS SDK for Ruby per mostrarti come implementare il tuo Activity Worker.

Il codice implementa un modello consumatore-produttore con un numero configurabile di thread per poller e lavoratori di attività. I thread di poller effettuano costantemente un long polling del task di attività. Una volta recuperato, un task di attività viene passato attraverso una coda di blocco delimitata in modo da essere raccolto dal thread di attività.

Il seguente codice Ruby è il punto di ingresso principale per questo esempio di lavoratore di attività Ruby.

require_relative '../lib/step_functions/activity' credentials = Aws::SharedCredentials.new region = 'us-west-2' activity_arn = 'ACTIVITY_ARN' activity = StepFunctions::Activity.new( credentials: credentials, region: region, activity_arn: activity_arn, workers_count: 1, pollers_count: 1, heartbeat_delay: 30 ) # The start method takes as argument the block that is the actual logic of your custom activity. activity.start do |input| { result: :SUCCESS, echo: input['value'] } end

Il codice include impostazioni predefinite che puoi modificare in modo da fare riferimento alla tua attività e adattarla alla tua implementazione specifica. Questo codice prende come input la logica di implementazione effettiva, consente di fare riferimento alla tua attività e alle tue credenziali specifiche e ti permette di configurare il numero di thread e il ritardo dell'heartbeat. Per ulteriori informazioni e per scaricare il codice, vedere Step Functions Ruby Activity Worker.

Elemento Descrizione

require_relative

Percorso relativo per il seguente esempio di codice di lavoratore di attività.

region

AWS Regione della tua attività.

workers_count

Il numero di thread per il tuo lavoratore di attività. Per la maggior parte delle implementazioni, dovrebbero essere sufficienti tra i 10 e i 20 thread. Più tempo l'attività impiega a elaborare, più thread potrebbero servire. Per fare una stima, moltiplica il numero di attività di elaborazione al secondo in base al 99esimo della latenza di elaborazione di attività, in secondi.

pollers_count

Il numero di thread per i tuoi poller. Per la maggior parte delle implementazioni, dovrebbero essere sufficienti tra i 10 e i 20 thread.

heartbeat_delay

Il ritardo tra heartbeat espresso in secondi.

input Logica di implementazione della tua attività.

Fasi successive

Per una panoramica dettagliata sulla creazione di una macchina a stati che utilizzi un lavoratore di attività, consulta: