Wdrażanie pliku zip dla usługi Azure Functions

W tym artykule opisano sposób wdrażania plików projektu aplikacji funkcji na platformie Azure z pliku .zip (skompresowanego). Dowiesz się, jak przeprowadzić wdrożenie wypychane, zarówno przy użyciu interfejsu wiersza polecenia platformy Azure, jak i przy użyciu interfejsów API REST. Narzędzia Azure Functions Core Tools używają również tych interfejsów API wdrażania podczas publikowania lokalnego projektu na platformie Azure.

Wdrożenie zip jest również łatwym sposobem uruchamiania funkcji z pakietu wdrożeniowego. Aby dowiedzieć się więcej, zobacz Uruchamianie funkcji z pliku pakietu na platformie Azure.

Usługa Azure Functions oferuje pełny zakres opcji ciągłego wdrażania i integracji udostępnianych przez usługę aplikacja systemu Azure Service. Aby uzyskać więcej informacji, zobacz Ciągłe wdrażanie dla usługi Azure Functions.

Aby przyspieszyć programowanie, możesz łatwiej wdrożyć pliki projektu aplikacji funkcji bezpośrednio z pliku .zip. Interfejs API wdrażania .zip pobiera zawartość pliku .zip i wyodrębnia zawartość do wwwroot folderu aplikacji funkcji. To wdrożenie plików .zip korzysta z tej samej usługi Kudu, która obsługuje ciągłe wdrożenia oparte na integracji, w tym:

  • Usunięcie plików, które zostały pominięte we wcześniejszych wdrożeniach.
  • Dostosowywanie wdrożenia, w tym uruchamianie skryptów wdrażania.
  • Dzienniki wdrażania.
  • Synchronizacja wyzwalaczy funkcji w aplikacji funkcji Plan użycia.

Aby uzyskać więcej informacji, zobacz dokumentację wdrażania .zip.

Wymagania dotyczące plików .zip wdrożenia

Plik .zip używany do wdrażania wypychanego musi zawierać wszystkie pliki potrzebne do uruchomienia funkcji.

Ważne

W przypadku korzystania z wdrożenia .zip wszystkie pliki z istniejącego wdrożenia, które nie znajdują się w pliku .zip, zostaną usunięte z aplikacji funkcji.

Kod wszystkich funkcji w określonej aplikacji funkcji znajduje się w głównym folderze projektu zawierającym plik konfiguracji hosta. Plik host.json zawiera konfiguracje specyficzne dla środowiska uruchomieniowego i znajduje się w folderze głównym aplikacji funkcji. Folder bin zawiera pakiety i inne pliki biblioteki wymagane przez aplikację funkcji. Określone struktury folderów wymagane przez aplikację funkcji zależą od języka:

Wszystkie funkcje w aplikacji funkcji muszą współużytkować ten sam stos języka.

Aplikacja funkcji zawiera wszystkie pliki i foldery w wwwroot katalogu. Wdrożenie pliku .zip zawiera zawartość wwwroot katalogu, ale nie sam katalog. Podczas wdrażania projektu biblioteki klas języka C# należy uwzględnić skompilowane pliki biblioteki i zależności w bin podfolderze w pakiecie .zip.

Podczas tworzenia aplikacji na komputerze lokalnym można ręcznie utworzyć plik .zip folderu projektu aplikacji funkcji przy użyciu wbudowanych funkcji .zip funkcji kompresji lub narzędzi innych firm.

Wdrażanie przy użyciu interfejsu wiersza polecenia platformy Azure

Interfejs wiersza polecenia platformy Azure umożliwia wyzwolenie wdrożenia wypychanego. Wypychanie pliku .zip do aplikacji funkcji przy użyciu polecenia az functionapp deployment source config-zip . Aby użyć tego polecenia, musisz użyć interfejsu wiersza polecenia platformy Azure w wersji 2.0.21 lub nowszej. Aby sprawdzić, jakiej wersji interfejsu wiersza polecenia platformy Azure używasz, użyj polecenia az --version.

W poniższym poleceniu zastąp <zip_file_path> symbol zastępczy ścieżką do lokalizacji pliku .zip. Zastąp <app_name> również unikatową nazwą aplikacji funkcji i zastąp <resource_group> ciąg nazwą grupy zasobów.

az functionapp deployment source config-zip -g <resource_group> -n \
<app_name> --src <zip_file_path>

To polecenie wdraża pliki projektu z pobranego pliku .zip do aplikacji funkcji na platformie Azure. Następnie ponownie uruchomi aplikację. Aby wyświetlić listę wdrożeń dla tej aplikacji funkcji, należy użyć interfejsów API REST.

W przypadku korzystania z interfejsu wiersza polecenia platformy Azure na komputerze <zip_file_path> lokalnym ścieżka do pliku .zip na komputerze. Możesz również uruchomić interfejs wiersza polecenia platformy Azure w usłudze Azure Cloud Shell. W przypadku korzystania z usługi Cloud Shell należy najpierw przekazać plik wdrożenia .zip do konta usługi Azure Files skojarzonego z usługą Cloud Shell. W takim przypadku jest to lokalizacja magazynu używana <zip_file_path> przez konto usługi Cloud Shell. Aby uzyskać więcej informacji, zobacz Utrwalanie plików w usłudze Azure Cloud Shell.

Wdrażanie pliku ZIP przy użyciu interfejsów API REST

Interfejsy API REST usługi wdrażania umożliwiają wdrożenie pliku .zip na platformie Azure. Aby wdrożyć, wyślij żądanie POST do https://<app_name>.scm.azurewebsites.net/api/zipdeploy. Żądanie POST musi zawierać plik .zip w treści wiadomości. Poświadczenia wdrażania dla aplikacji są podawane w żądaniu za pomocą podstawowego uwierzytelniania HTTP. Aby uzyskać więcej informacji, zobacz dokumentację wdrażania wypychaną .zip.

Do uwierzytelniania HTTP BASIC potrzebne są poświadczenia wdrożenia usługi App Service. Aby zobaczyć, jak ustawić poświadczenia wdrożenia, zobacz Ustawianie i resetowanie poświadczeń na poziomie użytkownika.

Za pomocą biblioteki cURL

W poniższym przykładzie użyto narzędzia cURL do wdrożenia pliku .zip. Zastąp symbole <deployment_user>zastępcze , <zip_file_path>i <app_name>. Po wyświetleniu monitu przez bibliotekę cURL wpisz hasło.

curl -X POST -u <deployment_user> --data-binary "@<zip_file_path>" https://<app_name>.scm.azurewebsites.net/api/zipdeploy

To żądanie wyzwala wdrożenie wypychane z przekazanego pliku .zip. Bieżące i wcześniejsze wdrożenia można przejrzeć przy użyciu punktu końcowego, jak pokazano w poniższym przykładzie https://<app_name>.scm.azurewebsites.net/api/deployments cURL. Ponownie zastąp <app_name> ciąg nazwą aplikacji i <deployment_user> nazwą użytkownika poświadczeń wdrożenia.

curl -u <deployment_user> https://<app_name>.scm.azurewebsites.net/api/deployments

Wdrożenie pliku zip asynchronicznego

Podczas wdrażania synchronicznego mogą wystąpić błędy związane z przekroczeniami limitu czasu połączenia. Dodaj ?isAsync=true do adresu URL, aby wdrożyć asynchronicznie. Po przekazaniu pliku zip otrzymasz odpowiedź z nagłówkiem wskazującym Location adres URL stanu wdrożenia z możliwością sondowania. Podczas sondowania adresu URL podanego w nagłówku Location otrzymasz odpowiedź HTTP 202 (Zaakceptowana), gdy proces jest w toku, a odpowiedź HTTP 200 (OK) po rozwinięciu archiwum i pomyślnym zakończeniu wdrażania.

Uwierzytelnianie Microsoft Entra

Alternatywą dla uwierzytelniania HTTP BASIC we wdrożeniu zip jest użycie tożsamości Entra firmy Microsoft. Tożsamość firmy Microsoft Entra może być potrzebna, jeśli uwierzytelnianie HTTP BASIC jest wyłączone dla witryny SCM.

Wymagany będzie prawidłowy token dostępu microsoft Entra dla użytkownika lub jednostki usługi wykonującej wdrożenie. Token dostępu można pobrać przy użyciu polecenia interfejsu wiersza polecenia platformy az account get-access-token Azure. Token dostępu będzie używany w nagłówku Uwierzytelniania żądania HTTP POST.

curl -X POST \
    --data-binary "@<zip_file_path>" \
    -H "Authorization: Bearer <access_token>" \
    "https://<app_name>.scm.azurewebsites.net/api/zipdeploy"

Przy użyciu programu PowerShell

W poniższym przykładzie użyto polecenia Publish-AzWebapp przekaż plik .zip. Zastąp symbole <group-name>zastępcze , <app-name>i <zip-file-path>.

Publish-AzWebapp -ResourceGroupName <group-name> -Name <app-name> -ArchivePath <zip-file-path>

To żądanie wyzwala wdrożenie wypychane z przekazanego pliku .zip.

Aby przejrzeć bieżące i wcześniejsze wdrożenia, uruchom następujące polecenia. Ponownie zastąp <deployment-user>symbole zastępcze , <deployment-password>i <app-name> .

$username = "<deployment-user>"
$password = "<deployment-password>"
$apiUrl = "https://<app-name>.scm.azurewebsites.net/api/deployments"
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $username, $password)))
$userAgent = "powershell/1.0"
Invoke-RestMethod -Uri $apiUrl -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -UserAgent $userAgent -Method GET

Wdrażanie przy użyciu szablonu usługi ARM

Aby wypchnąć plik .zip do aplikacji funkcji, możesz użyć rozszerzenia szablonu usługi ARM ZipDeploy.

Przykładowy szablon usługi ARM ZipDeploy

Ten szablon zawiera zarówno miejsce produkcyjne, jak i przejściowe, a następnie wdraża je w jednym lub drugim miejscu. Zazwyczaj ten szablon służy do wdrażania w miejscu przejściowym, a następnie zamiany, aby uzyskać nowy pakiet zip uruchomiony w miejscu produkcyjnym.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "appServiceName": {
      "type": "string"
    },
    "deployToProduction": {
      "type": "bool",
      "defaultValue": false
    },
    "slot": {
      "type": "string",
      "defaultValue": "staging"
    },
    "packageUri": {
      "type": "secureString"
    }
  },
  "resources": [
    {
      "condition": "[parameters('deployToProduction')]",
      "type": "Microsoft.Web/sites/extensions",
      "apiVersion": "2021-02-01",
      "name": "[format('{0}/ZipDeploy', parameters('appServiceName'))]",
      "properties": {
        "packageUri": "[parameters('packageUri')]",
        "appOffline": true
      }
    },
    {
      "condition": "[not(parameters('deployToProduction'))]",
      "type": "Microsoft.Web/sites/slots/extensions",
      "apiVersion": "2021-02-01",
      "name": "[format('{0}/{1}/ZipDeploy', parameters('appServiceName'), parameters('slot'))]",
      "properties": {
        "packageUri": "[parameters('packageUri')]",
        "appOffline": true
      }
    }
  ]
}

W przypadku początkowego wdrożenia należy wdrożyć bezpośrednio w miejscu produkcyjnym. Aby uzyskać więcej informacji, zobacz Wdrożenia miejsc.

Uruchamianie funkcji z pakietu wdrożeniowego

Możesz również uruchomić funkcje bezpośrednio z pliku pakietu wdrożeniowego. Ta metoda pomija krok wdrażania kopiowania plików z pakietu do wwwroot katalogu aplikacji funkcji. Zamiast tego plik pakietu jest instalowany przez środowisko uruchomieniowe usługi Functions, a zawartość wwwroot katalogu staje się tylko do odczytu.

Wdrożenie zip integruje się z tą funkcją, którą można włączyć, ustawiając ustawienie WEBSITE_RUN_FROM_PACKAGE aplikacji funkcji na wartość 1. Aby uzyskać więcej informacji, zobacz Uruchamianie funkcji z pliku pakietu wdrożeniowego.

Dostosowywanie wdrożenia

W procesie wdrażania przyjęto założenie, że wypchnięty plik .zip zawiera aplikację gotową do uruchomienia. Domyślnie nie są uruchamiane żadne dostosowania. Aby włączyć te same procesy kompilacji, które uzyskujesz z ciągłą integracją, dodaj następujące elementy do ustawień aplikacji:

SCM_DO_BUILD_DURING_DEPLOYMENT=true

Jeśli używasz .zip wdrożenia wypychanych, to ustawienie jest domyślnie fałszywe . Wartość domyślna dotyczy wdrożeń ciągłej integracji. W przypadku ustawienia wartości true ustawienia związane z wdrożeniem są używane podczas wdrażania. Te ustawienia można skonfigurować jako ustawienia aplikacji lub w pliku konfiguracji wdrożenia znajdującym się w katalogu głównym pliku .zip. Aby uzyskać więcej informacji, zobacz Ustawienia związane z repozytorium i wdrażaniem w dokumentacji wdrożenia.

Pobieranie plików aplikacji funkcji

Jeśli funkcje zostały utworzone przy użyciu edytora w witrynie Azure Portal, możesz pobrać istniejący projekt aplikacji funkcji jako plik .zip w jeden z następujących sposobów:

  • W witrynie Azure Portal:

    1. Zaloguj się do witryny Azure Portal, a następnie przejdź do aplikacji funkcji.

    2. Na karcie Przegląd wybierz pozycję Pobierz zawartość aplikacji. Wybierz opcje pobierania, a następnie wybierz pozycję Pobierz.

      Pobieranie projektu aplikacji funkcji

      Pobrany plik .zip jest w poprawnym formacie, który ma zostać ponownie opublikowany w aplikacji funkcji przy użyciu .zip wdrożenia wypychanego. Pobieranie portalu może również dodać pliki potrzebne do otwarcia aplikacji funkcji bezpośrednio w programie Visual Studio.

  • Korzystanie z interfejsów API REST:

    Użyj następującego interfejsu API GET wdrożenia, aby pobrać pliki z <function_app> projektu:

    https://<function_app>.scm.azurewebsites.net/api/zip/site/wwwroot/
    

    Dołączenie /site/wwwroot/ zapewnia, że plik zip zawiera tylko pliki projektu aplikacji funkcji, a nie całą witrynę. Jeśli jeszcze nie zalogowano się na platformie Azure, zostanie wyświetlony monit o to.

Możesz również pobrać plik .zip z repozytorium GitHub. Po pobraniu repozytorium GitHub jako pliku .zip usługa GitHub dodaje dodatkowy poziom folderu dla gałęzi. Ten dodatkowy poziom folderu oznacza, że nie można wdrożyć pliku .zip bezpośrednio podczas pobierania go z usługi GitHub. Jeśli używasz repozytorium GitHub do obsługi aplikacji funkcji, należy użyć ciągłej integracji w celu wdrożenia aplikacji.

Następne kroki