Чтобы создать конечный автомат, следуйте пошаговой инструкции, приведенной ниже. Щелчком по номеру шага можно развертывать соответствующие разделы.

  • Создание конечного автомата посредством консоли AWS Step Functions

    Чтобы создать конечный автомат, воспользуйтесь консолью AWS Step Functions. Step Functions – это веб-сервис для координации компонентов распределенных приложений и микросервисов с помощью наглядного представления рабочих процессов. Функции Lambda вызываются, когда конечный автомат запущен и достигает состояния «Задание».

    В этом упражнении конечный автомат выполняет указанные ниже задачи.

    • Создает элемент построения образа AppStream 2.0.
    • Получает статус группы инстансов и элемента построения образа AppStream 2.0.
    • Отправляет URL-адрес потоковой передачи.
    • Получает имя образа AppStream 2.0.
    • Создает группу инстансов и стек AppStream, затем связывает их.
    • Прекращает работу группы инстансов и элемента построения образа AppStream 2.0.
     

    Чтобы создать конечный автомат, выполните указанные ниже действия.

    1. Перейдите в консоль AWS Step Functions: https://console.aws.amazon.com/states/.
    2. Выполните одно из указанных ниже действий.
      • Если у вас нет созданных функций конечных автоматов, отобразится страница Начало работы. Выберите Начало работы, а затем –Конечные автоматы.
      • Если вы уже создали функцию конечных автоматов, в правом верхнем углу страницы Конечные автоматы выберите Создать конечный автомат.
    3. На странице Настроить конечный автомат оставьте выбранной опцию Создать из фрагмента кода.
    4. В разделе Тип оставьте выбранным Стандартный.
    5. В разделе Настройка конечного автомата удалите код заполнителя и вставьте приведенный ниже код в окно редактирования.
    {
      "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. Замените следующие значения собственными.

          • Замените <AWS-ACCOUNT-ID> своим номером аккаунта AWS.

          • Замените <REGION-CODE> выбранным регионом AWS. Вводите значения в нижнем регистре.

     7. Выберите Далее.
     
     8. В поле Имя введите examplecorp_eao.
     
     9. В разделе Разрешения отметьте Выберите существующую роль.
     
     10. В раскрывающемся списке Существующие роли выберите examplecorp_eao_role, роль IAM, созданную в модуле 2.
     
     11. Выберите Создать конечный автомат.
     
     12. В разделе Сведения в верхней части страницы отображается ARN конечного автомата. Сохраните его себе. Имя ARN потребуется для проекта позже, оно отображается в следующем формате: arn:aws:states:<REGION-CODE>:<AWS_ACCOUNT-ID>:stateMachine:<STATE-MACHINE-NAME>