Vytvoření první kontejnerizované služby Azure Functions ve službě Azure Arc (Preview)

V tomto článku vytvoříte aplikaci funkcí spuštěnou v kontejneru Linuxu a nasadíte ji do clusteru Kubernetes s podporou Azure Arc z registru kontejneru. Při vytváření vlastního kontejneru můžete přizpůsobit spouštěcí prostředí pro vaši aplikaci funkcí. Další informace najdete v tématu App Service, Functions a Logic Apps ve službě Azure Arc.

Poznámka:

Podpora nasazení vlastního kontejneru do clusteru Kubernetes s podporou Azure Arc je aktuálně ve verzi Preview.

Funkce můžete publikovat také do clusteru Kubernetes s podporou Azure Arc, aniž byste nejprve vytvořili kontejner. Další informace najdete v tématu Vytvoření první funkce ve službě Azure Arc (Preview)

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:

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-functionsv 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" --authlevel anonymous

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" --authlevel anonymous

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 azurefunctionsimagea 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=Functionspří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.

  1. Pomocí následujícího příkazu se přihlaste k instanci registru:

    az acr login --name <REGISTRY_NAME>
    

    V předchozím příkazu nahraďte <REGISTRY_NAME> názvem vaší instance Container Registry.

  2. Pomocí následujícího 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.

  3. Pomocí následujícího příkazu nasdílejte kontejner do instance registru:

    docker push <LOGIN_SERVER>/azurefunctionsimage:v1.0.0
    
  4. Pomocí následujícího příkazu povolte předdefinovaný účet správce, aby se služba Functions mohla připojit k registru pomocí uživatelského jména a hesla:

    az acr update -n <REGISTRY_NAME> --admin-enabled true
    
  1. Pomocí následujícího příkazu načtěte uživatelské jméno a heslo správce, které funkce musí připojit k registru:

    az acr credential show -n <REGISTRY_NAME> --query "[username, passwords[0].value]" -o tsv
    

    Důležité

    Uživatelské jméno a heslo účtu správce jsou důležité přihlašovací údaje. Nezapomeňte je bezpečně ukládat a nikdy do přístupného umístění, jako je veřejné úložiště.

Vytvoření prostředí Kubernetes služby App Service

Než začnete, musíte vytvořit prostředí Kubernetes služby App Service pro cluster Kubernetes s podporou Azure Arc.

Poznámka:

Při vytváření prostředí nezapomeňte poznamenat název vlastního umístění i název skupiny prostředků, která obsahuje vlastní umístění. Můžete je použít k vyhledání ID vlastního umístění, které budete potřebovat při vytváření aplikace funkcí v prostředí.

Pokud jste prostředí nevytvořili, obraťte se na správce clusteru.

Přidání rozšíření Azure CLI

Spusťte prostředí Bash v Azure Cloud Shellu.

Protože tyto příkazy rozhraní příkazového řádku ještě nejsou součástí základní sady rozhraní příkazového řádku, přidejte je následujícími příkazy:

az extension add --upgrade --yes --name customlocation
az extension remove --name appservice-kube
az extension add --upgrade --yes --name appservice-kube

Vytvoření zdrojů Azure

Před nasazením kontejneru do nového prostředí Kubernetes služby App Service je potřeba vytvořit další dva prostředky:

  • Účet úložiště. Tento článek sice vytvoří účet úložiště, ale v některých případech se nemusí vyžadovat účet úložiště. Další informace najdete v článku o aspektech úložiště v clusterech s podporou Služby Azure Arc.
  • Aplikace funkcí, která poskytuje kontext pro spuštění kontejneru. Aplikace funkcí běží v prostředí Kubernetes služby App Service a mapuje se na místní projekt funkcí. Aplikace funkcí umožňuje seskupit funkce jako logickou jednotku pro snadnější správu, nasazení a sdílení prostředků.

Poznámka:

Aplikace funkcí běží v prostředí Kubernetes služby App Service v plánu Dedicated (App Service). Když vytvoříte aplikaci funkcí bez existujícího plánu, vytvoří se pro vás plán.

Vytvoření účtu úložiště

Pomocí příkazu az storage account create vytvořte účet úložiště pro obecné účely ve vaší skupině prostředků a oblasti:

az storage account create --name <STORAGE_NAME> --location westeurope --resource-group myResourceGroup --sku Standard_LRS

Poznámka:

V některých případech se nemusí vyžadovat účet úložiště. Další informace najdete v článku o aspektech úložiště v clusterech s podporou Služby Azure Arc.

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 musí obsahovat jenom číslice se třemi až 24 znaky a malými písmeny. Standard_LRS určuje účet pro obecné účely, který služba Functions podporuje. Hodnota --location je standardní oblast Azure.

Vytvoření aplikace funkcí

Spuštěním příkazu az functionapp create vytvořte novou aplikaci funkcí v prostředí.

az functionapp create --name <APP_NAME> --custom-location <CUSTOM_LOCATION_ID> --storage-account <STORAGE_NAME> --resource-group AzureFunctionsContainers-rg --image <LOGIN_SERVER>/azurefunctionsimage:v1.0.0 --registry-username <USERNAME> --registry-password <SECURE_PASSWORD> 

V tomto příkladu nahraďte <CUSTOM_LOCATION_ID> ID vlastního umístění, které jste určili pro prostředí Kubernetes služby App Service. Nahraďte <STORAGE_NAME> také názvem účtu, který jste použili v předchozím kroku, <APP_NAME> globálně jedinečným názvem <DOCKER_ID> nebo <LOGIN_SERVER> 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.

Nastavení požadovaných aplikací

Spuštěním následujících příkazů vytvořte nastavení aplikace pro účet úložiště připojovací řetězec:

storageConnectionString=$(az storage account show-connection-string --resource-group AzureFunctionsContainers-rg --name <STORAGE_NAME> --query connectionString --output tsv)
az functionapp config appsettings set --name <app_name> --resource-group AzureFunctionsContainers-rg --settings AzureWebJobsStorage=$storageConnectionString

Tento kód musí být spuštěný buď v Cloud Shellu, nebo v prostředí Bash na místním počítači. Nahraďte <STORAGE_NAME> názvem účtu úložiště a <APP_NAME> názvem aplikace funkcí.

Vyvolání funkce v Azure

Vzhledem k tomu, že vaše funkce používá trigger HTTP, vyvoláte ji tak, že v prohlížeči nebo pomocí nástroje, jako je curl, vytvoří požadavek HTTP na jeho adresu URL.

Zkopírujte úplnou adresu URL vyvolání zobrazené ve výstupu příkazu publish do adresního řádku prohlížeče a připojte parametr ?name=Functionsdotazu . Prohlížeč by měl zobrazit podobný výstup jako při místním spuštění funkce.

Výstup funkce spuštěné v Azure v prohlížeči

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ě.

Po dokončení práce s tímto nasazením aplikace funkcí odstraňte AzureFunctionsContainers-rg skupinu prostředků, aby se vyčistily všechny prostředky v této skupině:

az group delete --name AzureFunctionsContainers-rg

Tím se odeberou jenom prostředky vytvořené v tomto článku. Základní prostředí Azure Arc zůstane na místě.

Další kroky