Pianificare un flusso di lavoro serverless

con AWS Step Functions e Amazon CloudWatch

Automatizzare la modalità di risposta agli eventi operativi per le risorse nell'account AWS può consentire di ridurre il carico operativo dell'infrastruttura AWS Cloud. Come esempio reale, se sei un tecnico DevOps o un IT manager, potresti ritenere utile automatizzare attività ETL, sincronizzazione dati o sicurezza.

Per risolvere questo problema, puoi eseguire un flusso di lavoro serverless su una pianificazione di tipo temporale. Amazon CloudWatch Events fornisce un flusso di eventi di sistema in tempo quasi reale che descrive le modifiche e le notifiche delle tue risorse di AWS. Da questo flusso, puoi creare regole per instradare eventi specifici ad AWS Step Functions e invocare una macchina a stati per eseguire elaborazione ulteriore. AWS Step Functions permette di coordinare più servizi in flussi di lavoro serverless, in modo da creare e aggiornare rapidamente i processi automatizzati.

In questo tutorial, utilizzerai Step Functions per orchestrare un flusso di lavoro serverless in risposta a un evento CloudWatch. Per prima cosa, creerai una macchina a stati molto semplice utilizzando AWS Step Functions. Quindi, utilizzerai Amazon CloudWatch Events per configurare una regola che esegua ogni minuto la tua macchina a stati. Anche se questo tutorial invoca un flusso di lavoro su una pianificazione temporale, può essere generalizzato per integrarsi con altri servizi AWS che generano eventi.

In questo tutorial utilizzerai AWS Step Functions e Amazon CloudWatch. Entrambi i servizi sono compresi nel piano gratuito di AWS.

Questo tutorial richiede un account AWS

Non sono previsti costi aggiuntivi per l'utilizzo di Step Functions o CloudWatch. Le risorse create in questo tutorial sono idonee per il piano gratuito. 

Ulteriori informazioni sul piano gratuito >>


Fase 1. Creazione di un ruolo AWS Identity and Access Management (IAM)

AWS Step Functions può eseguire codice e accedere ad altre risorse AWS (ad es. dati archiviati nei bucket Amazon S3). Per conservare la sicurezza, devi concedere l’accesso Step Functions a queste risorse utilizzando AWS Identity and Access Management (IAM).


a. Apri la Console di gestione AWS in un’altra finestra del browser, tenendo aperta questa guida dettagliata. Quando viene caricata la schermata, inserisci nome utente e password per iniziare. Quindi digita IAM nella barra di ricerca e seleziona IAM per aprire la console di servizio.

01a
01a

(fai clic per ingrandire l'immagine)


b.  Fai clic su Roles (Ruoli), quindi scegli Create Role (Crea ruolo).

01b
01b

(fai clic per ingrandire l'immagine)


c. In Select type of trusted entity (Seleziona il tipo di entità affidabile), in AWS service (Servizio AWS), seleziona Step Functions dall’elenco, quindi scegli Next: Permissions (Successivo: Autorizzazioni).

01c
01c

(fai clic per ingrandire l'immagine)


d. Nella pagina Attach permissions policy (Collega policy autorizzazioni), scegli Next: Review (Successivo: Esamina).

01d
01d

(fai clic per ingrandire l'immagine)


e. Nella pagina Review (Esamina), digita step_functions_basic_execution per Role name (Nome ruolo) e fai clic su Create role (Crea ruolo).

01e
01e

(fai clic per ingrandire l'immagine)


f. Viene creato il tuo nuovo ruolo IAM.

01f
01f

(fai clic per ingrandire l'immagine)


Fase 2. Creazione di una macchina a stati AWS Step Functions

In questa fase, creerai una macchina a stati semplice ad esecuzione indipendente utilizzando uno stato Pass. Uno stato Pass si limita a passare il proprio input al proprio output e non esegue realmente alcun lavoro.

In un contesto reale, il tuo flusso di lavoro serverless può fare tutto ciò che desideri che faccia. Potresti coordinare più funzioni Lambda per eseguire attività, prendere decisioni e così via. Ai fini di questo tutorial, tuttavia, manterremo il flusso di lavoro semplice.


a. Apri la console AWS Step Functions. Step Functions offre varie macchine a stati predefinite sotto forma di modelli. Per questo tutorial, creerai una macchina a stati utilizzando il modello Hello World. Nella pagina Create a state machine (Creazione di una macchina a stati), seleziona Templates (Modelli) e quindi scegli Hello world.

02c
02c

(fai clic per ingrandire l'immagine)


b. Nella sezione Details (Dettagli), immetti il Name (Nome) della tua macchina a stati come ScheduledWorkflow (Flusso di lavoro pianificato), quindi, in IAM Role (Ruolo IAM), seleziona I will use an existing role (Utilizzerò un ruolo esistente). In Existing IAM roles (Ruoli IAM esistenti), seleziona il ruolo IAM che hai creato, step_functions_basic_execution.

02d
02d

(fai clic per ingrandire l'immagine)


c. Step Functions compila automaticamente il nome della macchina a stati. Popola anche il riquadro State machine definition (Definizione macchina a stati) con la descrizione della macchina a stati Amazon States Language (Lingue stati Amazon). Per ulteriori informazioni su come definire le macchine a stati, consulta State Machine Structure (Struttura macchina a stati).

Apportiamo alcune semplici modifiche alla tua macchina a stati:

alla riga 2 e alla riga 5, sostituisci “HelloWorld” (Ciao mondo) con “Do Something” (Fai qualcosa)
alla riga 7, sostituisci “Hello World!” con “Work complete!” (Lavoro completato)

Quindi, fai clic sul pulsante di aggiornamento accanto al flusso di lavoro visivo per aggiornare lo schema delle macchine a stati affinché rifletta la tue modifiche.

02e
02e

(fai clic per ingrandire l'immagine)


d. Scegli Create state machine (Crea macchina a stati). È ora possibile eseguire la tua macchina a stati.

02f
02f

(fai clic per ingrandire l'immagine)


Fase 3. Creazione di una regola Amazon CloudWatch Events

Una volta creata la macchina a stati, puoi creare la regola Amazon CloudWatch Events che esegue la tua macchina a stati secondo una specifica pianificazione. Amazon CloudWatch Events distribuisce un flusso in tempo quasi reale di eventi di sistema che descrivono le modifiche alle risorse Amazon Web Services (AWS). Utilizzando regole semplici e rapide da impostare, sarà possibile creare corrispondenze tra eventi e instradarli a una o più funzioni o flussi di destinazione.


a. Apri un’altra scheda del browser. Spostati sulla console CloudWatch Events tramite l’inserimento di CloudWatch nella barra di ricerca.

03a
03a

(fai clic per ingrandire l'immagine)


b. Scegli Eventi, quindi scegli Crea regola.  

03b
03b

(fai clic per ingrandire l'immagine)


c. Viene visualizzata la pagina Fase 1. Crea regola. Nella sezione Origine eventi, seleziona Schedule (Pianificazione). In Tasso fisso di inserisci 1 e lascia selezionata l’unità “Minuti”.

03c
03c

(fai clic per ingrandire l'immagine)


d. Nella sezione Destinazioni, scegli Aggiungi target. Scegli Macchina a stati Step Functions nell’elenco e seleziona la tua macchina a stati ScheduledWorkflow (Flusso di lavoro pianificato).

Scegli Configura input e seleziona Evento con corrispondenza. In questo modo i dettagli del CloudWatch Event verranno trasmessi come input a Step Functions ogni volta che viene eseguito come istanza della tua macchina a stati.

Seleziona Crea un nuovo ruolo per questa risorsa specifica e fai quindi clic su Configura dettagli.

03d
03d

(fai clic per ingrandire l'immagine)


e. Viene visualizzata la pagina Fase 2: Configura i dettagli della regola. Inserisci execute_state_machine come Nome della tua regola, lascia selezionato Enabled for State (Abilitato per lo stato) e scegli quindi Crea regola.

Viene creata la regola e viene visualizzata la pagina Regole che elenca tutte le regole CloudWatch Events.

Viene avviata ogni minuto una nuova esecuzione della tua macchina a stati.

03e
03e

(fai clic per ingrandire l'immagine)


Fase 4. Personalizza il modo in cui la tua macchina a stati gestisce input e output

Quindi, personalizzerai il modo in cui la tua macchina a stati gestisce input e output. Capire come le informazioni fluiscono da uno stato all’altro e imparare a filtrare e manipolare questi dati ti consentirà di progettare e implementare efficacemente i flussi di lavoro in AWS Step Functions.


a. Se torni alla console Step Functions, la tua macchina a stati ScheduledWorkflow (Flusso di lavoro pianificato) dovrebbe essere ancora visualizzata. Fai clic su Modifica.

04a
04a

(fai clic per ingrandire l'immagine)


b. Nella finestra State machine definition (Definizione di macchina a stati), consulta la riga 7 della macchina a stati. Il campo Risultato nello stato Pass specifica l’output che deve essere passato allo stato successivo. Poiché la tua macchina a stati ha un unico stato, il messaggio “Work complete!” (Lavoro completato) viene passato allo stato finale del tuo flusso di lavoro.

Come forse ricorderai, uno stato Pass di Step Functions passa semplicemente il proprio input al proprio output. Puoi utilizzare il campo ResultPath per modificare l’output di uno stato. Ad esempio, puoi sostituire l’input dello stato con il risultato che produce (ad esempio, l’output di una funzione Lambda di uno stato Attività).

Per unire l’input di uno stato con il risultato corrispondente, aggiunti una nuova riga dopo la riga 7 e digita:

"ResultPath": "$.taskresult",

Vengono così uniti i dettagli del CloudWatch Event che invocavano l’esecuzione della macchina a stati con l’output dello stato Pass che, in questo caso, è “Work complete!” (Lavoro completato). Per ulteriori informazioni, consulta Elaborazione di input e output in Step Functions.

04b
04b

(fai clic per ingrandire l'immagine)


c. Fai clic su Salva.

04c
04c

(fai clic per ingrandire l'immagine)


Fase 5. Conferma il funzionamento previsto del flusso di lavoro

Ora che hai abilitato la regola CloudWatch Events, CloudWatch avvia ogni minuto un’esecuzione del flusso di lavoro della tua macchina a stati. In questa fase, osserverai tali esecuzioni e verificherai che i dettagli di CloudWatch Event vengano acquisiti da Step Functions.


a. Se torni alla console Step Functions, fai clic su ScheduledWorkflow (Flusso di lavoro pianificato) nel percorso di navigazione nella parte superiore della pagina.

05a
05a

(fai clic per ingrandire l'immagine)


b. In Executions (Esecuzioni), puoi osservare le esecuzioni avviate dai CloudWatch Events. Puoi fare clic sul pulsante di aggiornamento per aggiornare la finestra per vedere comparire le nuove esecuzioni della tua macchina a stati. Attendi un paio di minuti per consentire l’avvio di almeno due istanze del tuo flusso di lavoro.

05b
05b

(fai clic per ingrandire l'immagine)


c. Fai clic con il pulsante destro del mouse sulle esecuzioni e apri il collegamento in una nuova scheda del browser. Ripeti per un’altra esecuzione della tua macchina a stati.

In ciascuna scheda, fai clic sullo stato “Do Something” (Fai qualcosa) nel riquadro del flusso di lavoro visivo per popolare il riquadro Dettagli fase a destra.

Facendo clic su Input vengono visualizzati i dettagli dell’evento corrispondente di CloudWatch. Osserva le differenze negli eventi, come i campi “id” e “orario”.

05c
05c

(fai clic per ingrandire l'immagine)


d. In ogni scheda, espandi Output nel riquadro Dettagli fase. Come puoi vedere, l’input è stato unito all’output dello stato “Do Something” (Fai qualcosa).

05d
05d

(fai clic per ingrandire l'immagine)


Fase 6. Arresto delle risorse

In questa fase, interromperai le tue risorse relative ad AWS Step Functions e Amazon CloudWatch.

Importante: l'arresto delle risorse che non vengono utilizzate attivamente consente di ridurre i costi e costituisce una best practice. La mancata interruzione delle risorse potrebbe determinare costi non desiderati.


a. Chiudere tutte le schede per le tue singole esecuzioni della macchina a stati. Nella parte superiore della finestra Step Functions, fai clic su Macchine a stati.

06a
06a

(fai clic per ingrandire l'immagine)


b. Nella finestra Macchine a stati, fai clic sulla macchina a stati che hai creato per questo tutorial e seleziona Elimina. Conferma l'azione selezionando Delete state machine (Elimina macchina a stati) nella finestra di dialogo. La tua macchina a stati verrà eliminata entro uno o due minuti, dopo che Step Functions avrà confermato che qualsiasi esecuzione in corso è stata completata.

06b
06b

(fai clic per ingrandire l'immagine)


c. Quindi, eliminerai la tua regola Amazon CloudWatch Events. Nella console CloudWatch, fai clic su Operazioni e su Elimina. Conferma l'eliminazione facendo di nuovo clic su Elimina.

06c
06c

(fai clic per ingrandire l'immagine)


d. Fai clic su Servizi e quindi inserisci IAM nella barra di ricerca per spostarti sulla console IAM.

06d

(fai clic per ingrandire l'immagine)


e. Fai clic su Ruoli.

06e
06e

(fai clic per ingrandire l'immagine)


f. Seleziona entrambi i ruoli AEM creati per questo tutoria, quindi fai clic su Delete role (Elimina ruolo). Conferma l'eliminazione facendo clic su Sì, elimina sulla finestra di dialogo.

Ora, puoi disconnetterti dalla console di gestione AWS.

06f
06f

(fai clic per ingrandire l'immagine)


Complimenti!

Hai completato correttamente la pianificazione dell’esecuzione ad ogni minuto di un flusso di lavoro serverless.
AWS Step Functions ti consente di ispezionare e verificare l’esecuzione delle attività ricorrenti per confermarne l’esecuzione uniforme. Unendo AWS Step Functions e Amazon CloudWatch Events, puoi automatizzare le attività giornaliere, settimanali e mensili o avviare l’esecuzione del tuo flusso di lavoro Step Functions quando vengono soddisfatte determinate circostanze.