Wdróż do Azure Functions za pomocą Azure Developer CLI

interfejs wiersza polecenia dewelopera Azure (azd) obsługuje wdrożenia kodu i kontenerów do Azure Functions. Użyj dedykowanego function hosta w azure.yaml dla obu trybów:

  • Wdrożenie kodu pakuje skompilowany kod funkcji jako archiwum zip i przekazuje go do Function App.
  • Wdrożenie kontenera kompiluje lub określa obraz kontenera, publikuje go w usłudze Azure Container Registry (ACR) w razie potrzeby i aktualizuje aplikację funkcji w celu uruchomienia obrazu.

Zarówno Azure Functions, jak i Azure App Service korzystają z dostawcy zasobów Microsoft.Web/sites, a ich przepływy wdrażania kontenerów mają częściowo wspólne mechanizmy wewnętrzne. Nie są jednak tym samym azd hostem. Usługa Functions używa host: function, ma działanie tworzenia pakietów specyficznych dla Functions i zdalnego kompilowania oraz nie korzysta z przepływu pracy szczelin wdrożenia usługi App Service.

Wybierz tryb wdrażania

azd wybiera tryb wdrażania z konfiguracji usługi:

Konfiguracja Tryb wdrożenia
Źródło project z obsługiwanym rozwiązaniem niebędącym rozwiązaniem Docker language i bez docker.path Wdrażanie kodu
language: docker Wdrażanie kontenera
docker.path Wartość z języka źródłowego Wdrażanie kontenera
Wstępnie skompilowany image Wdrażanie kontenera

Aprowizowana Function App musi używać tego samego trybu co konfiguracja usługi. Jeśli aplikacja funkcji jest skonfigurowana dla kontenerów, ale azure.yaml wybiera wdrożenie kodu lub odwrotnie, azd deploy zatrzymuje się przed przekazaniem i zgłasza niezgodność.

Wdróż kod funkcji

Skonfiguruj usługę funkcji opartą na kodzie przy użyciu projektu źródłowego, obsługiwanego języka i host: function:

services:
  api:
    project: ./src/api
    language: ts
    host: function

Podczas azd, azd deploy kompiluje projekt, stosuje wykluczenia .funcignore, tworzy archiwum zip i przekazuje pakiet za pośrednictwem interfejsu API wdrażania Azure Functions.

Bicep lub Terraform musi aprowizować aplikację funkcji opartą na kodzie i oznaczyć ją tagiem azd-service-name ustawionym na nazwę usługi, chyba że zidentyfikujesz zasób przy użyciu polecenia resourceName w azure.yaml. Skonfiguruj plan hostingu, środowisko uruchomieniowe, magazyn, tożsamości, sieć i ustawienia aplikacji za pomocą infrastruktury jako kodu.

Konfigurowanie kompilacji zdalnych dla wdrożeń kodu

Właściwość usługi remoteBuild najwyższego poziomu ma zastosowanie tylko do aplikacji Function App opartych na kodzie w planie Flex Consumption. Określa, czy Azure Functions używa Oryx do skompilowania przekazanego pakietu:

services:
  api:
    project: ./src/api
    language: python
    host: function
    remoteBuild: true

W przypadku pominięcia remoteBuild opcji Flex Consumption azd wybiera wartość domyślną na podstawie języka i zawartości pakietu:

Język Działanie domyślne
JavaScript lub TypeScript Używa kompilacji zdalnej, gdy .funcignore wyklucza node_modules, lub gdy nie istnieje plik .funcignore. W przeciwnym razie użyje lokalnie skompilowanego pakietu.
Python Używa kompilacji zdalnej.
Go Kompiluje się lokalnie. Aplikacje funkcji języka Go nie obsługują kompilacji zdalnej.
Inne obsługiwane języki Używa lokalnie skompilowanego pakietu.

W przypadku języków JavaScript i TypeScript jawnie skonfigurowana wartość remoteBuild musi być zgodna z .funcignore, jeśli ten plik istnieje. Ustaw wartość remoteBuild: true, gdy .funcignore wyklucza node_modules. Ustaw wartość remoteBuild: false, gdy .funcignore zawiera node_modules w pakiecie.

Nie ustawiaj właściwości najwyższego poziomu remoteBuild dla planów innych niż Flex. Aby włączyć kompilację Oryx na innym obsługiwanym planie, skonfiguruj ENABLE_ORYX_BUILD=true i SCM_DO_BUILD_DURING_DEPLOYMENT=true jako ustawienia aplikacji funkcji w infrastrukturze.

Wdróż funkcję konteneryzowaną

W przypadku projektu źródłowego z plikiem Dockerfile ustaw language: dockerlub zachowaj język źródłowy i określ wartość docker.path.

W poniższym przykładzie użyto projektu TypeScript z plikiem Dockerfile:

services:
  api:
    project: ./src/api
    language: ts
    host: function
    docker:
      path: ./Dockerfile

Możesz również wdrożyć wstępnie utworzony obraz bez projektu lokalnego:

services:
  api:
    host: function
    image: myregistry.azurecr.io/functions/api:1.0

W przypadku wstępnie utworzonego obrazu pomiń language lub ustaw go na docker. Nie łącz image z project.

Podczas wdrażania kontenera: azd

  1. Buduje obraz lokalnie lub zdalnie albo określa skonfigurowany gotowy obraz.
  2. Publikuje obraz w instancji usługi ACR skonfigurowanej dla projektu, gdy publikowanie jest wymagane.
  3. Aktualizuje element linuxFxVersion aplikacji funkcji na DOCKER|<image>.
  4. Wdraża do głównej witryny aplikacji Function App.

Właściwość najwyższego poziomu usługi remoteBuild nie ma zastosowania do kontenerów. Aby utworzyć obraz kontenera za pomocą usługi ACR Tasks, użyj polecenia docker.remoteBuild:

services:
  api:
    project: ./src/api
    language: docker
    host: function
    docker:
      path: ./Dockerfile
      remoteBuild: true

Utwórz Function App gotową do obsługi kontenerów

azd deploy Aktualizuje odwołanie do obrazu, ale nie konwertuje aplikacji Function App opartej na kodzie na aplikację Function App opartą na kontenerze. Infrastruktura musi przygotować zgodną witrynę przed wdrożeniem.

Requirement Details
Aplikacja Function App w systemie Linux Aprowizuj aplikację funkcji w systemie Linux w planie Azure Functions Premium lub Dedicated (App Service). Funkcja Flex Consumption nie obsługuje kontenerów niestandardowych. Ten host: function przepływ pracy jest przeznaczony dla Microsoft.Web/sites, a nie Azure Functions hostowanych w Azure Container Apps.
Konfiguracja witryny kontenera Ustaw rodzaj witryny tak, aby obejmował functionapp, linux i container. Zainicjuj linuxFxVersion wartością DOCKER\|<image> . Obraz zastępczy jest wystarczający, ponieważ azd deploy go zastępuje.
Rejestr kontenerów W przypadku kompilacji źródłowych aprowizuj wystąpienie usługi ACR i udostępnij serwer logowania za pośrednictwem danych wyjściowych infrastruktury AZURE_CONTAINER_REGISTRY_ENDPOINT, lub skonfiguruj docker.registry dla usługi. W pełni kwalifikowany identyfikator wstępnie zbudowanego image może być używany bezpośrednio bez oddzielnego rejestru publikacji.
Dostęp do rejestru Przyznaj tożsamości publikującej obraz uprawnienie do wypychania obrazu do rejestru docelowego, gdy publikowanie jest wymagane. Oddzielnie skonfiguruj Function App, aby pobrać wdrożony obraz. W przypadku prywatnych obrazów usługi ACR przyznaj tożsamości zarządzanej aplikacji funkcji dostęp do ściągania i skonfiguruj witrynę do korzystania z poświadczeń tożsamości zarządzanej. W przypadku innego rejestru prywatnego skonfiguruj odpowiednie poświadczenia ściągania w infrastrukturze.
Ustawienia funkcji Skonfiguruj wymagane ustawienia, takie jak FUNCTIONS_EXTENSION_VERSION, FUNCTIONS_WORKER_RUNTIMEi AzureWebJobsStorage za pomocą Bicep lub narzędzia Terraform.
Odnajdywanie zasobów Zastosuj tag azd-service-name, którego wartość jest zgodna z nazwą usługi w azure.yaml, lub ustaw resourceName jawnie.

Ustawienia na poziomie env usługi nie są obsługiwane dla function hosta. Zamiast tego zdefiniuj ustawienia aplikacji Function App w infrastrukturze.

Poznaj sloty wdrożenia

azd zawsze wdraża usługę function w głównej witrynie aplikacji funkcji. Nie odnajduje, nie monituje ani nie wdraża do slotów aplikacji funkcji. Ustawienia gniazda wdrożenia usługi App Service, takie jak AZD_DEPLOY_{SERVICE}_SLOT_NAME, nie mają wpływu na wdrożenie aplikacji funkcji Function App.

Jeśli potrzebujesz procesu wydania usługi Functions opartego na slocie wdrożenia, zarządzaj slotem i wdrożeniem poza wbudowanym przepływem pracy host: function.

Porównanie hostów Azure Functions i App Service

Funkcje i usługa App Service współdzielą Microsoft.Web/sites typ zasobu, ale wybierz hosta, który odpowiada obciążeniu:

Behavior function host appservice host
Obciążenie Azure Functions sterowane zdarzeniami Aplikacje internetowe i interfejsy API
Wdrażanie kodu Używa przepływu wdrażania zip Azure Functions Używa przepływu wdrażania usługi App Service
Wdrażanie kontenera Aktualizuje obraz Function App po zweryfikowaniu, czy lokacja jest oparta na kontenerze Aktualizuje obraz aplikacji internetowej po zweryfikowaniu, czy witryna jest gotowa do użycia w kontenerze
Zdalna kompilacja kodu Obsługuje opcję na poziomie usługi remoteBuild dla aplikacji funkcji Azure Flex Consumption Nie używa opcji „Functions” remoteBuild
Miejsca wdrożenia Zawsze wdraża w głównej witrynie azd Obsługuje przepływ pracy gniazda wdrożeniowego usługi App Service
Poziom usługi env Nie jest obsługiwane; użyj ustawień aplikacji Function App w infrastrukturze Konfigurowanie ustawień aplikacji w infrastrukturze