Чтобы создать конечный автомат, воспользуйтесь консолью AWS Step Functions. Step Functions – это веб-сервис для координации компонентов распределенных приложений и микросервисов с помощью наглядного представления рабочих процессов. Функции Lambda вызываются, когда конечный автомат запущен и достигает состояния «Задание».
В этом упражнении конечный автомат выполняет указанные ниже задачи.
- Создает элемент построения образа AppStream 2.0.
- Получает статус группы инстансов и элемента построения образа AppStream 2.0.
- Отправляет URL-адрес потоковой передачи.
- Получает имя образа AppStream 2.0.
- Создает группу инстансов и стек AppStream, затем связывает их.
- Прекращает работу группы инстансов и элемента построения образа AppStream 2.0.
Чтобы создать конечный автомат, выполните указанные ниже действия.
- Перейдите в консоль AWS Step Functions: https://console.aws.amazon.com/states/.
- Выполните одно из указанных ниже действий.
- Если у вас нет созданных функций конечных автоматов, отобразится страница Начало работы. Выберите Начало работы, а затем –Конечные автоматы.
- Если вы уже создали функцию конечных автоматов, в правом верхнем углу страницы Конечные автоматы выберите Создать конечный автомат.
- На странице Настроить конечный автомат оставьте выбранной опцию Создать из фрагмента кода.
- В разделе Тип оставьте выбранным Стандартный.
- В разделе Настройка конечного автомата удалите код заполнителя и вставьте приведенный ниже код в окно редактирования.
{
"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>