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. Ondersteuning voor het hosten van functie-app-containers in Container Apps is momenteel in preview. 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:

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 onderhoudt een set taalspecifieke basisinstallatiekopieën die u kunt gebruiken bij het maken van containerfunctie-apps.

Belangrijk

Wanneer u uw eigen containers maakt, moet u de basisinstallatiekopieën van uw container bijwerken naar de meest recente ondersteunde basisinstallatiekopieën. Ondersteunde basisinstallatiekopieën voor Azure Functions zijn taalspecifiek en bevinden zich in de basisinstallatiekopieën van Azure Functions.

Het Functions-team zet zich in voor het publiceren van maandelijkse updates voor deze basisinstallatiekopieën. 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 Een functie-app maken in een lokale container voor een volledig voorbeeld van het maken van de lokale functie-app vanaf de opdrachtregel en het publiceren van de installatiekopie 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 afgeleid van de juiste basisinstallatiekopieën (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 de func 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 de func 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 Core Tools gegenereerde Dockerfile in uw codeproject kunt u Docker gebruiken om de functie-app in containers op uw lokale computer te maken. Met de volgende docker build opdracht maakt u een installatiekopieën van uw containerfuncties op basis van het project in de lokale map:

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

Zie De containerinstallatiekopieën bouwen en lokaal verifiëren voor een voorbeeld van het maken van de container.

Een installatiekopieën 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 installatiekopieën opnieuw opgebouwd uit de hoofdmap met een bijgewerkt versienummer en naar het register gepusht:

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 de implementatie bijwerken om de nieuwe installatiekopieën te kunnen gebruiken. In het volgende voorbeeld wordt de functie-app bijgewerkt om de nieuwe afbeelding te gebruiken:

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 <IMAGE_NAME> is dit de volledige naam van de nieuwe installatiekopieën met versie. Voor privéregisters moet u een gebruikersnaam en wachtwoord opgeven. Sla deze referenties veilig op.

Overweeg ook continue implementatie in te schakelen.

Azure Portal maken met behulp van containers

Wanneer u een functie-app maakt in Azure Portal, kunt u ervoor kiezen om de functie-app te implementeren vanuit een installatiekopieën 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.

  1. Selecteer vanuit het menu van Azure Portal of op de startpagina de optie Een resource maken.

  2. Selecteer op de pagina NieuwReken>functie-app.

  3. 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 containerinstallatiekopieën implementeren? Containerinstallatiekopie 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.

*De naam van de app moet wereldwijd uniek zijn voor alle door Azure Functions gehoste apps.

  1. Kies Functions Premium in hostingopties en -abonnementen.

    Screenshot of the Basics tab in the Azure portal when creating a function app for hosting a container in a Functions Premium plan.

    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.

*De naam van de app moet uniek zijn binnen de Azure Container Apps-omgeving. Niet alle regio's worden ondersteund in de preview. Zie Overwegingen voor het hosten van Container Apps voor meer informatie.

  1. Kies in Hostingopties en -plannen het Azure Container Apps Environment-plan.

    Portal create Basics tab for a containerized function app hosted in Azure Container Apps.

    Hiermee maakt u een nieuwe Azure Container Apps-omgevingsresource voor het hosten van uw functie-app-container. Zie Azure Container Apps die als host fungeren voor Azure Functions voor meer informatie.

    De omgeving wordt standaard gemaakt in een verbruiksabonnement zonder zoneredundantie om de kosten te minimaliseren. U kunt ook een bestaande Container Apps-omgeving kiezen. Zie Azure Container Apps-omgevingen voor meer informatie over omgevingen.

  1. 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.
  1. Selecteer het tabblad Implementatie en hef de selectie Van quickstart-installatiekopieën gebruiken op. Als u dit niet doet, wordt de functie-app geïmplementeerd vanuit de basisinstallatiekopie voor de taal van uw functie-app.

  2. Kies uw afbeeldingstype, openbaar of privé. Kies Privé als u Azure Container Registry of een ander privéregister gebruikt. Geef de naam van de installatiekopieën op, inclusief het registervoorvoegsel. Als u een privéregister gebruikt, geeft u de verificatiereferenties voor het installatiekopieënregister op.

  3. Selecteer Beoordelen + maken om de selecties van appconfiguratie te controleren.

  4. Controleer uw instellingen op de pagina Beoordelen en maken en selecteer Vervolgens Maken om de functie-app in te richten en uw containerinstallatiekopieën uit het register te implementeren.

  1. Selecteer Beoordelen + maken om de selecties van appconfiguratie te controleren.

  2. Controleer uw instellingen op de pagina Beoordelen en maken en selecteer Vervolgens Maken om de functie-app in te richten met behulp van een standaardbasisinstallatiekopieën.

  3. Nadat de resource van uw functie-app is gemaakt, selecteert u Ga naar de resource en selecteert u op de pagina van de functie-app het implementatiecentrum.

  4. In het Implementatiecentrum kunt u uw containerregister verbinden als de bron van de installatiekopieën. U kunt gitHub Actions of Azure Pipelines ook inschakelen voor een robuustere continue implementatie van updates voor uw container in het register.

Werken met installatiekopieën in Azure Functions

Wanneer de container van uw functie-app wordt geïmplementeerd vanuit een register, onderhoudt Functions informatie over de broninstallatiekopie. Gebruik de volgende opdrachten om gegevens over de installatiekopieën op te halen of de gebruikte implementatie-installatiekopieën te wijzigen:

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 workloadprofielen 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 doet dit 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 geeft de --environment parameter de Container Apps-omgeving op en de --image parameter geeft de installatiekopieën op die moeten 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 door <APP_NAME> een wereldwijd unieke naam die geschikt is voor u.

<CPU_COUNT> Vervang ook 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.

Toepassingsinstellingen

Met Azure Functions kunt u op de standaard manier werken met toepassingsinstellingen voor functie-apps in containers. Zie Toepassingsinstellingen gebruiken voor meer informatie.

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 instellen dat Azure Functions uw implementatie van een installatiekopie automatisch bijwerkt wanneer u de installatiekopie in het register bijwerkt.

  1. 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 de az functionapp deployment container show-cd-url opdracht.

    Vervang net als voorheen de <APP_NAME> naam van uw functie-app.

  2. Kopieer de webhook-URL van de implementatie naar het klembord.

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

    Screenshot showing how to add the webhook in your Docker Hub window.

  4. 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 basisinstallatiekopieën waarvoor 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).

  1. Voeg in uw Dockerfile de tekenreeks -appservice toe aan de basisinstallatiekopie in uw FROM instructie, zoals in het volgende 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 basisinstallatiekopieën van Azure Functions om te controleren of u de nieuwste versie van de basisinstallatiekopieën met SSH gebruikt.

  2. Bouw de installatiekopieën opnieuw met behulp van de docker build opdracht, vervang de <DOCKER_ID> door uw Docker Hub-account-id, zoals in het volgende voorbeeld.

    docker build --tag <DOCKER_ID>/azurefunctionsimage:v1.0.0 .
    
  3. Push de bijgewerkte installatiekopieën naar Docker Hub, wat aanzienlijk minder tijd in beslag neemt dan de eerste push. Alleen de bijgewerkte segmenten van de afbeelding moeten nu worden geüpload.

    docker push <DOCKER_ID>/azurefunctionsimage:v1.0.0
    
  4. Azure Functions implementeert de installatiekopie automatisch opnieuw in uw functie-app. Dit proces duurt minder dan één minuut.

  5. Open https://<app_name>.scm.azurewebsites.net/ en vervang deze in <app_name> een browser door uw unieke naam. Deze URL is het eindpunt van de geavanceerde hulpmiddelen (Kudu) voor uw functie-app-container.

  6. Meld u aan bij uw Azure-account en selecteer vervolgens SSH- om een verbinding met de container tot stand te brengen. Verbinding maken kan even duren als Azure de containerinstallatiekopieën nog steeds bijwerkt.

  7. Nadat er een verbinding tot stand is gebracht met uw container, voert u de opdracht top uit om de actieve processen weer te geven.

    Screenshot that shows Linux top command running in an SSH session.

Volgende stappen

De volgende artikelen bevatten meer informatie over het implementeren en beheren van containers: