Note
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier les répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de changer de répertoire.
Azure Functions fournit une prise en charge intégrée du développement, du déploiement et de la gestion d’applications de fonction conteneurisées sur Azure Container Apps. Utilisez Azure Container Apps pour vos applications Functions lorsque vous devez exécuter dans le même environnement que d’autres microservices, API, sites web, flux de travail ou programmes hébergés par conteneur. En savoir plus sur l’exécution d’Azure Functions dans Container Apps.
Remarque
Bien que Durable Functions prenne en charge plusieurs fournisseurs de stockage ou back-ends, les applications de mise à l’échelle automatique hébergées dans Azure Container Apps sont uniquement disponibles avec le back-end Microsoft SQL (MSSQL). Si un autre back-end est utilisé, vous devez définir le nombre minimal de réplicas à un nombre supérieur à zéro.
Dans cet article, vous allez apprendre à :
- Créez une image Docker à partir d’un projet Durable Functions local.
- Créez une application conteneur Azure et des ressources associées.
- Déployez l’image sur Azure Container App et configurez l’authentification.
Conditions préalables
- Visual Studio Code installé.
- KIT SDK .NET 8.0.
- Docker et ID Docker
- Azure CLIversion 2.47 ou ultérieure.
- Azure Functions Core Tools
- Compte Azure avec un abonnement actif. Créez un compte gratuitement.
- Un outil de test HTTP qui garde vos données en sécurité. Pour découvrir plus d’informations, consultez Outils de test HTTP.
Créer un projet Durable Functions local
Dans Visual Studio Code, créez un projet Durable Functions isolé .NET configuré pour utiliser le serveur principal MSSQL.
Testez l’application localement et revenez à cet article.
Ajouter des fichiers liés à Docker
Créez un fichier Dockerfile à la racine du projet qui décrit l’environnement minimal requis pour exécuter l’application de fonction dans un conteneur.
Dans le répertoire racine du projet, créez un fichier nommé Dockerfile.
Copiez/collez le contenu suivant dans le fichier 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"]Enregistrez le fichier.
Ajoutez un fichier .dockerignore avec le contenu suivant :
local.settings.jsonEnregistrez le fichier .dockerignore .
Générer l’image de conteneur
Créez l’image Docker. Recherchez la liste complète des images de base prises en charge pour Azure Functions dans la base Azure Functions par Microsoft | Docker Hub
Démarrez le démon Docker.
Connectez-vous à Docker avec la
docker logincommande.Lorsque vous y êtes invité, connectez-vous avec votre nom d’utilisateur et votre mot de passe. Un message « Connexion réussie » confirme que vous êtes connecté.
Accédez au répertoire racine de votre projet.
Exécutez la commande suivante pour générer l’image, en remplaçant
<DOCKER_ID>par votre ID de compte Docker Hub :dockerId=<DOCKER_ID> imageName=IMAGE_NAME> imageVersion=v1.0.0 docker build --tag $dockerId/$imageName:$imageVersion .Remarque
Si vous exécutez sur un Mac de série M, utilisez
--platform linux/amd64plutôt.Envoyez l’image à Docker :
docker push $dockerId/$imageName:$imageVersionSelon la vitesse du réseau, l’envoi d’images initiale peut prendre quelques minutes. Pendant que vous attendez, passez à la section suivante.
Créer des ressources Azure
Créez les ressources Azure nécessaires pour exécuter Durable Functions sur une application conteneur.
- Groupe de ressources Azure : Groupe de ressources contenant toutes les ressources créées.
- Environnement Azure Container App : Environnement hébergeant l’application conteneur.
- Application conteneur Azure : L’image contenant l’application Fonctions durables est déployée dans cette application.
- Compte de stockage Azure : Requis par l’application de fonction pour stocker les données liées à l’application, telles que le code de l’application.
Configuration initiale
Dans un nouveau terminal, connectez-vous à votre abonnement Azure :
az login az account set -s <subscription_name>Exécutez les commandes requises pour configurer l’extension CLI Azure Container Apps :
az upgrade az extension add --name containerapp --upgrade az provider register --namespace Microsoft.App az provider register --namespace Microsoft.OperationalInsights
Créer une application conteneur et des ressources associées
Un profil de charge de travail détermine la quantité de ressources de calcul et de mémoire disponibles pour les applications conteneur déployées dans un environnement. Créez un profil de charge de travail Consommation afin d’obtenir une prise en charge de la mise à l’échelle à zéro et un paiement à l’utilisation.
Définissez les variables d’environnement.
location=<REGION> resourceGroup=<RESOURCE_GROUP_NAME> storage=<STORAGE_NAME> containerAppEnv=<CONTAINER_APP_ENVIRONMNET_NAME> functionApp=<APP_NAME> vnet=<VNET_NAME>Créez un groupe de ressources.
az group create --name $resourceGroup --location $locationCréez l’environnement d’application conteneur.
az containerapp env create \ --enable-workload-profiles \ --resource-group $resourceGroup \ --name $containerAppEnv \ --location $location \Créez une application conteneur basée sur l’image Durable Functions.
az containerapp create --resource-group $resourceGroup \ --name $functionApp \ --environment $containerAppEnv \ --image $dockerId/$imageName:$imageVersion \ --ingress external \ --kind functionapp \ --query properties.outputs.fqdnNotez l’URL de l’application, qui doit ressembler à
https://<APP_NAME>.<ENVIRONMENT_IDENTIFIER>.<REGION>.azurecontainerapps.io.
Créer des bases de données
Créez un compte de stockage Azure, requis par l’application de fonction.
az storage account create --name $storage --location $location --resource-group $resourceGroup --sku Standard_LRSDans le portail Azure, créez une base de données Azure SQL pour conserver les informations d’état. Lors de la création :
- Activer les services et ressources Azure pour accéder à ce serveur (sous Mise en réseau)
- Définissez la valeur du classement de base de données (sous Paramètres supplémentaires) sur
Latin1_General_100_BIN2_UTF8.
Remarque
Évitez d’autoriser les services et ressources Azure à accéder à ce paramètre de serveur pour les scénarios de production. Les applications de production doivent implémenter des approches plus sécurisées, telles que des restrictions de pare-feu plus fortes ou des configurations de réseau virtuel.
Configurer l’authentification basée sur l’identité
Les identités managées sécurisent votre application en éliminant les secrets de votre application, tels que les informations d’identification dans les chaînes de connexion. Bien que vous puissiez choisir entre l’identité managée affectée par le système et l’identité managée affectée par l’utilisateur, l’identité managée affectée par l’utilisateur est recommandée, car elle n’est pas liée au cycle de vie de l’application.
Dans cette section, vous allez configurer l’identité managée affectée par l’utilisateur pour Stockage Azure.
Définissez les variables d’environnement.
subscription=<SUBSCRIPTION_ID> identity=<IDENTITY_NAME>Créez une ressource d’identité managée.
echo "Creating $identity" az identity create -g $resourceGroup -n $identity --location "$location"Affectez l’identité de l’utilisateur à l’application conteneur.
echo "Assigning $identity to app" az containerapp identity assign --resource-group $resourceGroup --name $functionApp --user-assigned $identityDéfinissez l’étendue des autorisations de contrôle d’accès en fonction du rôle (RBAC).
scope="/subscriptions/$subscription/resourceGroups/$resourceGroup/providers/Microsoft.Storage/storageAccounts/$storage"Obtenez l’identité de l’utilisateur
clientId.# Get the identity's ClientId clientId=$(az identity show --name $identity --resource-group $resourceGroup --query 'clientId' --output tsv)Attribuez le rôle Propriétaire des données blob du stockage pour l’accès au compte de stockage.
echo "Assign Storage Blob Data Owner role to identity" az role assignment create --assignee "$clientId" --role "Storage Blob Data Owner" --scope "$scope"
Configurer les paramètres d’application
Remarque
L’authentification auprès de la base de données MSSQL à l’aide de l’identité managée n’est pas prise en charge lors de l’hébergement d’une application Durable Functions dans Azure Container Apps. Pour l’instant, ce guide s’authentifie à l’aide de chaînes de connexion.
À partir de la ressource de base de données SQL dans le portail Azure, accédez auxchaînes de connexion > pour rechercher la chaîne de connexion.
La chaîne de connexion doit avoir un format similaire à :
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;"Si vous oubliez le mot de passe de l’étape de création de base de données précédente, vous pouvez le réinitialiser sur la ressource SQL Server.
Stockez la chaîne de connexion de la base de données SQL en tant que secret appelé sqldbconnection dans l’application conteneur.
az containerapp secret set \ --resource-group $resourceGroup \ --name $functionApp \ --secrets sqldbconnection=$connStrAjoutez les paramètres suivants à l’application :
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
Tester localement
Utilisez un outil de test HTTP pour envoyer une
POSTrequête au point de terminaison du déclencheur HTTP, qui doit être similaire à :https://<APP NAME>.<ENVIRONMENT_IDENTIFIER>.<REGION>.azurecontainerapps.io/api/DurableFunctionsOrchestrationCSharp1_HttpStartLa réponse est le résultat initial de la fonction HTTP qui vous indique que l’orchestration Durable Functions a démarré correctement. Bien que la réponse inclut quelques URL utiles, elle n’affiche pas encore le résultat final de l’orchestration.
Copiez/collez la valeur de l'URL pour
statusQueryGetUridans la barre d'adresse de votre navigateur et exécutez. Vous pouvez également continuer à utiliser l’outil de test HTTP pour émettre laGETrequête.La requête interroge l’instance d’orchestration pour obtenir l’état. Vous devriez voir que l’instance s’est terminée et les sorties ou résultats de l’application Durable Functions.
{ "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" }
Étapes suivantes
Pour en savoir plus :
- Hébergement d’Azure Functions par Azure Container Apps.
- Architecture du fournisseur de stockage MSSQL, configuration et comportement de charge de travail.
- Back-end de stockage géré par Azure, Planificateur de tâches durables.