Werken met containers en Azure Functions
In dit artikel wordt de ondersteuning gedemonstreerd die Azure Functions biedt voor het werken met in containers geplaatste functie-apps die worden uitgevoerd in een Azure Container Apps-omgeving. Zie Azure Container Apps die als host fungeren voor Azure Functions voor meer informatie.
In dit artikel wordt de ondersteuning beschreven die Azure Functions biedt voor het werken met functie-apps die worden uitgevoerd in Linux-containers.
Kies de hostingomgeving voor uw functie-app in containers bovenaan het artikel.
Als u meteen wilt beginnen, ziet u in het volgende artikel hoe u uw eerste functie maakt die wordt uitgevoerd in een Linux-container en hoe u de installatiekopieën vanuit een containerregister implementeert in een ondersteunde Azure-hostingservice:
Uw eerste in containers geplaatste Azure Functions maken in Azure Container Apps
Zie Azure Container Apps-hosting van Azure Functions voor meer informatie over implementaties in Azure Container Apps.
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.
Functie-apps in containers maken
Met Functions kunt u uw functie-apps eenvoudig implementeren en uitvoeren als Linux-containers, die u maakt en onderhoudt. Functions beheert een set taalspecifieke basisafbeeldingen die u kunt gebruiken bij het maken van containerfunctie-apps.
Belangrijk
Wanneer u uw eigen containers maakt, moet u de basisimage van uw container bijwerken naar de meest recente ondersteunde basisimage. Ondersteunde basisafbeeldingen voor Azure Functions zijn taalspecifiek en bevinden zich in de Azure Functions-basiskopie-repositories.
Het Functions-team zet zich in voor het publiceren van maandelijkse updates voor deze basisafbeeldingen. Regelmatige updates bevatten de meest recente secundaire versie-updates en beveiligingscorrecties voor zowel de Functions-runtime als de talen. Werk uw container regelmatig bij vanaf de meest recente basisinstallatiekopie en implementeer de bijgewerkte versie van uw container opnieuw. Zie Aangepaste containers onderhouden voor meer informatie.
Zie Een functie-app maken in een lokale container voor een volledig voorbeeld van het aanmaken van de lokale containerfunctie-app vanaf de commandoregel en het publiceren van het beeld naar een containerregister.
Het Dockerfile genereren
Functions-hulpprogramma's bieden een Docker-optie waarmee een Dockerfile wordt gegenereerd met uw functions-codeproject. U kunt dit bestand met Docker gebruiken om uw functies te maken in een container die is gebaseerd op de juiste basisimage (taal en versie).
De manier waarop u een Dockerfile maakt, is afhankelijk van hoe u uw project maakt.
Wanneer u een Functions-project maakt met behulp van Azure Functions Core Tools, neemt u de
--docker
optie op wanneer u defunc init
opdracht uitvoert, zoals in het volgende voorbeeld:func init --docker
U kunt ook een Dockerfile toevoegen aan een bestaand project met behulp van de
--docker-only
optie wanneer u defunc init
opdracht uitvoert in een bestaande projectmap, zoals in het volgende voorbeeld:func init --docker-only
Zie Een functie-app maken in een lokale container voor een volledig voorbeeld.
Uw functie-app maken in een container
Met een door Functions gegenereerd Dockerfile in uw codeproject kunt u Docker gebruiken om de containerfunctie-app op uw lokale computer te maken. Met de volgende docker build
opdracht maakt u een installafbeelding van uw containerfuncties van het project in de lokale map.
docker build --tag <DOCKER_ID>/<IMAGE_NAME>:v1.0.0 .
Voor een voorbeeld van het maken van de container, zie De containerinstallatiekopieën bouwen en lokaal verifiëren.
Een afbeelding in het register bijwerken
Wanneer u wijzigingen aanbrengt in uw functiecodeproject of u wilt bijwerken naar de meest recente basisinstallatiekopieën, moet u de container lokaal opnieuw bouwen en de bijgewerkte installatiekopieën opnieuw publiceren naar het door u gekozen containerregister. Met de volgende opdracht wordt de image opnieuw opgebouwd vanuit de hoofdmap met een bijgewerkt versienummer en geüpload naar je registratie.
az acr build --registry <REGISTRY_NAME> --image <LOGIN_SERVER>/azurefunctionsimage:v1.0.1 .
Vervang <REGISTRY_NAME>
door uw Container Registry-exemplaar en <LOGIN_SERVER>
door de naam van de aanmeldingsserver.
Op dit moment moet u een bestaande uitrol bijwerken om de nieuwe afbeelding te kunnen gebruiken. U kunt de function app bijwerken om de nieuwe image te gebruiken met behulp van de Azure CLI of in de Azure Portal:
az functionapp config container set --image <IMAGE_NAME> --registry-password <SECURE_PASSWORD>--registry-username <USER_NAME> --name <APP_NAME> --resource-group <RESOURCE_GROUP>
In dit voorbeeld is <IMAGE_NAME>
de volledige naam van de nieuwe afbeelding met versie. Voor privéregisters moet u een gebruikersnaam en wachtwoord opgeven. Sla deze referenties veilig op.
Overweeg ook doorlopende implementatie in te schakelen.
Azure Portal maken met behulp van containers
Wanneer u een functie-app maakt in de Azure portal, kunt u ervoor kiezen om de functie-app te implementeren vanaf een afbeelding in een containerregister. Zie Uw functie-app maken in een container voor meer informatie over het maken van een containerfunctie-app in een containerregister.
Met de volgende stappen maakt en implementeert u een bestaande functie-app in een containerregister.
Selecteer vanuit het menu van Azure Portal of op de startpagina de optie Een resource maken.
Op de Nieuw pagina, selecteer Compute>Functie-App.
Kies onder Selecteer een hostingoptie de optie Premium-abonnement>selecteren.
Hiermee maakt u een functie-app die wordt gehost door Azure Functions in het Premium-abonnement, dat dynamische schaalaanpassing ondersteunt. U kunt er ook voor kiezen om uit te voeren in een App Service-plan, maar in dit soort toegewezen abonnementen moet u de schaal van uw functie-app beheren.
Op de pagina Basics gebruikt u de instellingen voor de functie-app zoals in de volgende tabel wordt vermeld:
Instelling Voorgestelde waarde Beschrijving Abonnement Uw abonnement Het abonnement waarin u uw functie-app maakt. Resourcegroep myResourceGroup Naam voor de nieuwe resourcegroep waarin u uw functie-app maakt. U moet een resourcegroep maken omdat er bekende beperkingen zijn bij het maken van nieuwe functie-apps in een bestaande resourcegroep. Naam van de functie-app Unieke naam* Naam waarmee uw nieuwe functie-app wordt aangeduid. Geldige tekens zijn a-z
(niet hoofdlettergevoelig),0-9
en-
.Wilt u code of containerafbeelding implementeren? Containerafbeelding Implementeer een containerfunctie-app vanuit een register. Zie Een functie-app maken in een lokale container om een functie-app in het register te maken. Regio Voorkeursregio Selecteer een regio in de buurt of in de buurt van andere services waartoe uw functies toegang hebben. Linux-abonnement Nieuw abonnement (standaard) Hiermee maakt u een nieuw Premium-abonnement om uw app te hosten. U kunt ook een bestaand Premium-abonnement kiezen. Prijsplan Elastic Premium EP1 EP1
is het meest betaalbare abonnement. U kunt desgewenst een groter plan kiezen.Zoneredundantie Uitgeschakeld U hebt deze functie niet nodig in een niet-productie-app. *De naam van de app moet wereldwijd uniek zijn voor alle door Azure Functions gehoste apps.
Accepteer de standaardopties voor het maken van een nieuw opslagaccount op het tabblad Opslag en een nieuw Application Insight-exemplaar op het tabblad Bewaking . U kunt er ook voor kiezen om een bestaand opslagaccount of Application Insights-exemplaar te gebruiken.
Selecteer Beoordelen + maken om de selecties van appconfiguratie te controleren.
Controleer uw instellingen op de pagina 'Beoordelen en Maken' en selecteer Maken om de functie-app in te richten met behulp van een standaardbasisimage.
Nadat de resource van uw functie-app is gemaakt, selecteert u Ga naar de resource en op de pagina van de functie-app selecteert u Implementatiecentrum.
In het Implementatiecentrum kunt u uw container registry verbinden als de bron van de afbeeldingen. U kunt gitHub Actions of Azure Pipelines ook inschakelen voor een robuustere continue implementatie van updates voor uw container in het register.
Azure Portal maken met behulp van containers
Wanneer u een door Container Apps gehoste functie-app maakt in Azure Portal, kunt u ervoor kiezen om uw functie-app te implementeren vanuit een installatiekopie in een containerregister. Zie Uw functie-app maken in een container voor meer informatie over het maken van een containerfunctie-app in een containerregister.
Met de volgende stappen maakt en implementeert u een bestaande functie-app in een containerregister.
Selecteer vanuit het menu van Azure Portal of op de startpagina de optie Een resource maken.
Op de Nieuw pagina, selecteer Compute>Functie-App.
Onder Een hostingoptie selecteren, kies Container Apps-omgeving>Selecteren.
Op de pagina Basics gebruikt u de instellingen voor de functie-app zoals in de volgende tabel wordt vermeld:
Instelling Voorgestelde waarde Beschrijving Abonnement Uw abonnement Het abonnement waarin u uw functie-app maakt. Resourcegroep myResourceGroup Naam voor de nieuwe resourcegroep waarin u uw functie-app maakt. U moet een resourcegroep maken omdat er bekende beperkingen zijn bij het maken van nieuwe functie-apps in een bestaande resourcegroep. Naam van de functie-app Unieke naam* Naam waarmee uw nieuwe functie-app wordt aangeduid. Geldige tekens zijn a-z
(niet hoofdlettergevoelig),0-9
en-
.Regio Voorkeursregio Selecteer een regio in de buurt of in de buurt van andere services waartoe uw functies toegang hebben. *De naam van de app moet uniek zijn binnen de Azure Container Apps-omgeving.
Accepteer op de pagina Basisbeginselen de voorgestelde nieuwe omgeving voor de Azure Container Apps-omgeving. Om de kosten te minimaliseren, wordt de nieuwe standaardomgeving gemaakt in Consumption + Dedicated met het standaardwerkbelastingprofiel en zonder zoneredundantie. Zie Azure Container Apps die als host fungeren voor Azure Functions voor meer informatie.
U kunt er ook voor kiezen om een bestaande Container Apps-omgeving te gebruiken. Als u een aangepaste omgeving wilt maken, selecteert u in plaats daarvan Nieuwe maken. Op de pagina Container Apps-omgeving maken kunt u niet-standaardworkloadprofielen toevoegen of zoneredundantie inschakelen. Zie Azure Container Apps-omgevingen voor meer informatie over omgevingen.
Selecteer het tabblad Implementatie en deselecteer Gebruik quickstart-installatiekopie. Anders wordt de functieapp geïmplementeerd vanuit de basisimage voor de taal van uw functieapp.
Kies uw afbeeldingstype, openbaar of privé. Kies Privé als u Azure Container Registry of een ander privéregister gebruikt. Geef de naam van de image op, inclusief het registry-voorvoegsel. Als u een privéregister gebruikt, geeft u de verificatiereferenties voor het imagerepository op. De instelling Public ondersteunt alleen afbeeldingen die openbaar zijn opgeslagen in Docker Hub.
Selecteer onder Toewijzing van containerresources het gewenste aantal CPU-kernen en het beschikbare geheugen. Als in uw omgeving andere workloadprofielen zijn toegevoegd, kunt u een niet-standaard workloadprofiel selecteren. Keuzes op deze pagina zijn van invloed op de kosten van het hosten van uw app. Zie de pagina met prijzen voor Container Apps om uw potentiële kosten te schatten.
Selecteer Beoordelen + maken om de selecties van appconfiguratie te controleren.
Controleer uw instellingen op de pagina Beoordelen en maken en selecteer Maken om de Function App in te richten en uw containerimage uit de registry te implementeren.
Werken met afbeeldingen in Azure Functions
Wanneer de container van uw functie-app wordt geïmplementeerd vanuit een register, onderhoudt Functions informatie over de bronimage.
Gebruik de volgende opdrachten om gegevens over de installatiekopieën op te halen of de gebruikte implementatie-installatiekopieën te wijzigen:
az functionapp config container show
: retourneert informatie over de image die wordt gebruikt voor deployment.az functionapp config container set
: wijzig de registerinstellingen of werk de installatiekopieën bij die worden gebruikt voor implementatie, zoals wordt weergegeven in het vorige voorbeeld.
Workloadprofielen voor Container Apps
Workloadprofielen zijn functies van Container Apps waarmee u uw implementatieresources beter kunt beheren. Azure Functions in Azure Container Apps ondersteunt ook workloadprofielen. Zie Workloadprofielen in Azure Container Apps voor meer informatie.
U kunt ook de hoeveelheid CPU- en geheugenbronnen instellen die aan uw app zijn toegewezen.
U kunt zowel workloadprofielen als resourcetoewijzingen maken en beheren met behulp van de Azure CLI of in Azure Portal.
U schakelt workloadprofielen in wanneer u uw container-app-omgeving maakt. Zie Een container-app maken in een profiel voor een voorbeeld.
U kunt profielen toevoegen, bewerken en verwijderen in uw omgeving. Zie Profielen toevoegen voor een voorbeeld.
Wanneer u een containerfunctie-app maakt in een omgeving waarvoor workloadprofielen zijn ingeschakeld, moet u ook het profiel opgeven waarin moet worden uitgevoerd. U geeft het profiel op met behulp van de --workload-profile-name
parameter van de az functionapp create
opdracht, zoals in dit voorbeeld:
az functionapp create --name <APP_NAME> --storage-account <STORAGE_NAME> --environment MyContainerappEnvironment --resource-group AzureFunctionsContainers-rg --functions-version 4 --runtime <LANGUAGE_STACK> --image <IMAGE_URI> --workload-profile-name <PROFILE_NAME> --cpu <CPU_COUNT> --memory <MEMORY_SIZE>
In de az functionapp create
opdracht specificeert de --environment
parameter de Container Apps-omgeving en specificeert de --image
parameter de image die moet worden gebruikt voor de functie-app. Vervang in dit voorbeeld door <STORAGE_NAME>
de naam die u in de vorige sectie hebt gebruikt voor het opslagaccount. Vervang ook <APP_NAME>
door een wereldwijd unieke naam die bij u past.
Als u de resources wilt instellen die aan uw app zijn toegewezen, vervangt <CPU_COUNT>
u door het gewenste aantal virtuele CPU's, met minimaal 0,5 tot het maximum dat door het profiel is toegestaan. Kies <MEMORY_SIZE>
voor een toegewezen geheugenhoeveelheid van 1 GB tot het maximum dat door het profiel is toegestaan.
U kunt de az functionapp container set
opdracht gebruiken om de toegewezen resources en het workloadprofiel te beheren dat door uw app wordt gebruikt.
az functionapp container set --name <APP_NAME> --resource-group AzureFunctionsContainers-rg --workload-profile-name <PROFILE_NAME> --cpu <CPU_COUNT> --memory <MEMORY_SIZE>
Toepassingsinstellingen
Met Azure Functions kunt u op de standaard manier werken met toepassingsinstellingen voor functie-apps in containers. Zie Toepassingsinstellingen gebruiken voor meer informatie.
Tip
Standaard bewaakt een containerfunctie-app poort 80 voor binnenkomende aanvragen. Als uw app een andere poort moet gebruiken, gebruikt u de WEBSITES_PORT
toepassingsinstelling om deze standaardpoort te wijzigen.
Continue implementatie in Azure inschakelen
Wanneer u uw containerfunctie-app host in Azure Container Apps, zijn er twee manieren om continue implementatie in te stellen vanuit een opslagplaats met broncode:
U kunt momenteel geen containers continu implementeren op basis van wijzigingen in images in een containerregistry. In plaats daarvan moet u deze pijplijnen voor continue implementatie op basis van broncode gebruiken.
Continue implementatie in Azure inschakelen
Belangrijk
Implementatie op basis van webhook wordt momenteel niet ondersteund bij het uitvoeren van uw container in een Elastic Premium-abonnement. Als u de methode voor continue implementatie wilt gebruiken die in deze sectie wordt beschreven, implementeert u in plaats daarvan uw container in een App Service-plan. Wanneer u een Elastic Premium-abonnement uitvoert, moet u uw app handmatig opnieuw starten wanneer u updates aanbrengt in uw container in de opslagplaats.
U kunt ook continue implementatie configureren vanuit een opslagplaats met broncode met behulp van Azure Pipelines of GitHub Actions.
U kunt instellen dat Azure Functions uw implementatie van een installatiekopie automatisch bijwerkt wanneer u de installatiekopie in het register bijwerkt.
Gebruik de volgende opdracht om continue implementatie in te schakelen en de webhook-URL op te halen:
az functionapp deployment container config --enable-cd --query CI_CD_URL --output tsv --name <APP_NAME> --resource-group AzureFunctionsContainers-rg
De
az functionapp deployment container config
opdracht maakt continue implementatie mogelijk en retourneert de URL van de implementatiewebhook. U kunt deze URL op elk gewenst moment ophalen met behulp van deaz functionapp deployment container show-cd-url
opdracht.Vervang net als voorheen de
<APP_NAME>
naam van uw functie-app.Kopieer de webhook-URL van de implementatie naar het klembord.
Open Docker Hub, meld u aan en selecteer Opslagplaatsen op de navigatiebalk. Zoek en selecteer de afbeelding, selecteer het tabblad Webhooks , geef een webhooknaam op, plak uw URL in webhook-URL en selecteer vervolgens Maken.
Als de webhook is ingesteld, implementeert Azure Functions uw installatiekopie automatisch opnieuw wanneer u deze bijwerkt in Docker Hub.
SSH-verbindingen inschakelen
SSH maakt veilige communicatie tussen een container en een client mogelijk. Als SSH is ingeschakeld, kunt u verbinding maken met uw container met behulp van geavanceerde hulpmiddelen van App Service (Kudu). Voor een eenvoudige verbinding met uw container met behulp van SSH biedt Azure Functions een basisimage waarin SSH al is ingeschakeld. U hoeft alleen uw Dockerfile te bewerken en vervolgens de installatiekopie opnieuw te bouwen en opnieuw te implementeren. Vervolgens kunt u verbinding maken met de container via de Geavanceerde hulpprogramma's (Kudu).
Voeg in uw Dockerfile de tekenreeks
-appservice
toe aan de basisimage in uwFROM
instructie, zoals in dit voorbeeld:FROM mcr.microsoft.com/azure-functions/node:4-node18-appservice
In dit voorbeeld wordt de SSH-versie van de basisinstallatiekopieën van Node.js versie 18 gebruikt. Ga naar de basisimager repositories van Azure Functions om te controleren of u de nieuwste versie van de SSH-ingeschakelde basisimage gebruikt.
Bouw de image opnieuw met behulp van het
docker build
commando, vervang de<DOCKER_ID>
door uw Docker Hub-account-id, zoals in het volgende voorbeeld.docker build --tag <DOCKER_ID>/azurefunctionsimage:v1.0.0 .
Push de bijgewerkte afbeelding naar Docker Hub, dat aanzienlijk minder tijd in beslag zou moeten nemen dan de eerste push. Alleen de bijgewerkte segmenten van de afbeelding moeten nu worden geüpload.
docker push <DOCKER_ID>/azurefunctionsimage:v1.0.0
Azure Functions implementeert de installatiekopie automatisch opnieuw in uw functie-app. Dit proces duurt minder dan één minuut.
Open in een browser
https://<app_name>.scm.azurewebsites.net/
en vervang<app_name>
door uw unieke naam. Deze URL is het eindpunt van de geavanceerde hulpmiddelen (Kudu) voor uw functie-app-container.Meld u aan bij uw Azure-account en selecteer vervolgens SSH- om een verbinding met de container tot stand te brengen. Het maken van verbinding kan even duren als Azure de containerinstallatiekopieën nog steeds bijwerkt.
Nadat er een verbinding tot stand is gebracht met uw container, voert u de opdracht
top
uit om de actieve processen weer te geven.
Verwante artikelen:
De volgende artikelen bevatten meer informatie over het implementeren en beheren van containers: