Автоматизация процессов в облаке на основе событий

Azure Active Directory
Сетка событий
Функции
Logic Apps
Azure Monitor

Автоматизация рабочих процессов и повторяющихся задач в облаке с помощью бессерверных технологийможет значительно повысить производительность группы DevOps Организации. Бессерверная модель лучше всего подходит для сценариев автоматизации, которые соответствуют подходу, управляемому событиями. В этой эталонной архитектуре показаны два таких сценария автоматизации в облаке:

  1. Теги в центре затрат. Эта реализация отслеживает центры затрат для каждого ресурса Azure. Служба политики Azure помечает все новые ресурсы в группе с идентификатором центра затрат по умолчанию. Сетка событий отслеживает события создания ресурсов, а затем вызывает функцию Azure. Функция взаимодействует с Azure Active Directory и проверяет идентификатор центра затрат для нового ресурса. Если он отличается, он обновляет тег и отправляет владельцу ресурса сообщение электронной почты. Запросы остальных для Azure Active Directory размещаются для простоты. Azure AD также можно интегрировать с помощью модуля Azure AD PowerShell или библиотеки ADAL для Python.

  2. Отклик регулирования. Эта реализация наблюдает за Cosmos DB базой данных для регулирования. Azure Monitor оповещения запускаются, когда запросы на доступ к данным CosmosDB превышают емкость в единицах запроса (или в RUs). Группа действий Azure Monitor настроена для вызова функции автоматизации в ответ на эти предупреждения. Функция масштабирует RUs до более высокого значения, увеличивая емкость и, в свою очередь, останавливает предупреждения. Обратите внимание, что в качестве альтернативы этой реализации используется режим автопилота CosmosDB (Предварительная версия) .

Бессерверная автоматизация в облаке

Логотип GitHub . эталонные реализации для этой архитектуры доступны на сайте GitHub.

Функции в этих реализациях написаны на PowerShell и Python, два из самых распространенных языков сценариев, используемых в автоматизации. Они развертываются с помощью Azure functions Core Tools в Azure CLI. Кроме того, вы можете использовать предварительную версию командлета PowerShell для развертывания функций Azure и управления ими.

Шаблоны в службе автоматизации на основе событий

Сценарии автоматизации на основе событий лучше реализовать с помощью функций Azure. Они следуют следующим общим шаблонам:

  • Реагирование на события ресурсов. Это ответы на такие события, как ресурс или группа ресурсов Azure, созданные, удаленные, измененные и т. д. Этот шаблон использует сетку событий для активации функции для таких событий. Примером этого шаблона является реализация тегов в центре затрат. Ниже приведены другие распространенные сценарии.

    • предоставление группам DevOps доступа к только что созданным группам ресурсов;
    • Отправка уведомления в DevOps при удалении ресурса и
    • реагирование на события обслуживания для таких ресурсов, как виртуальные машины Azure (ВМ).
  • Запланированные задачи. Обычно это задачи обслуживания, выполняемые с помощью функций, запускаемых по таймеру. Примеры этого шаблона:

    • Остановка виртуальной машины в ночное время, начиная с утра;
    • чтение содержимого хранилища BLOB-объектов через регулярные интервалы и преобразование в Cosmos DB документ
    • периодическое сканирование для ресурсов, которые больше не используются и удаляются, и
    • Автоматическое резервное копирование.
  • Обработка оповещений Azure. Этот шаблон использует простоту интеграции Azure Monitor оповещений и групп действий с помощью функций Azure. Эта функция обычно выполняет действия по исправлению в ответ на метрики, log Analytics и оповещения, происходящие в приложениях, а также в инфраструктуре. Примером этого шаблона является реализация реагирования на регулирование. Ниже приведены другие распространенные сценарии.

    • усечение таблицы, когда база данных SQL достигает максимального размера,
    • перезапуск службы на виртуальной машине, когда она ошибочно остановлена, и
    • Отправка уведомлений при сбое функции.
  • Управление внешними системами. Этот шаблон обеспечивает интеграцию с внешними системами, используя Logic Apps для управления рабочим процессом. Logic Apps соединители можно легко интегрировать с несколькими сторонними службами, а также со службами Майкрософт, такими как Microsoft 365. Функции Azure можно использовать для фактической автоматизации. Реализация тегов в центре затрат демонстрирует этот шаблон. Ниже приведены другие распространенные сценарии.

    • наблюдение за ИТ процессами, такими как запросы на изменение или утверждения;
    • Отправка уведомления по электронной почте при завершении задачи автоматизации.
  • Предоставление в виде веб-перехватчика или API. Задачи автоматизации, использующие функции Azure, можно интегрировать в сторонние приложения или даже в средства командной строки, предоставляя функцию в качестве веб-перехватчика или API с помощью триггера HTTP. Для защиты внешнего доступа к функции доступны несколько методов проверки подлинности в PowerShell и Python. Автоматизация выполняется в ответ на внешние события конкретного приложения, например для интеграции с Power Apps или GitHub. Ниже приведены распространенные сценарии:

    • Активация автоматизации для неудачной службы и
    • подключение пользователей к ресурсам Организации.
  • Создание интерфейса чатопс. Этот шаблон позволяет клиентам создавать операционные интерфейсы на основе разговора, а также выполнять функции и команды разработки и эксплуатации в интерактивном сотрудничестве с человеком. Это можно интегрировать с платформой Azure Bot и использовать команды Microsoft Teams или временного резерва для развертывания, мониторинга, часто задаваемых вопросов и т. д. Интерфейс Чатопс создает систему в режиме реального времени для управления производственными инцидентами, при этом каждый шаг автоматически задокументирован в чате. Узнайте , как чатопс поможет вам DevOps более подробную информацию.

  • Гибридная Автоматизация. Этот шаблон использует гибридные подключения службы приложений Azure для установки программного компонента на локальном компьютере. Этот компонент обеспечивает безопасный доступ к ресурсам на этом компьютере. Возможность управления гибридными средами в настоящее время доступна в системах на базе Windows с помощью функций PowerShell. Ниже приведены распространенные сценарии:

    • Управление локальными компьютерами и
    • Управление другими системами, находящимся за брандмауэром (например, локально SQL Server) через сервер переходов.

Architecture

Архитектура состоит из следующих блоков:

Функции Azure. Функции Azure предоставляют управляемые событиями бессерверные функции вычислений в этой архитектуре. Функция выполняет задачи автоматизации при срабатывании событий или предупреждений. В эталонных реализациях вызывается функция с HTTP-запросом. Сложность кода должна быть минимальна путем разработки функции, которая не имеет состояния, и идемпотентными.

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

Рекомендации по написанию функций см. в статье Оптимизация производительности и надежности функций Azure .

Logic Apps. Logic Apps можно использовать для выполнения более простых задач, легко реализуемых с помощью встроенных соединителей. Эти задачи могут варьироваться от уведомлений по электронной почте до интеграции с внешними приложениями управления. Сведения об использовании Logic Apps с приложениями сторонних производителей см. в статье Базовая интеграция Enterprise в Azure.

Logic Apps не предоставляет кода или визуального конструктора с низким кодом , и его можно использовать в некоторых сценариях автоматизации. Прочтите это сравнение между функциями Azure и Logic Apps , чтобы узнать, какая служба может соответствовать вашему сценарию.

Сетка событий. Служба "Сетка событий" имеет встроенную поддержку событий из других служб Azure, а также пользовательские события (также называемые пользовательскими разделами). Операционные события, такие как создание ресурсов, можно легко распространить на функцию автоматизации с помощью встроенного механизма сетки событий.

Сетка событий упрощает автоматизацию на основе событий с помощью модели публикации и подписки, обеспечивая надежную автоматизацию событий, доставляемых по протоколу HTTP.

Azure Monitor. Azure Monitor оповещения могут отслеживать критические условия и предпринимать корректирующие действия с помощью групп действий Azure Monitor. Эти группы действий легко интегрируются с функциями Azure. Это полезно для отслеживания и исправления любых условий возникновения ошибок в инфраструктуре, таких как регулирование базы данных.

Действие автоматизации. Этот обширный блок представляет другие службы, с которыми может взаимодействовать функция, для предоставления функциональных возможностей автоматизации. Например, Azure Active Directory для проверки тегов как в первом сценарии или базы данных для инициализации, как во втором сценарии.

Рекомендации по обеспечению устойчивости

Функции Azure

Обработку времени ожидания HTTP

Чтобы избежать истечения времени ожидания HTTP для более длительной задачи автоматизации, поочередно поместить это событие в служебную шинуи управлять фактической автоматизацией в другой функции. В сценарии автоматизации реагирования на регулирование показан этот шаблон, хотя фактическая Cosmos DBная подготовка единиц запросов осуществляется быстро.

Надежность в функции автоматизации

Устойчивые функции, которые сохраняют состояние между вызовами, предоставляют альтернативу описанному выше подходу. В настоящее время они поддерживаются только в JavaScript и C#.

Ошибки журнала

Рекомендуется записывать в журнал любые сбои при выполнении задач автоматизации. Это позволяет правильно устранять ошибки в условиях возникновения ошибок. В эталонных реализациях используется Application Insights в качестве системы телеметрии.

Параллелизм

Проверьте требование параллелизма для функции автоматизации. Ограничение параллелизма ограничивается установкой переменной maxConcurrentRequests в файле, host.js. Этот параметр ограничивает количество одновременных экземпляров функций, выполняемых в приложении функции. Поскольку каждый экземпляр потребляет ресурсы ЦП и памяти, это значение необходимо скорректировать для ресурсоемких операций. Уменьшите значение, maxConcurrentRequests если вызовы функций слишком замедляются или не могут завершиться. Дополнительные сведения см. в разделе Настройка поведения узла для более эффективного обработки параллелизма .

Идемпотентность

Убедитесь, что функция автоматизации — идемпотентными. Как Azure Monitor, так и сетка событий могут выдавать предупреждения или события, указывающие на ход выполнения, например разрешение подписанного события, его запуск, выполнение и т. д., ваш ресурс будет подготовлен, успешно создан и т. д. или даже отправлять ложные предупреждения из-за неправильной настройки. Убедитесь, что функция работает только с соответствующими предупреждениями и событиями, и игнорирует все остальные, чтобы нежелательные результаты не приводили к ложным или неправильно настроенным событиям. Дополнительные сведения см. в этой записи блога по шаблонам идемпотентности.

Сетка событий Azure

Если рабочий процесс использует сетку событий, проверьте, может ли ваш сценарий создать большое количество событий, достаточно clog сетку. См. раздел Доставка сообщений в сетке событий и повторите попытку, чтобы понять, как она обрабатывает события, когда доставка не подтверждена, и измените логику соответствующим образом. Рабочий процесс центра затрат не реализует дополнительные проверки для этого, так как он наблюдает только за событиями создания ресурсов в группе ресурсов. Мониторинг ресурсов, созданных во всей подписке, может создавать большое количество событий, что требует более устойчивой обработки.

Azure Monitor

Если создается достаточно большое количество оповещений и служба автоматизации обновляет ресурсы Azure, то могут быть достигнуты ограничения регулирования Azure Resource Manager . Это может негативно повлиять на оставшуюся часть инфраструктуры в этой подписке. Избегайте этой ситуации, ограничивая частоту предупреждений, создаваемых Azure Monitor. Вы также можете ограничить предупреждения, созданные для конкретной ошибки. Дополнительные сведения см. в документации по Azure Monitor предупреждения .

Вопросы безопасности

Управление доступом к функции

Ограничьте доступ к функции, активируемой HTTP, путем установки уровня авторизации. При анонимной проверке подлинности функция легко доступна с URL-адресом, например http://<APP_NAME>.azurewebsites.net/api/<FUNCTION_NAME> . Проверка подлинности на уровне функций может привести к маскировке конечной точки HTTP путем указания функциональных клавиш в URL-адресе. Этот уровень задается в файле function.js:

{
  "bindings": [
    {
      "authLevel": "function",
      "type": "httpTrigger",
      "direction": "in",
      "name": "Request",
      "methods": [
        "get",
        "post"
      ]
    },
    {
      "type": "http",
      "direction": "out",
      "name": "Response"
    }
  ]
}

Для обеспечения безопасности функции в рабочей среде могут потребоваться дополнительные стратегии. В эталонных реализациях функции выполняются на платформе Azure другими службами Azure и не будут доступны в Интернете. Для функций, доступных как веб-перехватчики, достаточно авторизации функции.

Рассмотрите возможность добавления уровней безопасности поверх функции проверки подлинности, например,

  • Проверка подлинности с помощью сертификатов клиента или
  • Убедитесь, что вызывающий объект является частью или имеет доступ к каталогу, в котором размещена эта функция, используя простую интеграцию с проверкой подлинности.

Обратите внимание, что для Azure Monitor групп действий доступен только режим проверки подлинности на уровне функций.

Если функция должна вызываться из стороннего приложения или службы, рекомендуется предоставить доступ к ней с помощью слоя управления API . Этот уровень должен обеспечивать проверку подлинности. Служба управления API теперь имеет уровень потребления , интегрированный с функциями Azure, что позволяет платить только при выполнении API. Дополнительные сведения см. в статье Создание и предоставление функций с помощью OpenAPI.

Если вызывающая служба поддерживает конечные точки службы, можно рассмотреть следующие параметры тем обходятся:

  • Используйте выделенный план службы приложений, в котором можно заблокировать функции в виртуальной сети, чтобы ограничить доступ к ней. Это невозможно в бессерверной модели, основанной на потреблении.
  • Используйте план "функции Azure" Premium, который включает выделенную виртуальную сеть, которая будет использоваться приложениями-функциями.

Чтобы сравнить цены и функции между этими вариантами, см. статью масштабирование и размещение функций Azure.

Управление тем, к чему может получить доступ функция

Управляемые удостоверения для ресурсов Azure, функции Azure Active Directory, упрощают проверку подлинности и доступ к другим ресурсам и службам Azure. Коду не требуется управлять учетными данными проверки подлинности, так как он управляется Azure AD.

Существует два типа управляемых удостоверений.

  • Управляемые удостоверения, назначенные системой: они создаются как часть ресурса Azure и не могут совместно использоваться несколькими ресурсами. Они удаляются при удалении ресурса. Используйте их для сценариев, в которых задействованы отдельные ресурсы Azure или которые требуют независимых удостоверений. В обеих эталонных реализациях используются удостоверения, назначенные системой, так как они обновляют только один ресурс. Управляемые удостоверения необходимы только для обновления другого ресурса. Например, функция может считывать Теги ресурсов без управляемого удостоверения. Чтобы добавить в функцию удостоверение, назначенное системой, ознакомьтесь с этими инструкциями .

  • Управляемые удостоверения, назначаемые пользователем. они создаются как автономные ресурсы Azure. Они могут быть общими для нескольких ресурсов и должны быть удалены явным образом. Ознакомьтесь с этими инструкциями , чтобы добавить в функцию удостоверение, назначенное пользователем. Используйте их для сценариев, которые:

    • Требуется доступ к нескольким ресурсам, которые могут совместно использовать одно удостоверение, или
    • Необходима предварительная авторизация для защиты ресурсов во время подготовки или
    • Наличие ресурсов, которые периодически перезапускаются, в то время как разрешения должны быть одинаковыми.

После назначения удостоверения функции Azure назначьте ей роль с помощью управления доступом на основе ролей Azure (Azure RBAC) для доступа к ресурсам. Например, для обновления ресурса роль участника должна быть назначена удостоверению функции.

Рекомендации по стоимости

Для оценки затрат используйте калькулятор цен Azure. Ниже приведены некоторые рекомендации по снижению затрат.

Azure Logic Apps

В Logic Apps есть модель ценообразования с оплатой по мере использования. Триггеры, действия и выполнения соединителей измеряются каждый раз при запуске приложения логики. Все успешные и неудачные действия, включая триггеры, считаются выполнением.

Приложения логики также имеют фиксированную модель ценообразования. Если необходимо запустить приложения логики, которые обмениваются данными с защищенными ресурсами в виртуальной сети Azure, их можно создать в Среда службы интеграции (ISE).

Дополнительные сведения см. в разделе модель ценообразования для Azure Logic Apps.

В этой архитектуре приложения логики используются в сценарии использования тегов центра затрат для управления рабочим процессом.

Встроенные соединители используются для подключения к функциям Azure и отправки по электронной почте уведомления о завершении задачи автоматизации. Функции предоставляются в виде веб-перехватчика или API с помощью триггера HTTP. Logic Apps активируется только при возникновении запроса HTTPS. Это экономичный способ по сравнению с конструкцией, где функции постоянно опрашиваются и проверяют определенные критерии. Каждый опрашивающий запрос измеряется как действие.

Дополнительные сведения см. на странице с ценами на Logic Apps.

Функции Azure

Функции Azure доступны в следующих трех тарифных планах.

  • План потребления. Это наиболее экономичный план бессерверного доступа, в котором вы платите только за время выполнения функции. В рамках этого плана функции могут выполняться не более чем на 10 минут за раз.

  • План Premium. Используйте план "функции Azure Premium " для сценариев автоматизации с дополнительными требованиями, такими как Выделенная виртуальная сеть, длительное время выполнения и т. д. Эти функции могут выполняться до часа и должны быть выбраны для более длительных задач автоматизации, таких как выполнение резервного копирования, индексирование базы данных или создание отчетов.

  • План службы приложений. В сценариях гибридной автоматизации, использующих гибридные подключения службы приложений Azure, потребуется использовать план службы приложений. Функции, созданные в этом плане, могут выполняться в течение неограниченной длительности, аналогично веб-приложению.

В этой архитектуре функции Azure используются для таких задач, как обновление тегов в Azure Active Directory или изменение конфигурации Cosmos DB путем увеличения значения параметра RUs до более высоких значений. План потребления подходит для этого варианта использования, так как эти задачи являются интерактивными и не переносятся.

Azure Cosmos DB

Azure Cosmos DB векселя на подготовленную пропускную способность и потребляемую память за час. Подготовленная пропускная способность выражается в единицах запросов в секунду, которые могут использоваться для типичных операций с базами данных, таких как операции вставки, чтения. Плата за хранилище взимается за каждый ГБ, используемый для хранимых данных и индекса. Дополнительные сведения см. в разделе модель ценообразования Cosmos DB .

В этой архитектуре, когда запросы на доступ к данным Cosmos DB превышают емкость единиц запросов (или RUs), Azure Monitor инициирует предупреждения. В ответ на эти предупреждения группа действий Azure Monitor настроена для вызова функции автоматизации. Функция масштабирует объект RUs до более высокого значения. Это позволяет снизить затраты, так как вы платите только за ресурсы, которые требуются для рабочих нагрузок на каждый час.

Чтобы получить краткую оценочную стоимость рабочей нагрузки, используйте Калькулятор емкости Cosmos DB.

Дополнительные сведения см. в разделе "затраты" в Microsoft Azure Well-Architected Framework.

Рекомендации по развертыванию

Для критически важных рабочих процессов автоматизации, которые управляют поведением приложения, развертывание с нулевым временем простоя должно быть выполнено с помощью эффективного конвейера DevOps. Дополнительные сведения см. в статье развертывание серверного внутреннего сервера.

Если автоматизация охватывает несколько приложений, следует защитить ресурсы, необходимые для автоматизации, в отдельной группе ресурсов. Одна группа ресурсов может совместно использоваться службой автоматизации и ресурсами приложения, если автоматизация охватывает одно приложение.

Если рабочий процесс включает несколько функций автоматизации, сгруппируйте функции, адаптируются один сценарий в одном приложении-функции. Дополнительные сведения см. в статье Управление приложением функции .

При развертывании приложения необходимо его отслеживать. Используйте Application Insights , чтобы позволить разработчикам отслеживать производительность и обнаруживать проблемы.

Дополнительные сведения см. в подразделе DevOps статьи Microsoft Azure Well-Architected Framework.

Развертывание решения

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

Дальнейшие действия

Дополнительные сведения о реализациях бессерверных реализаций.