Folgen Sie den nachstehenden Schritt-für-Schritt-Anweisungen, um eine Zustandsmaschine zu erstellen. Klicken Sie auf die Nummer eines jeweiligen Schritts, um den Bereich zu erweitern.

  • Erstellen Sie eine Zustandsmaschine mit Hilfe der AWS Step Functions-Konsole

    Um eine Zustandsmaschine zu erstellen, verwenden Sie die AWS Step Functions-Konsole. Step Functions ist ein Webdienst, mit dem Sie die Komponenten von verteilten Anwendungen und Mikrodiensten mithilfe von visuellen Workflows koordinieren können. Die Lambda-Funktionen werden aufgerufen, wenn die Zustandsmaschine ausgeführt wird und den Task-Zustand erreicht.

    Bei diesem Projekt führt die Zustandsmaschine die folgenden Aufgaben aus:

    • Erstellt einen AppStream 2.0 Image Builder.
    • Ruft den Status des AppStream 2.0 Image Builder und der AppStream-Flotte ab.
    • Sendet eine Streaming-URL.
    • Ruft den Namen des AppStream 2.0 Images ab.
    • Erstellt eine AppStream-Flotte und einen Stack und ordnet die Flotte einem Stack zu.
    • Stoppt die AppStream 2.0-Flotte und den Image Builder.
     

    Um die Zustandsmaschine zu erstellen, führen Sie die folgenden Schritte aus:

    1. Öffnen Sie die AWS Step Functions-Konsole unter https://console.aws.amazon.com/states/.
    2. Führen Sie eine der folgenden Aufgaben aus:
      • Wenn Sie keine Zustandsmaschinenfunktionen erstellt haben, wird eine Erste Schritte-Seite angezeigt. Wählen Sie Erste Schritte und wählen Sie dann Zustandsmaschinen.
      • Wenn Sie eine Zustandsmaschinenfunktion erstellt haben, wählen Sie Zustandsmaschine erstellen in der oberen rechten Ecke der Seite Zustandsmaschinen.
    3. Auf der Seite Zustandsmaschine definieren lassen Sie Autor aus Code-Snippet ausgewählt.
    4. Lassen Sie im Abschnitt Typ die Option Standard ausgewählt.
    5. Löschen Sie im Abschnitt Zustandsmaschinendefinition den Platzhaltercode und fügen Sie den folgenden Code in das Bearbeitungsfenster ein.
    {
      "StartAt": "Create Image Builder",
      "States": {
        "Create Image Builder": {
          "Type": "Task",
          "Resource":
          "arn:aws:lambda:<REGION-CODE>:<AWS-ACCOUNT-ID>:function:examplecorp_eao_createimagebuilder",
          "ResultPath": "$.type",
          "Next": "Resource Created?"
        },
        "Resource Created?": {
          "Type": "Choice",
          "Choices": [
            {
              "Variable": "$.type",
              "NumericEquals": -1,
              "Next": "Creation Failed"
            },
            {
              "Variable": "$.type",
              "NumericEquals": 1,
              "Next": "Sleep"
            },
            {
              "Variable": "$.type",
              "NumericEquals": 2,
              "Next": "Sleep"
            }
          ],
          "Default": "Sleep"
        },      
        "Sleep": {
          "Type": "Wait",
          "Seconds": 300,
          "Next": "Get Status"
        }, 
        "Get Status": {
          "Type": "Task",
          "Resource":
          "arn:aws:lambda:<REGION-CODE>:<AWS-ACCOUNT-ID>:function:examplecorp_eao_getstatus",
          "Next": "Instance Status",
          "ResultPath": "$.status"
        },
        "Instance Status": {
          "Type": "Choice",
          "Choices": [
            {
              "Variable": "$.status",
              "NumericEquals": -1,
              "Next": "Creation Failed"
            },    
            {
              "Variable": "$.status",
              "NumericEquals": 1,
              "Next": "Send StreamingURL"
            }
          ],
          "Default": "Sleep"
        },   
        "Send StreamingURL": {
          "Type": "Task",
          "Resource":
          "arn:aws:lambda:<REGION-CODE>:<AWS-ACCOUNT-ID>:function:examplecorp_eao_sendstreamingurl",
          "Next": "Split",
          "ResultPath": "$.status"      
        },
        "Split": {
            "Type": "Choice",
          "Choices": [
            {
              "Variable": "$.type",
              "NumericEquals": 1,
              "Next": "Wait For Snapshot"
            },
            {
              "Variable": "$.type",
              "NumericEquals": 2,
              "Next": "1 Hour Timer"
            }
          ],
          "Default": "1 Hour Timer"
        }, 
        "Wait For Snapshot": {
          "Type": "Wait",
          "Seconds": 1500,
          "Next": "IB Status"
        },  
        "IB Status": {
            "Type": "Task",
            "Resource":"arn:aws:lambda:<REGION-CODE>:<AWS-ACCOUNT-ID>:function:examplecorp_eao_getstatus",
            "ResultPath": "$.status",
            "Next": "Snapshotting?"
        },  
        "Snapshotting?": {
          "Type": "Choice",
          "Choices": [
            {
              "Variable": "$.status",
              "NumericEquals": 2,
              "Next": "Get ImageName"
            },
            {
              "Variable": "$.status",
              "NumericEquals": 3,
              "Next": "Get ImageName"
            }
          ],
          "Default": "Wait For Snapshot"
        },   
        "Get ImageName": {
          "Type": "Task",
          "Resource":"arn:aws:lambda:<REGION-CODE>:<AWS-ACCOUNT-ID>:function:examplecorp_eao_getimagename",
          "ResultPath": "$.imagename",
          "Next": "Wait For ImageReady"
        }, 
        "Wait For ImageReady": {
          "Type": "Wait",
          "Seconds": 300,
          "Next": "Image Status"
        },
        "Image Status": {
          "Type": "Task",
          "Resource":"arn:aws:lambda:<REGION-CODE>:<AWS-ACCOUNT-ID>:function:examplecorp_eao_getstatus",
          "ResultPath": "$.status",
          "Next": "ImageReady?"
        },
        "ImageReady?": {
          "Type": "Choice",
          "Choices": [
            {
              "Variable": "$.status",
              "NumericEquals": 3,
              "Next": "Create Fleet"
            }
          ],
          "Default": "Wait For ImageReady"
        },
        "Create Fleet": {
          "Type": "Task",
          "Resource":"arn:aws:lambda:<REGION-CODE>:<AWS-ACCOUNT-ID>:function:examplecorp_eao_createfleet",
          "ResultPath": "$.type",
          "Next": "Resource Created?"
        },
        "1 Hour Timer": {
          "Type": "Wait",
          "Seconds": 3600,
          "Next": "StopResources"
        },  
        "Creation Failed": {
          "Type": "Fail",
          "Cause": "Process Failed",
          "Error": "Process Failed"
        },    
        "StopResources": {
          "Type": "Task",
          "Resource":
          "arn:aws:lambda:<REGION-CODE>:<AWS-ACCOUNT-ID>:function:examplecorp_eao_stopresources",
          "End": true
        }
      }
    }  
    

     6. Ersetzen Sie die folgenden durch Ihre eigenen Werte:

          • Ersetzen Sie <AWS-ACCOUNT-ID> durch Ihre AWS-Kontonummer.

          • Ersetzen Sie <REGION-CODE> durch die von Ihnen gewählte AWS-Region. Der Wert muss in Kleinbuchstaben angegeben werden.

     7. Wählen Sie Weiter.
     
     8. Geben Sie für Name examplecorp_eao ein.
     
     9. Wählen Sie im Abschnitt Berechtigungen die Option Vorhandene Rolle auswählen.
     
     10. Wählen Sie in der Dropdown-Liste Vorhandene Rollen examplecorp_eao_role, die IAM-Rolle, die Sie in Modul 2 erstellt haben.
     
     11. Wählen Sie Zustandsmaschine erstellen.
     
     12. Oben auf der Seite, im Abschnitt Details, wird die ARN der Zustandsmaschine angezeigt. Notieren Sie sich diese ARN. Diese ARN wird später im Projekt benötigt und ist als arn:aws:states:<REGION-CODE>:<AWS_ACCOUNT-ID>:stateMachine:<STATE-MACHINE-NAME> formatiert.