Siga as instruções passo a passo abaixo para criar uma máquina de estado. Clique no número de cada etapa para expandir a seção.

  • Crie uma máquina de estado usando o console do AWS Step Functions

    Para criar uma máquina de estado, você usa o console do AWS Step Functions. O Step Functions é um serviço web que permite coordenar componentes de aplicações distribuídas e microsserviços usando fluxos de trabalho visuais. As funções do Lambda são invocadas quando a máquina de estado é executada e atinge o estado de tarefa.

    Para este projeto, a máquina de estado executa as seguintes tarefas:

    • Cria um construtor de imagens do AppStream 2.0.
    • Obtém o status da frota e do construtor de imagens do AppStream 2.0.
    • Envia um URL de streaming.
    • Obtém o nome da imagem do AppStream 2.0.
    • Cria uma frota e pilha do AppStream e associa a frota a uma pilha.
    • Interrompe a frota e o construtor de imagens do AppStream 2.0.
     

    Para criar a máquina de estado, execute as seguintes etapas:

    1. Abra o console do AWS Step Functions em https://console.aws.amazon.com/states/.
    2. Execute uma das seguintes ações:
      • Caso não tenha criado funções de máquinas de estado, aparecerá uma página Getting Started (Conceitos básicos). Escolha Getting Started (Conceitos básicos) e State Machines (Máquinas de estado).
      • Caso já tenha criado uma função Máquinas de estado, no canto superior direito da página State machines (Máquinas de estado), selecione Create state machine (Criar máquina de estado).
    3. Na página Define State Machine (Definir máquina de estado), mantenha Author from code snippet (Autor de trecho de código) selecionado.
    4. Na seção Type (Tipo), mantenha Standard (Padrão) selecionado.
    5. Na seção State machine definition (Definição de máquina de estado), exclua o código de espaço reservado e cole o código a seguir na janela de edição.
    {
      "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. Substitua o seguinte por seus próprios valores:

          • Substitua <AWS-ACCOUNT-ID> pelo número da sua conta da AWS.

          • Substitua <REGION-CODE> pela Região da AWS que você escolher. O valor deve estar todo em letras minúsculas.

     7. Selecione Next (Próximo).
     
     8. Em Name (Nome), digite examplecorp_eao.
     
     9. Na seção Permissions (Permissões), selecione Choose an existing role (Escolher uma função existente).
     
     10. Na lista suspensa Existing roles (Funções existentes), selecione examplecorp_eao_role, a função do IAM que você criou no Módulo 2.
     
     11. Escolha Create state machine (Criar máquina de estado).
     
     12. Na parte superior da página, na seção Details (Detalhes), o ARN da máquina de estado aparece. Anote esse ARN. Esse ARN será necessário depois no projeto e está formatado como arn:aws:states:<REGION-CODE>:<AWS_ACCOUNT-ID>:stateMachine:<STATE-MACHINE-NAME>