Delen via


Uw eerste containerfuncties maken in Azure Container Apps

In dit artikel maakt u een functie-app die wordt uitgevoerd in een Linux-container en implementeert u deze in een Azure Container Apps-omgeving vanuit een containerregister. Door te implementeren in Container Apps, kunt u uw functie-apps integreren in cloudeigen microservices. Zie Azure Container Apps die als host fungeren voor Azure Functions voor meer informatie.

In dit artikel leest u hoe u functies maakt die worden uitgevoerd in een Linux-container en hoe u de container implementeert in een Container Apps-omgeving.

Voor het voltooien van deze quickstart worden kleine kosten in rekening gebracht van een paar dollarcenten of minder in uw Azure-account, wat u kunt minimaliseren door resources op te schonen wanneer u klaar bent.

Kies uw ontwikkelingstaal

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

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

Vereisten

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

  • Azure CLI versie 2.4 of een nieuwere versie.

Als u geen Azure-abonnement hebt, kunt u een gratis Azure-account maken voordat u begint.

Als u de containerinstallatiekopieën van de functie-app wilt publiceren die u maakt in een containerregister, hebt u een Docker-id en Docker nodig die op uw lokale computer wordt uitgevoerd. Als u geen Docker-id hebt, kunt u een Docker-account maken.

U moet ook de sectie Een containerregister maken van de quickstart containerregister voltooien om een registerexemplaren te maken. 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.

U wordt door Maven gevraagd om de waarden die nodig zijn om het project op het moment van implementatie te kunnen genereren. Volg de aanwijzingen en geef de volgende informatie op:

Prompt Weergegeven als 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.
version 1.0-SNAPSHOT Selecteer de standaardwaarde.
package 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.

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

Nadat u het HttpExample eindpunt hebt weergegeven dat naar de uitvoer is geschreven, gaat u naar dat eindpunt. U ziet nu een welkomstbericht in de antwoorduitvoer.

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

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

De containerinstallatiekopieën bouwen en lokaal verifiëren

(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-installatiekopie 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 controleren, voert u de installatiekopieën uit in een lokale container met behulp van de opdracht docker run , vervangt <DOCKER_ID> u opnieuw door de id van uw Docker Hub-account en voegt u het argument poorten toe als -p 8080:80:

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

Nadat de installatiekopieën in de lokale container zijn gestart, bladert u naar http://localhost:8080/api/HttpExample, waarin hetzelfde begroetingsbericht moet worden weergegeven als voorheen. 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 Function access keys (Toegangssleutels voor functie) voor meer informatie.

Nadat de installatiekopie in de lokale container is gestart, bladert u naar http://localhost:8080/api/HttpExample?name=Functionshet bericht 'hello' dat hetzelfde 'hallo' moet weergeven als voorheen. 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 Function access keys (Toegangssleutels voor functie) voor meer informatie.

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

De containerinstallatiekopieën publiceren naar een register

Als u de containerinstallatiekopieën beschikbaar wilt maken voor implementatie naar een hostingomgeving, moet u deze naar een containerregister pushen.

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 registerexemplaren met behulp van uw huidige Azure-referenties:

    az acr login --name <REGISTRY_NAME>
    

    Vervang in de vorige opdracht door <REGISTRY_NAME> de naam van uw Container Registry-exemplaar.

  2. Gebruik deze opdracht om uw installatiekopieën te taggen met de volledig gekwalificeerde naam van uw registeraanmeldingsserver:

    docker tag <DOCKER_ID>/azurefunctionsimage:v1.0.0 <LOGIN_SERVER>/azurefunctionsimage:v1.0.0 
    

    Vervang door <LOGIN_SERVER> de volledig gekwalificeerde naam van uw registeraanmeldingsserver en <DOCKER_ID> door uw Docker-id.

  3. Gebruik deze opdracht om de container naar uw registerexemplaren 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 Azure Container Apps-omgeving met een Log Analytics-werkruimte.

Gebruik de volgende opdrachten om deze items te maken.

  1. Meld u aan bij Azure als u dit nog niet hebt gedaan.

    Met de az login opdracht meldt u zich aan bij uw Azure-account. Gebruik az account set deze optie wanneer u meer dan één abonnement hebt gekoppeld aan uw account.

  2. Voer de volgende opdracht uit om de Azure CLI bij te werken naar de nieuwste versie:

    az upgrade
    

    Als uw versie van Azure CLI niet de nieuwste versie is, wordt er een installatie gestart. De manier van upgrade is afhankelijk van uw besturingssysteem. U kunt doorgaan nadat de upgrade is voltooid.

  3. Voer de volgende opdrachten uit om de Azure Container Apps-extensie bij te werken en naamruimten te registreren die vereist zijn voor Container Apps:

    az extension add --name containerapp --upgrade -y
    az provider register --namespace Microsoft.Web 
    az provider register --namespace Microsoft.App 
    az provider register --namespace Microsoft.OperationalInsights 
    
  4. Maak een resourcegroep met de naam AzureFunctionsContainers-rg.

    az group create --name AzureFunctionsContainers-rg --location eastus
    

    Met deze az group create opdracht maakt u een resourcegroep in de regio VS - oost. Als u in plaats daarvan een regio bij u in de buurt wilt gebruiken, gebruikt u een beschikbare regiocode die wordt geretourneerd met de opdracht az account list-locations . U moet de volgende opdrachten wijzigen om uw aangepaste regio te gebruiken in plaats van eastus.

  5. Een Azure Container App-omgeving maken waarvoor workloadprofielen zijn ingeschakeld.

    az containerapp env create --name MyContainerappEnvironment --enable-workload-profiles --resource-group AzureFunctionsContainers-rg --location eastus
    

    Het uitvoeren van deze opdracht kan enkele minuten duren.

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

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

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

    Vervang <STORAGE_NAME> in het vorige voorbeeld door een naam die voor u passend is en die uniek is in Azure Storage. Opslagnamen mogen alleen cijfers van 3 tot 24 tekens en kleine letters bevatten. Standard_LRS hiermee geeft u een account voor algemeen gebruik dat wordt ondersteund door Functions.

Een functie-app in Azure maken en configureren met de installatiekopie

Een functie-app in Azure beheert de uitvoering van uw functies in uw Azure Container Apps-omgeving. In deze sectie gebruikt u de Azure-resources uit de vorige sectie om een functie-app te maken op basis van een installatiekopieën in een containerregister in een Container Apps-omgeving. U configureert ook de nieuwe omgeving met een verbindingsreeks naar het vereiste Azure Storage-account.

Gebruik de az functionapp create opdracht om een functie-app te maken in de nieuwe beheerde omgeving die wordt ondersteund door Azure Container Apps:

az functionapp create --name <APP_NAME> --storage-account <STORAGE_NAME> --environment MyContainerappEnvironment --workload-profile-name "Consumption" --resource-group AzureFunctionsContainers-rg --functions-version 4 --runtime dotnet-isolated --image <LOGIN_SERVER>/azurefunctionsimage:v1.0.0 --assign-identity 
az functionapp create --name <APP_NAME> --storage-account <STORAGE_NAME> --environment MyContainerappEnvironment --workload-profile-name "Consumption" --resource-group AzureFunctionsContainers-rg --functions-version 4 --runtime node --image <LOGIN_SERVER>/azurefunctionsimage:v1.0.0 --assign-identity 
az functionapp create --name <APP_NAME> --storage-account <STORAGE_NAME> --environment MyContainerappEnvironment --workload-profile-name "Consumption" --resource-group AzureFunctionsContainers-rg --functions-version 4 --runtime java --image <LOGIN_SERVER>/azurefunctionsimage:v1.0.0 --assign-identity 
az functionapp create --name <APP_NAME> --storage-account <STORAGE_NAME> --environment MyContainerappEnvironment --workload-profile-name "Consumption" --resource-group AzureFunctionsContainers-rg --functions-version 4 --runtime powershell --image <LOGIN_SERVER>/azurefunctionsimage:v1.0.0 --assign-identity 
az functionapp create --name <APP_NAME> --storage-account <STORAGE_NAME> --environment MyContainerappEnvironment --workload-profile-name "Consumption" --resource-group AzureFunctionsContainers-rg --functions-version 4 --runtime python --image <LOGIN_SERVER>/azurefunctionsimage:v1.0.0 --assign-identity 
az functionapp create --name <APP_NAME> --storage-account <STORAGE_NAME> --environment MyContainerappEnvironment --workload-profile-name "Consumption" --resource-group AzureFunctionsContainers-rg --functions-version 4 --runtime node --image <LOGIN_SERVER>/azurefunctionsimage:v1.0.0 --assign-identity 

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 en <LOGIN_SERVER> door uw volledig gekwalificeerde Container Registry-server.

Als u een door het systeem toegewezen beheerde identiteit wilt gebruiken voor toegang tot het containerregister, moet u beheerde identiteiten in uw app inschakelen en de door het systeem toegewezen beheerde identiteit toegang verlenen tot het containerregister. In dit voorbeeld wordt az functionapp identity assign gebruikgemaakt van en az role assignment create opdracht om beheerde identiteiten in de app in te schakelen en de door het systeem toegewezen identiteit toe te wijzen aan de ACRPull rol in het containerregister:

FUNCTION_APP_ID=$(az functionapp identity assign --name <APP_NAME> --resource-group AzureFunctionsContainers-rg --query principalId --output tsv)
ACR_ID=$(az acr show --name <REGISTRY_NAME> --query id --output tsv)
az role assignment create --assignee $FUNCTION_APP_ID --role AcrPull --scope $ACR_ID

Vervang in dit voorbeeld <APP_NAME> respectievelijk <REGISTRY_NAME> de naam van uw functie-app en containerregister.

--workload-profile-name "Consumption" Als u opgeeft, wordt uw app in een omgeving gemaakt met behulp van het standaardwerkbelastingprofielConsumption, dat hetzelfde kost als het uitvoeren in een Container Apps Consumption-abonnement. Wanneer u de functie-app voor het eerst maakt, wordt de eerste installatiekopie uit het register opgehaald.

Op dit moment worden uw functies uitgevoerd in een Container Apps-omgeving, waarbij de vereiste toepassingsinstellingen al zijn toegevoegd. Indien nodig kunt u andere instellingen toevoegen in uw functions-app op de standaardmethode voor Functions. Zie Toepassingsinstellingen gebruiken voor meer informatie.

Tip

Wanneer u volgende wijzigingen aanbrengt in uw functiecode, moet u de container opnieuw bouwen, de installatiekopieën opnieuw publiceren in het register en de functie-app bijwerken met de nieuwe versie van de installatiekopieën. Zie Een installatiekopieën bijwerken in het register voor meer informatie

Uw functies controleren in Azure

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

  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.

De aanvraag-URL moet er ongeveer als volgt uitzien:

https://myacafunctionapp.kindtree-796af82b.eastus.azurecontainerapps.io/api/httpexample?name=functions

https://myacafunctionapp.kindtree-796af82b.eastus.azurecontainerapps.io/api/httpexample

Resources opschonen

Als u wilt blijven werken met Azure Function met behulp van de resources die u in dit artikel hebt gemaakt, kunt u al deze resources behouden.

Wanneer u klaar bent met het werken met deze functie-app-implementatie, verwijdert u de AzureFunctionsContainers-rg resourcegroep om alle resources in die groep op te schonen:

az group delete --name AzureFunctionsContainers-rg

Volgende stappen