Uw eerste in een container geplaatste Azure Functions maken

In dit artikel maakt u een functie-app die wordt uitgevoerd in een Linux-container en implementeert u deze in Azure Functions.

Voor het implementeren van uw functiecode in Azure Functions in een container is een Premium-abonnement of een Toegewezen (App Service)-abonnement vereist. Voor het voltooien van dit artikel worden kosten in rekening gebracht van een paar Amerikaanse dollars in uw Azure-account, wat u kunt minimaliseren door resources op te schonen wanneer u klaar bent.

Aanbeveling

Voor de meeste containerized workloads host je je functie-apps in Azure Container Apps in plaats van in een Premium- of Dedicated plan. Container Apps biedt een volledig beheerde, serverloze omgeving met ingebouwde event-driven scaling, scale-to-zero en GPU-ondersteuning. Om te beginnen, zie Create your first containerized functions on Azure Container Apps.

Kies uw ontwikkelingstaal

Eerst gebruikt u Azure Functions-hulpprogramma's om uw projectcode te maken als een function-app in een Docker-container met behulp van een taalspecifiek Linux-basisafbeelding. Zorg ervoor dat u bovenaan het artikel uw gewenste taal selecteert.

Core Tools genereert automatisch een Dockerfile voor uw project die gebruikmaakt van de meest recente versie van de juiste basisimage voor uw functionstaal. Werk uw container regelmatig bij vanaf de meest recente basisinstallatiekopie en implementeer deze opnieuw vanuit de bijgewerkte versie van uw container. Zie Containerized Function-apps maken voor meer informatie.

Vereisten

Voordat u begint, moet u aan de volgende vereisten voldoen:

Als u nog geen abonnement op Azure hebt, maak dan een gratis account aan voordat u begint.

Als u de containerafbeelding van de functie-app die u maakt naar een containerregister wilt publiceren, hebt u een Docker-ID en Docker Desktop nodig die op uw lokale computer worden uitgevoerd. Als u geen Docker-id hebt, kunt u een Docker-account maken.

U moet ook de sectie Een containerregister maken van de containerregister-quickstart voltooien. Noteer de volledig gekwalificeerde aanmeldingsservernaam.

Een virtuele omgeving maken en activeren

Voer de volgende opdrachten uit in een geschikte map om een virtuele omgeving met de naam .venv te maken en te activeren. Zorg ervoor dat u een van de Python-versies gebruikt die worden ondersteund door Azure Functions.

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

Als Python het venv-pakket niet heeft geïnstalleerd in uw Linux-distributie, voert u de volgende opdracht uit:

sudo apt-get install python3-venv

U voert alle volgende opdrachten uit in deze geactiveerde virtuele omgeving.

Het lokale Functions-project maken en testen

Voer in een terminal of opdrachtprompt de volgende opdracht uit voor de taal die u hebt gekozen om een functie-app-project te maken in de huidige map:

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

Voer in een lege map de volgende opdracht uit om het Functions-project te genereren op basis van een Maven-archetype:

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

De parameter -DjavaVersion laat de Functions-runtime weten welke versie van Java moet worden gebruikt. Gebruik -DjavaVersion=11 als u uw functies wilt uitvoeren in Java 11. Wanneer u -DjavaVersion niet opgeeft, wordt Maven standaard ingesteld op Java 8. Zie Java-versies voor meer informatie.

Belangrijk

De omgevingsvariabele JAVA_HOME moet zijn ingesteld op de installatielocatie van de juiste versie van de JDK om dit artikel te kunnen voltooien.

Maven vraagt u om de waarden die nodig zijn om het project te voltooien tijdens de deployment. Volg de aanwijzingen en geef de volgende informatie op:

Snel Waarde Beschrijving
groupId com.fabrikam Een waarde die uw project uniek identificeert binnen alle projecten, overeenkomstig de regels voor de naamgeving van pakketten voor Java.
artifactId fabrikam-functions Een waarde die bestaat uit de naam van het JAR-bestand, zonder een versienummer.
versie 1.0-SNAPSHOT Selecteer de standaardwaarde.
pakket com.fabrikam.functions Een waarde die het Java-pakket aangeeft voor de gegenereerde functiecode. Gebruik de standaard.

Typ Y of druk op Enter om te bevestigen.

Maven maakt de projectbestanden in een nieuwe map met de naam artifactId, in dit voorbeeld fabrikam-functions.

De --docker optie genereert een Dockerfile voor het project, waarmee een geschikte container wordt gedefinieerd voor gebruik met Azure Functions en de geselecteerde runtime.

Navigeer naar de projectmap:

cd fabrikam-functions

Gebruik de volgende opdracht om een functie toe te voegen aan uw project, waarbij het --name argument de unieke naam van uw functie is en het --template argument de trigger van de functie aangeeft. func new maakt een C#-codebestand in uw project.

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

Gebruik de volgende opdracht om een functie toe te voegen aan uw project, waarbij het --name argument de unieke naam van uw functie is en het --template argument de trigger van de functie aangeeft. func new maakt een submap met de naam van de functie die een configuratiebestand bevat met de naam function.json.

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

Als u de functie lokaal wilt testen, start u de lokale Azure Functions-runtimehost in de hoofdmap van de projectmap. Om ervoor te zorgen dat de functie later kan worden aangeroepen wanneer deze wordt gehost in Docker, controleert u of het autorisatieniveau is ingesteld AuthorizationLevel.Anonymousop of stelt u deze in als deze nog niet is geconfigureerd.

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

Nadat u het HttpExample eindpunt in de uitvoer ziet, navigeert u naar dat eindpunt. U ziet nu een welkomstbericht in de antwoorduitvoer.

Nadat u het eindpunt HttpExample op de uitvoer ziet, gaat u naar http://localhost:7071/api/HttpExample?name=Functions. In de browser moet een 'hello'-bericht worden weergegeven dat Functions, de waarde die is opgegeven voor de name zoekparameter, herhaalt.

Druk op Ctrl+C (Command+C in macOS) om de host te stoppen.

Bouw de containerafbeelding en verifieer lokaal

(Optioneel) Bekijk het Dockerfile in de hoofdmap van het project. In het Dockerfile wordt de vereiste omgeving beschreven voor het uitvoeren van de functie-app in Linux. De complete lijst met ondersteunde basisinstallatiekopieën voor Azure Functions vindt u op deze pagina over basisinstallatiekopieën van Azure Functions.

Voer in de hoofdmap van het project de opdracht docker build uit, geef een naam op als azurefunctionsimageen tag als v1.0.0. Vervang <DOCKER-ID> door de ID van uw Docker Hub-account. Met deze opdracht wordt de Docker-image voor de container gebouwd.

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

Wanneer de opdracht is voltooid, kunt u de nieuwe container lokaal uitvoeren.

Als u de build wilt verifiëren, voert u de image in een lokale container uit met behulp van de docker run opdracht, vervangt u <DOCKER-ID> opnieuw door uw Docker Hub-account-ID en voegt u het poortargument toe als -p 8080:80:

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

Nadat het image in de lokale container is gestart, ga naar http://localhost:8080/api/HttpExample, dat hetzelfde begroetingsbericht als voorheen moet weergeven. Omdat de door HTTP geactiveerde functie die u hebt gemaakt anonieme autorisatie gebruikt, kunt u de functie aanroepen die in de container wordt uitgevoerd zonder dat u een toegangssleutel hoeft te verkrijgen. Zie autorisatiesleutels voor meer informatie.

Nadat de image in de lokale container is gestart, bladert u naar http://localhost:8080/api/HttpExample?name=Functions, waar hetzelfde 'hello' bericht als voorheen moet worden weergegeven. Omdat de door HTTP geactiveerde functie die u hebt gemaakt anonieme autorisatie gebruikt, kunt u de functie aanroepen die in de container wordt uitgevoerd zonder dat u een toegangssleutel hoeft te verkrijgen. Zie autorisatiesleutels voor meer informatie.

Nadat u de function-app in de container hebt gecontroleerd, drukt u op Ctrl+C (Command+C op macOS) om de uitvoering te stoppen.

De containerafbeelding publiceren naar een register

Als u de containerinstallatiekopieën beschikbaar wilt maken voor implementatie naar een hostingomgeving, moet u deze naar een containerregister pushen. Als best practice voor beveiliging moet u een exemplaar van Azure Container Registry gebruiken en beheerde identiteitsgebaseerde verbindingen afdwingen. Docker Hub vereist dat u zich verifieert met behulp van gedeelde geheimen, waardoor uw implementaties kwetsbaarder worden.

Azure Container Registry is een privéregisterservice voor het bouwen, opslaan en beheren van containerinstallatiekopieën en gerelateerde artefacten. U moet een privéregisterservice gebruiken voor het publiceren van uw containers naar Azure-services.

  1. Gebruik deze opdracht om u aan te melden bij uw registerexemplaar met behulp van uw huidige Azure-aanmeldgegevens. Vervang <REGISTRY-NAME> door de naam van uw Container Registry-instantie.

    az acr login --name <REGISTRY-NAME>
    
  2. Gebruik deze opdracht om uw image te taggen met de volledig gekwalificeerde naam van uw register-loginserver. Vervang door <LOGIN-SERVER> de volledig gekwalificeerde naam van uw registeraanmeldingsserver en <DOCKER-ID> door uw Docker-id.

    docker tag <DOCKER-ID>/azurefunctionsimage:v1.0.0 <LOGIN-SERVER>/azurefunctionsimage:v1.0.0 
    
  3. Gebruik deze commando om de container naar uw registerinstantie te pushen.

    docker push <LOGIN-SERVER>/azurefunctionsimage:v1.0.0
    

Ondersteunende Azure-resources maken voor uw functie

Voordat u uw container in Azure kunt implementeren, moet u drie resources maken:

  • Een resourcegroep, een logische container voor gerelateerde resources.
  • Een opslagaccount dat wordt gebruikt voor het onderhouden van de status en andere informatie over uw functies.
  • Een functie-app, die de omgeving biedt voor het uitvoeren van uw functiecode. Een functie-app wordt gekoppeld aan uw lokale functieproject en maakt het mogelijk om functies te groeperen als een logische eenheid, zodat u resources eenvoudiger kunt beheren, implementeren en delen.

Belangrijk

Dit artikel laat momenteel zien hoe u verbinding maakt met zowel het Azure Storage-account als uw containerregister met behulp van verbindingsreeks s en andere gedeelde geheime referenties. Voor de beste beveiliging gebruik je alleen een beheerde, identiteitsgebaseerde verbinding met zowel je opslagaccount als met Azure Container Registry via Microsoft Entra-authenticatie. Zie de ontwikkelaarshandleiding voor Functions voor meer informatie.

Gebruik de volgende opdrachten om deze items te maken. Zowel Azure CLI als PowerShell worden ondersteund. Om je Azure-resources te maken met Azure PowerShell, heb je ook de Az PowerShell-module nodig, versie 5.9.0 of later.

  1. Als je dat nog niet hebt gedaan, log dan in op Azure.

    az login
    

    Met de az login opdracht meldt u zich aan bij uw Azure-account.

  2. Maak een resourcegroep met de naam AzureFunctionsContainers-rg in uw gekozen regio.

    az group create --name AzureFunctionsContainers-rg --location <REGION>
    

    Met de az group create opdracht maakt u een resourcegroep. In het voorgaande commando vervangt <REGION> u deze door een regio bij u in de buurt, met behulp van een beschikbare regiocode die wordt teruggegeven door het az account list-locations-commando .

  3. Maak een opslagaccount voor algemeen gebruik in uw resourcegroep en regio.

    az storage account create --name <STORAGE_NAME> --location <REGION> --resource-group AzureFunctionsContainers-rg --sku Standard_LRS
    

    Met de az storage account create opdracht wordt het opslagaccount gemaakt.

    In het vorige voorbeeld vervang <STORAGE_NAME> je door een naam die je kiest en die uniek is in Azure Storage. Opslagnamen kunnen alleen 3 tot 24 tekens, cijfers en kleine letters bevatten. Standard_LRS specificeert een algemeen account dat wordt ondersteund door Functions.

  4. Gebruik de opdracht om een Premium-abonnement voor Azure Functions te maken met de naam myPremiumPlan in de prijscategorie Elastic Premium 1 (--sku EP1), in uw <REGION>, en in een Linux-container (--is-linux).

    az functionapp plan create --resource-group AzureFunctionsContainers-rg --name myPremiumPlan --location <REGION> --number-of-workers 1 --sku EP1 --is-linux
    

    We gebruiken hier het Premium-abonnement, maar dit kan naar behoefte worden aangepast. Zie de vergelijking van Azure Functions-hostingabonnementen voor meer informatie over hosting. Zie de pagina met prijzen van Functions voor meer informatie over het berekenen van kosten.

    Met de opdracht maakt u ook een gekoppeld Azure-toepassing Insights-exemplaar in dezelfde resourcegroep, waarmee u uw functie-app kunt bewaken en logboeken kunt bekijken. Voor meer informatie, zie Monitor Azure Functions. Er worden pas kosten in rekening gebracht voor de instantie als u deze activeert.

Een function app in Azure maken en configureren met de image

Een functie-app in Azure beheert de uitvoering van uw functies in uw Azure Functions-hostingabonnement. In deze sectie gebruikt u de Azure-resources uit de vorige sectie om een functieapp te maken op basis van een image in een containerregister en configureert u deze met een verbindingsstring naar Azure Storage.

  1. Maak een functie-app aan door het volgende commando te gebruiken, afhankelijk van je 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> 
    

    Vervang in dit voorbeeld door <STORAGE_NAME> de naam die u in de vorige sectie hebt gebruikt voor het opslagaccount. Vervang ook door <APP_NAME> een wereldwijd unieke naam die geschikt is voor u en <DOCKER_ID> of <LOGIN_SERVER> door uw Docker Hub-account-id of containerregisterserver. Wanneer u implementeert vanuit een aangepaste containerregister, geeft de imagenaam de URL van het register aan.

    Wanneer je de functie-applicatie voor het eerst maakt, wordt de initiële installatiekopie opgehaald uit je Docker Hub. U kunt ook doorlopende implementatie naar Azure vanuit uw containerregister inschakelen.

    Aanbeveling

    Gebruik de DisableColor instelling in het host.json-bestand om te voorkomen dat ANSI-controlekarakters naar de containerlogs worden geschreven.

  2. Gebruik de volgende opdracht om de verbindingsreeks op te halen voor het opslagaccount dat u hebt gemaakt:

    az storage account show-connection-string --resource-group AzureFunctionsContainers-rg --name <STORAGE_NAME> --query connectionString --output tsv
    

    De verbindingsreeks voor het opslagaccount wordt geretourneerd met behulp van de az storage account show-connection-string opdracht.

    Belangrijk

    Dit artikel laat momenteel zien hoe u verbinding maakt met het standaardopslagaccount met behulp van een verbindingsreeks. Voor de beste beveiliging moet u in plaats daarvan een op beheerde identiteit gebaseerde verbinding met Azure Storage maken met behulp van Microsoft Entra-verificatie. Zie de ontwikkelaarshandleiding voor Functions voor meer informatie.

    Vervang door <STORAGE_NAME> de naam van het opslagaccount dat u eerder hebt gemaakt.

  3. Gebruik de volgende opdracht om de instelling toe te voegen aan de functie-app:

    az functionapp config appsettings set --name <APP_NAME> --resource-group AzureFunctionsContainers-rg --settings AzureWebJobsStorage=<CONNECTION_STRING>
    

    Gebruik het az functionapp config appsettings set commando om de instelling te maken.

    Vervang in deze opdracht <APP_NAME> door de naam van uw functie-app en <CONNECTION_STRING> door de verbindingsreeks uit de vorige stap. De verbindingsreeks is een lange gecodeerde string die begint met DefaultEndpointProtocol=.

  4. De functie kan deze verbindingsreeks nu gebruiken om toegang te krijgen tot het opslagaccount.

Uw functies controleren in Azure

Nu de installatiekopie is geïmplementeerd in uw functie-app in Azure, kunt u de functie aanroepen via HTTP-verzoeken.

  1. Voer de volgende az functionapp function show opdracht uit om de URL van uw nieuwe functie op te halen:

    az functionapp function show --resource-group AzureFunctionsContainers-rg --name <APP_NAME> --function-name HttpExample --query invokeUrlTemplate 
    

    Vervang door <APP_NAME> de naam van uw functie-app.

  1. Gebruik de URL die u zojuist hebt verkregen om het HttpExample functie-eindpunt aan te roepen, waarbij de querytekenreeks ?name=Functionswordt toegevoegd.
  1. Gebruik de URL die u zojuist hebt verkregen om het HttpExample functie-eindpunt aan te roepen.

Wanneer u naar deze URL navigeert, moet de browser vergelijkbare uitvoer weergeven als toen u de functie lokaal uitvoerde.

Resources opschonen

Als je wilt blijven werken met Azure Functions met de resources die je in dit artikel hebt gemaakt, kun je al die resources laten staan. Omdat je een Premium-abonnement voor Azure Functions hebt aangemaakt, heb je doorlopende kosten van één of twee USD per dag.

Om voortdurende kosten te vermijden, verwijder je de AzureFunctionsContainers-rg resourcegroep om alle resources in die groep op te ruimen.

az group delete --name AzureFunctionsContainers-rg

Volgende stappen