Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Untersuchung der Ausführung von Zustandsmaschinen in Step Functions
In diesem Tutorial erfahren Sie, wie Sie die auf der Seite mit den Ausführungsdetails angezeigten Ausführungsinformationen überprüfen und den Grund für eine fehlgeschlagene Ausführung ermitteln können. Anschließend erfahren Sie, wie Sie auf verschiedene Iterationen einer Map Statusausführung zugreifen können. Schließlich lernen Sie, wie Sie die Spalten in der Tabellenansicht konfigurieren und geeignete Filter anwenden, um nur die für Sie interessanten Informationen anzuzeigen.
In diesem Tutorial erstellen Sie eine Zustandsmaschine vom Typ Standard, die den Preis einer Reihe von Früchten ermittelt. Dazu verwendet die Zustandsmaschine drei AWS Lambda Funktionen, die eine zufällige Liste von vier Früchten, den Preis jeder Frucht und die durchschnittlichen Kosten der Früchte zurückgeben. Die Lambda-Funktionen sind so konzipiert, dass sie einen Fehler ausgeben, wenn der Preis der Früchte einen Schwellenwert unterschreitet oder diesem entspricht.
Anmerkung
Das folgende Verfahren enthält zwar Anweisungen zum Untersuchen der Details einer Standard-Workflow-Ausführung, Sie können aber auch die Details für Express-Workflow-Ausführungen überprüfen. Informationen zu den Unterschieden zwischen den Ausführungsdetails für Standard- und Express-Workflowtypen finden Sie unterBei Standard- und Express-Konsolen gibt es Unterschiede.
Schritt 1: Erstellen und testen Sie die erforderlichen Lambda-Funktionen
-
Öffnen Sie die Lambda-Konsole
und führen Sie dann die Schritte 1 bis 4 im Schritt 1: Erstellen einer Lambda-Funktion Abschnitt aus. Stellen Sie sicher, dass Sie der Lambda-Funktion einen Namen geben. GetListOfFruits -
Nachdem Sie Ihre Lambda-Funktion erstellt haben, kopieren Sie den angezeigten Amazon-Ressourcennamen (ARN) der Funktion. Um den ARN zu kopieren, wählen Sie das Kopiersymbol, um den Amazon-Ressourcennamen der Lambda-Funktion zu kopieren. Im Folgenden finden Sie ein ARN-Beispiel, wobei der Name der Lambda-Funktion (in diesem Fall)
ist:function-nameGetListOfFruitsarn:aws:lambda:region:123456789012:function:function-name -
Kopieren Sie den folgenden Code für die Lambda-Funktion in den Quellcodebereich der GetListOfFruits Seite.
function getRandomSubarray(arr, size) { var shuffled = arr.slice(0), i = arr.length, temp, index; while (i--) { index = Math.floor((i + 1) * Math.random()); temp = shuffled[index]; shuffled[index] = shuffled[i]; shuffled[i] = temp; } return shuffled.slice(0, size); } exports.handler = async function(event, context) { const fruits = ['Abiu','Açaí','Acerola','Ackee','African cucumber','Apple','Apricot','Avocado','Banana','Bilberry','Blackberry','Blackcurrant','Jostaberry']; const errorChance = 45; const waitTime = Math.floor( 100 * Math.random() ); await new Promise( r => setTimeout(() => r(), waitTime)); const num = Math.floor( 100 * Math.random() ); // const num = 51; if (num <= errorChance) { throw(new Error('Error')); } return getRandomSubarray(fruits, 4); }; -
Wählen Sie Deploy und dann Test, um die Änderungen bereitzustellen und die Ausgabe Ihrer Lambda-Funktion zu sehen.
-
Erstellen Sie mit den folgenden Schritten zwei weitere Lambda-Funktionen, die
CalculateAveragejeweils benanntGetFruitPricesind:-
Kopieren Sie den folgenden Code in den Quellcodebereich der GetFruitPrice Lambda-Funktion:
exports.handler = async function(event, context) { const errorChance = 0; const waitTime = Math.floor( 100 * Math.random() ); await new Promise( r => setTimeout(() => r(), waitTime)); const num = Math.floor( 100 * Math.random() ); if (num <= errorChance) { throw(new Error('Error')); } return Math.floor(Math.random()*100)/10; }; -
Kopieren Sie den folgenden Code in den Code-Quellbereich der CalculateAverage Lambda-Funktion:
function getRandomSubarray(arr, size) { var shuffled = arr.slice(0), i = arr.length, temp, index; while (i--) { index = Math.floor((i + 1) * Math.random()); temp = shuffled[index]; shuffled[index] = shuffled[i]; shuffled[i] = temp; } return shuffled.slice(0, size); } const average = arr => arr.reduce( ( p, c ) => p + c, 0 ) / arr.length; exports.handler = async function(event, context) { const errors = [ "Error getting data from DynamoDB", "Error connecting to DynamoDB", "Network error", "MemoryError - Low memory" ] const errorChance = 0; const waitTime = Math.floor( 100 * Math.random() ); await new Promise( r => setTimeout(() => r(), waitTime)); const num = Math.floor( 100 * Math.random() ); if (num <= errorChance) { throw(new Error(getRandomSubarray(errors, 1)[0])); } return average(event); }; -
Stellen Sie sicher, dass Sie die ARNs dieser beiden Lambda-Funktionen kopieren und sie dann bereitstellen und testen.
-
Schritt 2: Erstellen Sie die Zustandsmaschine und führen Sie sie aus
Verwenden Sie die Step Map Zustände definiert. Jeder dieser Map Zustände enthält einen Task Zustand, der eine Ihrer Lambda-Funktionen aufruft. Zusätzlich ist in jedem Bundesstaat ein Retry Feld definiert, in dem für jeden Task Bundesstaat eine Anzahl von Wiederholungsversuchen definiert ist. Wenn in einem Task Zustand ein Laufzeitfehler auftritt, wird er bis zu der dafür definierten Anzahl von Wiederholungsversuchen erneut ausgeführt. Task
-
Öffnen Sie die Step Functions-Konsole
und wählen Sie Ihren Workflow in Code schreiben aus. Wichtig
Stellen Sie sicher, dass sich Ihr State Machine unter demselben AWS Konto und derselben Region wie die Lambda-Funktion befindet, die Sie zuvor erstellt haben.
-
Behalten Sie für Typ die Standardauswahl Standard bei.
-
Kopieren Sie die folgende Amazon-Landessprachendefinition und fügen Sie sie unter Definition ein. Stellen Sie sicher, dass Sie die angezeigten ARNs durch die der Lambda-Funktionen ersetzen, die Sie zuvor erstellt haben.
{ "StartAt": "LoopOverStores", "States": { "LoopOverStores": { "Type": "Map", "Iterator": { "StartAt": "GetListOfFruits", "States": { "GetListOfFruits": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "OutputPath": "$.Payload", "Parameters": { "FunctionName": "arn:aws:lambda::region123456789012:function:GetListofFruits:$LATEST", "Payload": { "storeName.$": "$" } }, "Retry": [ { "ErrorEquals": [ "States.ALL" ], "IntervalSeconds": 2, "MaxAttempts": 1, "BackoffRate": 1.3 } ], "Next": "LoopOverFruits" }, "LoopOverFruits": { "Type": "Map", "Iterator": { "StartAt": "GetFruitPrice", "States": { "GetFruitPrice": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "OutputPath": "$.Payload", "Parameters": { "FunctionName": "arn:aws:lambda::region123456789012:function:GetFruitPrice:$LATEST", "Payload": { "fruitName.$": "$" } }, "Retry": [ { "ErrorEquals": [ "States.ALL" ], "IntervalSeconds": 2, "MaxAttempts": 3, "BackoffRate": 1.3 } ], "End": true } } }, "ItemsPath": "$", "End": true } } }, "ItemsPath": "$.stores", "Next": "LoopOverStoreFruitsPrice", "ResultPath": "$.storesFruitsPrice" }, "LoopOverStoreFruitsPrice": { "Type": "Map", "End": true, "Iterator": { "StartAt": "CalculateAverage", "States": { "CalculateAverage": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "OutputPath": "$.Payload", "Parameters": { "FunctionName": "arn:aws:lambda::region123456789012:function:Calculate-average:$LATEST", "Payload.$": "$" }, "Retry": [ { "ErrorEquals": [ "States.ALL" ], "IntervalSeconds": 2, "MaxAttempts": 2, "BackoffRate": 1.3 } ], "End": true } } }, "ItemsPath": "$.storesFruitsPrice", "ResultPath": "$.storesPriceAverage", "MaxConcurrency": 1 } } } -
Geben Sie einen Namen für Ihren State Machine ein. Behalten Sie die Standardauswahl für die anderen Optionen auf dieser Seite bei und wählen Sie Create State Machine.
-
Öffnen Sie die Seite mit dem Namen Ihres State Machines. Führen Sie die Schritte 1 bis 4 in Schritt 4: Führen Sie den State Machine aus diesem Abschnitt aus, verwenden Sie jedoch die folgenden Daten als Ausführungseingabe:
{ "stores": [ "Store A", "Store B", "Store C", "Store D" ] }
Schritt 3: Sehen Sie sich die Ausführungsdetails der State Machine an
Auf der Seite mit Ihrer Ausführungs-ID können Sie die Ergebnisse Ihrer Ausführung überprüfen und etwaige Fehler debuggen.
-
(Optional) Wählen Sie eine der Registerkarten auf der Seite mit den Ausführungsdetails aus, um die darin enthaltenen Informationen einzusehen. Um beispielsweise die Eingabe und Ausgabe der State-Machine und die zugehörigen Ausführungsausgaben anzuzeigen, wählen Sie im Abschnitt Ausführungsübersicht die Option Eingabe und Ausgabe der Ausführung aus.
-
Wenn Ihre State-Machine-Ausführung fehlgeschlagen ist, wählen Sie in der Fehlermeldung Ursache oder Schrittdetails anzeigen aus. Einzelheiten zum Fehler werden im Abschnitt Schrittdetails angezeigt. Beachten Sie, dass der Schritt, der den Fehler verursacht hat, bei dem es sich um einen
TaskGetListofFruits Statusnamen handelt, in der Diagrammansicht und der Tabellenansicht hervorgehoben ist.Anmerkung
Da der GetListofFruits Schritt innerhalb eines
MapZustands definiert ist und der Schritt nicht erfolgreich ausgeführt werden konnte, wird derMapStatusschritt als Fehlgeschlagen angezeigt.
Schritt 4: Erkunden Sie die verschiedenen Modi anzeigen
Sie können einen bevorzugten Modus wählen, um entweder den State Machine-Workflow oder den Verlauf der Ausführungsereignisse anzuzeigen. Einige der Aufgaben, die Sie in diesen Anzeigemodi ausführen können, lauten wie folgt:
Wenn Ihr Kartenstatus fünf Iterationen umfasst und Sie die Ausführungsdetails für die dritte und vierte Iteration einsehen möchten, gehen Sie wie folgt vor:
-
Wählen Sie den
MapBundesstaat aus, für den Sie die Iterationsdaten anzeigen möchten. -
Wählen Sie im Map Iteration Viewer die Iteration aus, die Sie anzeigen möchten. Iterationen werden von Null an gezählt. Um die dritte von fünf Iterationen auszuwählen, wähle #2 aus der Dropdownliste neben dem Namen des Kartenstaats aus.
Anmerkung
Wenn Ihre Zustandsmaschine verschachtelte
MapZustände enthält, zeigt Step Functions die Iterationen für den übergeordneten und den untergeordnetenMapStatus als zwei separate Dropdownlisten an, die die Iterationsdaten für die verschachtelten Zustände darstellen. -
(Optional) Wenn eine oder mehrere Ihrer
MapState-Iterationen nicht ausgeführt werden konnten oder in einem abgebrochenen Zustand gestoppt wurden, können Sie Details zu der fehlgeschlagenen Iteration anzeigen. Um diese Details zu sehen, wählen Sie in der Dropdownliste unter Fehlgeschlagen oder Abgebrochen die betroffenen Iterationsnummern aus.
Wenn Ihr Kartenstatus fünf Iterationen umfasst und Sie die Ausführungsdetails für die Iterationen Nummer drei und vier anzeigen möchten, gehen Sie wie folgt vor:
-
Wählen Sie den
MapBundesstaat aus, für den Sie die verschiedenen Iterationsdaten anzeigen möchten. -
Wählen Sie in der Strukturansicht der
MapStatus-Iterationen die Zeile für die Iteration mit dem Namen #2 für Iteration Nummer drei aus. Wählen Sie auf ähnliche Weise die Zeile mit dem Namen #3 für Iteration Nummer vier.
Wählen Sie das Einstellungssymbol. Wählen Sie dann im Dialogfeld „Einstellungen“ unter Sichtbare Spalten auswählen die Spalten aus, die Sie anzeigen möchten.
In diesem Modus werden standardmäßig die Spalten Name, Typ, Status , Ressource und Gestartet nach angezeigt.
Begrenzen Sie die Menge der angezeigten Informationen, indem Sie einen oder mehrere Filter anwenden, die auf einer Eigenschaft wie Status oder einem Datums- und Zeitbereich basieren. Um beispielsweise die Schritte anzuzeigen, bei denen die Ausführung fehlgeschlagen ist, wenden Sie den folgenden Filter an:
-
Wählen Sie Nach Eigenschaften filtern oder nach Schlüsselwörtern suchen aus, und wählen Sie dann unter Eigenschaften die Option Status aus.
-
Wählen Sie unter Operatoren die Option Status = aus.
-
Wählen Sie Status = Fehlgeschlagen.
-
(Optional) Wählen Sie Filter löschen, um die angewendeten Filter zu entfernen.
Begrenzen Sie die Menge der angezeigten Informationen, indem Sie einen oder mehrere Filter anwenden, die auf einer Eigenschaft wie Typ oder einem Datums- und Zeitbereich basieren. Um beispielsweise die Task Statusschritte anzuzeigen, bei denen die Ausführung fehlgeschlagen ist, wenden Sie den folgenden Filter an:
-
Wählen Sie Nach Eigenschaften filtern oder nach Schlüsselwörtern suchen aus, und wählen Sie dann unter Eigenschaften die Option Typ aus.
-
Wählen Sie unter Operatoren die Option Typ = aus.
-
Wählen Sie Typ = TaskFailed.
-
(Optional) Wählen Sie Filter löschen, um die angewendeten Filter zu entfernen.
Wählen Sie das Pfeilsymbol neben der ID eines TaskFailed Ereignisses, um dessen Details zu überprüfen, einschließlich Eingabe, Ausgabe und Ressourcenaufruf, die in einem Dropdownfeld angezeigt werden.