Начало работы с Workflows
Начало работы с Workflows
Давайте пройдём через пример «Hello World», добавим несколько задач и настроим автоматический триггер.
Hello World
В этой процедуре мы создаём workflow с одной задачей Запустить JavaScript и запускаем его. Вам не нужно писать JavaScript для этой процедуры; мы будем использовать стандартный пример JavaScript.
Цели
- Ознакомиться с основными действиями Workflows.
- Убедиться, что у вас есть все разрешения, необходимые для запуска workflow и пользовательских скриптов.
Шаги
- Войдите в Ключ-АСТРОМ.
- Перейдите в Workflows. Убедитесь, что вы на вкладке Workflows, а не на вкладке Выполнения.
- Выберите Workflow в правом верхнем углу страницы.
- Выберите Workflow, чтобы создать новый workflow. Откроется редактор workflow.
- Выберите заголовок workflow. По умолчанию это
Untitled workflow, и введите собственное имя, напримерQuick Start. - На панели Выбрать триггер справа прокрутите вниз и выберите триггер По требованию. Мы собираемся создать workflow, который вы запускаете вручную через веб-интерфейс или REST API.
- Чтобы добавить первую задачу в ваш workflow, наведите курсор на узел триггера графа workflow и выберите Добавить.
- На панели Выбрать действие справа выберите Запустить JavaScript. Теперь workflow имеет свою первую задачу и показывает конфигурацию ввода справа. Он поставляется с примером кода, который получает, кто запустил выполнение workflow, и логирует это.
- Выберите Запустить, чтобы выполнить черновик workflow. Этот шаг также сохраняет ваш черновик.
- При первом запуске workflow вам будет предложено авторизовать службу автоматизации для запуска workflow от имени вашего пользователя. Выберите Разрешить и запустить, если вы согласны с этим. Вы всегда можете ограничить конфигурацию в настройках.
Ошибка? Если вы получили ошибку «forbidden» при запуске workflow, проверьте настройки авторизации.
- В правом верхнем углу выберите Настройки > Настройки авторизации.
- Убедитесь, что у вас есть все необходимые разрешения.
- Запустите workflow снова.
Приложение переключается на монитор workflow, который представляет собой живое представление только что запущенного выполнения. Это представление автоматически обновляется, пока выполнение не достигнет конечного состояния. Правая панель показывает детали выполнения.
- Пока workflow выполняется, вы должны видеть Состояние — Выполняется.
- Когда выполнение завершено, вы должны видеть Состояние — Успех.
- Если вы не получили Успех, информация о состоянии сообщит вам, почему.
- Вы можете изучить детали отдельных задач, выбрав их на графе, как показано ниже на скриншоте.
- Скриншот деталей задачи JavaScript из Quick Start workflow.
Несколько задач
Теперь, когда вы убедились, что можете запускать workflow и пользовательские скрипты, давайте добавим ещё одну задачу и отправим пользовательское событие в хранилище данных.
Цели
Теперь вы научитесь:
- Редактировать workflow.
- Добавлять больше задач в workflow.
- Переименовывать задачу.
- Запускать JavaScript из задачи.
- Запускать DQL из задачи.
Шаги
- На мониторе workflow выберите Редактировать workflow, чтобы вернуться в редактор workflow.
- Чтобы добавить ещё одну задачу, наведите курсор на узел, к которому вы хотите её добавить, и выберите Добавить. Вы можете добавлять задачи в любой точке workflow. У вас также могут быть несколько задач, выполняемых параллельно. Давайте добавим одну после нашей первой задачи
run_javascript_1, так как мы планируем использовать некоторую информацию отсюда позже. - На панели Выбрать действие справа выберите Запустить JavaScript.
- Теперь хорошая возможность дать этой задаче лучшее имя, выбрав имя задачи в правом верхнем углу (аналогично тому, как мы меняли заголовок workflow) и изменив его на
ingest_custom_event. - Как следует из названия, мы хотим, чтобы вторая задача загружала пользовательское событие в хранилище данных с помощью API Ключ-АСТРОМ, доступного для импорта в действии Запустить JavaScript. Для этого скопируйте следующий код JavaScript и вставьте его в поле Исходный код, чтобы заменить стандартный пример.
import { execution } from "@astromkey-sdk/automation-utils";
import { eventsClient, EventIngestEventType } from '@astromkey-sdk/client-classic-environment-v2';
export default async function () {
const my_event = {
"eventType": EventIngestEventType.CustomInfo,
"title": "Workflows quickstart sample event",
"properties": {
"triggeredBy": "tbd"
}
}
const event_result = await eventsClient.createEvent({body: my_event})
console.log(event_result)
return event_result
}Это создаст событие CustomInfo, залогирует ответ API и вернёт его. Возвращая данные, они становятся доступными как результат задачи и могут использоваться последующими задачами. Дополнительную информацию о SDK см. в разделе Разработчик Ключ-АСТРОМ.
- Чтобы проверить изменения, сохраните и запустите workflow, как раньше. Поскольку мы записываем новые события в API Ключ-АСТРОМ, вашему пользователю требуются необходимые разрешения (
storage:events:write) для этого, а также необходимо разрешить AutomationEngine действовать с этим разрешением (мы разрешили AutomationEngine действовать от нашего имени в примере Hello World). Отсутствие разрешений будет отражено в статусе и логах задачиingest_custom_event. - После успешного выполнения давайте вернёмся к редактированию workflow и используем результаты задачи. Наш пример
run_javascript_1возвращает информациюtriggeredBy, которую мы теперь будем использовать в качестве полезной нагрузки в нашем пользовательском событии. Выберите задачуingest_custom_event(нашу вторую задачу), скопируйте следующий код JavaScript и вставьте его в Исходный код, чтобы заменить текущее содержимое задачиingest_custom_event.
import { execution } from "@astromkey-sdk/automation-utils";
import { eventsClient, EventIngestEventType } from '@astromkey-sdk/client-classic-environment-v2';
export default async function () {
const exe = await execution();
const result = await exe.result("run_javascript_1");
const my_event = {
"eventType": EventIngestEventType.CustomInfo,
"title": "Workflows quickstart sample event",
"properties": {
"triggeredBy": result.triggeredBy
}
}
const event_result = await eventsClient.createEvent({body: my_event})
console.log(event_result)
return event_result
}На этот раз мы получаем детали выполнения, извлекаем результаты задачи run_javascript_1 и используем информацию triggeredBy в качестве полезной нагрузки события.
- Запустите workflow снова и затем посмотрите наши пользовательские события. Перейдите в Блокноты и запросите хранилище данных для наших пользовательских событий. В Блокнотах выберите Запрос к хранилищу данных:
fetch events | filter event.type == "CUSTOM_INFO" | filter event.name == "Workflows quickstart sample event"
- Добавьте ещё одну задачу в конец нашего Quick Start workflow. На этот раз выберите действие Выполнить запрос DQL. Чтобы использовать его для получения количества наших событий Quick Start, скопируйте и вставьте следующий DQL в поле Запрос DQL для последней задачи.
fetch events, from:now() - 24h | filter event.type == "CUSTOM_INFO" | filter event.name == "Workflows quickstart sample event" | summarize EventCount = count() | fields EventCount
- Выберите Сохранить черновик.
- Выберите Запустить. Чтобы увидеть количество наших событий Quick Start workflow, вернитесь в Блокноты и выберите Перезапустить разделы. События могут появиться в хранилище данных не сразу после загрузки, так как они должны пройти несколько этапов обработки.
Автоматические триггеры
Осталось добавить автоматический триггер в наш workflow.
Цели
- Научиться автоматически запускать workflow вместо ручного запуска.
- На мониторе workflow выберите Редактировать workflow, чтобы вернуться в редактор workflow.
- Выберите узел триггера на графе (в нашем примере он должен говорить Триггер по требованию). На панели деталей триггера справа выберите Изменить триггер и подтвердите, что хотите изменить триггер. Это действие отменяет текущее определение триггера.
- На панели Выбрать триггер выберите триггер Интервал времени.
- Оставьте значение интервала (Запускать каждые (мин)) по умолчанию (
30 минут). - Выберите Сохранить. Выберите Развернуть, чтобы сделать workflow live и применить автоматический триггер. С этим изменением и развёртыванием черновика:
- Была создана live-версия workflow. Live-workflow будет автоматически запускаться каждые 30 минут.
- Каждое выполнение, каждые 30 минут, перечисляется в таблице Выполнения. Выберите Выполнения, чтобы увидеть список выполнений. Отфильтруйте ваш workflow, если в среде уже есть другие выполняющиеся выполнения.
Quick Start workflow с использованием шаблона
Вы можете использовать шаблон workflow для начала работы. Выберите приведённый ниже код Quick Start workflow. Скопируйте выбранный код workflow. Вставьте его в текстовый редактор. Сохраните шаблон как quickstart.yaml. В Workflows Ключ-АСТРОМ выберите Загрузить. Выберите quickstart.yaml. Выберите Импорт. Вы загрузили Quick Start workflow в ваш тенант Ключ-АСТРОМ. Вы можете вносить правки, запускать его и развёртывать.
{
"title": "Quick start",
"taskDefaults": {},
"description": "",
"triggerType": "Manual",
"schemaVersion": 3,
"trigger": {},
"tasks": {
"run_javascript_1": {
"name": "run_javascript_1",
"input": {
"script": "// optional import of sdk modules\nimport { execution } from '@astromkey-sdk/automation-utils';\n\nexport default async function () {\n // your code goes here\n // e.g. get the current execution\n const ex = await execution();\n console.log('Automated script execution on behalf of', ex.trigger);\n \n return { triggeredBy: ex.trigger };\n}"
},
"action": "astromkey.automations:run-javascript",
"position": {
"x": 0,
"y": 1
},
"description": "Build a custom task running JavaScript code",
"predecessors": []
},
"ingest_custom_event": {
"name": "ingest_custom_event",
"input": {
"script": "import { execution } from \"@astromkey-sdk/automation-utils\";\nimport { eventsClient, EventIngestEventType } from '@astromkey-sdk/client-classic-environment-v2';\n\nexport default async function () {\n\n const exe = await execution();\n const result = await exe.result(\"run_javascript_1\");\n \n const my_event = {\n \"eventType\": EventIngestEventType.CustomInfo,\n \"title\": \"Workflows quickstart sample event\",\n \"properties\": {\n \"triggeredBy\": result.triggeredBy\n }\n }\n \n const event_result = await eventsClient.createEvent({body: my_event})\n console.log(event_result)\n\n return event_result\n}"
},
"action": "astromkey.automations:run-javascript",
"position": {
"x": 0,
"y": 2
},
"description": "Build a custom task running JavaScript code",
"predecessors": [
"run_javascript_1"
]
},
"get_quick_start_sample_events": {
"name": "get_quick_start_sample_events",
"input": {
"query": "fetch events, from:now() - 24h\n| filter event.type == \"CUSTOM_INFO\"\n| filter event.name == \"Workflows quickstart sample event\"\n| summarize EventCount = count()\n| fields EventCount"
},
"action": "astromkey.automations:execute-dql-query",
"position": {
"x": 0,
"y": 3
},
"description": "Execute DQL query",
"predecessors": [
"ingest_custom_event"
]
}
}
}