Partilhar via


Início Rápido: Executar tarefas agendadas usando o Azure Functions

Neste artigo, utiliza a CLI do Azure Developer (azd) para criar uma função de gatilho de temporizador para executar uma tarefa programada no Azure Functions. Depois de verificar o código localmente, desdobra-o numa nova aplicação de função sem servidor que cria a correr num plano de Consumo Flex no Azure Functions.

O código-fonte do projeto utiliza azd para criar a aplicação de funções e os recursos relacionados e para desplegar o seu código no Azure. Essa implantação segue as práticas recomendadas atuais para implantações seguras e escaláveis do Azure Functions.

Por defeito, o plano Flex Consumption segue um modelo de faturação de pagamento pelo que usar , o que significa que pode completar este artigo e apenas incorrer num pequeno custo de alguns cêntimos USD ou menos na sua conta Azure.

Importante

Embora a execução de tarefas agendadas seja suportada para todas as linguagens, este cenário de início rápido atualmente só tem exemplos para C#, Python e TypeScript. Para completar este quickstart, selecione uma destas línguas suportadas no topo do artigo.

Pré-requisitos

Inicializar o projeto

Use o azd init comando para criar um projeto de código local do Azure Functions a partir de um modelo.

  1. No terminal local ou prompt de comando, execute este azd init comando em uma pasta vazia:

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

    Este comando extrai os arquivos de projeto do repositório de modelos e inicializa o projeto na pasta atual. O -e sinalizador define um nome para o ambiente atual. No azd, o ambiente mantém um contexto de implantação exclusivo para seu aplicativo e você pode definir mais de um. O nome do ambiente também é usado no nome do grupo de recursos que crias no Azure.

  2. Execute este comando para navegar até à pasta da app:

    cd src
    
  3. Crie um arquivo chamado local.settings.json na src pasta que contém esses dados JSON:

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

    Esse arquivo é necessário quando executado localmente.

  1. No terminal local ou prompt de comando, execute este azd init comando em uma pasta vazia:

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

    Este comando extrai os arquivos de projeto do repositório de modelos e inicializa o projeto na pasta atual. O -e sinalizador define um nome para o ambiente atual. No azd, o ambiente mantém um contexto de implantação exclusivo para seu aplicativo e você pode definir mais de um. O nome do ambiente também é usado no nome do grupo de recursos que crias no Azure.

  2. Crie um arquivo chamado local.settings.json na src pasta que contém esses dados JSON:

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

    Esse arquivo é necessário quando executado localmente.

  1. No terminal local ou prompt de comando, execute este azd init comando em uma pasta vazia:

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

    Este comando extrai os arquivos de projeto do repositório de modelos e inicializa o projeto na pasta atual. O -e sinalizador define um nome para o ambiente atual. No azd, o ambiente mantém um contexto de implantação exclusivo para seu aplicativo e você pode definir mais de um. O nome do ambiente também é usado no nome do grupo de recursos que crias no Azure.

  2. Crie um arquivo chamado local.settings.json na src pasta que contém esses dados JSON:

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

    Esse arquivo é necessário quando executado localmente.

Criar e ativar um ambiente virtual

Na pasta raiz, execute estes comandos para criar e ativar um ambiente virtual chamado .venv:

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

Se o Python não instalar o pacote venv na sua distribuição Linux, execute o seguinte comando:

sudo apt-get install python3-venv

Executar no seu ambiente local

  1. Execute este comando a partir da pasta da sua aplicação num terminal ou linha de comandos:

    func start
    
  1. Execute este comando a partir da pasta da sua aplicação num terminal ou linha de comandos:

    npm install
    npm start  
    
  1. Quando o host das Funções inicia na pasta local do projeto, ele registra informações sobre a função acionada pelo Temporizador no output do terminal. Deverias ver a tua função ativada pelo temporizador a ser executada com base no cronograma definido no teu código.

    O horário padrão é */30 * * * * *, que corre a cada 30 segundos.

  2. Quando terminar, pressione Ctrl+C na janela do terminal para interromper o processo do func.exe host.

  1. Execute deactivate para desligar o ambiente virtual.

Rever o código (opcional)

Pode rever o código que define a função de disparo do temporizador:

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!");
            }
        }
    }
}

Você pode revisar o projeto de modelo completo aqui.

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
});

Você pode revisar o projeto de modelo completo aqui.

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!')

Você pode revisar o projeto de modelo completo aqui.

Depois de verificares a tua função localmente, está na altura de a publicares no Azure.

Publicar no Azure

Este projeto está configurado para usar o azd up comando para implementar o seu código numa nova aplicação de funções num plano Flex Consumption no Azure.

Sugestão

Este projeto inclui um conjunto de arquivos Bicep que azd usa para criar uma implantação segura para um plano de consumo Flex que segue as práticas recomendadas.

  1. Execute este comando para criar azd os recursos necessários do Azure no Azure e implantar seu projeto de código no novo aplicativo de função:

    azd up
    

    A pasta raiz contém o arquivo de azure.yaml definição exigido pelo azd.

    Se já ainda não tiver iniciado sessão, ser-lhe-á solicitado que se autentique com a sua conta Azure.

  2. Quando solicitado, forneça estes parâmetros de implantação necessários:

    Parâmetro Description
    Subscrição do Azure Subscrição na qual os seus recursos são criados.
    localização do Azure Região do Azure na qual criar o grupo de recursos que contém os novos recursos do Azure. Apenas as regiões que atualmente suportam o plano Flex Consumption são mostradas.

    O azd up comando usa sua resposta a esses prompts com os arquivos de configuração do Bicep para concluir estas tarefas de implantação:

    • Crie e configure estes recursos necessários do Azure (equivalentes a azd provision):

      • Plano Flex Consumption e aplicação funcional
      • Armazenamento do Azure (obrigatório) e Application Insights (recomendado)
      • Políticas e funções de acesso para a sua conta
      • Conexões de serviço a serviço usando identidades gerenciadas (em vez de cadeias de conexão armazenadas)
      • Rede virtual para executar com segurança o aplicativo de função e os outros recursos do Azure
    • Empacote e implante seu código no contêiner de implantação (equivalente a azd deploy). O aplicativo é então iniciado e executado no pacote implantado.

    Depois que o comando for concluído com êxito, você verá links para os recursos criados.

Verificar a implementação

Após a implementação concluída, a função de disparo do seu temporizador começa automaticamente a correr no Azure com base no seu calendário.

  1. No portal Azure, vai à tua nova aplicação de funções.

  2. Selecione Log stream no menu esquerdo para monitorizar as execuções das suas funções em tempo real.

  3. Deverias ver entradas de registo que mostram a função de disparo do teu temporizador a ser executada de acordo com o seu calendário.

Reimplantar seu código

Executa o azd up comando tantas vezes quanto precisares tanto para provisionar os teus recursos Azure como para implementar atualizações de código na tua aplicação de funções.

Observação

Os arquivos de código implantados são sempre substituídos pelo pacote de implantação mais recente.

Suas respostas iniciais a azd prompts e quaisquer variáveis de ambiente geradas por azd são armazenadas localmente em seu ambiente nomeado. Use o azd env get-values comando para revisar todas as variáveis em seu ambiente que foram usadas ao criar recursos do Azure.

Limpeza de recursos

Quando terminar de trabalhar com a sua function app e recursos relacionados, use este comando para eliminar a function app e os seus recursos relacionados do Azure e evitar custos adicionais:

azd down --no-prompt

Observação

A --no-prompt opção instrui azd a excluir seu grupo de recursos sem uma confirmação sua.

Este comando não afeta seu projeto de código local.