Siga las instrucciones paso a paso a continuación para crear una máquina de estado. Haga clic en cada uno de los números de paso para ampliar la sección correspondiente.

  • Crear una máquina de estado con la consola de AWS Step Functions

    Para crear una máquina de estado, se utiliza la consola de AWS Step Functions. Step Functions es un servicio web que permite la coordinación de componentes de aplicaciones y microservicios distribuidos mediante flujos de trabajo visuales. Las funciones de Lambda se invocan cuando la máquina de estado se ejecuta y alcanza el estado de Tarea.

    Para este proyecto, la máquina de estado realiza las siguientes tareas:

    • Genera un creador de imágenes de AppStream 2.0.
    • Obtiene el estado del creador de imágenes y la flota de AppStream 2.0.
    • Envía una URL de streaming.
    • Obtiene el nombre de la imagen de AppStream 2.0.
    • Crea una flota y una pila de AppStream, y asocia la flota a una pila.
    • Detiene la flota y el creador de imágenes de AppStream 2.0.
     

    Para crear la máquina de estado, realice los siguientes pasos:

    1. Para abrir la consola de AWS Step Functions, vaya a https://console.aws.amazon.com/states/.
    2. Aplique alguna de las siguientes acciones:
      • Si no ha creado ninguna función de máquinas de estado, aparece la página de Introducción. Elija Introducción y luego Máquinas de estado.
      • Si ya creó una función de máquinas de estado, en la esquina superior derecha de la página Máquinas de estado, elija Crear máquina de estado.
    3. En la página Definir la máquina de estado, deje la opción Crear a partir de fragmento de código seleccionada.
    4. En la sección Tipo, deje Estándar seleccionado.
    5. En la sección Definición de la máquina de estado, elimine el código de marcador de posición y pegue el siguiente código en la ventana de edición.
    {
      "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. Reemplace lo que se indica a continuación con sus propios valores:

          • Reemplace <AWS-ACCOUNT-ID> con su número de la cuenta de AWS.

          • Reemplace <REGION-CODE> con la región de AWS de su elección. El valor debe estar todo en minúsculas.

     7. Seleccione Siguiente.
     
     8. En Nombre, escriba examplecorp_eao.
     
     9. En la sección Permisos, seleccione Elegir un rol existente.
     
     10. En el menú desplegable Roles existentes, elija examplecorp_eao_role, el rol de IAM que creó en el módulo 2.
     
     11. Elija Crear máquina de estado.
     
     12. En la parte superior de la página, en la sección Detalles, se muestra el ARN de la máquina de estado. Tome nota de este ARN. Este ARN se necesita más adelante en el proyecto y tiene el siguiente formato: arn:aws:states:<REGION-CODE>:<AWS_ACCOUNT-ID>:stateMachine:<STATE-MACHINE-NAME>.