Suivez les instructions pas à pas ci-dessous pour créer une machine d'état. Cliquez sur le numéro de chaque étape pour développer la section.

  • Créer une machine d'état en utilisant la console AWS Step Functions

    Pour créer une machine d'état, vous devez utiliser la console AWS Step Functions. Step Functions est un service Web grâce auquel vous pouvez coordonner des composants d'applications et de microservices distribués en utilisant des flux de travail graphiques. Les fonctions Lambda sont invoquées lorsque la machine d'état est lancée et atteint l'état de tâche.

    Pour les besoins de ce projet, la machine d'état effectue les tâches suivantes :

    • Créer un générateur d'images AppStream 2.0.
    • Obtenir le statut du générateur d'images et de la flotte AppStream 2.0
    • Envoie une URL de streaming.
    • Obtient le nom de l'image AppStream 2.0.
    • Créer une flotte et une pile AppStream et associer la flotte à une pile
    • Arrêter la flotte et le générateur d'images AppStream 2.0
     

    Pour créer la machine d'état, suivez les étapes suivantes :

    1. Ouvrez la console AWS Step Functions sur https://console.aws.amazon.com/states.
    2. Effectuez l'une des actions suivantes :
      • Si vous n'avez pas créé de machines d'état, un page Mise en route s'affiche. Choisissez Mise en route, puis Machines d'état.
      • Si vous avez créé une fonction Machines d'état, allez dans le coin supérieur droit de la page Machines d'état et sélectionnez Créer une machine d'état.
    3. Sur la page Définir une machine d'état, gardez la case Auteur de l'extrait de code sélectionnée.
    4. Dans la section Type , maintenez Standard sélectionné.
    5. Dans la section Définition de la machine d'état, supprimez le code d'espace réservé et collez le code suivant dans la fenêtre de modification.
    {
      "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. Remplacez les valeurs suivantes par vos propres valeurs :

          • Remplacez <AWS-ACCOUNT-ID> par le numéro de votre compte AWS.

          • Remplacez <REGION-CODE> par la région AWS que vous avez choisie. Cette valeur doit être saisie en lettres minuscules.

     7. Choisissez Suivant.
     
     8. Pour Nom, saisissez examplecorp_eao.
     
     9. Dans la section Autorisations , sélectionnez Choisir un rôle existant.
     
     10. Dans le menu déroulant Rôles existants, choisissez examplecorp_eao_role, le rôle IAM que vous avez créé dans le Module 2.
     
     11. Choisissez Créer une machine d'état.
     
     12. En haut de la page, dans la section Informations, s'affiche l'ARN de la machine d'état. Relevez cet ARN. Vous aurez besoin de cet ARN plus tard dans le projet sous le format arn:aws:states:<REGION-CODE>:<AWS_ACCOUNT-ID>:stateMachine:<STATE-MACHINE-NAME>