Szybki start: tworzenie bezserwerowego przepływu pracy przy użyciu Durable Functions

W tym przewodniku szybkiego startu użyjesz narzędzi wiersza polecenia dla deweloperów platformy Azure do utworzenia bezserwerowego przepływu pracy, który koordynuje wiele zadań uruchomionych równolegle. Tworzysz zasoby w Azure, weryfikujesz kod lokalnie, a następnie wdrażasz go w nowej aplikacji bezserwerowej działającej w planie Flex Consumption w Azure Functions.

Projekt używa interfejsu wiersza polecenia dla deweloperów platformy Azure (azd), aby uprościć wdrażanie kodu na platformie Azure. To wdrożenie jest zgodne z bieżącymi najlepszymi rozwiązaniami dotyczącymi bezpiecznych i skalowalnych wdrożeń usługi Azure Functions. Ten szybki start przedstawia wzorzec fan-out/fan-in w usłudze Durable Functions, rozszerzeniu, które organizuje stanowe przepływy pracy z trwałym wykonywaniem. Przykładka wykorzystuje Durable Task Scheduler, w pełni zarządzany backend dla Durable Functions, który zastępuje backend Azure Storage. Przykład pobiera tytuły artykułów równocześnie, przy czym orkiestracja dystrybuuje zadania do wielu działań działających jednocześnie, a następnie gromadzi wyniki w celu ich agregacji.

Domyślnie plan Flex Consumption jest zgodny z modelem rozliczeń pay-for-what-you-use, co oznacza, że ukończenie tego przewodnika szybkiego startu wiąże się z niewielkim kosztem, wynoszącym kilka centów lub mniej na koncie Azure.

Wymagania wstępne

Inicjowanie projektu

Użyj polecenia azd init, aby utworzyć lokalny projekt kodu Durable Functions na podstawie szablonu.

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

    azd init --template durable-functions-quickstart-dotnet-azd -e dfquickstart-dotnet
    

    To polecenie ściąga pliki projektu z repozytorium template i inicjuje projekt w nowym 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 w Azure.

  2. Przejdź do katalogu projektu, a następnie przejdź do folderu fanoutfanin aplikacji:

    cd durable-functions-quickstart-dotnet-azd/fanoutfanin
    
  1. W lokalnym terminalu lub wierszu polecenia uruchom to azd init polecenie w pustym folderze:

    azd init --template durable-functions-quickstart-python-azd -e dfquickstart-python
    

    To polecenie ściąga pliki projektu z repozytorium template i inicjuje projekt w nowym 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 w Azure.

  2. Przejdź do katalogu projektu, a następnie przejdź do folderu src aplikacji:

    cd durable-functions-quickstart-python-azd/src
    
  1. W lokalnym terminalu lub wierszu polecenia uruchom to azd init polecenie w pustym folderze:

    azd init --template durable-functions-quickstart-typescript-azd -e dfquickstart-typescript
    

    To polecenie ściąga pliki projektu z repozytorium template i inicjuje projekt w nowym 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 w Azure.

  2. Przejdź do katalogu projektu, a następnie przejdź do folderu src aplikacji:

    cd durable-functions-quickstart-typescript-azd/src
    
  1. W lokalnym terminalu lub wierszu polecenia uruchom to azd init polecenie w pustym folderze:

    azd init --template durable-functions-quickstart-java-azd -e dfquickstart-java
    

    To polecenie ściąga pliki projektu z repozytorium template i inicjuje projekt w nowym 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 w Azure.

  2. Przejdź do katalogu projektu:

    cd durable-functions-quickstart-java-azd
    
  1. W lokalnym terminalu lub wierszu polecenia uruchom to azd init polecenie w pustym folderze:

    azd init --template durable-functions-quickstart-javascript-azd -e dfquickstart-javascript
    

    To polecenie ściąga pliki projektu z repozytorium template i inicjuje projekt w nowym 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 w Azure.

  2. Przejdź do katalogu projektu, a następnie przejdź do folderu src aplikacji:

    cd durable-functions-quickstart-javascript-azd/src
    
  1. W lokalnym terminalu lub wierszu polecenia uruchom to azd init polecenie w pustym folderze:

    azd init --template durable-functions-quickstart-powershell-azd -e dfquickstart-powershell
    

    To polecenie ściąga pliki projektu z repozytorium template i inicjuje projekt w nowym 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 w Azure.

  2. Przejdź do katalogu projektu, a następnie przejdź do folderu src aplikacji:

    cd durable-functions-quickstart-powershell-azd/src
    

Aprowizuj zasoby platformy Azure

Ten projekt używa polecenia azd provision, aby utworzyć wymagane zasoby platformy Azure, w tym nową aplikację funkcji w planie Flex Consumption, harmonogram Durable Task Scheduler oraz centrum zadań.

Wskazówka

Projekt zawiera zestaw plików Bicep (w folderze infra ), które azd wykorzystuje do utworzenia bezpiecznego wdrożenia w planie wykorzystania Flex, które jest zgodne z najlepszymi praktykami.

  1. Wróć do folderu projektu głównego (folderu, w którym znajduje się plik):azure.yaml

    cd ..
    
  1. Upewnij się, że nadal jesteś w folderze projektu głównego (folderze, w którym jest plik).azure.yaml
  1. Wykonaj to polecenie, aby uwierzytelnić się za pomocą swojego konta Azure:

    azd auth login
    
  2. Uruchom to polecenie z katalogu projektu głównego, aby azd utworzyć wymagane zasoby Azure:

    azd provision
    

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

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

    Parameter Description
    Subskrypcja platformy Azure Subskrypcja, w ramach której tworzone są zasoby. Jeśli na Twoim koncie jest więcej niż jeden najemca, najpierw musisz wybrać swojego najemcę.
    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.
    vnetEnabled Czy wdrożyć w sieci wirtualnej. Aby uzyskać ten szybki start, wybierz fałszywe.

    Polecenie azd provision wykorzystuje Twoje odpowiedzi na te prompty wraz z plikami konfiguracyjnymi Bicep, aby utworzyć i skonfigurować te wymagane zasoby Azure:

    • Plan konsumpcji Flex i aplikacja funkcjonalna
    • Azure Storage (wymagane) i Application Insights (zalecane)
    • Trwały harmonogram zadań i centrum zadań
    • Zasady dostępu i role dla twojego konta
    • Połączenia między usługami przy użyciu tożsamości zarządzanych (zamiast przechowywanych parametrów połączenia)

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

    Provisioning uruchamia także skrypt po provisionacji, który generuje plik local.settings.json w folderze aplikacji. Ten plik zawiera ustawienia połączenia dla wdrożonego endpointu Durable Task Scheduler, który jest potrzebny do uruchomienia projektu lokalnie.

Rozpocznij Azurite

Aby uruchomić projekt lokalnie, runtime Functions potrzebuje lokalnego emulatora pamięci masowej. Ustawienie "AzureWebJobsStorage": "UseDevelopmentStorage=true" w pliku local.settings.json kieruje środowisko wykonawcze do użycia Azurite do tego celu.

W nowym oknie terminala uruchom to polecenie, aby uruchomić Azurite:

azurite --skipApiVersionCheck --location ~/azurite-data

Utrzymuj Azurite włączony w tym oknie terminala podczas testów lokalnych.

Uruchamianie w środowisku lokalnym

  1. W oryginalnym terminalu przejdź do folderu fanoutfanin aplikacji i uruchom hosta Funkcji:

    cd fanoutfanin
    func start
    

    Gdy host usługi Functions zostanie uruchomiony w lokalnym folderze projektu, zapisuje lokalne punkty końcowe adresów URL funkcji wyzwalanych przez protokół HTTP do danych wyjściowych terminalu.

    Note

    Ponieważ autoryzacja klucza dostępu nie jest wymuszana podczas uruchamiania lokalnego, nie potrzebujesz klucza dostępu do wywoływania funkcji.

  2. W przeglądarce utwórz żądanie GET do punktu końcowego, który uruchamia aranżację:

    http://localhost:7071/api/FetchOrchestration_HttpStart

    To żądanie uruchamia nowe wystąpienie orkiestracji. Orkiestracja rozgałęzia się na kilka działań, aby równolegle pobrać tytuły artykułów z usługi Microsoft Learn. Po zakończeniu działań fani orkiestracji wracają do trybu i zwracają tytuły jako sformatowany ciąg.

  1. W oryginalnym terminalu przejdź do folderu src aplikacji, stwórz i aktywuj środowisko wirtualne, zainstaluj zależności i uruchom hosta Functions:

    cd src
    

    Sposób, w jaki tworzysz i aktywujesz swoje wirtualne środowisko (nazwane .venv), zależy od twojego terminala:

    python3 -m venv .venv
    source .venv/bin/activate
    pip install -r requirements.txt
    func start
    

    Gdy host usługi Functions zostanie uruchomiony w lokalnym folderze projektu, zapisuje lokalne punkty końcowe adresów URL funkcji wyzwalanych przez protokół HTTP do danych wyjściowych terminalu.

    Note

    Ponieważ autoryzacja klucza dostępu nie jest wymuszana podczas uruchamiania lokalnego, nie potrzebujesz klucza dostępu do wywoływania funkcji.

  2. W przeglądarce utwórz żądanie GET do punktu końcowego uruchamiania HTTP:

    http://localhost:7071/api/orchestrators/fetch_orchestration

    To żądanie uruchamia nowe wystąpienie orkiestracji. Orkiestracja rozgałęzia się na kilka działań, aby równolegle pobrać tytuły artykułów z usługi Microsoft Learn. Po zakończeniu działań fani orkiestracji wracają do trybu i zwracają tytuły jako sformatowany ciąg.

  1. W oryginalnym terminalu przejdź do folderu src aplikacji, zainstaluj zależności, zbuduj projekt i uruchom hosta Functions:

    cd src
    npm install
    npm run build
    func start
    

    Gdy host usługi Functions zostanie uruchomiony w lokalnym folderze projektu, zapisuje lokalne punkty końcowe adresów URL funkcji wyzwalanych przez protokół HTTP do danych wyjściowych terminalu.

    Note

    Ponieważ autoryzacja klucza dostępu nie jest wymuszana podczas uruchamiania lokalnego, nie potrzebujesz klucza dostępu do wywoływania funkcji.

  2. W przeglądarce utwórz żądanie GET do punktu końcowego uruchamiania HTTP:

    http://localhost:7071/api/orchestrators/fetchOrchestration

    To żądanie uruchamia nowe wystąpienie orkiestracji. Orkiestracja rozgałęzia się na kilka działań, aby równolegle pobrać tytuły artykułów z usługi Microsoft Learn. Po zakończeniu działań fani orkiestracji wracają do trybu i zwracają tytuły jako sformatowany ciąg.

  1. W oryginalnym terminalu zbuduj projekt, a następnie uruchom host Functions z folderu build output:

    mvn clean package
    cd target/azure-functions/durable-functions-quickstart
    func start
    

    Gdy host usługi Functions zostanie uruchomiony w lokalnym folderze projektu, zapisuje lokalne punkty końcowe adresów URL funkcji wyzwalanych przez protokół HTTP do danych wyjściowych terminalu.

    Note

    Ponieważ autoryzacja klucza dostępu nie jest wymuszana podczas uruchamiania lokalnego, nie potrzebujesz klucza dostępu do wywoływania funkcji.

  2. W przeglądarce utwórz żądanie GET do punktu końcowego, który uruchamia aranżację:

    http://localhost:7071/api/FetchOrchestration_HttpStart

    To żądanie uruchamia nowe wystąpienie orkiestracji. Orkiestracja rozgałęzia się na kilka działań, aby równolegle pobrać tytuły artykułów z usługi Microsoft Learn. Po zakończeniu działań fani orkiestracji wracają do trybu i zwracają tytuły jako sformatowany ciąg.

  1. W oryginalnym terminalu przejdź do folderu src aplikacji, zainstaluj zależności i uruchom hosta Functions:

    cd src
    npm install
    func start
    

    Gdy host usługi Functions zostanie uruchomiony w lokalnym folderze projektu, zapisuje lokalne punkty końcowe adresów URL funkcji wyzwalanych przez protokół HTTP do danych wyjściowych terminalu.

    Note

    Ponieważ autoryzacja klucza dostępu nie jest wymuszana podczas uruchamiania lokalnego, nie potrzebujesz klucza dostępu do wywoływania funkcji.

  2. W przeglądarce utwórz żądanie GET do punktu końcowego, który uruchamia aranżację:

    http://localhost:7071/api/FetchOrchestration_HttpStart

    To żądanie uruchamia nowe wystąpienie orkiestracji. Orkiestracja rozgałęzia się na kilka działań, aby równolegle pobrać tytuły artykułów z usługi Microsoft Learn. Po zakończeniu działań fani orkiestracji wracają do trybu i zwracają tytuły jako sformatowany ciąg.

  1. W oryginalnym terminalu przejdź do folderu src aplikacji i uruchom hosta Funkcji:

    cd src
    func start
    

    Gdy host usługi Functions zostanie uruchomiony w lokalnym folderze projektu, zapisuje lokalne punkty końcowe adresów URL funkcji wyzwalanych przez protokół HTTP do danych wyjściowych terminalu.

    Note

    Ponieważ autoryzacja klucza dostępu nie jest wymuszana podczas uruchamiania lokalnego, nie potrzebujesz klucza dostępu do wywoływania funkcji.

  2. W przeglądarce utwórz żądanie GET do punktu końcowego, który uruchamia aranżację:

    http://localhost:7071/api/FetchOrchestration_HttpStart

    To żądanie uruchamia nowe wystąpienie orkiestracji. Orkiestracja rozgałęzia się na kilka działań, aby równolegle pobrać tytuły artykułów z usługi Microsoft Learn. Po zakończeniu działań fani orkiestracji wracają do trybu i zwracają tytuły jako sformatowany ciąg.

  1. Punkt końcowy HTTP zwraca odpowiedź JSON z kilkoma adresami URL. Punkt statusQueryGetUri końcowy zapewnia stan orkiestracji.

  2. statusQueryGetUri Skopiuj wartość i wklej ją w przeglądarce lub narzędziu do testowania HTTP, aby sprawdzić stan aranżacji. Po zakończeniu aranżacji w odpowiedzi zobaczysz pobrane tytuły artykułów.

  3. Gdy skończysz, naciśnij Ctrl+C w oknie terminala, aby zatrzymać proces func hosta.

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

Przejrzyj kod (opcjonalnie)

Możesz przejrzeć kod implementujący wzorzec fan-out/fan-in:

Działania związane z pobieraniem tytułów są śledzone przy użyciu dynamicznej listy zadań. Wiersz await Task.WhenAll(parallelTasks); czeka na ukończenie wszystkich wywołanych działań, które są uruchamiane współbieżnie. Po zakończeniu wszystkie dane wyjściowe są agregowane jako sformatowany ciąg.

[Function(nameof(FetchOrchestration))]
public static async Task<string> RunOrchestrator(
    [OrchestrationTrigger] TaskOrchestrationContext context)
{
    ILogger logger = context.CreateReplaySafeLogger(nameof(FetchOrchestration));
    logger.LogInformation("Fetching data.");
    var parallelTasks = new List<Task<string>>();
    
    // List of URLs to fetch titles from
    var urls = new List<string>
    {
        "https://learn.microsoft.com/azure/azure-functions/durable/durable-functions-overview",
        "https://learn.microsoft.com/azure/azure-functions/durable/durable-task-scheduler/durable-task-scheduler",
        "https://learn.microsoft.com/azure/azure-functions/functions-scenarios",
        "https://learn.microsoft.com/azure/azure-functions/functions-create-ai-enabled-apps",
    };

    // Run fetching tasks in parallel
    foreach (var url in urls)
    {
        Task<string> task = context.CallActivityAsync<string>(nameof(FetchTitleAsync), url);
        parallelTasks.Add(task);
    }
    
    // Wait for all the parallel tasks to complete before continuing
    await Task.WhenAll(parallelTasks);
   
    // Return fetched titles as a formatted string
    return string.Join("; ", parallelTasks.Select(t => t.Result));
}

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

Działania związane z pobieraniem tytułów są śledzone przy użyciu dynamicznej listy zadań. Wiersz yield context.task_all(tasks) czeka na ukończenie wszystkich wywołanych działań, które są uruchamiane współbieżnie. Po zakończeniu wszystkie dane wyjściowe są agregowane jako sformatowany ciąg.

    # List of URLs to fetch titles from
    urls = [
        "https://learn.microsoft.com/azure/azure-functions/durable/durable-functions-overview",
        "https://learn.microsoft.com/azure/azure-functions/durable/durable-task-scheduler/durable-task-scheduler",
        "https://learn.microsoft.com/azure/azure-functions/functions-scenarios",
        "https://learn.microsoft.com/azure/azure-functions/functions-create-ai-enabled-apps",
    ]
    
    # Run fetching tasks in parallel
    tasks = []
    for url in urls:
        task = context.call_activity("fetch_title", url)
        tasks.append(task)
    
    # Wait for all the parallel tasks to complete before continuing
    results = yield context.task_all(tasks)
    
    # Return fetched titles as a formatted string
    return "; ".join(results)


@myApp.activity_trigger(input_name="url")
async def fetch_title(url: str):
    """Activity function that fetches the title from a URL."""
    logger = logging.getLogger("FetchTitle")
    logger.info(f"Fetching from url {url}.")
    
    try:
        async with ClientSession() as session:

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

Działania związane z pobieraniem tytułów są śledzone przy użyciu dynamicznej listy zadań. Wiersz yield context.df.Task.all(parallelTasks) czeka na ukończenie wszystkich wywołanych działań, które są uruchamiane współbieżnie. Po zakończeniu wszystkie dane wyjściowe są agregowane jako sformatowany ciąg.

    const urls = [
        "https://learn.microsoft.com/azure/azure-functions/durable/durable-functions-overview",
        "https://learn.microsoft.com/azure/azure-functions/durable/durable-task-scheduler/durable-task-scheduler",
        "https://learn.microsoft.com/azure/azure-functions/functions-scenarios",
        "https://learn.microsoft.com/azure/azure-functions/functions-create-ai-enabled-apps",
    ];

    // Run fetching tasks in parallel
    const parallelTasks = [];
    for (const url of urls) {
        const task = context.df.callActivity(fetchTitleActivityName, url);
        parallelTasks.push(task);
    }

    // Wait for all the parallel tasks to complete before continuing
    const results: string[] = yield context.df.Task.all(parallelTasks);

    // Return fetched titles as a formatted string
    return results.join("; ");
};
df.app.orchestration("fetchOrchestration", fetchOrchestration);

const fetchTitleAsync: ActivityHandler = async function (
    url: string,
    context: InvocationContext

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

Działania związane z pobieraniem tytułów są śledzone przy użyciu dynamicznej listy zadań. Wiersz ctx.allOf(parallelTasks).await() czeka na ukończenie wszystkich wywołanych działań, które są uruchamiane współbieżnie. Po zakończeniu wszystkie dane wyjściowe są agregowane jako sformatowany ciąg.

@FunctionName("FetchOrchestration")
public String runOrchestrator(
        @DurableOrchestrationTrigger(name = "taskOrchestrationContext") TaskOrchestrationContext ctx) {

    List<String> urls = List.of(
        "https://learn.microsoft.com/azure/azure-functions/durable/durable-functions-overview",
        "https://learn.microsoft.com/azure/azure-functions/durable/durable-task-scheduler/durable-task-scheduler",
        "https://learn.microsoft.com/azure/azure-functions/functions-scenarios",
        "https://learn.microsoft.com/azure/azure-functions/functions-create-ai-enabled-apps"
    );

    // Fan out: run fetching tasks in parallel
    List<Task<String>> parallelTasks = urls.stream()
        .map(url -> ctx.callActivity("FetchTitle", url, String.class))
        .collect(Collectors.toList());

    // Fan in: wait for all parallel tasks to complete
    List<String> results = ctx.allOf(parallelTasks).await();

    // Return fetched titles as a formatted string
    return String.join("; ", results);
}

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

Działania związane z pobieraniem tytułów są śledzone przy użyciu dynamicznej listy zadań. Wiersz yield context.df.Task.all(parallelTasks) czeka na ukończenie wszystkich wywołanych działań, które są uruchamiane współbieżnie. Po zakończeniu wszystkie dane wyjściowe są agregowane jako sformatowany ciąg.

df.app.orchestration('fetchOrchestration', function* (context) {
    context.log("Fetching data.");

    const urls = [
        "https://learn.microsoft.com/azure/azure-functions/durable/durable-functions-overview",
        "https://learn.microsoft.com/azure/azure-functions/durable/durable-task-scheduler/durable-task-scheduler",
        "https://learn.microsoft.com/azure/azure-functions/functions-scenarios",
        "https://learn.microsoft.com/azure/azure-functions/functions-create-ai-enabled-apps",
    ];

    // Fan out: run fetching tasks in parallel
    const parallelTasks = urls.map(url => context.df.callActivity(activityName, url));

    // Fan in: wait for all parallel tasks to complete
    const results = yield context.df.Task.all(parallelTasks);

    // Return fetched titles as a formatted string
    return results.join("; ");
});

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

Działania związane z pobieraniem tytułów są śledzone przy użyciu dynamicznej listy zadań. Wiersz Wait-ActivityFunction -Task $parallelTasks czeka na ukończenie wszystkich wywołanych działań, które są uruchamiane współbieżnie. Po zakończeniu wszystkie dane wyjściowe są agregowane jako sformatowany ciąg.

param($Context)

$urls = @(
    "https://learn.microsoft.com/azure/azure-functions/durable/durable-functions-overview",
    "https://learn.microsoft.com/azure/azure-functions/durable/durable-task-scheduler/durable-task-scheduler",
    "https://learn.microsoft.com/azure/azure-functions/functions-scenarios",
    "https://learn.microsoft.com/azure/azure-functions/functions-create-ai-enabled-apps"
)

# Fan out: run fetching tasks in parallel
$parallelTasks = @()
foreach ($url in $urls) {
    $parallelTasks += Invoke-DurableActivity -FunctionName 'FetchTitle' -Input $url -NoWait
}

# Fan in: wait for all parallel tasks to complete
$results = Wait-ActivityFunction -Task $parallelTasks

# Return fetched titles as a formatted string
$output = $results -join "; "
$output

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

Po lokalnym zweryfikowaniu funkcji czas na wdrożenie ich na Azure.

Wdrażanie na platformie Azure

Uruchom to polecenie z folderu projektu głównego, aby wdrożyć swój projekt kodu do aplikacji funkcji w Azure:

azd deploy

Polecenie azd deploy pakuje i wdraża twój kod do aplikacji funkcji utworzonej podczas aprowizacji. Po zakończeniu wykonywania polecenia aplikacja uruchamia się i działa we wdrożonym pakiecie.

Wywoływanie funkcji na platformie Azure

Teraz możesz wywołać punkt końcowy aranżacji na platformie Azure, wysyłając żądanie HTTP do jego adresu URL. Gdy funkcje działają w Azure, autoryzacja klucza dostępu jest wymuszana i musisz podać klucz dostępu funkcji wraz z żądaniem.

Możesz użyć narzędzi Core Tools, aby uzyskać adres URL punktu końcowego wyzwalacza HTTP, który uruchamia orkiestrację na platformie Azure.

  1. W lokalnym terminalu lub wierszu polecenia uruchom następujące polecenia, aby uzyskać wartości punktu końcowego adresu URL:

    APP_NAME=$(azd env get-value AZURE_FUNCTION_NAME)
    func azure functionapp list-functions $APP_NAME --show-keys
    

    Polecenie azd env get-value pobiera nazwę aplikacji funkcjonalnej z lokalnego środowiska. W przypadku używania opcji --show-keys z func azure functionapp list-functions, zwracana wartość adresu URL wywołania: dla każdego punktu końcowego zawiera wszystkie wymagane klucze dostępu na poziomie funkcji.

  2. Użyj przeglądarki lub narzędzia do testów HTTP, aby wysłać żądanie GET do punktu startowego HTTP i rozpocząć orkiestrację w aplikacji funkcjonalnej działającej w Azure.

Ponowne wdrażanie kodu

Uruchamiaj azd deploy tyle razy, ile potrzebujesz, aby wdrożyć aktualizacje kodu w aplikacji funkcjonalnej. Jeśli musisz zaktualizować zasoby Azure, uruchom ponownieazd provision.

Note

Najnowszy pakiet wdrożeniowy zawsze zastępuje wdrożone pliki kodu.

Początkowe odpowiedzi na polecenia azd oraz wszelkie zmienne środowiskowe wygenerowane przez azd są przechowywane lokalnie w środowisku o podanej nazwie. Użyj polecenia azd env get-values, aby przejrzeć wszystkie zmienne w środowisku użytym podczas tworzenia zasobów 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

Note

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

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