Share via


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:

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 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 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 een bestaande implementatie bijwerken om de nieuwe installatiekopieën te kunnen gebruiken. U kunt de functie-app bijwerken om de nieuwe installatiekopieën te gebruiken met behulp van de Azure CLI of in 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 <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 Nieuw Reken>functie-app.

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

  4. 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.
    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 Elastisch 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.

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

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

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

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

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

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.

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

  2. Selecteer op de pagina Nieuw Reken>functie-app.

  3. Kies onder Een hostingoptie selecteren de optie Container Apps-omgeving>selecteren.

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

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

  6. Selecteer het tabblad Implementatie en hef de selectie Van quickstart-installatiekopieën gebruiken op. Anders wordt de functie-app geïmplementeerd vanuit de basisinstallatiekopie voor de taal van uw functie-app.

  7. 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. De openbare instelling ondersteunt alleen installatiekopieën die openbaar zijn opgeslagen in Docker Hub.

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

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

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

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

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.

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 installatiekopieën in een containerregister. 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 broncodeopslagplaats 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.

  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.

    Schermopname die laat zien hoe u de webhook toevoegt in uw Docker Hub-venster.

  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. Het maken van verbinding 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.

    Schermopname van de bovenste Linux-opdracht die wordt uitgevoerd in een SSH-sessie.

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