Поделиться через


Краткое руководство: Запуск запланированных задач с помощью функций Azure

В этой статье вы используете Azure Developer CLI (azd), чтобы создать функцию триггера таймера для запуска запланированной задачи в Azure Functions. После локальной проверки кода вы развернете его в новом бессерверном функциональном приложении, которое создается в плане Flex Consumption в Azure Functions.

Источник проекта используется azd для создания приложения-функции и связанных ресурсов и развертывания кода в Azure. Это развертывание следует текущим рекомендациям по безопасным и масштабируемым Функции Azure развертываниям.

По умолчанию, план потребления Flex следует модели выставления счетов с оплатой за то, что вы используете, что означает, что вы можете закончить чтение этой статьи и это будет стоить вам всего несколько центов США или меньше в вашей учетной записи Azure.

Это важно

Хотя выполнение запланированных задач поддерживается для всех языков, этот сценарий краткого руководства в настоящее время содержит только примеры для C#, Python и TypeScript. Чтобы завершить работу с этим кратким руководством, выберите один из этих поддерживаемых языков в верхней части статьи.

Предпосылки

  • Node.js 22 или более поздней версии

Инициализируйте проект

azd init Используйте команду для создания локального проекта кода Функций Azure из шаблона.

  1. В локальном терминале или командной строке выполните следующую azd init команду в пустой папке:

    azd init --template functions-quickstart-dotnet-azd-timer -e scheduled-dotnet
    

    Эта команда извлекает файлы проекта из репозитория шаблонов и инициализирует проект в текущей папке. Флаг -e задает имя текущей среды. В azd среде поддерживается уникальный контекст развертывания для вашего приложения, и вы можете определить более одного контекста. Имя среды также используется в имени группы ресурсов, создаваемой в Azure.

  2. Выполните следующую команду, чтобы перейти к папке приложения:

    cd src
    
  3. Создайте файл с именемlocal.settings.json в папке src , содержащей эти данные JSON:

    {
        "IsEncrypted": false,
        "Values": {
            "AzureWebJobsStorage": "UseDevelopmentStorage=true",
            "FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated",
            "TIMER_SCHEDULE": "*/30 * * * * *"
        }
    }
    

    Этот файл требуется при локальном запуске.

  1. В локальном терминале или командной строке выполните следующую azd init команду в пустой папке:

    azd init --template functions-quickstart-typescript-azd-timer -e scheduled-ts
    

    Эта команда извлекает файлы проекта из репозитория шаблонов и инициализирует проект в текущей папке. Флаг -e задает имя текущей среды. В azd среде поддерживается уникальный контекст развертывания для вашего приложения, и вы можете определить более одного контекста. Имя среды также используется в имени группы ресурсов, создаваемой в Azure.

  2. Создайте файл с именемlocal.settings.json в папке src , содержащей эти данные JSON:

    {
        "IsEncrypted": false,
        "Values": {
            "AzureWebJobsStorage": "UseDevelopmentStorage=true",
            "FUNCTIONS_WORKER_RUNTIME": "node",
            "TIMER_SCHEDULE": "*/30 * * * * *"
        }
    }
    

    Этот файл требуется при локальном запуске.

  1. В локальном терминале или командной строке выполните следующую azd init команду в пустой папке:

    azd init --template functions-quickstart-python-azd-timer -e scheduled-py
    

    Эта команда извлекает файлы проекта из репозитория шаблонов и инициализирует проект в текущей папке. Флаг -e задает имя текущей среды. В azd среде поддерживается уникальный контекст развертывания для вашего приложения, и вы можете определить более одного контекста. Имя среды также используется в имени группы ресурсов, создаваемой в Azure.

  2. Создайте файл с именемlocal.settings.json в папке src , содержащей эти данные JSON:

    {
        "IsEncrypted": false,
        "Values": {
            "AzureWebJobsStorage": "UseDevelopmentStorage=true",
            "FUNCTIONS_WORKER_RUNTIME": "python",
            "TIMER_SCHEDULE": "*/30 * * * * *"
        }
    }
    

    Этот файл требуется при локальном запуске.

Создание и активация виртуальной среды

В корневой папке выполните следующие команды, чтобы создать и активировать виртуальную среду с именем .venv:

python3 -m venv .venv
source .venv/bin/activate

Если Python не устанавливает пакет venv в дистрибутиве Linux, выполните следующую команду:

sudo apt-get install python3-venv

Запуск в локальной среде

  1. Выполните следующую команду из папки приложения в терминале или командной строке:

    func start
    
  1. Выполните следующую команду из папки приложения в терминале или командной строке:

    npm install
    npm start  
    
  1. Когда узел Функций запускается в локальной папке проекта, он записывает сведения о активированной функции таймера в выходные данные терминала. Функция таймера должна выполняться в зависимости от расписания, определенного в коде.

    Расписание по умолчанию — */30 * * * * *, которое выполняется каждые 30 секунд.

  2. По завершении нажмите клавиши CTRL+C в окне терминала, чтобы остановить func.exe процесс узла.

  1. Выполните команду deactivate , чтобы завершить работу виртуальной среды.

Просмотр кода (необязательно)

Вы можете просмотреть код, определяющий функцию триггера таймера:

using Microsoft.Azure.Functions.Worker;
using Microsoft.Azure.Functions.Worker.Extensions.Timer;
using Microsoft.Extensions.Logging;

namespace Company.Function
{
    public class timerFunction
    {
        private readonly ILogger _logger;

        public timerFunction(ILoggerFactory loggerFactory)
        {
            _logger = loggerFactory.CreateLogger<timerFunction>();
        }

        [Function("timerFunction")]
        public void Run(
            [TimerTrigger("%TIMER_SCHEDULE%", RunOnStartup = true)] TimerInfo myTimer,
            FunctionContext context
        )
        {
            _logger.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");

            if (myTimer.IsPastDue)
            {
                _logger.LogWarning("The timer is running late!");
            }
        }
    }
}

Вы можете просмотреть полный проект шаблона здесь.

import { app, InvocationContext, Timer } from '@azure/functions';

export async function timerFunction(myTimer: Timer, context: InvocationContext): Promise<void> {
    context.log(`TypeScript Timer trigger function executed at: ${new Date().toISOString()}`);

    if (myTimer.isPastDue) {
        context.warn("The timer is running late!");
    }
}

app.timer('timerFunction', {
    schedule: '%TIMER_SCHEDULE%',
    runOnStartup: true,
    handler: timerFunction
});

Вы можете просмотреть полный проект шаблона здесь.

import datetime
import logging

import azure.functions as func

# Create the function app instance
app = func.FunctionApp()

@app.timer_trigger(schedule="%TIMER_SCHEDULE%", 
                   arg_name="mytimer", 
                   run_on_startup=True,
                   use_monitor=False) 
def timer_function(mytimer: func.TimerRequest) -> None:
    utc_timestamp = datetime.datetime.now(datetime.timezone.utc).isoformat()
    
    logging.info(f'Python timer trigger function executed at: {utc_timestamp}')
    
    if mytimer.past_due:
        logging.warning('The timer is running late!')

Вы можете просмотреть полный проект шаблона здесь.

После локальной проверки функции пора опубликовать ее в Azure.

Развертывание в Azure

Этот проект настроен на использование команды azd up для развертывания вашего кода в новом функциональном приложении в плане Flex Consumption в Azure.

Подсказка

Этот проект включает набор файлов Bicep, используемых azd для создания безопасного развертывания в плане потребления Flex, который следует рекомендациям.

  1. Выполните следующую команду, чтобы azd создать необходимые ресурсы Azure в Azure и развернуть проект кода в новом приложении-функции:

    azd up
    

    Корневая папка содержит файл определения, необходимый azure.yamlazd.

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

  2. При появлении запроса укажите следующие необходимые параметры развертывания:

    Параметр Description
    Подписка Azure Подписка, в которой создаются ресурсы.
    Расположение Azure Регион Azure, в котором создается группа ресурсов, содержащая новые ресурсы Azure. Отображаются только регионы, поддерживающие план потребления Flex.

    Команда azd up использует ответ на эти запросы с файлами конфигурации Bicep для выполнения следующих задач развертывания:

    • Создайте и настройте эти необходимые ресурсы Azure (эквивалентно azd provision):

      • План потребления и приложение-функция Flex
      • служба хранилища Azure (обязательно) и Application Insights (рекомендуется)
      • Политики и роли доступа для учетной записи
      • Подключения между службами с помощью управляемых удостоверений (вместо хранимых строка подключения)
      • Виртуальная сеть для безопасного запуска приложения-функции и других ресурсов Azure
    • Упаковайте и разверните код в контейнере развертывания (эквивалентно azd deploy). Затем приложение запускается и запускается в развернутом пакете.

    После успешного завершения команды вы увидите ссылки на созданные ресурсы.

Проверка развертывания

После завершения развертывания функция триггера таймера автоматически запускается в Azure на основе расписания.

  1. На портале Azure перейдите к новому приложению-функции.

  2. Выберите поток журнала в меню слева, чтобы отслеживать выполнение функции в режиме реального времени.

  3. Вы увидите записи журнала, которые показывают функцию триггера таймера, выполняемую в соответствии с расписанием.

Повторное развертывание кода

Выполните команду azd up столько раз, сколько потребуется, чтобы развернуть обновления кода в функции-приложении и настроить ресурсы Azure.

Замечание

Развернутые файлы кода всегда перезаписываются последним пакетом развертывания.

Исходные ответы на azd запросы и любые переменные среды, созданные с помощью azd , хранятся локально в именованной среде. azd env get-values Используйте команду, чтобы просмотреть все переменные в вашей среде, которые использовались при создании ресурсов Azure.

Очистите ресурсы

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

azd down --no-prompt

Замечание

Параметр --no-prompt указывает azd удалить группу ресурсов без подтверждения.

Эта команда не влияет на локальный проект кода.