Uw eerste in containers geplaatste Azure Functions maken in Azure Arc (preview)

In dit artikel maakt u een functie-app die wordt uitgevoerd in een Linux-container en implementeert u deze in een Kubernetes-cluster met Azure Arc vanuit een containerregister. Wanneer u uw eigen container maakt, kunt u de uitvoeringsomgeving voor uw functie-app aanpassen. Zie App Service, Functions en Logic Apps in Azure Arc voor meer informatie.

Notitie

Ondersteuning voor het implementeren van een aangepaste container in een Kubernetes-cluster met Azure Arc is momenteel in preview.

U kunt uw functies ook publiceren naar een Kubernetes-cluster met Azure Arc zonder eerst een container te maken. Zie Uw eerste functie maken in Azure Arc (preview) voor meer informatie

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" --authlevel anonymous

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" --authlevel anonymous

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 de volgende opdracht om u aan te melden bij uw registerexemplaren:

    az acr login --name <REGISTRY_NAME>
    

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

  2. Gebruik de volgende 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 de volgende opdracht om de container naar uw registerexemplaren te pushen:

    docker push <LOGIN_SERVER>/azurefunctionsimage:v1.0.0
    
  4. Gebruik de volgende opdracht om het ingebouwde beheerdersaccount in te schakelen, zodat Functions verbinding kan maken met het register met een gebruikersnaam en wachtwoord:

    az acr update -n <REGISTRY_NAME> --admin-enabled true
    
  1. Gebruik de volgende opdracht om de gebruikersnaam en het wachtwoord van de beheerder op te halen. Deze functies moeten verbinding maken met het register:

    az acr credential show -n <REGISTRY_NAME> --query "[username, passwords[0].value]" -o tsv
    

    Belangrijk

    De gebruikersnaam en het wachtwoord van het beheerdersaccount zijn belangrijke referenties. Zorg ervoor dat u ze veilig opslaat en nooit op een toegankelijke locatie, zoals een openbare opslagplaats.

Een App Service Kubernetes-omgeving maken

Voordat u begint, moet u een App Service Kubernetes-omgeving maken voor een Kubernetes-cluster met Azure Arc.

Notitie

Wanneer u de omgeving maakt, moet u zowel de naam van de aangepaste locatie als de naam van de resourcegroep met de aangepaste locatie noteren. U kunt deze gebruiken om de aangepaste locatie-id te vinden, die u nodig hebt bij het maken van uw functie-app in de omgeving.

Als u de omgeving niet hebt gemaakt, neem dan contact op met de clusterbeheerder.

Azure CLI-extensies toevoegen

Start de Bash-omgeving in Azure Cloud Shell.

Omdat deze CLI-opdrachten nog geen deel uitmaken van de cli-kernset, voegt u deze toe met de volgende opdrachten:

az extension add --upgrade --yes --name customlocation
az extension remove --name appservice-kube
az extension add --upgrade --yes --name appservice-kube

Azure-resources maken

Voordat u uw container kunt implementeren in uw nieuwe App Service Kubernetes-omgeving, moet u nog twee resources maken:

  • Een opslagaccount. Hoewel in dit artikel een opslagaccount wordt gemaakt, is in sommige gevallen mogelijk geen opslagaccount vereist. Zie voor meer informatie clusters met Azure Arc in het artikel met overwegingen voor opslag.
  • Een functie-app, die de context biedt voor het uitvoeren van uw container. De functie-app wordt uitgevoerd in de App Service Kubernetes-omgeving en wordt toegewezen aan uw lokale functieproject. Met een functie-app kunt u functies groeperen in een logische eenheid, zodat u resources eenvoudiger kunt beheren, implementeren en delen.

Notitie

Functie-apps worden uitgevoerd in een App Service Kubernetes-omgeving op een Toegewezen (App Service)-plan. Wanneer u uw functie-app maakt zonder een bestaand plan, wordt er een plan voor u gemaakt.

Een opslagaccount maken

Gebruik de opdracht az storage account create om een algemeen opslagaccount in uw resourcegroep en regio te maken:

az storage account create --name <STORAGE_NAME> --location westeurope --resource-group myResourceGroup --sku Standard_LRS

Notitie

In sommige gevallen is een opslagaccount mogelijk niet vereist. Zie voor meer informatie clusters met Azure Arc in het artikel met overwegingen voor opslag.

Vervang <STORAGE_NAME> in het vorige voorbeeld door een naam die voor u passend is en die uniek is in Azure Storage. Namen mogen drie tot 24 tekens bevatten en u mag alleen kleine letters gebruiken. Met Standard_LRS geeft u een account voor algemeen gebruik op dat wordt ondersteund door Functions. De --location waarde is een standaard Azure-regio.

De functie-app maken

Voer de opdracht az functionapp create uit om een nieuwe functie-app in de omgeving te maken.

az functionapp create --name <APP_NAME> --custom-location <CUSTOM_LOCATION_ID> --storage-account <STORAGE_NAME> --resource-group AzureFunctionsContainers-rg --image <LOGIN_SERVER>/azurefunctionsimage:v1.0.0 --registry-username <USERNAME> --registry-password <SECURE_PASSWORD> 

Vervang in dit voorbeeld door <CUSTOM_LOCATION_ID> de id van de aangepaste locatie die u hebt bepaald voor de App Service Kubernetes-omgeving. <STORAGE_NAME> Vervang ook door de naam van het account dat u in de vorige stap hebt gebruikt, <APP_NAME> door respectievelijk een wereldwijd unieke naam en <DOCKER_ID> of <LOGIN_SERVER> door de id van uw Docker Hub-account of containerregisterserver. Wanneer u implementeert vanuit een aangepast containerregister, geeft de installatiekopieën de URL van het register aan.

Wanneer u de functie-app voor het eerst maakt, wordt de eerste installatiekopie opgehaald uit uw Docker Hub.

Vereiste app-instellingen instellen

Voer de volgende opdrachten uit om een app-instelling te maken voor het opslagaccount verbindingsreeks:

storageConnectionString=$(az storage account show-connection-string --resource-group AzureFunctionsContainers-rg --name <STORAGE_NAME> --query connectionString --output tsv)
az functionapp config appsettings set --name <app_name> --resource-group AzureFunctionsContainers-rg --settings AzureWebJobsStorage=$storageConnectionString

Deze code moet worden uitgevoerd in Cloud Shell of in Bash op uw lokale computer. Vervang <STORAGE_NAME> door de naam van het opslagaccount en <APP_NAME> door de naam van de functie-app.

De functie aanroepen in Azure

Omdat uw functie gebruikmaakt van een HTTP-trigger, roept u deze aan door een HTTP-aanvraag naar de URL in de browser of met een hulpprogramma zoals curl.

Kopieer de volledige Aanroep-URL die wordt weergegeven in de uitvoer van de publicatieopdracht naar de adresbalk van een browser en voeg de queryparameter ?name=Functions toe. De browser moet vergelijkbare uitvoer weergeven als u de functie lokaal hebt uitgevoerd.

The output of the function run on Azure in a browser

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

Hiermee verwijdert u alleen de resources die in dit artikel zijn gemaakt. De onderliggende Azure Arc-omgeving blijft aanwezig.

Volgende stappen