Vytvoření první kontejnerizované služby Azure Functions
V tomto článku vytvoříte aplikaci funkcí spuštěnou v kontejneru Linuxu a nasadíte ji do Azure Functions.
Nasazení kódu funkce do Azure Functions v kontejneru vyžaduje hostování plánu Premium nebo vyhrazeného plánu (App Service). Dokončením tohoto článku se na vašem účtu Azure účtují náklady na několik USD, které můžete minimalizovat čištěním prostředků , jakmile budete hotovi.
Mezi další možnosti nasazení kontejneru aplikace funkcí do Azure patří:
Azure Container Apps: Další informace najdete v tématu Nasazení kontejneru do aplikací kontejneru Azure.
Azure Arc (aktuálně ve verzi Preview): Další informace najdete v tématu Nasazení kontejneru do Služby Azure Arc.
Zvolte vývojový jazyk
Nejprve pomocí nástrojů Azure Functions vytvoříte kód projektu jako aplikaci funkcí v kontejneru Dockeru pomocí základní image linuxové verze specifické pro jazyk. Ujistěte se, že jste v horní části článku vybrali jazyk podle svého výběru.
Core Tools automaticky vygeneruje soubor Dockerfile pro váš projekt, který používá nejaktuálnější verzi správné základní image pro váš jazyk funkcí. Kontejner byste měli pravidelně aktualizovat z nejnovější základní image a znovu nasadit z aktualizované verze kontejneru. Další informace najdete v tématu Vytváření kontejnerizovaných aplikací funkcí.
Požadavky
Než začnete, musíte mít splněné následující požadavky:
Nainstalujte Azure Functions Core Tools verze 4.0.5198 nebo novější.
- Nainstalujte nástroje Azure Functions Core Tools verze 4.x.
- Nainstalujte verzi Node.js podporovanou službou Azure Functions.
- Nainstalujte verzi Pythonu podporovanou službou Azure Functions.
Nainstalujte verzi sady Java Developer Kit , která je podporována službou Azure Functions.
Nainstalujte Apache Maven verze 3.0 nebo novější.
- Azure CLI verze 2.4 nebo novější.
Pokud ještě nemáte předplatné Azure, vytvořte si bezplatný účet Azure před tím, než začnete.
Pokud chcete publikovat image kontejnerizované aplikace funkcí, kterou vytvoříte do registru kontejneru, potřebujete ID Dockeru a Docker spuštěný na místním počítači. Pokud nemáte ID Dockeru, můžete vytvořit účet Dockeru.
K vytvoření instance registru musíte také dokončit oddíl Vytvořit registr kontejneru v rychlém startu Služby Container Registry. Poznamenejte si plně kvalifikovaný název přihlašovacího serveru.
Vytvoření a aktivace virtuálního prostředí
V vhodné složce spusťte následující příkazy pro vytvoření a aktivaci virtuálního prostředí s názvem .venv
. Nezapomeňte použít některou z verzí Pythonu podporovaných službou Azure Functions.
python -m venv .venv
source .venv/bin/activate
Pokud Python nenainstaloval balíček venv do distribuce Linuxu, spusťte následující příkaz:
sudo apt-get install python3-venv
V tomto aktivovaném virtuálním prostředí spustíte všechny následující příkazy.
Vytvoření a otestování projektu místních funkcí
V terminálu nebo příkazovém řádku spusťte následující příkaz pro vybraný jazyk a vytvořte projekt aplikace funkcí v aktuální složce:
func init --worker-runtime dotnet-isolated --docker
func init --worker-runtime node --language javascript --docker
func init --worker-runtime powershell --docker
func init --worker-runtime python --docker
func init --worker-runtime node --language typescript --docker
V prázdné složce spusťte následující příkaz, který vygeneruje projekt Functions z archetypu Maven:
mvn archetype:generate -DarchetypeGroupId=com.microsoft.azure -DarchetypeArtifactId=azure-functions-archetype -DjavaVersion=8 -Ddocker
Parametr -DjavaVersion
říká modulu runtime Functions, kterou verzi Javy použít. Pokud chcete funkce spouštět ve verzi Java 11, použijte -DjavaVersion=11
. Pokud nezadáte -DjavaVersion
, Maven jako výchozí nastaví Javu 8. Další informace najdete v tématu Verze Javy.
Důležité
Aby JAVA_HOME
bylo možné dokončit tento článek, musí být proměnná prostředí nastavená na umístění instalace správné verze sady JDK.
Maven vás požádá o hodnoty potřebné k dokončení generování projektu při nasazení. Postupujte podle pokynů a zadejte následující informace:
Instrukce | Hodnota | Popis |
---|---|---|
groupId | com.fabrikam |
Hodnota, která jednoznačně identifikuje váš projekt ve všech projektech podle pravidel pojmenování balíčků pro Javu. |
artifactId | fabrikam-functions |
Hodnota, která je názvem souboru JAR bez čísla verze. |
version | 1.0-SNAPSHOT |
Vyberte výchozí hodnotu. |
balíček | com.fabrikam.functions |
Hodnota, která je balíčkem Java pro vygenerovaný kód funkce. Použijte výchozí hodnotu. |
Potvrďte zadáním Y
nebo stisknutím klávesy Enter.
Maven vytvoří soubory projektu v nové složce s názvem artifactId, což je fabrikam-functions
v tomto příkladu .
Tato --docker
možnost vygeneruje soubor Dockerfile pro projekt, který definuje vhodný kontejner pro použití se službou Azure Functions a vybraným modulem runtime.
Přejděte do složky projektu:
cd fabrikam-functions
Pomocí následujícího příkazu přidejte do projektu funkci, kde --name
argument je jedinečný název funkce a --template
argument určuje aktivační událost funkce. func new
vytvoří v projektu soubor kódu jazyka C#.
func new --name HttpExample --template "HTTP trigger"
Pomocí následujícího příkazu přidejte do projektu funkci, kde --name
argument je jedinečný název funkce a --template
argument určuje aktivační událost funkce. func new
vytvoří podsložku odpovídající názvu funkce, která obsahuje konfigurační soubor s názvem function.json.
func new --name HttpExample --template "HTTP trigger"
Pokud chcete funkci otestovat místně, spusťte místního hostitele modulu runtime Azure Functions v kořenové složce projektu.
func start
func start
npm install
npm start
mvn clean package
mvn azure-functions:run
Jakmile se koncový HttpExample
bod zapíše do výstupu, přejděte na tento koncový bod. Ve výstupu odpovědi by se měla zobrazit uvítací zpráva.
Jakmile se koncový HttpExample
bod zapíše do výstupu, přejděte na http://localhost:7071/api/HttpExample?name=Functions
. Prohlížeč musí zobrazit zprávu "hello", která se ozvěna zpět Functions
, hodnota zadaná parametru name
dotazu.
Stisknutím kláves Ctrl+C (Command+C v macOS) zastavte hostitele.
Sestavení image kontejneru a místní ověření
(Volitelné) Prozkoumejte soubor Dockerfile v kořenové složce projektu. Soubor Dockerfile popisuje požadované prostředí pro spuštění aplikace funkcí v Linuxu. Úplný seznam podporovaných základních imagí pro Azure Functions najdete na stránce základní image Azure Functions.
V kořenové složce projektu spusťte příkaz docker buildu , zadejte název jako azurefunctionsimage
a označte jako v1.0.0
. Položku <DOCKER_ID>
nahraďte ID vašeho účtu Docker Hubu. Tento příkaz sestaví image Dockeru pro kontejner.
docker build --tag <DOCKER_ID>/azurefunctionsimage:v1.0.0 .
Po dokončení příkazu můžete nový kontejner spustit místně.
Pokud chcete ověřit sestavení, spusťte image v místním kontejneru pomocí příkazu docker run , nahraďte <DOCKER_ID>
znovu ID účtu Docker Hubu a přidejte argument porty takto -p 8080:80
:
docker run -p 8080:80 -it <DOCKER_ID>/azurefunctionsimage:v1.0.0
Po spuštění obrázku v místním kontejneru přejděte na http://localhost:8080/api/HttpExample
, který musí zobrazit stejnou zprávu s pozdravem jako předtím. Vzhledem k tomu, že funkce aktivovaná protokolem HTTP, kterou jste vytvořili, používá anonymní autorizaci, můžete volat funkci spuštěnou v kontejneru, aniž byste museli získat přístupový klíč. Další informace najdete v tématu Autorizační klíče.
Po spuštění image v místním kontejneru přejděte na http://localhost:8080/api/HttpExample?name=Functions
příkaz , který musí zobrazit stejnou zprávu "hello" jako předtím. Vzhledem k tomu, že funkce aktivovaná protokolem HTTP, kterou jste vytvořili, používá anonymní autorizaci, můžete volat funkci spuštěnou v kontejneru, aniž byste museli získat přístupový klíč. Další informace najdete v tématu Autorizační klíče.
Po ověření aplikace funkcí v kontejneru ukončete spuštění stisknutím kláves Ctrl+C (Command+C v macOS).
Publikování image kontejneru do registru
Pokud chcete image kontejneru zpřístupnit pro nasazení do hostitelského prostředí, musíte ji odeslat do registru kontejneru.
Azure Container Registry je služba privátního registru pro vytváření, ukládání a správu imagí kontejnerů a souvisejících artefaktů. Pro publikování kontejnerů do služeb Azure byste měli použít službu privátního registru.
Pomocí tohoto příkazu se přihlaste k instanci registru pomocí aktuálních přihlašovacích údajů Azure:
az acr login --name <REGISTRY_NAME>
V předchozím příkazu nahraďte
<REGISTRY_NAME>
názvem vaší instance Container Registry.Pomocí tohoto příkazu označte image plně kvalifikovaným názvem přihlašovacího serveru registru:
docker tag <DOCKER_ID>/azurefunctionsimage:v1.0.0 <LOGIN_SERVER>/azurefunctionsimage:v1.0.0
Nahraďte
<LOGIN_SERVER>
plně kvalifikovaný název přihlašovacího serveru registru a<DOCKER_ID>
id Dockeru.Pomocí tohoto příkazu odešlete kontejner do instance registru:
docker push <LOGIN_SERVER>/azurefunctionsimage:v1.0.0
Vytvoření podpůrných prostředků Azure pro vaši funkci
Než budete moct nasadit kontejner do Azure, musíte vytvořit tři prostředky:
- Skupina prostředků, což je logický kontejner pro související prostředky.
- Účet úložiště, který slouží k udržování stavu a dalších informací o vašich funkcích.
- Aplikace funkcí, která poskytuje prostředí pro spouštění kódu funkce. Aplikace funkcí se mapuje na místní projekt funkcí a umožňuje seskupit funkce jako logickou jednotku pro snadnější správu, nasazení a sdílení prostředků.
K vytvoření těchto položek použijte následující příkazy. Podporuje se Azure CLI i PowerShell. K vytvoření prostředků Azure pomocí Azure PowerShellu potřebujete také modul Az PowerShell verze 5.9.0 nebo novější.
Pokud jste to ještě neudělali, přihlaste se k Azure.
az login
Příkaz
az login
vás přihlásí ke svému účtu Azure.Vytvořte skupinu prostředků s názvem
AzureFunctionsContainers-rg
ve zvolené oblasti.az group create --name AzureFunctionsContainers-rg --location <REGION>
Příkaz
az group create
vytvoří skupinu prostředků. Ve výše uvedeném příkazu nahraďte<REGION>
oblastí blízko vás pomocí dostupného kódu oblasti vráceného z příkazu az account list-locations .Ve skupině prostředků a oblasti vytvořte účet úložiště pro obecné účely.
az storage account create --name <STORAGE_NAME> --location <REGION> --resource-group AzureFunctionsContainers-rg --sku Standard_LRS
Příkaz
az storage account create
vytvoří účet úložiště.V předchozím příkladu nahraďte
<STORAGE_NAME>
názvem, který je pro vás a jedinečný v Azure Storage. Názvy úložišť musí obsahovat jenom 3 až 24 znaků a malá písmena.Standard_LRS
určuje účet pro obecné účely podporovaný službou Functions.Pomocí příkazu vytvořte plán Premium pro Azure Functions pojmenovaný v cenové úrovni Elastic Premium 1 (
--sku EP1
), ve vašem<REGION>
a linuxovém kontejneru (--is-linux
).myPremiumPlan
az functionapp plan create --resource-group AzureFunctionsContainers-rg --name myPremiumPlan --location <REGION> --number-of-workers 1 --sku EP1 --is-linux
V této části používáme plán Premium, který se dá podle potřeby škálovat. Další informace o hostování najdete v porovnání plánů hostování azure Functions. Další informace o výpočtu nákladů najdete na stránce s cenami služby Functions.
Příkaz také vytvoří přidruženou instanci Aplikace Azure lication Insights ve stejné skupině prostředků, pomocí které můžete monitorovat aplikaci funkcí a zobrazit protokoly. Další informace najdete v tématu Monitorování azure Functions. Instance se neúčtují žádné náklady, dokud ji neaktivujete.
Vytvoření a konfigurace aplikace funkcí v Azure pomocí image
Aplikace funkcí v Azure spravuje provádění vašich funkcí v plánu hostování Azure Functions. V této části použijete prostředky Azure z předchozí části k vytvoření aplikace funkcí z image v registru kontejneru a konfiguraci s připojovací řetězec do Azure Storage.
V závislosti na registru kontejneru vytvořte aplikaci funkcí pomocí následujícího příkazu:
az functionapp create --name <APP_NAME> --storage-account <STORAGE_NAME> --resource-group AzureFunctionsContainers-rg --plan myPremiumPlan --image <LOGIN_SERVER>/azurefunctionsimage:v1.0.0 --registry-username <USERNAME> --registry-password <SECURE_PASSWORD>
V tomto příkladu nahraďte
<STORAGE_NAME>
názvem, který jste použili v předchozí části účtu úložiště. Nahraďte<APP_NAME>
také globálně jedinečný název, který je vhodný pro vás nebo<LOGIN_SERVER>
<DOCKER_ID>
s ID účtu docker Hubu nebo serverem Container Registry. Když nasazujete z vlastního registru kontejneru, název image označuje adresu URL registru.Při prvním vytvoření aplikace funkcí načte počáteční image z vašeho Centra Dockeru. Z registru kontejneru můžete také povolit průběžné nasazování do Azure.
Tip
Pomocí nastavení v souboru host.json můžete
DisableColor
zabránit zápisu řídicích znaků ANSI do protokolů kontejneru.Pomocí následujícího příkazu získáte připojovací řetězec pro účet úložiště, který jste vytvořili:
az storage account show-connection-string --resource-group AzureFunctionsContainers-rg --name <STORAGE_NAME> --query connectionString --output tsv
Pomocí příkazu se vrátí
az storage account show-connection-string
připojovací řetězec pro účet úložiště.Nahraďte
<STORAGE_NAME>
názvem účtu úložiště, který jste vytvořili dříve.Pomocí následujícího příkazu přidejte nastavení do aplikace funkcí:
az functionapp config appsettings set --name <APP_NAME> --resource-group AzureFunctionsContainers-rg --settings AzureWebJobsStorage=<CONNECTION_STRING>
Příkaz
az functionapp config appsettings set
vytvoří nastavení.V tomto příkazu nahraďte
<APP_NAME>
názvem vaší aplikace funkcí a<CONNECTION_STRING>
připojovací řetězec z předchozího kroku. Připojení by mělo být dlouhý kódovaný řetězec, který začíná řetězcemDefaultEndpointProtocol=
.Tato funkce teď může použít tento připojovací řetězec pro přístup k účtu úložiště.
Ověření funkcí v Azure
Když je image nasazená do vaší aplikace funkcí v Azure, můžete tuto funkci vyvolat prostřednictvím požadavků HTTP.
Spuštěním následujícího
az functionapp function show
příkazu získejte adresu URL nové funkce:az functionapp function show --resource-group AzureFunctionsContainers-rg --name <APP_NAME> --function-name HttpExample --query invokeUrlTemplate
Nahraďte
<APP_NAME>
názvem vaší aplikace funkcí.
- Pomocí adresy URL, kterou jste právě získali, volejte
HttpExample
koncový bod funkce a připojte řetězec?name=Functions
dotazu .
- K volání koncového bodu funkce použijte adresu URL, kterou jste právě získali
HttpExample
.
Když přejdete na tuto adresu URL, prohlížeč musí zobrazit podobný výstup jako při místním spuštění funkce.
Vyčištění prostředků
Pokud chcete pokračovat v práci s funkcí Azure Functions pomocí prostředků, které jste vytvořili v tomto článku, můžete všechny tyto prostředky ponechat na místě. Vzhledem k tomu, že jste vytvořili plán Premium pro Azure Functions, bude se vám v průběžných nákladech účtovat jedna nebo dvě USD za den.
Pokud se chcete vyhnout průběžným nákladům, odstraňte AzureFunctionsContainers-rg
skupinu prostředků, abyste vyčistili všechny prostředky v této skupině:
az group delete --name AzureFunctionsContainers-rg