Microsoft AZ-204: Azure Functions и бессерверные вычисления — Руководство по подготовке
Часть Microsoft Azure Developer Associate AZ-204 — Руководство по подготовке. Практикуйтесь с проверенными ответами в центре экзаменов Microsoft, или пройдите тесты на время на ExamRoll.io.
Обзор
Azure Functions — это бессерверная вычислительная служба, оптимизированная для нагрузок, управляемых событиями, и краткосрочных рабочих нагрузок. Она абстрагирует инфраструктуру, позволяя вам сосредоточиться на коде, который реагирует на события от конечных точек HTTP, очередей, BLOB-объектов, каналов изменений данных и потоковых служб. Вы выбираете план хостинга, который определяет масштабирование, цены и поведение при холодном запуске; привязываете свой код к триггерам и источникам данных с помощью декларативных привязок; и при необходимости создаете длительные и надежные рабочие процессы с помощью Durable Functions. Надежная конфигурация, воспроизводимое развертывание и глубокая наблюдаемость с помощью Application Insights дополняют платформу для создания систем производственного уровня.
Планы хостинга, масштабирование и холодные запуски
Выбор плана хостинга определяет характеристики выполнения и стоимость.
План потребления (Consumption):
- Масштабирование и цены: Оплата за каждое выполнение и потребление ресурсов. Платформа автоматически масштабируется в зависимости от событий. Количество экземпляров масштабируется до нуля в периоды простоя.
- Ограничения выполнения: Тайм-аут функции настраивается до 10 минут для функций, не являющихся HTTP; для HTTP-функций практические тайм-ауты короче из-за особенностей клиентского подключения.
- Холодный запуск: Холодные запуски происходят после периодов простоя или при горизонтальном масштабировании, когда инициализируются новые экземпляры. Время запуска зависит от языка, зависимостей и размера приложения.
- Сеть/возможности: По умолчанию поддерживаются публичные сети. Ограниченный набор функций по сравнению с планом Premium (например, нет интеграции с VNET). Слоты развертывания недоступны.
План Premium:
- Масштабирование и цены: Масштабируется в зависимости от событий, но поддерживает «предварительно разогретые» экземпляры для устранения холодных запусков. Оплата взимается за секунды работы ядра и выделенную память для активных и предварительно разогретых экземпляров.
- Ограничения выполнения: Практически неограниченная продолжительность выполнения (с учетом ограничений HTTP-клиента). Рекомендуется для чувствительных к задержкам или более тяжелых рабочих нагрузок.
- Смягчение холодного запуска: Предварительно разогретые экземпляры поддерживают среду выполнения в «горячем» состоянии. Вы контролируете количество предварительно разогретых экземпляров на план, обеспечивая предсказуемую задержку при пиковых нагрузках.
- Сеть/возможности: Поддерживаются интеграция с VNET, приватные конечные точки, увеличенные размеры экземпляров и слоты развертывания.
Выделенный план (App Service):
- Масштабирование и цены: Выполняется на выделенных экземплярах App Service с правилами ручного или автоматического масштабирования. Вы платите за базовый план App Service независимо от его использования.
- Ограничения выполнения: Нет ограничений по времени выполнения со стороны платформы для фонового выполнения. Идеально, если у вас уже есть свободные ресурсы App Service или требуется стабильная производительность.
- Смягчение холодного запуска: Включите Always On, чтобы приложение всегда было загружено. Нет масштабирования до нуля; экземпляры остаются «теплыми».
Выбирайте план Consumption для оптимизированных по стоимости спорадических рабочих нагрузок, Premium — при требованиях к низкой задержке и интеграции с VNET, и Dedicated — при консолидации с существующими ресурсами App Service или когда требуется полный контроль. Для сверхнизкой задержки план Premium с предварительно разогретыми экземплярами или Dedicated с Always On уменьшает количество холодных запусков. Чтобы еще больше минимизировать влияние холодного запуска, сократите зависимости, используйте запуск из пакета (run-from-package) и инициализируйте клиенты отложенно (lazily).
Триггеры и привязки
Функции активируются триггерами и взаимодействуют с данными через привязки. Триггеры определяют, как и когда запускается функция. Привязки декларативно подключаются к внешним сервисам для ввода/вывода без использования императивного кода SDK.
Распространенные триггеры:
- HTTP-триггер: Предоставляет конечные точки для API в стиле REST или веб-хуков. Уровни авторизации включают Anonymous, Function и Admin, которые применяются с помощью ключей или аутентификации платформы. Учитывайте идемпотентность и таймауты для длительных задач; при необходимости переносите их в очередь или в Durable Functions.
- Триггер по таймеру: Расписания на основе CRON выполняются на одном экземпляре для каждого приложения (на каждый таймер). Используйте выражения NCRONTAB с настройкой часового пояса. Идеально подходит для задач обслуживания, опроса и очистки.
- Триггер очереди Azure Storage: Реагирует на сообщения в очереди. Поддерживает обработку сообщений-отравлений (poison messages) с помощью очереди с суффиксом -poison после превышения порога количества извлечений. Настройте размер пакета, таймаут видимости и параллелизм через
host.json. - Триггер хранилища BLOB-объектов Azure: Реагирует на события создания/обновления BLOB-объектов, используя комбинацию опроса и уведомлений Event Grid. Используйте шаблоны путей для ограничения области действия контейнерами и префиксами. Понимайте принципы согласованности в конечном счете и поведение при повторных попытках для загрузки больших BLOB-объектов.
- Триггер Azure Event Hubs: Потребляет потоки событий с высокой пропускной способностью с созданием контрольных точек (checkpointing). Настройте параллелизм секций, размер пакета и предварительную выборку (prefetch) для повышения пропускной способности. Подходит для обработки телеметрии и потоковых данных с сохранением порядка в пределах секции.
- Триггер Azure Service Bus: Поддерживает очередь или подписку на раздел (topic). Настройте поведение
maxConcurrentCalls,prefetchиauto-complete. Очереди недоставленных сообщений (dead-letter queues) собирают сообщения, превысившие количество попыток доставки, для последующего анализа. - Триггер Azure Cosmos DB: Прослушивает канал изменений (change feed) на предмет вставок и обновлений. Масштабируется в зависимости от количества физических секций; обеспечьте достаточное выделение RU (единиц запросов). Используйте коллекцию аренд (leases collection) для координации горизонтального масштабирования между экземплярами.
Привязки:
- Входные привязки: Поставляют данные в функцию, например, содержимое BLOB-объекта, сущность таблицы, документы Cosmos DB или метаданные сообщения из очереди. В .NET привязка определяется атрибутами (например, [BlobInput]) или в
function.json; в других языках конфигурация является декларативной. - Выходные привязки: Записывают данные без использования SDK, например, добавляют сообщение в очередь, создают BLOB-объект, отправляют в Event Hub/Service Bus или записывают в Cosmos DB. Функции могут иметь несколько выходных привязок или возвращать один вывод из сигнатуры функции.
- Выражения привязок: Параметризуют детали подключения и пути с помощью заполнителей (placeholders), например,
{queueTrigger},{rand-guid}, и настроек приложения на основе окружения. Свойства подключения ссылаются на имена настроек приложения, что позволяет осуществлять ротацию и управление секретами. Предпочитайте подключения на основе удостоверений с использованием управляемого удостоверения (managed identity), где это поддерживается, чтобы избежать встраивания секретов. - Параллелизм и пакетная обработка: Управляйте параллелизмом и размерами пакетов в
host.jsonдля каждого расширения (queues, serviceBus, eventHub), чтобы настроить пропускную способность и использование памяти. Проверяйте обработку сообщений-отравлений/недоставленных сообщений, чтобы убедиться, что сбои корректно обрабатываются.
Проектируйте триггеры и привязки с учетом идемпотентности, противодавления (backpressure) и изоляции сбоев. Для источников с доставкой «как минимум один раз» (at-least-once) (очереди, Event Hubs, Service Bus) пишите функции так, чтобы они были идемпотентными и устойчивыми к повторным попыткам.
Durable Functions: надежные шаблоны оркестрации
Durable Functions расширяют Azure Functions, добавляя надежную оркестрацию с отслеживанием состояния для длительных рабочих процессов с использованием фреймворка устойчивых задач (durable task framework).
Типы функций:
- Функции-оркестраторы: Описывают логику рабочего процесса в коде с использованием детерминированных конструкций. Оркестраторы воспроизводят свое состояние при наступлении событий и должны избегать недетерминированных API (DateTime.Now, генерация случайных чисел, сетевые вызовы) без использования соответствующих вспомогательных методов. Используйте клиентские API оркестрации Durable для запуска, запроса состояния и управления экземплярами.
- Функции действий (Activity): Выполняют дискретные единицы работы, такие как вызовы внешних API, операции, интенсивно использующие ЦП, или задачи ввода-вывода. Действия поддерживают повторные попытки и могут масштабироваться независимо.
- Функции сущностей (Entity): Предоставляют устойчивые, адресуемые сущности с небольшим, согласованным состоянием и операциями (например, счетчики, состояние устройства). Сущности обрабатывают сериализованные операции с однопоточной согласованностью.
Шаблоны:
- Цепочка функций: Последовательное выполнение действий в определенном порядке (A → B → C) с передачей результатов следующему. Полезно для конвейеров с зависимостями.
- Развертывание/свертывание (Fan-out/fan-in): Запуск нескольких действий параллельно и агрегация их результатов. Оркестраторы координируют работу с семантикой, подобной
Task.WhenAll. Используйте этот шаблон для параллельной обработки независимых задач. - Взаимодействие с человеком (внешние события): Ожидание внешнего ввода (например, подтверждения) с помощью
WaitForExternalEventс таймаутами и эскалацией. Комбинируйте с устойчивыми таймерами (durable timers) для реализации SLA и логики компенсации. - Асинхронные HTTP API: Запуск оркестрации и возврат ответа
202 Acceptedс URL-адресами для запроса статуса. Клиенты опрашивают конечные точки состояния, предоставляемые привязкой клиента Durable, для получения конечного результата или состояния. - Монитор: Периодические проверки (checkpoints), выполняемые по расписанию, например, опрос конечной точки до тех пор, пока не будет выполнено условие, с использованием устойчивых таймеров (durable timers), чтобы не занимать вычислительные ресурсы.
- Агрегатор/сущность: Хранение небольшого состояния рядом с логикой с помощью функций сущностей для точной координации без полноценного рабочего процесса.
Durable Functions гарантируют выполнение действий «как минимум один раз» (at-least-once) и продвижение состояния оркестратора «ровно один раз» (exactly-once). Они сохраняют состояние в хранилище (по умолчанию это Azure Storage); убедитесь, что учетная запись хранения соответствует требованиям к пропускной способности и надежности. Используйте пользовательские политики повторных попыток для временных сбоев и вызывайте события для внешнего взаимодействия. Для очень длительных процессов оркестрации Durable могут выполняться от нескольких дней до месяцев благодаря встроенной отказоустойчивости.
Конфигурация, развертывание и наблюдаемость
Конфигурация приложения-функции является многоуровневой и зависит от окружения.
- host.json: Управляет поведением среды выполнения и расширений. Настраивает ведение журналов (выборка, уровни логирования), functionTimeout, параметры расширений (размеры пакетов, параллелизм, предварительная выборка) и версию схемы JSON. Храните host.json в системе контроля версий.
- local.settings.json: Параметры для локальной разработки, включая строки подключения и настройки приложения. Не развертывается в Azure. Обращайтесь с секретами надлежащим образом; исключайте их из публичных репозиториев и используйте user-secrets или внедрение через переменные окружения для локальной разработки.
- Параметры приложения: Хранятся в конфигурации приложения-функции (App Service). Критически важные параметры включают AzureWebJobsStorage (для учетной записи хранения, используемой триггерами, журналами и контрольными точками), строки подключения для конкретных расширений и любые пользовательские настройки. Помечайте секреты как параметры слота, чтобы они не перемещались при замене слотов. Используйте ссылки на Key Vault с управляемым удостоверением, чтобы избежать хранения секретов в виде обычного текста.
Варианты развертывания:
- Развертывание из ZIP-архива (Zip Deploy): Загрузка ZIP-архива с вашими артефактами сборки в приложение. Быстрый и простой способ для CI/CD. Используйте
undefined
или API zipdeploy. Файлы записываются в каталог контента.
- Выполнение из пакета (Run-From-Package): Установите для
undefined
URL-адрес пакета (или 1 для последней версии). Среда выполнения монтирует пакет в режиме только для чтения, что улучшает холодный запуск и устраняет проблемы с блокировкой файлов во время развертывания. Храните пакет в Blob Storage с SAS URL для воспроизводимых откатов.
- Слоты развертывания: Промежуточный (staging) и рабочий (production) слоты позволяют выполнять замены без простоя с предварительным прогревом. Слоты поддерживаются в планах Premium и Dedicated. Настраивайте параметры для конкретного слота (флаг “параметр слота”) для секретов и конечных точек, чтобы предотвратить утечку данных между окружениями. Используйте прогрев перед заменой (preSwap warmup) для проверки расширений и привязок до перенаправления трафика.
Мониторинг с помощью Application Insights:
- Журналы вызовов: Каждый вызов функции генерирует структурированную телеметрию, включая запросы (Requests), трассировки (Traces), исключения (Exceptions) и зависимости (Dependencies). Используйте ILogger (или эквивалент) для структурированных журналов. Идентификаторы операций и корреляции связывают действия и зависимости между сервисами.
- Динамические метрики (Live Metrics): Представление в реальном времени пропускной способности, сбоев и задержек без выборки. Полезно для наблюдения за развертываниями, масштабированием и “горячими путями”. Фильтруйте по имени функции для изоляции проблем.
- Сбои и надежность: Анализируйте исключения (Exceptions), неудачные запросы (Requests) и сбои зависимостей. Настраивайте оповещения по частоте сбоев, аномалиям FunctionExecutionCount или росту очереди недоставленных/вредоносных сообщений (DLQ/poison queue). Для триггеров Storage Queue отслеживайте очередь
-poison; для Service Bus/Event Hubs отслеживайте работоспособность очереди недоставленных сообщений и контрольных точек. Настраивайте политики повторных попыток и экспоненциальной задержки в host.json, чтобы уменьшить влияние временных ошибок. - Распределенная трассировка: Включите заголовки трассировки W3C для распространения корреляции через HTTP и обмен сообщениями. В Durable Functions фреймворк связывает телеметрию оркестрации и действий, что помогает в сквозной диагностике. Регулируйте выборку для баланса между стоимостью и детализацией.
Управляйте функциями с помощью автоматизации развертывания (GitHub Actions/Azure Pipelines), проб работоспособности для конечных точек HTTP и настроек, учитывающих автомасштабирование. Делайте пакеты компактными, кэшируйте клиенты (например, HttpClient, клиент Service Bus) как статические одноэлементные объекты (singletons) и проверяйте, что параметры подключения привязок разрешаются при запуске, чтобы предотвратить сбои во время выполнения.
Практический сценарий
Компания Contoso Retail запускает сервис промоакций, который применяет скидки в реальном времени, когда покупатели добавляют товары в корзину. Бэкенд должен реагировать на трафик с высокой вариативностью при низкой задержке, вызывать сторонний API для ценообразования и обновлять документ корзины в Cosmos DB. Отдел эксплуатации требует развертываний без простоя и глубокой видимости сбоев.
- Выберите план хостинга и структурируйте приложение
- Используйте план Azure Functions Premium с двумя предварительно подготовленными экземплярами и интеграцией с VNET. План Premium устраняет холодные запуски для чувствительных к задержке взаимодействий с корзиной и защищает исходящий трафик к стороннему API через NAT или брандмауэр в VNET.
- Создайте одно приложение-функцию с функцией, запускаемой по HTTP, для конечной точки корзины и оркестратором Durable Functions для координации получения скидок и обновления корзины.
- Реализуйте оркестрацию Durable Functions для надежности и параллелизма
- Функция-оркестратор: Последовательно выполняет шаги для проверки входных данных, разветвляется (fan out) для параллельного получения скидок для каждой позиции в корзине с помощью функций действий, а затем сводится (fan in) для агрегации лучшей цены. Оркестрация Durable Functions обеспечивает детерминированный поток управления и устойчивость к перезапускам.
- Функции действий: Одно действие вызывает сторонний API с политиками повторных попыток; другое обновляет корзину в Cosmos DB через выходную привязку. Действия инкапсулируют внешний ввод-вывод и могут быть повторно выполнены независимо, без дублирования логики оркестратора.
- Настройте триггеры и привязки для простоты
- HTTP-триггер с аутентификацией Function для приема подписанных запросов от веб-фронтенда. Возвращайте 202 с URL-адресом статуса для длительных операций с корзиной или 200 для быстрых путей.
- Выходная привязка Cosmos DB на действии для операции upsert документа корзины. Выражения привязки используют cartId из полезной нагрузки HTTP для указания правильного ключа секции.
- Используйте управляемое удостоверение и подключения на основе удостоверений для Cosmos DB и ссылок на Key Vault, удаляя секреты из настроек приложения.
- Оптимизируйте конфигурацию и развертывание
- В host.json установите functionTimeout на неограниченное значение (для плана Premium) и настройте HTTP-тайм-ауты, совместимые с service mesh. Уровни логирования настроены на Information для продакшена, а выборка (Samples) установлена на 20% для контроля затрат.
- Используйте выполнение из пакета (run-from-package) с пакетами, хранящимися в версионированном контейнере Blob. Развертывайте через CI с помощью
undefined
и выполняйте замену через промежуточный слот в рабочий для релизов без простоя. Помечайте строки подключения и конечные точки API как параметры слота, чтобы избежать утечки данных между окружениями.
- Мониторинг и эксплуатация
- Включите Application Insights и Live Metrics для отслеживания пропускной способности и задержки во время релизов. Настройте оповещения на HTTP 5xx, частоту сбоев зависимостей к API ценообразования и увеличение числа неудачных оркестраций Durable Functions.
- Используйте распределенную трассировку для корреляции HTTP-запроса с оркестрацией Durable Functions и зависимостями действий, что ускоряет анализ первопричин для периодически возникающих проблем со сторонними сервисами.
Почему были выбраны эти решения:
- План Premium с предварительно подготовленными экземплярами обеспечивает стабильно низкую задержку и поддерживает интеграцию с VNET для безопасного исходящего трафика.
- Durable Functions предоставляет надежное последовательное выполнение и веерное развертывание/сбор (fan-out/fan-in) с автоматическим управлением состоянием и повторными попытками для вызовов внешних API.
- Привязки уменьшают количество шаблонного кода и обеспечивают последовательный, декларативный доступ к данным в Cosmos DB.
- Выполнение из пакета (Run-from-package) и слоты обеспечивают повторяемые, атомарные развертывания без проблем с блокировкой файлов или простоев.
- Application Insights предлагает наблюдаемость в реальном времени, корреляцию и оповещения, соответствующие операционным SLA.
← Azure App Service и веб-приложения · Все домены · Azure Storage и хранилище BLOB-объектов →
Отработать эти вопросы → · Тесты на время на ExamRoll.io →
Pass the whole exam — not just this question
You found this answer. Get every verified question and explanation in one place, and save hours of prep. Free to start.
Сдайте экзамен →