Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
In dit artikel maakt u een Azure Functions-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.
Voor het voltooien van deze quickstart worden kleine kosten in uw Azure-account in rekening gebracht, 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 function-app in een Docker-container met behulp van een taalspecifiek Linux-basisafbeelding. Zorg ervoor dat u bovenaan het artikel uw gewenste taal selecteert.
Core Tools genereert automatisch een Dockerfile voor uw project die gebruikmaakt van de meest recente versie van de juiste basisimage voor uw functionstaal. Werk uw container regelmatig bij vanaf de meest recente basisinstallatiekopie en implementeer deze opnieuw vanuit de bijgewerkte versie van uw container. Zie Containerized Function-apps maken voor meer informatie.
Vereiste voorwaarden
Voordat u begint, moet u aan de volgende vereisten voldoen:
Installeer de .NET SDK.
Installeer Azure Functions Core Tools versie 4.0.5198 of hoger.
- 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 SDK.
Installeer een versie van de Java Developer Kit die wordt ondersteund door Azure Functions.
Installeer Apache Maven versie 3.0 of hoger.
- Installeer Azure CLI versie 2.4 of hoger.
Als u nog geen abonnement op Azure hebt, maak dan een gratis account aan voordat u begint.
Als u de containerafbeelding van de functie-app die u maakt naar een containerregister wilt publiceren, hebt u een Docker-ID en Docker Desktop nodig die op uw lokale computer worden uitgevoerd. Als u geen Docker-id hebt, kunt u een Docker-account maken.
U moet ook de sectie Een containerregister maken van de containerregister-quickstart voltooien. 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.
Maven vraagt u om de waarden die nodig zijn om het project tijdens de implementatie te voltooien. Volg de aanwijzingen en geef de volgende informatie op:
| Snel | Waarde | Description |
|---|---|---|
| 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 die overeenkomt met de functienaam 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.
Om ervoor te zorgen dat de functie later kan worden aangeroepen wanneer deze wordt gehost in Docker, controleert u of het autorisatieniveau is ingesteld AuthorizationLevel.Anonymousop of stelt u deze in als deze nog niet is geconfigureerd.
func start
func start
npm install
npm start
mvn clean package
mvn azure-functions:run
Nadat u het HttpExample eindpunt in de uitvoer ziet, navigeert u naar dat eindpunt. U ziet nu een welkomstbericht in de antwoorduitvoer.
Nadat u het eindpunt HttpExample op de uitvoer ziet, gaat u naar http://localhost:7071/api/HttpExample?name=Functions. In de browser moet een 'hello'-bericht worden weergegeven dat Functions, de waarde die is opgegeven voor de name zoekparameter, herhaalt.
Druk op Ctrl+C (Opdracht+C in macOS) om de host te stoppen.
Bouw de containerafbeelding en verifieer lokaal
(Optioneel) Bekijk de 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-image 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 image uit in een lokale container met behulp van de opdracht docker run, vervangt u <DOCKER-ID> opnieuw door de ID van uw Docker Hub-account en voegt u het poortenargument toe als -p 8080:80:
docker run -p 8080:80 -it <DOCKER-ID>/azurefunctionsimage:v1.0.0
Nadat het image in de lokale container is gestart, ga naar http://localhost:8080/api/HttpExample, dat hetzelfde begroetingsbericht als voorheen moet weergeven. 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 autorisatiesleutels voor meer informatie.
Nadat de image in de lokale container is gestart, bladert u naar http://localhost:8080/api/HttpExample?name=Functions, waar hetzelfde 'hello' bericht als voorheen moet worden weergegeven. 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 autorisatiesleutels 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 containerafbeelding publiceren naar een register
Als u de containerinstallatiekopieën beschikbaar wilt maken voor implementatie naar een hostingomgeving, moet u deze naar een containerregister pushen. Als best practice voor beveiliging moet u een exemplaar van Azure Container Registry gebruiken en beheerde identiteitsgebaseerde verbindingen afdwingen. Docker Hub vereist dat u zich verifieert met behulp van gedeelde geheimen, waardoor uw implementaties kwetsbaarder worden.
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 registerexemplaar met behulp van uw huidige Azure-aanmeldgegevens. Vervang
<REGISTRY-NAME>door de naam van uw Container Registry-instantie.az acr login --name <REGISTRY-NAME>Gebruik deze opdracht om uw image te taggen met de volledig gekwalificeerde naam van uw register-loginserver. Vervang door
<LOGIN-SERVER>de volledig gekwalificeerde naam van uw registeraanmeldingsserver en<DOCKER-ID>door uw Docker-id.docker tag <DOCKER-ID>/azurefunctionsimage:v1.0.0 <LOGIN-SERVER>/azurefunctionsimage:v1.0.0Gebruik deze commando om de container naar uw registerinstantie 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 Azure-opslagaccount dat wordt gebruikt voor het onderhouden van status en andere informatie over uw functies.
Een Azure Container Apps-omgeving met een Log Analytics-werkruimte.
Een door de gebruiker toegewezen beheerde identiteit, waarmee uw functie-app veilig verbinding kan maken met Azure-resources zonder gedeelde geheimen te gebruiken. Verbindingen met zowel het Azure-opslagaccount als het Azure Container Registry-exemplaar worden in plaats daarvan gemaakt met behulp van Microsoft Entra-verificatie met de identiteit. Dit wordt aanbevolen voor dit scenario.
Opmerking
Docker Hub biedt geen ondersteuning voor beheerde identiteiten.
Gebruik deze opdrachten om uw vereiste Azure-resources te maken:
Meld u indien nodig aan bij Azure:
Met de
az loginopdracht meldt u zich aan bij uw Azure-account. Gebruikaz account setdeze optie wanneer u meer dan één abonnement hebt gekoppeld aan uw account.Voer de volgende opdracht uit om de Azure CLI bij te werken naar de nieuwste versie:
az upgradeAls uw versie van de 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.
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.OperationalInsightsMaak een resourcegroep met de naam
AzureFunctionsContainers-rg.az group create --name AzureFunctionsContainers-rg --location eastusMet dit
az group createcommando maakt u een resourcegroep in de oostelijke VS-regio. Als u in plaats daarvan een regio bij u in de buurt wilt gebruiken, gebruikt u een beschikbare regiocode die wordt geretourneerd door deaz account list-locationsopdracht. U moet de volgende opdrachten wijzigen om uw aangepaste regio te gebruiken in plaats vaneastus.Maak een Azure Container Apps-omgeving.
az containerapp env create --name MyContainerappEnvironment --resource-group AzureFunctionsContainers-rg --location eastusHet uitvoeren van deze opdracht kan enkele minuten duren.
Maak een opslagaccount voor algemeen gebruik in uw resourcegroep en regio, zonder toegang tot gedeelde sleutels. Vervang in de opdracht
<STORAGE-NAME>door een naam die geschikt is voor u en uniek in Azure Storage. Opslagnamen mogen alleen cijfers van 3 tot 24 tekens en kleine letters bevatten.az storage account create --name <STORAGE-NAME> --location eastus --resource-group AzureFunctionsContainers-rg --sku Standard_LRS --allow-blob-public-access false --allow-shared-key-access falseMet de
az storage account createopdracht maakt u een opslagaccount dat alleen toegankelijk is met behulp van door Microsoft Entra geverifieerde identiteiten waaraan machtigingen zijn verleend voor specifieke resources.Standard_LRSspecificeert een algemeen account dat wordt ondersteund door Functions.Maak een beheerde identiteit en gebruik de geretourneerde
principalIdom toegang te verlenen tot uw opslagaccount en pull-machtigingen in uw registerinstantie. Vervang ,<REGISTRY-NAME>en<USER-IDENTITY-NAME>door<STORAGE-NAME>de naam van uw bestaande containerregister, de naam voor uw beheerde identiteit en respectievelijk de naam van het opslagaccount.principalId=$(az identity create --name <USER-IDENTITY-NAME> --resource-group AzureFunctionsContainers-rg --location eastus --query principalId -o tsv) acrId=$(az acr show --name <REGISTRY-NAME> --query id --output tsv) az role assignment create --assignee-object-id $principalId --assignee-principal-type ServicePrincipal --role acrpull --scope $acrId storageId=$(az storage account show --resource-group AzureFunctionsContainers-rg --name <STORAGE-NAME> --query 'id' -o tsv) az role assignment create --assignee-object-id $principalId --assignee-principal-type ServicePrincipal --role "Storage Blob Data Owner" --scope $storageIdMet
az identity createde opdracht maakt u een door de gebruiker toegewezen beheerde identiteit en met deaz role assignment createopdrachten wordt uw identiteit toegevoegd aan de vereiste rollen.De beheerde identiteit is nu beschikbaar voor de app voor toegang tot zowel het opslagaccount als Azure Container Registry zonder gedeelde geheimen te gebruiken.
Een function app in Azure maken en configureren met de image
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 van een image in een containerregister binnen een Container Apps-omgeving. U configureert ook de nieuwe omgeving met een verbindingsreeks naar het vereiste Azure Storage-account.
Gebruik de az containerapp create --kind=functionapp opdracht om een functie-app te maken in de nieuwe beheerde omgeving die wordt ondersteund door Azure Container Apps. In az containerapp create --kind-functionappde --environment parameter geeft u de Container Apps-omgeving op.
Aanbeveling
Als u ervoor wilt zorgen dat uw functie-app gebruikmaakt van een op beheerde identiteit gebaseerde verbinding met uw registerexemplaren, moet u de --image parameter niet instellen in az containerapp create --kind=functionapp. Wanneer je --image instelt op de volledig gekwalificeerde naam van je afbeelding in de repository, worden gedeelde geheime referenties verkregen uit je register en opgeslagen in app-instellingen.
Eerst moet u de volledig gekwalificeerde id-waarde van uw door de gebruiker toegewezen beheerde identiteit ophalen met pull-toegang tot het register en vervolgens de az containerapp create --kind=functionapp opdracht gebruiken om een functie-app te maken met behulp van de standaardinstallatiekopie en met deze identiteit die eraan is toegewezen.
UAMI_RESOURCE_ID=$(az identity show --name $uami_name --resource-group $group --query id -o tsv)
az containerapp create --name <APP-NAME> --storage-account <STORAGE-NAME> --environment MyContainerappEnvironment --workload-profile-name "Consumption" --resource-group AzureFunctionsContainers-rg --functions-version 4 --assign-identity $UAMI_RESOURCE_ID
In az containerapp create --kind=functionapp wijst --assign-identity uw beheerde identiteit toe aan de nieuwe app. Omdat u de --image parameter in az functionapp create niet hebt ingesteld, wordt de toepassing gemaakt met behulp van een placeholderafbeelding.
In dit voorbeeld vervangt u <APP-NAME> en <STORAGE-NAME> door een naam voor uw nieuwe functie-app en de naam van uw opslagaccount.
Ten slotte moet u de linuxFxVersion site-instelling bijwerken naar de volledig gekwalificeerde naam van uw afbeelding in de repository. U moet ook de acrUseManagedIdentityCreds-instellingen en acrUserManagedIdentityID-site-instellingen bijwerken, zodat managed identities worden gebruikt bij het ophalen van de image uit het register.
UAMI_RESOURCE_ID=$(az identity show --name <USER-IDENTITY-NAME> --resource-group AzureFunctionsContainers-rg --query id -o tsv)
az resource patch --resource-group AzureFunctionsContainers-rg --name <APP-NAME> --resource-type "Microsoft.Web/sites" --properties "{ \"siteConfig\": { \"linuxFxVersion\": \"DOCKER|<REGISTRY-NAME>.azurecr.io/azurefunctionsimage:v1.0.0\", \"acrUseManagedIdentityCreds\": true, \"acrUserManagedIdentityID\":\"$UAMI_RESOURCE_ID\", \"appSettings\": [{\"name\": \"DOCKER_REGISTRY_SERVER_URL\", \"value\": \"<REGISTRY-NAME>.azurecr.io\"}]}}"
Naast de vereiste site-instellingen werkt de az resource patch opdracht ook de DOCKER_REGISTRY_SERVER_URL app-instelling bij naar de URL van uw registerserver.
Vervang in dit voorbeeld respectievelijk <APP-NAME><REGISTRY-NAME><USER-IDENTITY-NAME> de namen van uw functie-app, containerregister en identiteit.
Wanneer u --workload-profile-name "Consumption" specificeert, wordt uw app gecreëerd in een omgeving met het standaard Consumption-werkbelastingprofiel, wat hetzelfde kost als op een Container Apps Consumption-plan. Wanneer u de functietoepassing voor het eerst maakt, haalt deze de initiële afbeelding op uit uw register.
Toepassingsinstellingen bijwerken
Als u wilt dat de Functions-host verbinding maakt met het standaardopslagaccount met behulp van gedeelde geheimen, moet u de AzureWebJobsStorage verbindingsreeks-instelling vervangen door een equivalente instelling die gebruikmaakt van de door de gebruiker toegewezen beheerde identiteit om verbinding te maken met het opslagaccount.
Verwijder de bestaande
AzureWebJobsStorageverbindingsreeks-instelling:az containerapp config appsettings delete --name <APP-NAME> --resource-group AzureFunctionsContainers-rg --setting-names AzureWebJobsStorageMet
az containerapp config appsettings deletede opdracht wordt deze instelling uit uw app verwijderd. Vervang door<APP-NAME>de naam van uw functie-app.Voeg gelijkwaardige instellingen toe, met een
AzureWebJobsStorage__voorvoegsel, waarmee een door de gebruiker toegewezen beheerde identiteit wordt gedefinieerd voor het standaardopslagaccount:clientId=$(az identity show --name <USER-IDENTITY-NAME> --resource-group AzureFunctionsContainers-rg --query 'clientId' -o tsv) az containerapp config appsettings set --name <APP-NAME> --resource-group AzureFunctionsContainers-rg --settings AzureWebJobsStorage__accountName=<STORAGE-NAME> AzureWebJobsStorage__credential=managedidentity AzureWebJobsStorage__clientId=$clientIdVervang in dit voorbeeld
<APP-NAME>,<USER-IDENTITY-NAME>en<STORAGE-NAME>respectievelijk door de naam van uw functie-app, de naam van uw identiteit en de naam van uw opslagaccount.
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 Werken met toepassingsinstellingen voor meer informatie.
Aanbeveling
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.
Uw functies controleren in Azure
Nu de installatiekopie is geïmplementeerd in uw functie-app in Azure, kunt u de functie aanroepen via HTTP-verzoeken. Gedetailleerde informatie over een specifieke functie ophalen:
az containerapp function show \
--resource-group AzureFunctionsContainers-rg \
--name <APP-NAME> \
--function-name HttpExample
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=Functionswordt toegevoegd.
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
Go wordt momenteel niet ondersteund voor deze functie.
De hulpbronnen 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