Udostępnij za pomocą


Szybki start: uruchamianie zaplanowanych zadań przy użyciu usługi Azure Functions

W tym artykule użyjesz interfejsu wiersza polecenia dla deweloperów platformy Azure (azd), aby utworzyć funkcję wyzwalacza czasomierza w celu uruchomienia zaplanowanego zadania w usłudze Azure Functions. Po zweryfikowaniu kodu lokalnie należy wdrożyć go w nowej aplikacji funkcji bezserwerowej utworzonej w planie Flex Consumption w usłudze Azure Functions.

Źródło projektu używa azd do tworzenia aplikacji funkcji i powiązanych zasobów oraz wdrażania kodu w Azure. To wdrożenie jest zgodne z bieżącymi najlepszymi rozwiązaniami dotyczącymi bezpiecznych i skalowalnych wdrożeń usługi Azure Functions.

Domyślnie plan Flex Consumption stosuje model rozliczeń płatności za to, co wykorzystujesz, co pozwala na ukończenie tego artykułu i poniesienie tylko niewielkiego kosztu kilku centów amerykańskich lub mniej na koncie platformy Azure.

Ważne

Uruchamianie zaplanowanych zadań jest obsługiwane dla wszystkich języków, jednak ten scenariusz szybkiego startu zawiera obecnie przykłady tylko dla C#, Python i TypeScript. Aby ukończyć ten szybki start, wybierz jeden z tych obsługiwanych języków u góry artykułu.

Wymagania wstępne

Inicjowanie projektu

Użyj polecenia , azd init aby utworzyć lokalny projekt kodu usługi Azure Functions na podstawie szablonu.

  1. W lokalnym terminalu lub wierszu polecenia uruchom to azd init polecenie w pustym folderze:

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

    To polecenie ściąga pliki projektu z repozytorium szablonów i inicjuje projekt w bieżącym folderze. Flaga -e ustawia nazwę bieżącego środowiska. W azd środowisko systemowe zapewnia unikatowy kontekst wdrażania dla twojej aplikacji i można zdefiniować więcej niż jeden z nich. Nazwa środowiska jest również używana w nazwie grupy zasobów utworzonej na platformie Azure.

  2. Uruchom to polecenie, aby przejść do folderu aplikacji:

    cd src
    
  3. Utwórz plik o nazwie local.settings.json w src folderze zawierającym te dane JSON:

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

    Ten plik jest wymagany podczas uruchamiania lokalnego.

  1. W lokalnym terminalu lub wierszu polecenia uruchom to azd init polecenie w pustym folderze:

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

    To polecenie ściąga pliki projektu z repozytorium szablonów i inicjuje projekt w bieżącym folderze. Flaga -e ustawia nazwę bieżącego środowiska. W azd środowisko systemowe zapewnia unikatowy kontekst wdrażania dla twojej aplikacji i można zdefiniować więcej niż jeden z nich. Nazwa środowiska jest również używana w nazwie grupy zasobów utworzonej na platformie Azure.

  2. Utwórz plik o nazwie local.settings.json w src folderze zawierającym te dane JSON:

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

    Ten plik jest wymagany podczas uruchamiania lokalnego.

  1. W lokalnym terminalu lub wierszu polecenia uruchom to azd init polecenie w pustym folderze:

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

    To polecenie ściąga pliki projektu z repozytorium szablonów i inicjuje projekt w bieżącym folderze. Flaga -e ustawia nazwę bieżącego środowiska. W azd środowisko systemowe zapewnia unikatowy kontekst wdrażania dla twojej aplikacji i można zdefiniować więcej niż jeden z nich. Nazwa środowiska jest również używana w nazwie grupy zasobów utworzonej na platformie Azure.

  2. Utwórz plik o nazwie local.settings.json w src folderze zawierającym te dane JSON:

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

    Ten plik jest wymagany podczas uruchamiania lokalnego.

Tworzenie i aktywowanie środowiska wirtualnego

W folderze głównym uruchom następujące polecenia, aby utworzyć i aktywować środowisko wirtualne o nazwie .venv:

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

Jeśli język Python nie instaluje pakietu venv w dystrybucji systemu Linux, uruchom następujące polecenie:

sudo apt-get install python3-venv

Uruchamianie w środowisku lokalnym

  1. Uruchom to polecenie z folderu aplikacji w terminalu lub wierszu polecenia:

    func start
    
  1. Uruchom to polecenie z folderu aplikacji w terminalu lub wierszu polecenia:

    npm install
    npm start  
    
  1. Gdy host usługi Functions zostanie uruchomiony w lokalnym folderze projektu, zapisuje informacje o funkcji wyzwalanej przez czasomierz w danych wyjściowych terminalu. Powinieneś zobaczyć wykonanie funkcji wyzwolonej przez timer zgodnie z harmonogramem określonym w kodzie.

    Domyślny harmonogram to */30 * * * * *, który jest uruchamiany co 30 sekund.

  2. Po zakończeniu naciśnij Ctrl+C w oknie terminalu func.exe , aby zatrzymać proces hosta.

  1. Uruchom polecenie deactivate , aby zamknąć środowisko wirtualne.

Przejrzyj kod (opcjonalnie)

Możesz przejrzeć kod definiujący funkcję wyzwalacza czasomierza:

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

Pełny projekt szablonu można przejrzeć tutaj.

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

Pełny projekt szablonu można przejrzeć tutaj.

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

Pełny projekt szablonu można przejrzeć tutaj.

Po zweryfikowaniu funkcji lokalnie nadszedł czas, aby opublikować ją na platformie Azure.

Wdrażanie na platformie Azure

Ten projekt jest skonfigurowany do używania polecenia azd up do wdrożenia kodu w nowej aplikacji funkcji w planie Flex Consumption na platformie Azure.

Wskazówka

Ten projekt zawiera zestaw plików Bicep używanych azd do tworzenia bezpiecznego wdrożenia w planie zużycia Flex, który jest zgodny z najlepszymi rozwiązaniami.

  1. Uruchom to polecenie, aby azd utworzyć wymagane zasoby platformy Azure na platformie Azure i wdrożyć projekt kodu w nowej aplikacji funkcji:

    azd up
    

    Folder główny zawiera azure.yaml plik definicji wymagany przez azdprogram .

    Jeśli jeszcze nie zalogowano się, zostanie wyświetlony monit o uwierzytelnienie przy użyciu konta platformy Azure.

  2. Po wyświetleniu monitu podaj następujące wymagane parametry wdrożenia:

    Parameter Description
    Subskrypcja platformy Azure Subskrypcja, w której są tworzone zasoby.
    Lokalizacja platformy Azure Region platformy Azure, w którym ma zostać utworzona grupa zasobów zawierająca nowe zasoby platformy Azure. Wyświetlane są tylko regiony, które obecnie obsługują plan Flex Consumption.

    Polecenie azd up używa odpowiedzi na te monity z plikami konfiguracji Bicep, aby wykonać następujące zadania wdrażania:

    • Utwórz i skonfiguruj te wymagane zasoby platformy Azure (równoważne ):azd provision

      • Flex Consumption plan i aplikacja funkcji
      • Azure Storage (wymagane) i Application Insights (zalecane)
      • Zasady dostępu i role dla twojego konta
      • Połączenia między usługami przy użyciu tożsamości zarządzanych (zamiast przechowywanych parametry połączenia)
      • Sieć wirtualna do bezpiecznego uruchamiania aplikacji funkcji i innych zasobów platformy Azure
    • Spakuj i wdróż kod w kontenerze wdrażania (odpowiednik azd deploy). Aplikacja jest następnie uruchamiana i uruchamiana w wdrożonym pakiecie.

    Po pomyślnym zakończeniu działania polecenia zobaczysz linki do utworzonych zasobów.

Weryfikowanie wdrożenia

Po zakończeniu wdrażania funkcja wyzwalacza czasomierza automatycznie uruchamia się na platformie Azure na podstawie harmonogramu.

  1. W portalu Azure przejdź do swojej nowej aplikacji funkcji.

  2. Wybierz Strumień logów z menu po lewej stronie, aby monitorować wykonywanie funkcji w czasie rzeczywistym.

  3. Powinny zostać wyświetlone wpisy dziennika, które pokazują funkcję wyzwalacza czasomierza wykonywaną zgodnie z harmonogramem.

Ponowne wdrażanie kodu

azd up Uruchom polecenie tyle razy, ile potrzebujesz, aby aprowizować zasoby platformy Azure i wdrażać aktualizacje kodu w aplikacji funkcji.

Uwaga / Notatka

Wdrożone pliki kodu są zawsze zastępowane przez najnowszy pakiet wdrożeniowy.

Początkowe odpowiedzi na azd monity i wszystkie zmienne środowiskowe wygenerowane przez azd program są przechowywane lokalnie w nazwanym środowisku. Użyj polecenia , azd env get-values aby przejrzeć wszystkie zmienne w środowisku, które zostały użyte podczas tworzenia zasobów platformy Azure.

Uprzątnij zasoby

Po zakończeniu pracy z aplikacją funkcji i powiązanymi zasobami użyj tego polecenia, aby usunąć aplikację funkcji i powiązane z nią zasoby z platformy Azure i uniknąć ponoszenia dodatkowych kosztów:

azd down --no-prompt

Uwaga / Notatka

Opcja --no-prompt powoduje azd usunięcie grupy zasobów bez potwierdzenia.

To polecenie nie ma wpływu na lokalny projekt kodu.