Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of mappen te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen om mappen te wijzigen.
Azure Functions biedt geïntegreerde ondersteuning voor het ontwikkelen, implementeren en beheren van containerfunctie-apps in Azure Container Apps. Gebruik Azure Container Apps voor uw Functions-apps wanneer u moet draaien in dezelfde omgeving als andere microservices, API's, websites, werkstromen, of container-gehoste programma's. Meer informatie over het uitvoeren van Azure Functions in Container Apps.
Opmerking
Hoewel Durable Functions ondersteuning biedt voor verschillende opslagproviders of back-ends, is het automatisch schalen van apps die worden gehost in Azure Container Apps alleen beschikbaar met de Microsoft SQL-back-end (MSSQL). Als een andere back-end wordt gebruikt, moet u het minimumaantal replica's instellen op groter dan nul.
In dit artikel leert u het volgende:
- Maak een Docker-image van een lokaal Durable Functions-project.
- Maak een Azure Container App en gerelateerde resources.
- Implementeer de image naar de Azure-containerapp en stel verificatie in.
Vereiste voorwaarden
- Visual Studio Code geïnstalleerd.
- .NET 8.0 SDK.
- Docker - en Docker-id
- Azure CLIversie 2.47 of hoger.
- Azure Functions Core Tools
- Azure-account met een actief abonnement. Gratis een account maken
- Een HTTP-testprogramma waarmee uw gegevens veilig blijven. Zie HTTP-testhulpprogramma's voor meer informatie.
Een lokaal Durable Functions-project maken
Maak in Visual Studio Code een .NET geïsoleerd Durable Functions-project dat is geconfigureerd voor het gebruik van de MSSQL-back-end.
Test de app lokaal en ga terug naar dit artikel.
Docker-gerelateerde bestanden toevoegen
Maak een Dockerfile in de hoofdmap van het project waarin de minimaal vereiste omgeving wordt beschreven voor het uitvoeren van de functie-app in een container.
Maak in de hoofdmap van het project een nieuw bestand met de naam Dockerfile.
Kopieer/plak de volgende inhoud in het Dockerfile.
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS installer-env COPY . /src/dotnet-function-app RUN cd /src/dotnet-function-app && \ mkdir -p /home/site/wwwroot && \ dotnet publish *.csproj --output /home/site/wwwroot # To enable ssh & remote debugging on app service change the base image to the one below # FROM mcr.microsoft.com/azure-functions/dotnet-isolated:4-dotnet-isolated8.0-appservice FROM mcr.microsoft.com/azure-functions/dotnet-isolated:4-dotnet-isolated8.0 ENV AzureWebJobsScriptRoot=/home/site/wwwroot \ AzureFunctionsJobHost__Logging__Console__IsEnabled=true COPY --from=installer-env ["/home/site/wwwroot", "/home/site/wwwroot"]Sla het bestand op.
Voeg een .dockerignore-bestand toe met de volgende inhoud:
local.settings.jsonSla het .dockerignore-bestand op.
De containerafbeelding bouwen
Bouw de Docker-installatiekopie. De volledige lijst met ondersteunde basisinstallatiekopieën voor Azure Functions zoeken in de Azure Functions-basis van Microsoft | Docker Hub
Start de Docker-daemon.
Meld u aan bij Docker met de
docker loginopdracht.Meld u aan met uw gebruikersnaam en wachtwoord wanneer u hierom wordt gevraagd. Een bericht 'Aanmelden geslaagd' bevestigt dat u bent aangemeld.
Navigeer naar de hoofdmap van uw project.
Voer de volgende opdracht uit om de image te bouwen, waarbij u
<DOCKER_ID>vervangt door uw Docker Hub-account-ID:dockerId=<DOCKER_ID> imageName=IMAGE_NAME> imageVersion=v1.0.0 docker build --tag $dockerId/$imageName:$imageVersion .Opmerking
Als u een Mac uit de M-serie gebruikt, gebruik in plaats daarvan
--platform linux/amd64.Push de image naar Docker:
docker push $dockerId/$imageName:$imageVersionAfhankelijk van de netwerksnelheid kan het uploaden van de eerste afbeelding enkele minuten duren. Terwijl u wacht, gaat u verder met de volgende sectie.
Azure-resources maken
Maak de Azure-resources die nodig zijn voor het uitvoeren van Durable Functions in een container-app.
- Azure-resourcegroep: Resourcegroep met alle gemaakte resources.
- Azure Container App-omgeving: Omgeving die als host fungeert voor de container-app.
- Azure Container App: Afbeelding met de Durable Functions-app wordt ingezet in deze app.
- Azure Storage-account: Vereist voor de functie-app voor het opslaan van app-gerelateerde gegevens, zoals toepassingscode.
Initiële installatie
Meld u in een nieuwe terminal aan bij uw Azure-abonnement:
az login az account set -s <subscription_name>Voer de vereiste opdrachten uit om de AZURE Container Apps CLI-extensie in te stellen:
az upgrade az extension add --name containerapp --upgrade az provider register --namespace Microsoft.App az provider register --namespace Microsoft.OperationalInsights
Maak een containerapplicatie en bijbehorende resources.
Een workloadprofiel bepaalt de hoeveelheid reken- en geheugenresources die beschikbaar zijn voor de container-apps die in een omgeving zijn geïmplementeerd. Maak een verbruiksworkloadprofiel voor scale-to-zero-ondersteuning en betalen per gebruik.
Stel de omgevingsvariabelen in.
location=<REGION> resourceGroup=<RESOURCE_GROUP_NAME> storage=<STORAGE_NAME> containerAppEnv=<CONTAINER_APP_ENVIRONMNET_NAME> functionApp=<APP_NAME> vnet=<VNET_NAME>Maak een resourcegroep.
az group create --name $resourceGroup --location $locationMaak de container-app-omgeving.
az containerapp env create \ --enable-workload-profiles \ --resource-group $resourceGroup \ --name $containerAppEnv \ --location $location \Maak een container-app op basis van de Durable Functions-image.
az containerapp create --resource-group $resourceGroup \ --name $functionApp \ --environment $containerAppEnv \ --image $dockerId/$imageName:$imageVersion \ --ingress external \ --kind functionapp \ --query properties.outputs.fqdnNoteer de URL van de app, die er ongeveer als
https://<APP_NAME>.<ENVIRONMENT_IDENTIFIER>.<REGION>.azurecontainerapps.iovolgt uit moet zien.
Databases maken
Maak een Azure Storage-account dat vereist is voor de functie-app.
az storage account create --name $storage --location $location --resource-group $resourceGroup --sku Standard_LRSMaak in Azure Portal een Azure SQL-database om statusgegevens vast te houden. Tijdens het maken:
- Azure-services en -resources toegang geven tot deze server (onder Netwerken)
- Stel de waarde voor databasesortering (onder Aanvullende instellingen) in op
Latin1_General_100_BIN2_UTF8.
Opmerking
Zorg ervoor dat u de instelling Azure-services en -resources toestaan om toegang te krijgen tot deze server niet inschakelt voor productiescenario's. Productietoepassingen moeten veiligere benaderingen implementeren, zoals sterkere firewallbeperkingen of configuraties van virtuele netwerken.
Verificatie op basis van identiteit configureren
Beheerde identiteiten maken uw app veiliger door geheimen uit uw app te elimineren, zoals referenties in de verbindingsreeksen. Hoewel u kunt kiezen tussen door het systeem toegewezen en door de gebruiker toegewezen beheerde identiteit, wordt door de gebruiker toegewezen beheerde identiteit aanbevolen, omdat deze niet is gekoppeld aan de levenscyclus van de app.
In deze sectie stelt u door de gebruiker toegewezen beheerde identiteit in voor Azure Storage.
Stel de omgevingsvariabelen in.
subscription=<SUBSCRIPTION_ID> identity=<IDENTITY_NAME>Een beheerde identiteitsresource maken.
echo "Creating $identity" az identity create -g $resourceGroup -n $identity --location "$location"Wijs de gebruikersidentiteit toe aan de container-app.
echo "Assigning $identity to app" az containerapp identity assign --resource-group $resourceGroup --name $functionApp --user-assigned $identityStel het bereik van de RBAC-machtigingen (op rollen gebaseerd toegangsbeheer) in.
scope="/subscriptions/$subscription/resourceGroups/$resourceGroup/providers/Microsoft.Storage/storageAccounts/$storage"Verkrijg de gebruikersidentiteit
clientId.# Get the identity's ClientId clientId=$(az identity show --name $identity --resource-group $resourceGroup --query 'clientId' --output tsv)Wijs de rol Eigenaar van opslagblobgegevens toe voor toegang tot het opslagaccount.
echo "Assign Storage Blob Data Owner role to identity" az role assignment create --assignee "$clientId" --role "Storage Blob Data Owner" --scope "$scope"
App-instellingen instellen
Opmerking
Verificatie bij de MSSQL-database met beheerde identiteit wordt niet ondersteund bij het hosten van een Durable Functions-app in Azure Container Apps. Deze handleiding authenticeert voorlopig met behulp van connectiestrengen.
Navigeer vanuit de SQL-databaseresource in Azure Portal naarVerbindingsreeksen> om de verbindingsreeks te vinden.
De verbindingsreeks moet een indeling hebben die vergelijkbaar is met:
dbserver=<SQL_SERVER_NAME> sqlDB=<SQL_DB_NAME> username=<DB_USER_LOGIN> password=<DB_USER_PASSWORD> connStr="Server=tcp:$dbserver.database.windows.net,1433;Initial Catalog=$sqlDB;Persist Security Info=False;User ID=$username;Password=$password;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;"Als u het wachtwoord uit de vorige stap voor het maken van de database vergeet, kunt u het opnieuw instellen op de SQL Server-resource.
Sla de verbindingsreeks van de SQL-database op als een geheim met de naam sqldbconnection in de container-app.
az containerapp secret set \ --resource-group $resourceGroup \ --name $functionApp \ --secrets sqldbconnection=$connStrVoeg de volgende instellingen toe aan de app:
az containerapp update \ -n $functionApp \ -g $resourceGroup \ --set-env-vars SQLDB_Connection=secretref:sqldbconnection \ AzureWebJobsStorage__accountName=$storage \ AzureWebJobsStorage__clientId=$clientId \ AzureWebJobsStorage__credential=managedidentity \ FUNCTIONS_WORKER_RUNTIME=dotnet-isolated
Lokaal testen
Gebruik een HTTP-testprogramma om een
POSTaanvraag naar het HTTP-triggereindpunt te verzenden, wat vergelijkbaar moet zijn met:https://<APP NAME>.<ENVIRONMENT_IDENTIFIER>.<REGION>.azurecontainerapps.io/api/DurableFunctionsOrchestrationCSharp1_HttpStartHet antwoord is het eerste resultaat van de HTTP-functie, om aan te geven dat de Durable Functions-orkestratie succesvol is gestart. Hoewel het antwoord enkele nuttige URL's bevat, wordt het eindresultaat van de orkestratie nog niet weergegeven.
Kopieer/plak de URL-waarde voor
statusQueryGetUriin de adresbalk van uw browser en voer deze uit. U kunt ook het HTTP-testhulpprogramma blijven gebruiken om deGETaanvraag uit te voeren.De aanvraag voert een query uit op het indelingsexemplaar voor de status. U kunt zien dat de instantie is voltooid en de uitvoer of resultaten van de Durable Functions-app.
{ "name":"HelloCities", "instanceId":"7f99f9474a6641438e5c7169b7ecb3f2", "runtimeStatus":"Completed", "input":null, "customStatus":null, "output":"Hello, Tokyo! Hello, London! Hello, Seattle!", "createdTime":"2023-01-31T18:48:49Z", "lastUpdatedTime":"2023-01-31T18:48:56Z" }
Volgende stappen
Meer informatie over:
- Azure Container Apps die als host fungeren voor Azure Functions.
- Architectuur, configuratie en workloadgedrag van MSSQL-opslagproviders.
- De back-end voor door Azure beheerde opslag, Durable Task Scheduler.