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.
Azure Container Apps is de enige hostingoptie die ondersteuning biedt voor gebeurtenisgestuurde automatische schaalaanpassing (schaal naar nul) voor Durable Functions wanneer u de Microsoft SQL-opslagprovider (MSSQL gebruikt. Als u een andere back-end voor opslag gebruikt, moet u het minimumaantal replica's instellen op groter dan nul.
Tip
Voor nieuwe projecten kunt u overwegen de Durable Task Scheduler te gebruiken. Dit is de aanbevolen Azure beheerde back-end voor duurzame werkstromen. In deze handleiding wordt specifiek aandacht besteed aan de MSSQL-back-end.
Zie Azure Container Apps hosting van Azure Functions voor meer informatie over het uitvoeren van Azure Functions in Container Apps.
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 SDK 8.0.
- 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
In deze handleiding wordt ervan uitgegaan dat u een werkende .NET geïsoleerd Durable Functions project hebt geconfigureerd met de MSSQL-back-end. Als u er nog geen hebt, volgt u de MSSQL-quickstart om er een lokaal te maken en te testen, en keert u hier terug.
Controleer voordat u doorgaat of:
- Uw project is gericht op .NET 8.0 met het geïsoleerde werkrolmodel
- De MSSQL-opslagprovider is geconfigureerd in
host.json - De app draait met succes met
func start
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 voor Durable Functions in Container Apps
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.
Eerste 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:
- Schakel Azure services en resources in voor toegang tot deze server (onder Networking). Gebruik voor productie sterkere firewallbeperkingen of configuraties van virtuele netwerken .
- Stel de waarde voor databasesortering (onder Aanvullende instellingen) in op
Latin1_General_100_BIN2_UTF8.
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
De geïmplementeerde Durable Functions-app 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.Het verzoek vraagt de orchestratie-instantie om 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
- Azure Container Apps hosting van Azure Functions
- Architectuur, configuratie en workloadgedrag van MSSQL-opslagprovider
- Urable Task Scheduler — de aanbevolen Azure beheerde back-end voor nieuwe duurzame werkstroomprojecten
- Overzicht van Durable Functions