Dynamisk parallellism har kommit till AWS Step-funktioner |

AWS Step-funktioner har fått en ny uppgradering, med dynamisk parallellitet tillagd i form av det nya kartläget. Det här nya tillståndet låter dig tillämpa en tillståndsmaskin definierad som en Iterator på en rad ingångsobjekt med exekveringar som körs parallellt, styrda av värdet på MaxConcurrency-värdet.

Detta innebär att det inte längre är behov av de många lösningar som finns för att uppnå slingor och parallellitet, med att de nya körstatens exekveringsmöjligheter kan utföras med ett enda tillstånd.

Tänk på det nya kartläget som en Java 8-strömkartoperatör, där Iterator som du definierar är den funktion som används för varje objekt i strömmen.

Om du behöver en uppdatering av vad AWS Step Functions är så rekommenderar jag att du ger videon nedan en klocka eftersom den fungerar som en omfattande översikt.

Tänk på det nya kartläget som en Java 8-strömkartoperatör, där Iterator som du definierar är den funktion som används för varje objekt i strömmen.

MaxConcurrency

Parametern MaxConcurrency för ett kartläge definierar hur många samtidiga exekveringar av Iterator du definierar får köras parallellt.

Ett värde på 0 betyder att samtidigheten är obegränsad och stegfunktioner kommer att försöka köra så många samtidigt exekveringar som möjligt.

Ett värde på 1 betyder att det inte finns någon riktig samtidighet, matrisen du passerar kommer att behandlas i följd så att exekveringen av det första objektet måste slutföras innan exekveringen av den andra artikeln kan starta.

Varje värde som är större än 1 definierar en gräns för det maximala antalet samtidiga exekveringar.

För värden större än 1 finns det ingen garanti att antalet samtidiga exekveringar alltid kommer att vara detsamma som maximal samtidighet, men det kommer aldrig att vara mer.

Specialvärden för kontextobjekt

I kartläget har kontextobjektet ytterligare två specialvärden:

  • $$.Karta.Item.Index: Definierar indexet i den matris som objektet finns på.
  • $$. Map.Item.Value: Definierar JSON-värdet för det arrayobjekt som bearbetas.
  • AWS stegfunktioner kontextobjekt
    Kontextobjektet AWS Step Functions gör det möjligt för dig att komma åt metadata om tillståndsmaskinen och tillställa exekveringar inifrån. Kartläget exponerar också ytterligare specialegenskaper.

parametrar

Parameterfältet kan användas för att anpassa ingången till iteratorn för varje enskild exekvering. Exempelvis skickar nedanstående JSON DeliveryAddress till varje utförande samt skickar de speciella kontextobjektvärden som diskuterats tidigare.

 "Parametrar": {"index. $": "$$. Map.Item.Index", "item. $": "$$. Map.Item.Value", "deliveryAddress. $": "$ .LeveransAddress" } 

Produktion

Utmatningen från ett kartläge är en JSON-matris där varje element är utgången från exekveringen av Iterator för en given artikel i inmatningsfältet. ResultPath kan användas för att definiera var i JSON för att infoga matrisen med resultat. Exempelvis kommer värdet nedan att placera resultatfältet under en JSON-bana på toppnivå som kallas exekveringsresultat.

ResultatPath: "$ .executionResults"

ItemsPath

ItemsPath är mycket enkel och är som InputPath förutom den iterator som du definierar i kartläget. Den berättar för Iterator var fältet med objekt som ska bearbetas i det inmatade JSON-objektet.

Till exempel för att komma åt artiklarna i ingången JSON nedan använder du:

ItemsPath: "$ .detail.items"

 {"orderId": "12345678", "orderDate": "20190820101213", "detail": {"customerId": "1234", "deliveryAddress": "123, Seattle, WA", "deliverySpeed": "1-dagars ", " paymentMethod ":" aCreditCard ", " items ": [{" productName ":" Agile Software Development ", " kategori ":" book ", " price ": 60.0, " hoeveelheid ": 1}, {" productName ":" Domain-Driven Design ", " kategori ":" bok ", " pris ": 32.0, " antal ": 1}, {" productName ":" The Mythical Man Month ", " category ":" book ", "pris": 18.0, "kvantitet": 1}, {"productName": "Kunsten att programmera dator", "kategori": "bok", "pris": 180.0, "kvantitet": 1}, {"produktnamn ":" Malt kaffe, mörkt stekt ", " kategori ":" livsmedelsbutik ", " pris ": 8, 0, " kvantitet ": 6}]}} 

Kombinerat med kapslade arbetsflöden

Nu när AWS Step-funktioner stöder både kapslade arbetsflöden och dynamisk parallellitet är det möjligt att tillämpa ett annat arbetsflöde du har byggt över många objekt parallellt, vilket helt tar bort behovet av de många hacks och lösningar som behövs för att uppnå detta tidigare.

Föreställ dig till exempel att vi hade ett arbetsflöde som kan behandla en enda bokorder med flera steg som att ta betalning, verifiera lager etc. Vad händer när vi vill bearbeta flera bokorder? Tidigare skulle vi behöva bygga en slinga i tillståndsmaskinen med Choice-tillstånd och spårningsindex och alla möjliga lösningar.

Nu kan vi dock enkelt definiera en andra tillståndsmaskin som använder ett kartläge som använder det första arbetsflödet som ett kapslat arbetsflöde, vilket gör att vi kan tillämpa det första arbetsflödet på varje enskild bok i listan över beställda böcker.

Om du behöver en uppdatering av kapslade arbetsflöden i AWS-stegfunktioner som jag tidigare skrev en artikel efter deras tillkännagivande, kan du hitta den nedan.

  • AWS-stegfunktioner Kapslade arbetsflöden
    AWS Step-funktioner har nyligen lagt till kapslade arbetsflöden, en funktion som kunder har bett om mycket. I den här artikeln tittar vi på de nya funktionerna som lagts till för kapslade arbetsflöden.

referenser

  • AWS-blogg
  • Dokumentation för kartstat
  • Dokumentation för kartstatens kontextobjekt