Creazione di una macchina a stati Activity utilizzando 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à.

Creazione di una macchina a stati Activity utilizzando Step Functions

Questo tutorial mostra come creare una macchina a stati basata sulle attività utilizzando Java e AWS Step Functions. Le attività consentono di controllare il codice di lavoro che viene eseguito altrove dalla macchina a stati. Per una panoramica, consultare Scopri di più su Activities in Step Functions in Scopri di più sulle macchine a stati in Step Functions.

Per completare questo tutorial, è necessario quanto segue:

  • The SDKper Java. L'attività di esempio in questo tutorial è un'applicazione Java che utilizza AWS SDK for Java con cui comunicare AWS.

  • AWS credenziali nell'ambiente o nello standard AWS file di configurazione. Per ulteriori informazioni, consulta Configura il AWS Credenziali in AWS SDK for Java Guida per gli sviluppatori.

Fase 1: creazione di un'attività

È necessario rendere Step Functions consapevole dell'attività di cui si desidera creare il lavoratore (un programma). Step Functions risponde con un Amazon Resource Name (ARN) che stabilisce un'identità per l'attività. Utilizza questa identità per coordinare le informazioni trasmesse tra la macchina a stati e il lavoratore.

Importante

Assicurati che la tua attività ricada nella stessa direzione AWS account come macchina statale.

  1. Nella console Step Functions, nel riquadro di navigazione a sinistra, scegli Attività.

  2. ScegliereCreate activity (Crea attività).

  3. Inserisci un nome per l'attività, ad esempioget-greeting, e quindi scegli Crea attività.

  4. Quando viene creata l'attività, prendine notaARN, come illustrato nell'esempio seguente.

    arn:aws:states:us-east-1:123456789012:activity:get-greeting

Fase 2: Creare una macchina a stati

Crea una macchina a stati che determini quando l'attività viene richiamata e quando il lavoratore deve eseguire il lavoro principale, raccoglierne i risultati e restituirli. Per creare la macchina a stati, utilizzerai Workflow Studio. Editor del codice

  1. Nella console Step Functions, nel riquadro di navigazione a sinistra, scegli Macchine a stati.

  2. Nella pagina Macchine a stati, scegli Crea macchina a stati.

  3. Nella finestra di dialogo Scegli un modello, seleziona Vuoto.

  4. Scegliete Seleziona per aprire Workflow Studio inmodalità di progettazione.

  5. In questo tutorial, scriverai la definizione Amazon States Language (ASL) della tua macchina a stati nell'editor di codice. Per fare ciò, scegli Code.

  6. Rimuovi il codice boilerplate esistente e incolla il codice seguente. Ricordati di sostituire l'esempio ARN contenuto in questo codice con quello ARN dell'attività che hai creato in precedenza nel campo. Resource

    { "Comment": "An example using a Task state.", "StartAt": "getGreeting", "Version": "1.0", "TimeoutSeconds": 300, "States": { "getGreeting": { "Type": "Task", "Resource": "arn:aws:states:us-east-1:123456789012:activity:get-greeting", "End": true } } }

    Questa è una descrizione della vostra macchina a stati che utilizza il Amazon States Language (ASL). Definisce un singolo stato Task denominato getGreeting. Per ulteriori informazioni, consultare Struttura di una macchina a stati.

  7. SulVisualizzazione dei grafi, assicurati che il grafico del flusso di lavoro per la ASL definizione che hai aggiunto sia simile al grafico seguente.

    Visualizzazione grafica della macchina a stati con lo stato delle RunActivity attività.
  8. Specificate un nome per la vostra macchina a stati. Per fare ciò, scegli l'icona di modifica accanto al nome della macchina a stati predefinita di MyStateMachine. Quindi, nella configurazione della macchina a stati, specifica un nome nella casella Nome macchina a stati.

    Per questo tutorial, inserisci il nome ActivityStateMachine.

  9. (Facoltativo) Nella configurazione della macchina a stati, specificate altre impostazioni del flusso di lavoro, come il tipo di macchina a stati e il relativo ruolo di esecuzione.

    Per questo tutorial, mantieni tutte le selezioni predefinite nelle impostazioni della macchina a stati.

    Se in precedenza hai creato un IAM ruolo con le autorizzazioni corrette per la tua macchina a stati e desideri utilizzarlo, in Autorizzazioni seleziona Scegli un ruolo esistente, quindi seleziona un ruolo dall'elenco. Oppure seleziona Inserisci un ruolo ARN e quindi fornisci un ruolo ARN per quel IAM ruolo.

  10. Nella finestra di dialogo Conferma creazione del ruolo, scegli Conferma per continuare.

    Puoi anche scegliere Visualizza le impostazioni del ruolo per tornare alla configurazione della macchina a stati.

    Nota

    Se elimini il IAM ruolo creato da Step Functions, Step Functions non può ricrearlo in seguito. Allo stesso modo, se modifichi il ruolo (ad esempio, rimuovendo Step Functions dai principi della IAM politica), Step Functions non può ripristinare le impostazioni originali in un secondo momento.

Fase 3: implementazione di un lavoratore

Crea un lavoratore, ossia un programma responsabile di:

  • Polling Step Functions per le attività che utilizzano l'GetActivityTaskAPIazione.

  • Esecuzione del lavoro dell'attività mediante codice, (ad esempio, il metodo getGreeting() nel codice seguente).

  • Restituzione dei risultati utilizzando le SendTaskHeartbeat API azioni SendTaskSuccessSendTaskFailure, e.

Nota

Per un esempio più completo di un lavoratore di attività, consultare Esempio: Activity Worker in Ruby. Questo esempio fornisce un'implementazione basata su best practice, che può essere utilizzata come riferimento per il lavoratore di attività. Il codice implementa un modello consumatore-produttore con un numero configurabile di thread per poller e lavoratori di attività.

Per implementare il lavoratore

  1. Crea un file denominato GreeterActivities.java.

  2. Aggiungervi il seguente codice.

    import com.amazonaws.ClientConfiguration; import com.amazonaws.auth.EnvironmentVariableCredentialsProvider; import com.amazonaws.regions.Regions; import com.amazonaws.services.stepfunctions.AWSStepFunctions; import com.amazonaws.services.stepfunctions.AWSStepFunctionsClientBuilder; import com.amazonaws.services.stepfunctions.model.GetActivityTaskRequest; import com.amazonaws.services.stepfunctions.model.GetActivityTaskResult; import com.amazonaws.services.stepfunctions.model.SendTaskFailureRequest; import com.amazonaws.services.stepfunctions.model.SendTaskSuccessRequest; import com.amazonaws.util.json.Jackson; import com.fasterxml.jackson.databind.JsonNode; import java.util.concurrent.TimeUnit; public class GreeterActivities { public String getGreeting(String who) throws Exception { return "{\"Hello\": \"" + who + "\"}"; } public static void main(final String[] args) throws Exception { GreeterActivities greeterActivities = new GreeterActivities(); ClientConfiguration clientConfiguration = new ClientConfiguration(); clientConfiguration.setSocketTimeout((int)TimeUnit.SECONDS.toMillis(70)); AWSStepFunctions client = AWSStepFunctionsClientBuilder.standard() .withRegion(Regions.US_EAST_1) .withCredentials(new EnvironmentVariableCredentialsProvider()) .withClientConfiguration(clientConfiguration) .build(); while (true) { GetActivityTaskResult getActivityTaskResult = client.getActivityTask( new GetActivityTaskRequest().withActivityArn(ACTIVITY_ARN)); if (getActivityTaskResult.getTaskToken() != null) { try { JsonNode json = Jackson.jsonNodeOf(getActivityTaskResult.getInput()); String greetingResult = greeterActivities.getGreeting(json.get("who").textValue()); client.sendTaskSuccess( new SendTaskSuccessRequest().withOutput( greetingResult).withTaskToken(getActivityTaskResult.getTaskToken())); } catch (Exception e) { client.sendTaskFailure(new SendTaskFailureRequest().withTaskToken( getActivityTaskResult.getTaskToken())); } } else { Thread.sleep(1000); } } } }
    Nota

    La classe EnvironmentVariableCredentialsProvider in questo esempio presuppone che le variabili di ambiente AWS_ACCESS_KEY_ID (o AWS_ACCESS_KEY) e AWS_SECRET_KEY (o AWS_SECRET_ACCESS_KEY) siano impostate. Per ulteriori informazioni su come fornire le credenziali richieste alla fabbrica, vedere AWSCredentialsProviderAWS SDK for Java APIRiferimento e configurazione AWS Credenziali e regione per lo sviluppo in AWS SDK for Java Guida per gli sviluppatori.

    Per impostazione predefinita, il AWS SDKaspetterà fino a 50 secondi per ricevere i dati dal server per qualsiasi operazione. GetActivityTask è un'operazione di polling lungo che attende per un massimo di 60 secondi la successiva attività disponibile. Per evitare la ricezione di un SocketTimeoutException errore, SocketTimeout impostalo su 70 secondi.

  3. Nell'elenco dei parametri del GetActivityTaskRequest().withActivityArn() costruttore, sostituite il ACTIVITY_ARN valore con quello ARN dell'attività che avete creato in precedenza.

Passaggio 4: Esegui la macchina a stati

Quando si avvia l'esecuzione della macchina a stati, il lavoratore interroga Step Functions per le attività, esegue il proprio lavoro (utilizzando l'input fornito) e ne restituisce i risultati.

  1. Sul ActivityStateMachinenella pagina, scegli Avvia esecuzione.

    Viene visualizzata la finestra di dialogo Avvia esecuzione.

  2. Nella finestra di dialogo Avvia esecuzione, effettuate le seguenti operazioni:

    1. (Facoltativo) Inserite un nome di esecuzione personalizzato per sovrascrivere il valore predefinito generato.

      ASCIINomi diversi e registrazione

      Step Functions accetta nomi per macchine a stati, esecuzioni, attività ed etichette che contengono non ASCII caratteri. Poiché tali caratteri non funzioneranno con Amazon CloudWatch, ti consigliamo di utilizzare solo ASCII caratteri in modo da poter tenere traccia delle metriche. CloudWatch

    2. Nella casella Input, inserisci il seguente JSON input per eseguire il flusso di lavoro.

      { "who": "AWS Step Functions" }
    3. Selezionare Start execution (Avvia esecuzione).

    4. La console Step Functions ti indirizza a una pagina intitolata con il tuo ID di esecuzione. Questa pagina è nota come pagina dei dettagli di esecuzione. In questa pagina è possibile esaminare i risultati dell'esecuzione man mano che l'esecuzione procede o dopo il suo completamento.

      Per esaminare i risultati dell'esecuzione, scegliete i singoli stati nella vista Grafico, quindi scegliete le singole schede Dettagli del passaggio nel riquadro per visualizzare i dettagli di ogni stato, inclusi rispettivamente input, output e definizione. Per i dettagli sulle informazioni sull'esecuzione che è possibile visualizzare nella pagina Dettagli di esecuzione, vederePanoramica dei dettagli di esecuzione.

Fase 5: esecuzione e arresto del lavoratore

Affinché il lavoratore esegua il polling di attività sulla macchina a stati, devi eseguire il lavoratore.

  1. Dalla riga di comando, accedere alla directory in cui è stato creato GreeterActivities.java.

  2. Per utilizzare nuovamente il plugin AWS SDK, aggiungi il percorso completo delle third-party directory lib and alle dipendenze del tuo file di build e al tuo Java. CLASSPATH Per ulteriori informazioni, consulta Scaricare ed estrarre il file nel SDK AWS SDK for Java Guida per gli sviluppatori.

  3. Compilare il file.

    $ javac GreeterActivities.java
  4. Esegui il file .

    $ java GreeterActivities
  5. Nella console Step Functions, vai alla pagina Dettagli di esecuzione.

  6. Al termine dell'esecuzione, esamina i risultati dell'esecuzione.

  7. Arrestare il lavoratore.