Untersuchen von State-Machine-Ausführungen in Step Functions - AWS Step Functions

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.

Untersuchen von State-Machine-Ausführungen 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 erfahren Sie, wie Sie die Spalten in der Tabellenansicht konfigurieren und geeignete Filter anwenden, um nur die Informationen anzuzeigen, die für Sie von Interesse sind.

In diesem Tutorial erstellen Sie eine Zustandsmaschine vom Typ Standard, die den Preis für eine Reihe von Früchten ermittelt. Zu diesem Zweck 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 auslösen, wenn der Preis der Früchte unter oder gleich einem Schwellenwert liegt.

Anmerkung

Das folgende Verfahren enthält zwar Anweisungen zur Untersuchung der Details einer Standard-Workflow-Ausführung, Sie können jedoch auch die Details von Express-Workflow-Ausführungen untersuchen. Informationen zu den Unterschieden zwischen den Ausführungsdetails für Standard- und Express-Workflowtypen finden Sie unterBei Standard- und Express-Konsolen treten Unterschiede auf.

Schritt 1: Erstellen und testen Sie die erforderlichen Lambda-Funktionen

  1. Öffnen Sie die Lambda-Konsole und führen Sie dann die Schritte 1 bis 4 im Schritt 1: Erstellen einer Lambda-Funktion Abschnitt aus. Achten Sie darauf, die Lambda-Funktion GetListOfFruits zu benennen.

  2. Nachdem Sie Ihre Lambda-Funktion erstellt haben, kopieren Sie den Amazon-Ressourcennamen (ARN) der Funktion, der in der oberen rechten Ecke der Seite angezeigt wird. Um das zu kopierenARN, klicken Sie auf das Kopiersymbol, um den Amazon-Ressourcennamen der Lambda-Funktion zu kopieren. Im Folgenden finden Sie ein BeispielARN, bei dem Funktionsname ist der Name der Lambda-Funktion (in diesem FallGetListOfFruits):

    arn:aws:lambda:us-east-1:123456789012:function:function-name
  3. Kopieren Sie den folgenden Code für die Lambda-Funktion in den Codequellenbereich der GetListOfFruitsSeite.

    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); };
  4. Wählen Sie Deploy und dann Test aus, um die Änderungen bereitzustellen und die Ausgabe Ihrer Lambda-Funktion zu sehen.

  5. Erstellen Sie mit den folgenden Schritten zwei zusätzliche Lambda-Funktionen, benannt GetFruitPrice CalculateAverage bzw. benannt:

    1. Kopieren Sie den folgenden Code in den Codequellbereich der GetFruitPriceLambda-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; };
    2. Kopieren Sie den folgenden Code in den Codequellbereich der CalculateAverageLambda-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); };
    3. Stellen Sie sicher, dass Sie ARNs die 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 Functions Functions-Konsole, um eine Zustandsmaschine zu erstellen, die die in Schritt 1 erstellten Lambda-Funktionen aufruft. In dieser Zustandsmaschine sind drei Map Zustände definiert. Jeder dieser Map Zustände enthält einen Task Zustand, der eine Ihrer Lambda-Funktionen aufruft. Darüber hinaus ist in jedem Task Status ein Retry Feld mit einer Anzahl von Wiederholungsversuchen für jeden Status definiert. Wenn ein Task Status auf einen Laufzeitfehler stößt, wird er erneut ausgeführt, bis die Anzahl der für diesen Status definierten Wiederholungsversuche erreicht ist. Task

  1. Öffnen Sie die Step Functions Functions-Konsole und wählen Sie Write your workflow in code.

    Wichtig

    Stellen Sie sicher, dass sich Ihr State Machine unter demselben befindet AWS Konto und Region als Lambda-Funktion, die Sie zuvor erstellt haben.

  2. Behalten Sie für Typ die Standardauswahl Standard bei.

  3. Kopieren Sie die folgende Amazon States-Sprachdefinition und fügen Sie sie unter Definition ein. Stellen Sie sicher, dass Sie die ARNs angezeigten durch die 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:us-east-1:123456789012: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:us-east-1:123456789012: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:us-east-1:123456789012:function:Calculate-average:$LATEST", "Payload.$": "$" }, "Retry": [ { "ErrorEquals": [ "States.ALL" ], "IntervalSeconds": 2, "MaxAttempts": 2, "BackoffRate": 1.3 } ], "End": true } } }, "ItemsPath": "$.storesFruitsPrice", "ResultPath": "$.storesPriceAverage", "MaxConcurrency": 1 } } }
  4. Geben Sie einen Namen für Ihre Zustandsmaschine ein. Behalten Sie die Standardauswahl für die anderen Optionen auf dieser Seite bei und wählen Sie Create State Machine.

  5. Öffnen Sie die Seite mit dem Namen Ihres Zustandsmaschinen. Führen Sie die Schritte 1 bis 4 in Schritt 4: Führen Sie die Zustandsmaschine aus diesem Abschnitt aus, verwenden Sie jedoch die folgenden Daten als Ausführungseingabe:

    { "stores": [ "Store A", "Store B", "Store C", "Store D" ] }

Schritt 3: Zeigen Sie die Ausführungsdetails der Zustandsmaschine an

Auf der Seite mit Ihrer Ausführungs-ID können Sie die Ergebnisse Ihrer Ausführung überprüfen und etwaige Fehler debuggen.

  1. (Optional) Wählen Sie eine der Registerkarten, die auf der Seite mit den Ausführungsdetails angezeigt werden, um die in den einzelnen Registerkarten enthaltenen Informationen zu sehen. Um beispielsweise die State-Machine-Eingabe und deren Ausführungsausgabe anzuzeigen, wählen Sie im Abschnitt „Ausführungsübersicht“ die Option „Eingabe und Ausgabe der Ausführung“.

  2. Wenn Ihre State-Machine-Ausführung fehlgeschlagen ist, wählen Sie in der Fehlermeldung „Ursache“ oder „Schrittdetails anzeigen“. Details zum Fehler werden im Abschnitt Schrittdetails angezeigt. Beachten Sie, dass der Schritt, der den Fehler verursacht hat, ein Task Status mit dem Namen GetListofFruits, in der Diagrammansicht und der Tabellenansicht hervorgehoben ist.

    Anmerkung

    Da der GetListofFruitsSchritt innerhalb eines Map Zustands definiert ist und der Schritt nicht erfolgreich ausgeführt werden konnte, wird der Schritt Status des Map Zustands als Fehlgeschlagen angezeigt.

Schritt 4: Erkunden Sie die verschiedenen Anzeigemodi

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 Map-Status fünf Iterationen umfasst und Sie die Ausführungsdetails für die dritte und vierte Iteration anzeigen möchten, gehen Sie wie folgt vor:

  1. Wählen Sie den Map Status aus, für den Sie die Iterationsdaten anzeigen möchten.

  2. 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ählen Sie #2 aus der Dropdownliste neben dem Namen des Kartenstatus aus.

    Anmerkung

    Wenn Ihre Zustandsmaschine verschachtelte Map Zustände enthält, zeigt Step Functions die Iterationen des übergeordneten und untergeordneten Map Status als zwei separate Dropdownlisten an, die die Iterationsdaten für die verschachtelten Zustände darstellen.

  3. (Optional) Wenn eine oder mehrere Ihrer Map State-Iterationen nicht ausgeführt werden konnten oder in einem abgebrochenen Zustand gestoppt wurden, können Sie sich Details zu der fehlgeschlagenen Iteration anzeigen lassen. Um diese Details zu sehen, wählen Sie in der Dropdownliste unter Fehlgeschlagen oder Abgebrochen die betroffenen Iterationsnummern aus.

Wenn Ihr Map-Status 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:

  1. Wählen Sie den Map Status aus, für den Sie die verschiedenen Iterationsdaten anzeigen möchten.

  2. Wählen Sie in der Strukturansicht der Map Status-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 aus.

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.

Beschränken 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:

  1. Wählen Sie Nach Eigenschaften filtern oder nach Schlüsselwörtern suchen und wählen Sie dann unter Eigenschaften die Option Status aus.

  2. Wählen Sie unter Operatoren die Option Status = aus.

  3. Wählen Sie Status = Fehlgeschlagen.

  4. (Optional) Wählen Sie Filter löschen, um die angewendeten Filter zu entfernen.

Beschränken 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:

  1. Wählen Sie Nach Eigenschaften filtern oder Nach Schlüsselwörtern suchen und wählen Sie dann unter Eigenschaften die Option Typ aus.

  2. Wählen Sie unter Operatoren die Option Type = aus.

  3. Wählen Sie Typ = TaskFailed.

  4. (Optional) Wählen Sie Filter löschen, um die angewendeten Filter zu entfernen.

Wählen Sie das Pfeilsymbol neben der ID eines TaskFailedEreignisses, um dessen Details zu überprüfen, einschließlich Eingabe, Ausgabe und Ressourcenaufruf, die in einem Dropdown-Feld angezeigt werden.