Utilizzo dello stato della mappa in modalità Distribuita per carichi di lavoro paralleli su larga scala 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à.

Utilizzo dello stato della mappa in modalità Distribuita per carichi di lavoro paralleli su larga scala in Step Functions

Con Step Functions, puoi orchestrare carichi di lavoro paralleli su larga scala per eseguire attività, come l'elaborazione su richiesta di dati semistrutturati. Questi carichi di lavoro paralleli consentono di elaborare contemporaneamente sorgenti di dati su larga scala archiviate in Amazon S3. Ad esempio, potresti elaborare un singolo CSV file JSON o un file che contiene grandi quantità di dati. Oppure potresti elaborare un ampio set di oggetti Amazon S3.

Per configurare un carico di lavoro parallelo su larga scala nei flussi di lavoro, includi uno Map stato in modalità Distribuita. Lo stato della mappa elabora gli elementi in un set di dati contemporaneamente. Uno Map stato impostato su Distributed è noto come stato Distributed Map. In modalità Distribuita, lo Map stato consente l'elaborazione ad alta concorrenza. In modalità distribuita, Map lo stato elabora gli elementi del set di dati in iterazioni denominate esecuzioni secondarie del flusso di lavoro. È possibile specificare il numero di esecuzioni di workflow secondarie che possono essere eseguite in parallelo. Ogni esecuzione del flusso di lavoro secondario ha una propria cronologia di esecuzione separata da quella del flusso di lavoro principale. Se non lo specifichi, Step Functions esegue 10.000 esecuzioni parallele di flussi di lavoro secondari in parallelo.

La seguente illustrazione spiega come configurare carichi di lavoro paralleli su larga scala nei flussi di lavoro.

Diagramma per illustrare il concetto di orchestrazione di carichi di lavoro paralleli su larga scala.

Termini chiave

Modalità distribuita

Una modalità di elaborazione dello stato della mappa. In questa modalità, ogni iterazione dello Map stato viene eseguita come un'esecuzione secondaria del flusso di lavoro che consente un'elevata concorrenza. Ogni esecuzione del flusso di lavoro secondario ha la propria cronologia di esecuzione, che è separata dalla cronologia di esecuzione del flusso di lavoro principale. Questa modalità supporta la lettura di input da fonti di dati Amazon S3 su larga scala.

Stato della mappa distribuita

Uno stato della mappa impostato sulla modalità di elaborazione distribuita.

Workflow della mappa

Una serie di passaggi eseguiti da uno Map stato.

Flusso di lavoro principale

Un flusso di lavoro che contiene uno o più stati della mappa distribuita.

Esecuzione del workflow secondario

Un'iterazione dello stato della mappa distribuita. L'esecuzione di un flusso di lavoro secondario ha una propria cronologia di esecuzione, che è separata dalla cronologia di esecuzione del flusso di lavoro principale.

Esegui la mappa

Quando si esegue uno Map stato in modalità Distribuita, Step Functions crea una risorsa Map Run. Un Map Run si riferisce a un insieme di esecuzioni di workflow secondarie avviate da uno stato di Distributed Map e alle impostazioni di runtime che controllano queste esecuzioni. Step Functions assegna un Amazon Resource Name (ARN) a Map Run. È possibile esaminare un Map Run nella console Step Functions. Puoi anche richiamare l'DescribeMapRunAPIazione. Un Map Run emette anche metriche per. CloudWatch

Per ulteriori informazioni, consulta Esamina le corse della mappa.

Esempio di definizione dello stato di Distributed Map

Usa lo Map stato in modalità Distribuita quando devi orchestrare carichi di lavoro paralleli su larga scala che soddisfano qualsiasi combinazione delle seguenti condizioni:

  • La dimensione del set di dati supera i 256 KB.

  • La cronologia degli eventi di esecuzione del flusso di lavoro supera le 25.000 voci.

  • È necessaria una concorrenza di più di 40 iterazioni parallele.

Il seguente esempio di definizione dello stato di Distributed Map specifica il set di dati come CSV file archiviato in un bucket Amazon S3. Specifica inoltre una funzione Lambda che elabora i dati in ogni riga del CSV file. Poiché questo esempio utilizza un CSV file, specifica anche la posizione delle intestazioni delle CSV colonne. Per visualizzare la definizione completa di macchina a stati di questo esempio, consulta il tutorial Copiare CSV dati su larga scala utilizzando Distributed Map.

{ "Map": { "Type": "Map", "ItemReader": { "ReaderConfig": { "InputType": "CSV", "CSVHeaderLocation": "FIRST_ROW" }, "Resource": "arn:aws:states:::s3:getObject", "Parameters": { "Bucket": "Database", "Key": "csv-dataset/ratings.csv" } }, "ItemProcessor": { "ProcessorConfig": { "Mode": "DISTRIBUTED", "ExecutionType": "EXPRESS" }, "StartAt": "LambdaTask", "States": { "LambdaTask": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "OutputPath": "$.Payload", "Parameters": { "Payload.$": "$", "FunctionName": "arn:aws:lambda:us-east-2:123456789012:function:processCSVData" }, "End": true } } }, "Label": "Map", "End": true, "ResultWriter": { "Resource": "arn:aws:states:::s3:putObject", "Parameters": { "Bucket": "myOutputBucket", "Prefix": "csvProcessJobs" } } } }

Autorizzazioni per eseguire Distributed Map

Quando includi uno stato della mappa distribuita nei flussi di lavoro, Step Functions necessita delle autorizzazioni appropriate per consentire al ruolo della macchina a stati di richiamare l'StartExecutionAPIazione per lo stato della mappa distribuita.

Il seguente esempio di IAM policy concede i privilegi minimi richiesti al ruolo della macchina a stati per l'esecuzione dello stato della mappa distribuita.

Nota

Assicurati di sostituirlo stateMachineName con il nome della macchina a stati in cui stai utilizzando lo stato Distributed Map. Ad esempio arn:aws:states:us-east-2:123456789012:stateMachine:mystateMachine.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "states:StartExecution" ], "Resource": [ "arn:aws:states:region:accountID:stateMachine:stateMachineName" ] }, { "Effect": "Allow", "Action": [ "states:DescribeExecution", "states:StopExecution" ], "Resource": "arn:aws:states:region:accountID:execution:stateMachineName:*" } ] }

Inoltre, devi assicurarti di disporre dei privilegi minimi necessari per accedere alle AWS risorse utilizzate nello stato della mappa distribuita, come i bucket Amazon S3. Per informazioni, consultare IAMpolitiche per l'utilizzo degli stati della mappa distribuita.

Campi relativi allo stato della mappa distribuita

Per utilizzare lo stato della mappa distribuita nei flussi di lavoro, specifica uno o più di questi campi. È possibile specificare questi campi in aggiunta ai campi di stato comuni.

Type (Obbligatorio)

Imposta il tipo di stato, ad esempioMap.

ItemProcessor (Obbligatorio)

Contiene i seguenti JSON oggetti che specificano la modalità e la definizione di elaborazione Map dello stato.

  • ProcessorConfig— Un JSON oggetto che specifica la configurazione per lo Map stato. Questo oggetto contiene i seguenti sottocampi:

    • Mode— Impostato per DISTRIBUTED utilizzare lo Map stato in modalità Distribuita.

      Nota

      Attualmente, se si utilizza Map lo stato all'interno dei flussi di lavoro Express, non è possibile Mode impostarlo DISTRIBUTED su. Tuttavia, se utilizzi Map lo stato all'interno dei flussi di lavoro Standard, puoi impostarlo su. Mode DISTRIBUTED

    • ExecutionType— specifica il tipo di esecuzione per il flusso di lavoro Map come o STANDARD. EXPRESS È necessario fornire questo campo se è stato specificato DISTRIBUTED per il Mode sottocampo. Per ulteriori informazioni sui tipi di flusso di lavoro, vedereScelta del tipo di flusso di lavoro in Step Functions.

  • StartAt— specifica una stringa che indica il primo stato di un flusso di lavoro. Questa stringa fa distinzione tra maiuscole e minuscole e deve corrispondere al nome di uno degli oggetti di stato. Questo stato viene eseguito per primo per ogni elemento del set di dati. Qualsiasi input di esecuzione fornito allo Map stato passa per primo allo StartAt stato.

  • States— Un JSON oggetto contenente un set di stati delimitato da virgole. In questo oggetto, si definisce il. Map workflow

ItemReader

Speciifica un set di dati e la sua posizione. Lo Map stato riceve i dati di input dal set di dati specificato.

In modalità distribuita, puoi utilizzare un JSON payload passato da uno stato precedente o un'origine dati Amazon S3 su larga scala come set di dati. Per ulteriori informazioni, consulta ItemReader (Mappa).

ItemsPath (facoltativo).

Speciifica un percorso di riferimento utilizzando la JsonPathsintassi per selezionare il JSON nodo che contiene una matrice di elementi all'interno dell'input di stato.

In modalità Distribuita, si specifica questo campo solo quando si utilizza un JSON array di un passaggio precedente come input di stato. Per ulteriori informazioni, consulta ItemsPath (Mappa).

ItemSelector (facoltativo).

Sostituisce i valori dei singoli elementi del set di dati prima che vengano passati a ciascuna Map iterazione di stato.

In questo campo, si specifica un JSON input valido che contiene una raccolta di coppie chiave-valore. Queste coppie possono essere valori statici definiti nella definizione della macchina a stati, valori selezionati dall'input di stato utilizzando un percorso o valori a cui si accede dall'oggetto di contesto. Per ulteriori informazioni, consulta ItemSelector (Mappa).

ItemBatcher (facoltativo).

Speciifica di elaborare gli elementi del set di dati in batch. Ogni esecuzione secondaria del flusso di lavoro riceve quindi un batch di questi elementi come input. Per ulteriori informazioni, consulta ItemBatcher (Mappa).

MaxConcurrency (facoltativo).

Speciifica il numero di esecuzioni di workflow secondarie che possono essere eseguite in parallelo. L'interprete consente solo fino al numero specificato di esecuzioni parallele di flussi di lavoro secondari. Se non specificate un valore di concorrenza o lo impostate su zero, Step Functions non limita la concorrenza ed esegue 10.000 esecuzioni parallele di workflow secondari.

Nota

Sebbene sia possibile specificare un limite di concorrenza più elevato per le esecuzioni di flussi di lavoro secondari paralleli, si consiglia di non superare la capacità di un AWS servizio downstream, ad esempio. AWS Lambda

MaxConcurrencyPath (facoltativo).

Se desideri fornire un valore di concorrenza massimo in modo dinamico dall'input dello stato utilizzando un percorso di riferimento, usa. MaxConcurrencyPath Una volta risolto, il percorso di riferimento deve selezionare un campo il cui valore è un numero intero non negativo.

Nota

Uno Map stato non può includere entrambi MaxConcurrency e. MaxConcurrencyPath

ToleratedFailurePercentage (facoltativo).

Definisce la percentuale di elementi non riusciti da tollerare in una Map Run. La Map Run fallisce automaticamente se supera questa percentuale. Step Functions calcola la percentuale di articoli non riusciti come risultato del numero totale di articoli non riusciti o scaduti diviso per il numero totale di articoli. È necessario specificare un valore compreso tra zero e 100. Per ulteriori informazioni, consulta Impostazione delle soglie di errore per gli stati della mappa distribuita in Step Functions.

ToleratedFailurePercentagePath (facoltativo).

Se si desidera fornire dinamicamente un valore percentuale di errore tollerato in base allo stato immesso utilizzando un percorso di riferimento, utilizzare. ToleratedFailurePercentagePath Una volta risolto, il percorso di riferimento deve selezionare un campo il cui valore è compreso tra zero e 100.

ToleratedFailureCount (facoltativo).

Definisce il numero di elementi non riusciti da tollerare in una Map Run. La Map Run fallisce automaticamente se supera questo numero. Per ulteriori informazioni, consulta Impostazione delle soglie di errore per gli stati della mappa distribuita in Step Functions.

ToleratedFailureCountPath (facoltativo).

Se si desidera fornire dinamicamente un valore di conteggio degli errori tollerati in base allo stato immesso utilizzando un percorso di riferimento, utilizzare. ToleratedFailureCountPath Una volta risolto, il percorso di riferimento deve selezionare un campo il cui valore è un numero intero non negativo.

Label (facoltativo).

Una stringa che identifica in modo univoco uno stato. Map Per ogni Map Run, Step Functions aggiunge l'etichetta a Map RunARN. Di seguito è riportato un esempio di Map Run ARN con un'etichetta personalizzata denominatademoLabel:

arn:aws:states:us-east-1:123456789012:mapRun:demoWorkflow/demoLabel:3c39a231-69bb-3d89-8607-9e124eddbb0b

Se non specificate un'etichetta, Step Functions genera automaticamente un'etichetta univoca.

Nota

Le etichette non possono superare i 40 caratteri di lunghezza, devono essere univoche all'interno di una definizione di macchina a stati e non possono contenere nessuno dei seguenti caratteri:

  • Spazi bianchi

  • Caratteri jolly () ? *

  • Caratteri tra parentesi quadre () < > { } [ ]

  • Caratteri speciali () : ; , \ | ^ ~ $ # % & ` "

  • Caratteri di controllo (\\u0000- \\u001f o \\u007f -\\u009f).

Step Functions accetta nomi per macchine a stati, esecuzioni, attività ed etichette che contengono non ASCII caratteri. Poiché i nomi senza ASCII caratteri non funzionano con Amazon CloudWatch, ti consigliamo di utilizzare solo ASCII caratteri per tenere traccia delle metriche. CloudWatch

ResultWriter (facoltativo).

Speciifica la posizione Amazon S3 in cui Step Functions scrive tutti i risultati di esecuzione dei flussi di lavoro secondari.

Step Functions consolida tutti i dati di esecuzione del workflow secondario, come input e output dell'esecuzione e lo stato di esecuzione. ARN Quindi esporta le esecuzioni con lo stesso stato nei rispettivi file nella posizione Amazon S3 specificata. Per ulteriori informazioni, consulta ResultWriter (Mappa).

Se non esporti i risultati dello Map stato, restituisce una matrice di tutti i risultati di esecuzione del flusso di lavoro secondario. Per esempio:

[1, 2, 3, 4, 5]
ResultPath (facoltativo).

Speciifica dove, nell'input, inserire l'output delle iterazioni. L'input viene quindi filtrato come specificato dal OutputPathcampo, se presente, prima di essere passato 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.

Suggerimento

Se lo stato Parallel o Map che usi nelle tue macchine a stati restituisce un array di array, puoi trasformarli in un array flat con il campo. ResultSelector Per ulteriori informazioni, consulta Appiattimento di una serie di array.

Retry (facoltativo).

Una serie di oggetti, denominati Retriers, che definiscono una politica di nuovi tentativi. Un'esecuzione utilizza la politica di riprova se lo stato rileva errori di runtime. Per ulteriori informazioni, consulta Esempi di macchine a stati che utilizzano Retry e Catch.

Nota

Se si definiscono Retriers per lo stato Distributed Map, la politica di nuovo tentativo si applica a tutte le esecuzioni di workflow secondarie avviate dallo stato. Map Ad esempio, immaginate che il vostro Map stato abbia avviato tre esecuzioni secondarie di workflow, di cui una fallisce. Quando si verifica l'errore, l'esecuzione utilizza il Retry campo, se definito, per lo Map stato. La politica dei nuovi tentativi si applica a tutte le esecuzioni dei flussi di lavoro secondari e non solo a quelle non riuscite. Se una o più esecuzioni di workflow secondarie falliscono, Map Run ha esito negativo.

Quando si riprova uno Map stato, viene creata una nuova Map Run.

Catch (facoltativo).

Un array di oggetti, denominati catcher, che definiscono uno stato di fallback. Step Functions utilizza i Catcher definiti in Catch se lo stato rileva errori di runtime. Quando si verifica un errore, l'esecuzione utilizza innanzitutto tutti i retrier definiti in. Retry Se la politica di riprova non è definita o è esaurita, l'esecuzione utilizza i relativi Catcher, se definiti. Per ulteriori informazioni, consulta Stati di fallback.

Impostazione delle soglie di errore per gli stati della mappa distribuita in Step Functions

Quando orchestri carichi di lavoro paralleli su larga scala, puoi anche definire una soglia di errore tollerata. Questo valore consente di specificare il numero massimo o la percentuale di elementi non riusciti come soglia di errore per una Map Run. A seconda del valore specificato, Map Run fallisce automaticamente se supera la soglia. Se si specificano entrambi i valori, il flusso di lavoro fallisce quando supera uno dei due valori.

Specificare una soglia consente di fallire un numero specifico di elementi prima che l'intero Map Run abbia esito negativo. Step Functions restituisce un States.ExceedToleratedFailureThreshold errore quando Map Run fallisce perché viene superata la soglia specificata.

Nota

Step Functions può continuare a eseguire flussi di lavoro secondari in una Map Run anche dopo il superamento della soglia di errore tollerata, ma prima che Map Run fallisca.

Per specificare il valore di soglia in Workflow Studio, selezionare Imposta una soglia di errore tollerata in Configurazione aggiuntiva nel campo Impostazioni di runtime.

Percentuale di fallimento tollerato

Definisce la percentuale di articoli non riusciti da tollerare. Il Map Run fallisce se questo valore viene superato. Step Functions calcola la percentuale di articoli non riusciti come risultato del numero totale di articoli non riusciti o scaduti diviso per il numero totale di articoli. È necessario specificare un valore compreso tra zero e 100. Il valore percentuale predefinito è zero, il che significa che il flusso di lavoro ha esito negativo se una delle sue esecuzioni secondarie del flusso di lavoro fallisce o scade. Se si specifica la percentuale come 100, il flusso di lavoro non avrà esito negativo anche se tutte le esecuzioni del flusso di lavoro secondario falliscono.

In alternativa, è possibile specificare la percentuale come percorso di riferimento per una coppia chiave-valore esistente nell'input di stato della Mappa distribuita. Questo percorso deve risolversi in un numero intero positivo compreso tra 0 e 100 in fase di esecuzione. Il percorso di riferimento viene specificato nel ToleratedFailurePercentagePath sottocampo.

Ad esempio, con il seguente input:

{ "percentage": 15 }

È possibile specificare la percentuale utilizzando un percorso di riferimento a tale input come segue:

{ ... "Map": { "Type": "Map", ... "ToleratedFailurePercentagePath": "$.percentage" ... } }
Importante

È possibile specificare uno ToleratedFailurePercentage o entrambiToleratedFailurePercentagePath, ma non entrambi nella definizione dello stato della Mappa Distribuita.

Numero di fallimenti tollerati

Definisce il numero di elementi non riusciti da tollerare. Il Map Run fallisce se questo valore viene superato.

In alternativa, puoi specificare il conteggio come percorso di riferimento per una coppia chiave-valore esistente nell'input di stato della Mappa distribuita. Questo percorso deve risolversi in un numero intero positivo in fase di esecuzione. Il percorso di riferimento viene specificato nel ToleratedFailureCountPath sottocampo.

Ad esempio, con il seguente input:

{ "count": 10 }

È possibile specificare il numero utilizzando un percorso di riferimento a tale input come segue:

{ ... "Map": { "Type": "Map", ... "ToleratedFailureCountPath": "$.count" ... } }
Importante

È possibile specificare uno ToleratedFailureCount o entrambiToleratedFailureCountPath, ma non entrambi nella definizione dello stato della Mappa Distribuita.

Scopri di più sulle mappe distribuite

Per continuare a saperne di più sullo stato delle mappe distribuite, consulta le seguenti risorse: