Skapa dina första containerbaserade Azure Functions på Azure Arc (förhandsversion)

I den här artikeln skapar du en funktionsapp som körs i en Linux-container och distribuerar den till ett Azure Arc-aktiverat Kubernetes-kluster från ett containerregister. När du skapar en egen container kan du anpassa körningsmiljön för funktionsappen. Mer information finns i App Service, Functions och Logic Apps i Azure Arc.

Kommentar

Stöd för att distribuera en anpassad container till ett Azure Arc-aktiverat Kubernetes-kluster finns för närvarande i förhandsversion.

Du kan också publicera dina funktioner till ett Azure Arc-aktiverat Kubernetes-kluster utan att först skapa en container. Mer information finns i Skapa din första funktion i Azure Arc (förhandsversion)

Välj programmeringsspråk

Först använder du Azure Functions-verktyg för att skapa din projektkod som en funktionsapp i en Docker-container med hjälp av en språkspecifik Linux-basavbildning. Se till att välja valfritt språk överst i artikeln.

Core Tools genererar automatiskt en Dockerfile för projektet som använder den senaste versionen av rätt basavbildning för funktionsspråket. Du bör regelbundet uppdatera containern från den senaste basavbildningen och distribuera om från den uppdaterade versionen av containern. Mer information finns i Skapa containerbaserade funktionsappar.

Förutsättningar

Innan du börjar måste du ha följande krav på plats:

Om du inte har en Azure-prenumeration skapar du ett kostnadsfritt Azure-konto innan du börjar.

Om du vill publicera den containerbaserade funktionsappavbildningen som du skapar i ett containerregister behöver du ett Docker-ID och Docker som körs på den lokala datorn. Om du inte har något Docker-ID kan du skapa ett Docker-konto.

Du måste också slutföra avsnittet Skapa ett containerregister i snabbstarten containerregister för att skapa en registerinstans. Anteckna namnet på din fullständigt kvalificerade inloggningsserver.

Skapa och aktivera en virtuell miljö

I en lämplig mapp kör du följande kommandon för att skapa och aktivera en virtuell miljö med namnet .venv. Se till att använda någon av De Python-versioner som stöds av Azure Functions.

python -m venv .venv
source .venv/bin/activate

Om Python inte installerade venv-paketet på Linux-distributionen kör du följande kommando:

sudo apt-get install python3-venv

Du kör alla efterföljande kommandon i den här aktiverade virtuella miljön.

Skapa och testa projektet med lokala funktioner

I en terminal eller kommandotolk kör du följande kommando för det valda språket för att skapa ett funktionsappsprojekt i den aktuella mappen:

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

I en tom mapp kör du följande kommando för att generera Functions-projektet från en Maven-arketyp:

mvn archetype:generate -DarchetypeGroupId=com.microsoft.azure -DarchetypeArtifactId=azure-functions-archetype -DjavaVersion=8 -Ddocker

Parametern -DjavaVersion talar om för Functions-körningen vilken version av Java som ska användas. Använd -DjavaVersion=11 om du vill att funktionerna ska köras på Java 11. När du inte anger -DjavaVersionanger Maven som standard Java 8. Mer information finns i Java-versioner.

Viktigt!

Miljövariabeln JAVA_HOME måste anges till installationsplatsen för rätt version av JDK för att slutföra den här artikeln.

Maven ber dig om de värden som behövs för att slutföra genereringen av projektet vid distributionen. Följ anvisningarna och ange följande information:

Prompt Värde beskrivning
Groupid com.fabrikam Ett värde som unikt identifierar projektet i alla projekt, enligt namngivningsreglerna för paket för Java.
artifactId fabrikam-functions Ett värde som är namnet på jar-filen, utan ett versionsnummer.
Version 1.0-SNAPSHOT Välj standardvärdet.
Paket com.fabrikam.functions Ett värde som är Java-paketet för den genererade funktionskoden. Använd standardvärdet.

Skriv Y eller tryck på Retur för att bekräfta.

Maven skapar projektfilerna i en ny mapp med namnet artifactId, som i det här exemplet är fabrikam-functions.

Alternativet --docker genererar en Dockerfile för projektet, som definierar en lämplig container för användning med Azure Functions och den valda körningen.

Navigera till projektmappen:

cd fabrikam-functions

Använd följande kommando för att lägga till en funktion i projektet, där --name argumentet är det unika namnet på din funktion och --template argumentet anger funktionens utlösare. func new skapar en C#-kodfil i projektet.

func new --name HttpExample --template "HTTP trigger" --authlevel anonymous

Använd följande kommando för att lägga till en funktion i projektet, där --name argumentet är det unika namnet på din funktion och --template argumentet anger funktionens utlösare. func new skapar en undermapp som matchar funktionsnamnet som innehåller en konfigurationsfil med namnet function.json.

func new --name HttpExample --template "HTTP trigger" --authlevel anonymous

Om du vill testa funktionen lokalt startar du den lokala Azure Functions-körningsvärden i roten i projektmappen.

func start  
func start  
npm install
npm start
mvn clean package  
mvn azure-functions:run

När slutpunkten har skrivits till utdata går du HttpExample till slutpunkten. Du bör se ett välkomstmeddelande i svarsutdata.

När du ser slutpunkten HttpExample som skrivits till utdata går du till http://localhost:7071/api/HttpExample?name=Functions. Webbläsaren måste visa ett "hello"-meddelande som ekar tillbaka Functions, värdet som anges till name frågeparametern.

Tryck på Ctrl+C (Kommando+C på macOS) för att stoppa värden.

Skapa containeravbildningen och verifiera lokalt

(Valfritt) Granska Dockerfile i roten för projektmappen. Dockerfile beskriver den miljö som krävs för att köra funktionsappen i Linux. Den fullständiga listan över basavbildningar som stöds för Azure Functions finns på basavbildningssidan för Azure Functions.

Kör kommandot docker build i rotprojektmappen, ange ett namn som azurefunctionsimageoch tagga som v1.0.0. Ersätt <DOCKER_ID> med ditt konto-ID för Docker Hub. Det här kommandot skapar Docker-avbildningen för containern.

docker build --tag <DOCKER_ID>/azurefunctionsimage:v1.0.0 .

När kommandot har slutförts kan du köra den nya containern lokalt.

Kontrollera bygget genom att köra avbildningen i en lokal container med kommandot docker run , ersätta <DOCKER_ID> igen med ditt Docker Hub-konto-ID och lägga till portargumentet som -p 8080:80:

docker run -p 8080:80 -it <DOCKER_ID>/azurefunctionsimage:v1.0.0

När avbildningen startar i den lokala containern bläddrar du till http://localhost:8080/api/HttpExample, som måste visa samma hälsningsmeddelande som tidigare. Eftersom den HTTP-utlösta funktion som du skapade använder anonym auktorisering kan du anropa funktionen som körs i containern utan att behöva hämta en åtkomstnyckel. Mer information finns i auktoriseringsnycklar.

När avbildningen startar i den lokala containern bläddrar du till http://localhost:8080/api/HttpExample?name=Functions, som måste visa samma "hello"-meddelande som tidigare. Eftersom den HTTP-utlösta funktion som du skapade använder anonym auktorisering kan du anropa funktionen som körs i containern utan att behöva hämta en åtkomstnyckel. Mer information finns i auktoriseringsnycklar.

När du har verifierat funktionsappen i containern trycker du på Ctrl+C (Kommando+C på macOS) för att stoppa körningen.

Publicera containeravbildningen till ett register

Om du vill göra containeravbildningen tillgänglig för distribution till en värdmiljö måste du skicka den till ett containerregister.

Azure Container Registry är en privat registertjänst för att skapa, lagra och hantera containeravbildningar och relaterade artefakter. Du bör använda en privat registertjänst för att publicera dina containrar till Azure-tjänster.

  1. Använd följande kommando för att logga in på registerinstansen:

    az acr login --name <REGISTRY_NAME>
    

    I föregående kommando ersätter du <REGISTRY_NAME> med namnet på containerregisterinstansen.

  2. Använd följande kommando för att tagga avbildningen med det fullständigt kvalificerade namnet på registerinloggningsservern:

    docker tag <DOCKER_ID>/azurefunctionsimage:v1.0.0 <LOGIN_SERVER>/azurefunctionsimage:v1.0.0 
    

    Ersätt <LOGIN_SERVER> med det fullständigt kvalificerade namnet på registerinloggningsservern och <DOCKER_ID> med ditt Docker-ID.

  3. Använd följande kommando för att skicka containern till registerinstansen:

    docker push <LOGIN_SERVER>/azurefunctionsimage:v1.0.0
    
  4. Använd följande kommando för att aktivera det inbyggda administratörskontot så att Functions kan ansluta till registret med ett användarnamn och lösenord:

    az acr update -n <REGISTRY_NAME> --admin-enabled true
    
  1. Använd följande kommando för att hämta administratörens användarnamn och lösenord, som Functions måste ansluta till registret:

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

    Viktigt!

    Användarnamnet och lösenordet för administratörskontot är viktiga autentiseringsuppgifter. Se till att lagra dem säkert och aldrig på en tillgänglig plats som en offentlig lagringsplats.

Skapa en App Service Kubernetes-miljö

Innan du börjar måste du skapa en App Service Kubernetes-miljö för ett Azure Arc-aktiverat Kubernetes-kluster.

Kommentar

När du skapar miljön bör du anteckna både det anpassade platsnamnet och namnet på den resursgrupp som innehåller den anpassade platsen. Du kan använda dessa för att hitta det anpassade plats-ID som du behöver när du skapar din funktionsapp i miljön.

Om du inte skapade miljön kontrollerar du med klusteradministratören.

Lägga till Azure CLI-tillägg

Starta Bash-miljön i Azure Cloud Shell.

Eftersom dessa CLI-kommandon ännu inte är en del av cli-kärnuppsättningen lägger du till dem med följande kommandon:

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

Skapa Azure-resurser

Innan du kan distribuera containern till din nya App Service Kubernetes-miljö måste du skapa ytterligare två resurser:

  • Ett lagringskonto. Även om den här artikeln skapar ett lagringskonto kanske det i vissa fall inte krävs något lagringskonto. Mer information finns i Azure Arc-aktiverade kluster i artikeln om lagringsöverväganden.
  • En funktionsapp som tillhandahåller kontexten för att köra containern. Funktionsappen körs i App Service Kubernetes-miljön och mappar till ditt lokala funktionsprojekt. I en funktionsapp kan du gruppera funktioner som en logisk enhet så att det blir enklare att hantera, distribuera och dela resurser.

Kommentar

Funktionsappar körs i en App Service Kubernetes-miljö på en dedikerad plan (App Service). När du skapar din funktionsapp utan en befintlig plan skapas en plan åt dig.

Skapa lagringskonto

Använd kommandot az storage account create för att skapa ett allmänt lagringskonto i din resursgrupp och region:

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

Kommentar

I vissa fall kanske inte ett lagringskonto krävs. Mer information finns i Azure Arc-aktiverade kluster i artikeln om lagringsöverväganden.

I föregående exempel ersätter du <STORAGE_NAME> med ett namn som är lämpligt för dig och unikt i Azure Storage. Namn får endast innehålla siffror med tre till 24 tecken och gemener. Standard_LRS anger ett konto för generell användning som stöds av Functions. Värdet --location är en Azure-standardregion.

Skapa funktionsappen

Kör kommandot az functionapp create för att skapa en ny funktionsapp i miljön.

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> 

I det här exemplet ersätter <CUSTOM_LOCATION_ID> du med ID:t för den anpassade plats som du fastställde för App Service Kubernetes-miljön. Ersätt <STORAGE_NAME> också med namnet på det konto som du använde i föregående steg, <APP_NAME> med ett globalt unikt namn och <DOCKER_ID> eller <LOGIN_SERVER> med ditt Docker Hub-konto-ID eller Container Registry-server. När du distribuerar från ett anpassat containerregister anger avbildningsnamnet registrets URL.

När du först skapar funktionsappen hämtas den första avbildningen från Docker Hub.

Ange nödvändiga appinställningar

Kör följande kommandon för att skapa en appinställning för lagringskontot anslutningssträng:

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

Den här koden måste köras antingen i Cloud Shell eller i Bash på den lokala datorn. Ersätt <STORAGE_NAME> med namnet på lagringskontot och <APP_NAME> med funktionsappens namn.

Anropa funktionen i Azure

Eftersom funktionen använder en HTTP-utlösare anropar du den genom att göra en HTTP-begäran till dess URL i webbläsaren eller med ett verktyg som curl.

Kopiera den fullständiga Anropa URL:en som visas i utdata från publiceringskommandot till ett webbläsaradressfält och lägga till frågeparametern ?name=Functions. Webbläsaren bör visa liknande utdata som när du körde funktionen lokalt.

The output of the function run on Azure in a browser

Rensa resurser

Om du vill fortsätta arbeta med Azure Function med hjälp av de resurser som du skapade i den här artikeln kan du lämna alla dessa resurser på plats.

När du är klar med distributionen av den här funktionsappen AzureFunctionsContainers-rg tar du bort resursgruppen för att rensa alla resurser i gruppen:

az group delete --name AzureFunctionsContainers-rg

Detta tar bara bort de resurser som skapas i den här artikeln. Den underliggande Azure Arc-miljön finns kvar.

Nästa steg