Skapa dina första containerbaserade Azure Functions
I den här artikeln skapar du en funktionsapp som körs i en Linux-container och distribuerar den till Azure Functions.
För att distribuera funktionskoden till Azure Functions i en container krävs premiumplan eller dedikerad (App Service)-planvärd . Att slutföra den här artikeln medför kostnader på några us-dollar på ditt Azure-konto, vilket du kan minimera genom att rensa resurser när du är klar.
Andra alternativ för att distribuera din funktionsappcontainer till Azure är:
Azure Container Apps: Mer information finns i Distribuera en container till Azure Container-appar.
Azure Arc (för närvarande i förhandsversion): Mer information finns i Distribuera en container till Azure Arc.
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:
Installera Azure Functions Core Tools version 4.0.5198 eller en senare version.
- Installera Azure Functions Core Tools version 4.x.
- Installera en version av Node.js som stöds av Azure Functions.
- Installera en version av Python som stöds av Azure Functions.
Installera en version av Java Developer Kit som stöds av Azure Functions.
Installera Apache Maven version 3.0 eller senare.
- Azure CLI version 2.4 eller senare.
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 -DjavaVersion
anger 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"
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"
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 azurefunctionsimage
och 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.
Använd det här kommandot för att logga in på registerinstansen med dina aktuella Azure-autentiseringsuppgifter:
az acr login --name <REGISTRY_NAME>
I föregående kommando ersätter du
<REGISTRY_NAME>
med namnet på containerregisterinstansen.Använd det här kommandot 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.Använd det här kommandot för att skicka containern till registerinstansen:
docker push <LOGIN_SERVER>/azurefunctionsimage:v1.0.0
Skapa stödresurser för Azure-resurser för din funktion
Innan du kan distribuera din container till Azure måste du skapa tre resurser:
- En resursgrupp, som är en logisk container för relaterade resurser.
- Ett lagringskonto som används för att underhålla tillstånd och annan information om dina funktioner.
- En funktionsapp som tillhandahåller miljön för att köra funktionskoden. En funktionsapp mappar till ditt lokala funktionsprojekt och låter dig gruppera funktioner som en logisk enhet för enklare hantering, distribution och delning av resurser.
Använd följande kommandon för att skapa dessa objekt. Både Azure CLI och PowerShell stöds. Om du vill skapa dina Azure-resurser med Azure PowerShell behöver du även Az PowerShell-modulen version 5.9.0 eller senare.
Om du inte redan har gjort det loggar du in på Azure.
az login
Kommandot
az login
loggar in dig på ditt Azure-konto.Skapa en resursgrupp med namnet
AzureFunctionsContainers-rg
i den valda regionen.az group create --name AzureFunctionsContainers-rg --location <REGION>
Kommandot
az group create
skapar en resursgrupp. I kommandot ovan ersätter<REGION>
du med en region nära dig med hjälp av en tillgänglig regionkod som returneras från kommandot az account list-locations .Skapa ett allmänt lagringskonto i din resursgrupp och region.
az storage account create --name <STORAGE_NAME> --location <REGION> --resource-group AzureFunctionsContainers-rg --sku Standard_LRS
Kommandot
az storage account create
skapar lagringskontot.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. Lagringsnamn får endast innehålla siffror på 3 till 24 tecken och gemener.Standard_LRS
anger ett allmänt konto som stöds av Functions.Använd kommandot för att skapa en Premium-plan för Azure Functions med namnet
myPremiumPlan
på prisnivån Elastic Premium 1 (--sku EP1
), i din<REGION>
och i en Linux-container (--is-linux
).az functionapp plan create --resource-group AzureFunctionsContainers-rg --name myPremiumPlan --location <REGION> --number-of-workers 1 --sku EP1 --is-linux
Vi använder Premium-planen här, som kan skalas efter behov. Mer information om värdtjänster finns i Jämförelse av Azure Functions-värdplaner. Mer information om hur du beräknar kostnader finns på sidan Funktionspriser.
Kommandot skapar också en associerad Azure Application Insights-instans i samma resursgrupp, med vilken du kan övervaka funktionsappen och visa loggar. Mer information finns i Övervaka Azure Functions. Instansen medför inga kostnader förrän du aktiverar den.
Skapa och konfigurera en funktionsapp i Azure med avbildningen
En funktionsapp i Azure hanterar körningen av dina funktioner i din Azure Functions-värdplan. I det här avsnittet använder du Azure-resurserna från föregående avsnitt för att skapa en funktionsapp från en avbildning i ett containerregister och konfigurera den med en niska veze till Azure Storage.
Skapa en funktionsapp med följande kommando, beroende på ditt containerregister:
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>
I det här exemplet ersätter
<STORAGE_NAME>
du med det namn som du använde i föregående avsnitt för lagringskontot.<APP_NAME>
Ersätt också med ett globalt unikt namn som passar dig 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. Du kan också aktivera kontinuerlig distribution till Azure från containerregistret.
Dricks
Du kan använda
DisableColor
inställningen i filen host.json för att förhindra att ANSI-kontrolltecken skrivs till containerloggarna.Använd följande kommando för att hämta niska veze för lagringskontot som du skapade:
az storage account show-connection-string --resource-group AzureFunctionsContainers-rg --name <STORAGE_NAME> --query connectionString --output tsv
Niska veze för lagringskontot returneras med hjälp
az storage account show-connection-string
av kommandot .Ersätt
<STORAGE_NAME>
med namnet på lagringskontot som du skapade tidigare.Använd följande kommando för att lägga till inställningen i funktionsappen:
az functionapp config appsettings set --name <APP_NAME> --resource-group AzureFunctionsContainers-rg --settings AzureWebJobsStorage=<CONNECTION_STRING>
Kommandot
az functionapp config appsettings set
skapar inställningen.I det här kommandot ersätter du
<APP_NAME>
med namnet på funktionsappen och<CONNECTION_STRING>
med niska veze från föregående steg. Anslutningen ska vara en lång kodad sträng som börjar medDefaultEndpointProtocol=
.Funktionen kan nu använda den här niska veze för att komma åt lagringskontot.
Verifiera dina funktioner i Azure
När avbildningen har distribuerats till funktionsappen i Azure kan du nu anropa funktionen via HTTP-begäranden.
Kör följande
az functionapp function show
kommando för att hämta URL:en för den nya funktionen:az functionapp function show --resource-group AzureFunctionsContainers-rg --name <APP_NAME> --function-name HttpExample --query invokeUrlTemplate
Ersätt
<APP_NAME>
med namnet på funktionsappen.
- Använd url:en som du nyss hämtade för att anropa funktionsslutpunkten
HttpExample
och lägga till frågesträngen?name=Functions
.
- Använd den URL som du nyss hämtade för att anropa funktionsslutpunkten
HttpExample
.
När du navigerar till den här URL:en måste webbläsaren visa liknande utdata som när du körde funktionen lokalt.
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. Eftersom du har skapat en Premium-plan för Azure Functions får du en eller två USD per dag i löpande kostnader.
För att undvika löpande kostnader tar du bort AzureFunctionsContainers-rg
resursgruppen för att rensa alla resurser i gruppen:
az group delete --name AzureFunctionsContainers-rg