Uw eerste in een container geplaatste Azure Functions maken
In dit artikel maakt u een functie-app die wordt uitgevoerd in een Linux-container en implementeert u deze in Azure Functions.
Voor het implementeren van uw functiecode in Azure Functions in een container is een Premium-abonnement of een Toegewezen (App Service)-abonnement vereist. Voor het voltooien van dit artikel worden kosten in rekening gebracht van een paar Amerikaanse dollars in uw Azure-account, wat u kunt minimaliseren door resources op te schonen wanneer u klaar bent.
Andere opties voor het implementeren van uw functie-app-container in Azure zijn:
Azure Container Apps: zie Een container implementeren in Azure Container-apps voor meer informatie.
Azure Arc (momenteel in preview): zie Een container implementeren in Azure Arc 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:
Installeer de .NET 8.0 SDK.
Installeer Azure Functions Core Tools versie 4.0.5198 of een nieuwere versie.
- Installeer Azure Functions Core Tools versie 4.x.
- Installeer een versie van Node.js die wordt ondersteund door Azure Functions.
- Installeer een versie van Python die wordt ondersteund door Azure Functions.
- Installeer de .NET 6 SDK.
Installeer een versie van de Java Developer Kit die wordt ondersteund door Azure Functions.
Installeer Apache Maven versie 3.0 of hoger.
- 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 azurefunctionsimage
en 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=Functions
het 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.
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.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.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 functie-app, die de omgeving biedt voor het uitvoeren van uw functiecode. Een functie-app wordt gekoppeld aan uw lokale functieproject en maakt het mogelijk om functies te groeperen als een logische eenheid, zodat u resources eenvoudiger kunt beheren, implementeren en delen.
Gebruik de volgende opdrachten om deze items te maken. Zowel Azure CLI als PowerShell worden ondersteund. Als u uw Azure-resources wilt maken met behulp van Azure PowerShell, hebt u ook de Az PowerShell-module, versie 5.9.0 of hoger nodig.
Als u dit nog niet hebt gedaan, meldt u zich aan bij Azure.
az login
Met de
az login
opdracht meldt u zich aan bij uw Azure-account.Maak een resourcegroep met de naam
AzureFunctionsContainers-rg
in uw gekozen regio.az group create --name AzureFunctionsContainers-rg --location <REGION>
Met de
az group create
opdracht maakt u een resourcegroep. Vervang in de bovenstaande opdracht door<REGION>
een regio bij u in de buurt met behulp van een beschikbare regiocode die wordt geretourneerd met de opdracht az account list-locations .Maak een opslagaccount voor algemeen gebruik in uw resourcegroep en regio.
az storage account create --name <STORAGE_NAME> --location <REGION> --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.Gebruik de opdracht om een Premium-abonnement te maken voor Azure Functions met de naam in de prijscategorie Elastic Premium 1 (
--sku EP1
), in uw<REGION>
en in een Linux-container (--is-linux
).myPremiumPlan
az functionapp plan create --resource-group AzureFunctionsContainers-rg --name myPremiumPlan --location <REGION> --number-of-workers 1 --sku EP1 --is-linux
We gebruiken hier het Premium-abonnement, maar dit kan naar behoefte worden aangepast. Zie de vergelijking van Azure Functions-hostingabonnementen voor meer informatie over hosting. Zie de pagina met prijzen van Functions voor meer informatie over het berekenen van kosten.
Met de opdracht maakt u ook een gekoppeld Azure-toepassing Insights-exemplaar in dezelfde resourcegroep, waarmee u uw functie-app kunt bewaken en logboeken kunt bekijken. Zie Monitor Azure Functions (Azure Functions bewaken) voor meer informatie. Er worden pas kosten in rekening gebracht voor de instantie als u deze activeert.
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 Functions-hostingabonnement. 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 en deze te configureren met een verbindingsreeks naar Azure Storage.
Maak een functie-app met behulp van de volgende opdracht, afhankelijk van uw containerregister:
az functionapp create --name <APP_NAME> --storage-account <STORAGE_NAME> --resource-group AzureFunctionsContainers-rg --plan myPremiumPlan --image <LOGIN_SERVER>/azurefunctionsimage:v1.0.0 --registry-username <USERNAME> --registry-password <SECURE_PASSWORD>
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<DOCKER_ID>
of<LOGIN_SERVER>
door uw Docker Hub-account-id 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. U kunt ook continue implementatie naar Azure inschakelen vanuit uw containerregister.
Tip
U kunt de
DisableColor
instelling in het host.json-bestand gebruiken om te voorkomen dat ANSI-besturingstekens naar de containerlogboeken worden geschreven.Gebruik de volgende opdracht om de verbindingsreeks op te halen voor het opslagaccount dat u hebt gemaakt:
az storage account show-connection-string --resource-group AzureFunctionsContainers-rg --name <STORAGE_NAME> --query connectionString --output tsv
De verbindingsreeks voor het opslagaccount wordt geretourneerd met behulp van de
az storage account show-connection-string
opdracht.Vervang door
<STORAGE_NAME>
de naam van het opslagaccount dat u eerder hebt gemaakt.Gebruik de volgende opdracht om de instelling toe te voegen aan de functie-app:
az functionapp config appsettings set --name <APP_NAME> --resource-group AzureFunctionsContainers-rg --settings AzureWebJobsStorage=<CONNECTION_STRING>
Met
az functionapp config appsettings set
de opdracht wordt de instelling gemaakt.Vervang in deze opdracht
<APP_NAME>
door de naam van uw functie-app en<CONNECTION_STRING>
door de verbindingsreeks uit de vorige stap. De verbinding moet een lang gecodeerde tekenreeks zijn die begint metDefaultEndpointProtocol=
.De functie kan deze verbindingsreeks nu gebruiken om toegang te krijgen tot het opslagaccount.
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.
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.
- Gebruik de URL die u zojuist hebt verkregen om het
HttpExample
functie-eindpunt aan te roepen, waarbij de querytekenreeks?name=Functions
wordt toegevoegd.
- 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.
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. Omdat u een Premium-abonnement voor Azure Functions hebt gemaakt, zal er per dag één of twee dollar in rekening worden gebracht voor lopende kosten.
Om deze lopende kosten te voorkomen, verwijdert u de resourcegroep AzureFunctionsContainers-rg
om alle resources in de groep op te schonen:
az group delete --name AzureFunctionsContainers-rg