Nasazení do Azure Functions pomocí rozhraní příkazového řádku pro vývojáře Azure

Azure Developer CLI (azd) podporuje nasazení kódu a kontejnerů pro Azure Functions. Pro oba režimy použijte vyhrazeného function hostitele azure.yaml :

  • Nasazení kódu zabalí vytvořený kód funkce jako archiv zip a nahraje ho do Function App.
  • Nasazení kontejnerů sestaví nebo určí image kontejneru, publikuje ji v případě potřeby do Azure Container Registry (ACR) a aktualizuje aplikaci funkcí tak, aby image spustila.

Azure Functions i Azure App Service používají poskytovatele prostředků Microsoft.Web/sites a jejich toky nasazení kontejnerů sdílejí některé interní mechanismy. Nejsou to ale tentýž azd host. Functions používá host: function, má balení specifické pro Functions a chování při vzdáleném sestavení a nepoužívá workflow slotu nasazení v App Service.

Zvolte režim nasazení

azd výběr režimu nasazení z konfigurace služby:

Konfigurace Režim nasazení
Zdroj project s podporovaným jiným než Dockerem language a bez docker.path Nasazení kódu
language: docker Nasazení kontejnerů
docker.path hodnota se zdrojovým jazykem Nasazení kontejnerů
Předem připravená verze image Nasazení kontejnerů

Zřízená aplikace Function App musí používat stejný režim jako konfigurace služby. Pokud je aplikace funkcí nakonfigurovaná pro kontejnery, ale azure.yaml vybere nasazení kódu nebo obráceně, azd deploy se zastaví před nahráním a nahlásí nesoulad.

Nasadit kód funkce

Nakonfigurujte službu funkcí založenou na kódu se zdrojovým projektem, podporovaným jazykem a host: function:

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

Během azd deployazd sestaví projekt, použije .funcignore vyloučení, vytvoří archiv zip a nahraje balíček prostřednictvím rozhraní API pro nasazení Azure Functions.

Vaše Bicep nebo Terraform musí zřídit aplikaci funkcí založenou na kódu a označit ji azd-service-name nastavenou na název služby, pokud prostředek identifikujete pomocí resourceName v azure.yaml. Nakonfigurujte plán hostování, modul runtime, úložiště, identity, sítě a nastavení aplikace prostřednictvím infrastruktury jako kódu.

Konfigurace vzdálených sestavení pro nasazení kódu

Vlastnost služby remoteBuild nejvyšší úrovně se vztahuje pouze na aplikace Function App založené na kódu v plánu Flex Consumption. Určuje, jestli Azure Functions používá Oryx k sestavení nahraného balíčku:

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

Když v rámci Flex Consumption vynecháte remoteBuild, azd vybere výchozí nastavení na základě jazyka a obsahu balíčku:

Jazyk Výchozí chování
JavaScript nebo TypeScript Používá vzdálené sestavení při .funcignore vyloučení node_modulesnebo pokud neexistuje žádný .funcignore soubor. V opačném případě použije místně sestavený balíček.
Python Používá vzdálené sestavení.
Go Sestavuje se lokálně. Go Function Apps nepodporují vzdálené sestavení.
Další podporované jazyky Používá místně sestavený balíček.

U JavaScriptu a TypeScriptu musí explicitně nakonfigurovaná hodnota remoteBuild být v souladu s .funcignore, pokud tento soubor existuje. Nastavit remoteBuild: true, když .funcignore vyloučí node_modules. Nastavte remoteBuild: false, pokud .funcignore obsahuje node_modules v balíčku.

Nenastavujte vlastnost nejvyšší úrovně remoteBuild pro plány, které nejsou Flex. Pokud chcete povolit sestavení Oryx v jiném podporovaném plánu, nakonfigurujte ENABLE_ORYX_BUILD=true a SCM_DO_BUILD_DURING_DEPLOYMENT=true jako nastavení aplikace Function App ve vaší infrastruktuře.

Nasaďte kontejnerizovanou funkci

Pro zdrojový projekt se souborem Dockerfile, nastavte language: dockernebo ponechte zdrojový jazyk a zadejte docker.path.

Následující příklad používá projekt TypeScript se souborem Dockerfile:

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

Předem připravenou image můžete nasadit i bez místního projektu:

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

U předpřipraveného image jej vynechte language nebo jej nastavte na docker. Nekombinujte image s project.

Během nasazení kontejneru: azd

  1. Sestaví image místně nebo vzdáleně nebo určí nakonfigurovaný předem sestavený image.
  2. Publikuje image do instance ACR nakonfigurované pro projekt v případě potřeby publikování.
  3. Aktualizuje linuxFxVersion aplikace funkcí na DOCKER|<image>.
  4. Nasadí se na hlavní web Function App.

Vlastnost služby remoteBuild nejvyšší úrovně se nevztahuje na kontejnery. K sestavení image kontejneru pomocí ACR Tasks použijte docker.remoteBuild:

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

Vytvořit Function App připravenou pro kontejner

azd deploy aktualizuje odkaz na bitovou kopii, ale nepřevádí aplikaci Function App založenou na kódu na aplikaci Function App založenou na kontejneru. Před nasazením musí vaše infrastruktura zřídit kompatibilní server.

Requirement Podrobnosti
Function App pro Linux Zřiďte aplikaci funkcí pro Linux v plánu Azure Functions Premium nebo Dedicated (App Service). Flex Consumption nepodporuje vlastní kontejnery. Tento host: function pracovní postup cílí na Microsoft.Web/sites, nikoli na Azure Functions hostované v Azure Container Apps.
Konfigurace webu kontejneru Nastavte druh webu tak, aby zahrnoval functionapp, linuxa container. Inicializujte linuxFxVersion s hodnotou DOCKER\|<image>. Zástupný obrázek stačí, protože azd deploy ho nahradí.
Registr kontejnerů U zdrojových sestavení zřiďte instanci ACR a zpřístupňte její přihlašovací server prostřednictvím výstupu AZURE_CONTAINER_REGISTRY_ENDPOINT infrastruktury nebo nakonfigurujte docker.registry pro službu. Plně kvalifikovaný předem vytvořený image lze použít přímo bez samostatného registru publikování.
Přístup k registru Pokud je publikování vyžadováno, udělte identitě, která image publikuje, oprávnění k odeslání image do cílového registru. Samostatně nakonfigurujte Function App tak, aby načítala nasazenou image. U privátních imagí ACR udělte spravované identitě aplikace Function App oprávnění ke stahování imagí a nakonfigurujte web tak, aby používal přihlašovací údaje spravované identity. V případě jiného privátního registru nakonfigurujte ve své infrastruktuře odpovídající přihlašovací údaje pro stahování.
Nastavení funkce Nakonfigurujte požadovaná nastavení, jako například FUNCTIONS_EXTENSION_VERSION, FUNCTIONS_WORKER_RUNTIME a AzureWebJobsStorage, prostřednictvím Bicep nebo Terraformu.
Zjišťování prostředků Použijte značku azd-service-name, jejíž hodnota odpovídá názvu služby v azure.yaml, nebo explicitně nastavte resourceName.

Nastavení na úrovni env služby není pro function host podporované. Místo toho definujte nastavení Function App ve vaší infrastruktuře.

Pochopení slotů nasazení

azd vždy nasadí function službu na hlavní web Function App. Nezjišťuje sloty aplikace Function App, nevyzve k nim ani do nich nenasadí. Nastavení slotů služby App Service, jako například AZD_DEPLOY_{SERVICE}_SLOT_NAME, nemá vliv na nasazení Function App.

Pokud potřebujete proces vydávání funkcí založený na slotech, spravujte slot a nasazení mimo integrovaný host: function pracovní postup.

Porovnání Functions a hostitelů služby App Service

Funkce a App Service sdílejí Microsoft.Web/sites typ prostředku, ale vyberte hostitele, který odpovídá úloze:

Behavior function hostitel appservice hostitel
Pracovní zátěž Azure Functions řízené událostmi Webové aplikace a rozhraní API
Nasazení kódu Používá postup nasazení ZIP pro Azure Functions. Používá tok nasazení služby App Service.
Nasazení kontejnerů Po ověření, že je web založený na kontejneru, aktualizuje bitovou kopii aplikace Function App. Po ověření, že web je připravený pro kontejner, aktualizuje image webové aplikace.
Vzdálené sestavení kódu Podporuje možnost na úrovni služby remoteBuild pro Flex Consumption Function Apps Nepoužívá možnost „Funkce“ remoteBuild.
Sloty pro nasazení Vždy se nasazuje na hlavní web. Podporuje pracovní postup slotů služby App Service azd.
Úroveň služby env Nepodporováno; použijte nastavení aplikace Function App v infrastruktuře Nakonfigurujte nastavení aplikace v infrastruktuře