Tutoriel : Déployer le générateur d’API de données sur Azure Container Apps avec Azure CLI
Le générateur d’API de données peut être rapidement déployé sur des services Azure comme Azure Container Apps dans le cadre de votre pile d’applications. Dans ce tutoriel, vous utilisez Azure CLI pour automatiser les tâches courantes lors du déploiement du générateur d’API de données sur Azure. Tout d’abord, vous créez une image conteneur avec le Générateur d’API de données et vous la stockez dans Azure Container Registry. Vous déployez ensuite l’image conteneur sur Azure Container Apps avec une base de données Azure SQL de sauvegarde. L’ensemble du tutoriel s’authentifie auprès de chaque composant à l’aide d’identités managées.
Dans ce tutoriel, vous allez :
- Create une identité managée avec des autorisations de contrôle d’accès en fonction du rôle
- Déployer Azure SQL avec l’exemple de jeu de données AdventureWorksLT
- Mettre en scène l’image conteneur dans Azure Container Registry
- Déployer Azure Container App avec l’image conteneur du générateur d’API de données
Si vous n’avez pas d’abonnement Azure, créez un compte gratuit avant de commencer.
Prérequis
- Abonnement Azure
- Azure Cloud Shell
- Azure Cloud Shell est un environnement d’interpréteur de commandes interactif que vous pouvez utiliser via votre navigateur. Utilisez cet interpréteur de commandes et ses commandes préinstallées pour exécuter le code de cet article, sans avoir à installer quoi que ce soit sur votre environnement local. Pour démarrer Azure Cloud Shell :
- Sélectionnez Essayer dans un bloc de code ou de commande dans cet article. Si vous sélectionnez Essayer, vous ne copiez pas automatiquement le code ou la commande dans Cloud Shell.
- Accédez à https://shell.azure.comou sélectionnez Lancer Cloud Shell.
- Sélectionnez Cloud Shell dans la barre de menus du Portail Azure (https://portal.azure.com)
- Azure Cloud Shell est un environnement d’interpréteur de commandes interactif que vous pouvez utiliser via votre navigateur. Utilisez cet interpréteur de commandes et ses commandes préinstallées pour exécuter le code de cet article, sans avoir à installer quoi que ce soit sur votre environnement local. Pour démarrer Azure Cloud Shell :
application conteneur Create
Tout d’abord, créez un instance Azure Container Apps avec une identité managée affectée par le système. Cette identité se voit finalement accorder des autorisations de contrôle d’accès en fonction du rôle pour accéder aux Azure SQL et aux Azure Container Registry.
Create une variable universelle
SUFFIX
à utiliser pour plusieurs noms de ressources plus loin dans ce didacticiel.let SUFFIX=$RANDOM*$RANDOM
Create une
LOCATION
variable avec une région Azure que vous avez sélectionnée pour utiliser dans ce didacticiel.LOCATION="<azure-region>"
Notes
Par exemple, si vous souhaitez déployer dans la région USA Ouest , vous devez utiliser ce script.
LOCATION="westus"
Pour obtenir la liste des régions prises en charge pour l’abonnement actuel, utilisez
az account list-locations
az account list-locations --query "[].{Name:displayName,Slug:name}" --output table
Pour plus d’informations, consultez Régions Azure.
Create une variable nommée
RESOURCE_GROUP_NAME
avec le nom du groupe de ressources. Pour ce tutoriel, nous vous recommandonsmsdocs-dab-*
. Vous utilisez cette valeur plusieurs fois dans ce didacticiel.RESOURCE_GROUP_NAME="msdocs-dab$SUFFIX"
Create un nouveau groupe de ressources à l’aide de
az group create
.az group create \ --name $RESOURCE_GROUP_NAME \ --location $LOCATION \ --tag "source=msdocs-dab-tutorial"
Create des variables nommées
API_CONTAINER_NAME
etCONTAINER_ENV_NAME
avec des noms générés de manière unique pour vos instance Azure Container Apps. Vous utilisez ces variables tout au long du didacticiel.API_CONTAINER_NAME="api$SUFFIX" CONTAINER_ENV_NAME="env$SUFFIX"
Utilisez
az containerapp env create
pour créer un environnement Azure Container Apps.az containerapp env create \ --resource-group $RESOURCE_GROUP_NAME \ --name $CONTAINER_ENV_NAME \ --logs-destination none \ --location $LOCATION
Create une nouvelle application conteneur à l’aide de
mcr.microsoft.com/azure-databases/data-api-builder
Image conteneur DAB et laaz containerapp create
commande. Cette application conteneur s’exécute correctement, mais n’est connectée à aucune base de données.az containerapp create \ --resource-group $RESOURCE_GROUP_NAME \ --environment $CONTAINER_ENV_NAME \ --name $API_CONTAINER_NAME \ --image "mcr.microsoft.com/azure-databases/data-api-builder" \ --ingress "external" \ --target-port "5000" \ --system-assigned
Obtenez l’identificateur principal de l’identité managée à l’aide
az identity show
de et stockez la valeur dans une variable nomméeMANAGED_IDENTITY_PRINCIPAL_ID
.MANAGED_IDENTITY_PRINCIPAL_ID=$( \ az containerapp show \ --resource-group $RESOURCE_GROUP_NAME \ --name $API_CONTAINER_NAME \ --query "identity.principalId" \ --output "tsv" \ )
Conseil
Vous pouvez toujours case activée la sortie de cette commande.
echo $MANAGED_IDENTITY_PRINCIPAL_ID
Attribuer des autorisations
À présent, attribuez les autorisations d’identité managée attribuées par le système pour lire les données des Azure SQL et des Azure Container Registry. En outre, attribuez vos autorisations d’identité pour écrire dans Azure Container Registry.
Create une variable nommée
RESOURCE_GROUP_ID
pour stocker l’identificateur du groupe de ressources. Obtenez l’identificateur à l’aide deaz group show
. Vous utilisez cette variable plusieurs fois dans ce didacticiel.RESOURCE_GROUP_ID=$( \ az group show \ --name $RESOURCE_GROUP_NAME \ --query "id" \ --output "tsv" \ )
Conseil
Vous pouvez toujours case activée la sortie de cette commande.
echo $RESOURCE_GROUP_ID
Utilisez
az role assignment create
pour attribuer le rôle AcrPush à votre compte afin de pouvoir envoyer des conteneurs à Azure Container Registry.CURRENT_USER_PRINCIPAL_ID=$( \ az ad signed-in-user show \ --query "id" \ --output "tsv" \ ) # AcrPush az role assignment create \ --assignee $CURRENT_USER_PRINCIPAL_ID \ --role "8311e382-0749-4cb8-b61a-304f252e45ec" \ --scope $RESOURCE_GROUP_ID
Attribuez à nouveau le rôle AcrPull à votre identité
az role assignment create
managée. Cette affectation permet à l’identité managée d’extraire des images conteneur de Azure Container Registry. L’identité managée est finalement affectée à un instance Azure Container Apps.# AcrPull az role assignment create \ --assignee $MANAGED_IDENTITY_PRINCIPAL_ID \ --role "7f951dda-4ed3-4680-a7ca-43fe172d538d" \ --scope $RESOURCE_GROUP_ID
Déployer une base de données
Ensuite, déployez un nouveau serveur et une nouvelle base de données dans le service Azure SQL. La base de données utilise l’exemple de jeu de données AdventureWorksLT .
Create une variable nommée
SQL_SERVER_NAME
avec un nom généré de manière unique pour votre instance de serveur Azure SQL. Vous utiliserez cette variable plus loin dans cette section.SQL_SERVER_NAME="srvr$SUFFIX"
Create une nouvelle ressource de serveur Azure SQL à l’aide de
az sql server create
. Configurez l’identité managée en tant qu’administrateur de ce serveur.az sql server create \ --resource-group $RESOURCE_GROUP_NAME \ --name $SQL_SERVER_NAME \ --location $LOCATION \ --enable-ad-only-auth \ --external-admin-principal-type "User" \ --external-admin-name $API_CONTAINER_NAME \ --external-admin-sid $MANAGED_IDENTITY_PRINCIPAL_ID
Utilisez
az sql server firewall-rule create
pour créer une règle de pare-feu pour autoriser l’accès à partir des services Azure.az sql server firewall-rule create \ --resource-group $RESOURCE_GROUP_NAME \ --server $SQL_SERVER_NAME \ --name "AllowAzure" \ --start-ip-address "0.0.0.0" \ --end-ip-address "0.0.0.0"
Utilisez
az sql db create
pour créer une base de données dans le serveur Azure SQL nomméadventureworks
. Configurez la base de données pour utiliser lesAdventureWorksLT
exemples de données.az sql db create \ --resource-group $RESOURCE_GROUP_NAME \ --server $SQL_SERVER_NAME \ --name "adventureworks" \ --sample-name "AdventureWorksLT"
Create une variable nommée
SQL_CONNECTION_STRING
avec le chaîne de connexion de la base de données dans votreadventureworks
instance de serveur Azure SQL. Construisez le chaîne de connexion avec le nom de domaine complet du serveur à l’aideaz sql server show
de . Vous utiliserez cette variable plus loin dans ce tutoriel.SQL_SERVER_ENDPOINT=$( \ az sql server show \ --resource-group $RESOURCE_GROUP_NAME \ --name $SQL_SERVER_NAME \ --query "fullyQualifiedDomainName" \ --output "tsv" \ ) SQL_CONNECTION_STRING="Server=$SQL_SERVER_ENDPOINT;Database=adventureworks;Encrypt=true;Authentication=Active Directory Default;"
Conseil
Vous pouvez toujours case activée la sortie de cette commande.
echo $SQL_CONNECTION_STRING
Générer l’image conteneur
Ensuite, générez une image conteneur à l’aide d’un fichier Dockerfile. Déployez ensuite cette image conteneur sur un Azure Container Registry instance nouvellement créé.
Create une variable nommée
CONTAINER_REGISTRY_NAME
avec un nom généré de manière unique pour votre Azure Container Registry instance. Vous utiliserez cette variable plus loin dans cette section.CONTAINER_REGISTRY_NAME="reg$SUFFIX"
Create une nouvelle Azure Container Registry instance à l’aide de
az acr create
.az acr create \ --resource-group $RESOURCE_GROUP_NAME \ --name $CONTAINER_REGISTRY_NAME \ --sku "Standard" \ --location $LOCATION \ --admin-enabled false
Create un fichier Dockerfile à plusieurs étapes nommé
Dockerfile
. Dans le fichier, implémentez ces étapes.Utiliser l’image
mcr.microsoft.com/dotnet/sdk
conteneur comme base de la phase de générationInstallez l’interface CLI DAB.
Create un fichier de configuration pour une connexion de base de données SQL (
mssql
) en utilisant laDATABASE_CONNECTION_STRING
variable d’environnement comme chaîne de connexion.Create une entité nommée
Product
mappée à laSalesLT.Product
table.Copiez le fichier de configuration dans l’image conteneur finale
mcr.microsoft.com/azure-databases/data-api-builder
.
FROM mcr.microsoft.com/dotnet/sdk:6.0-cbl-mariner2.0 AS build WORKDIR /config RUN dotnet new tool-manifest RUN dotnet tool install Microsoft.DataApiBuilder RUN dotnet tool run dab -- init --database-type "mssql" --connection-string "@env('DATABASE_CONNECTION_STRING')" RUN dotnet tool run dab -- add Product --source "SalesLT.Product" --permissions "anonymous:read" FROM mcr.microsoft.com/azure-databases/data-api-builder COPY --from=build /config /App
Générez le fichier Dockerfile en tant que tâche Azure Container Registry à l’aide de
az acr build
.az acr build \ --registry $CONTAINER_REGISTRY_NAME \ --image adventureworkslt-dab:latest \ --image adventureworkslt-dab:{{.Run.ID}} \ --file Dockerfile \ .
Utilisez
az acr show
pour obtenir le point de terminaison du registre de conteneurs et le stocker dans une variable nomméeCONTAINER_REGISTRY_LOGIN_SERVER
.CONTAINER_REGISTRY_LOGIN_SERVER=$( \ az acr show \ --resource-group $RESOURCE_GROUP_NAME \ --name $CONTAINER_REGISTRY_NAME \ --query "loginServer" \ --output "tsv" \ )
Conseil
Vous pouvez toujours case activée la sortie de cette commande.
echo $CONTAINER_REGISTRY_LOGIN_SERVER
Déployer une image conteneur
Enfin, mettez à jour l’application conteneur Azure avec la nouvelle image de conteneur personnalisée et les informations d’identification. Testez l’application en cours d’exécution pour valider sa connectivité à la base de données.
Configurez l’application conteneur pour utiliser le registre de conteneurs à l’aide de
az containerapp registry set
.az containerapp registry set \ --resource-group $RESOURCE_GROUP_NAME \ --name $API_CONTAINER_NAME \ --server $CONTAINER_REGISTRY_LOGIN_SERVER \ --identity "system"
Utilisez
az containerapp secret set
pour créer un secret nomméconn-string
avec le Azure SQL chaîne de connexion.az containerapp secret set \ --resource-group $RESOURCE_GROUP_NAME \ --name $API_CONTAINER_NAME \ --secrets conn-string="$SQL_CONNECTION_STRING"
Important
Cette chaîne de connexion n’inclut aucun nom d’utilisateur ou mot de passe. Le chaîne de connexion utilise l’identité managée pour accéder à la base de données Azure SQL. Cela permet d’utiliser le chaîne de connexion comme secret dans l’hôte.
Mettez à jour l’application conteneur avec votre nouvelle image conteneur personnalisée à l’aide de
az containerapp update
. Définissez laDATABASE_CONNECTION_STRING
variable d’environnement pour lire à partir du secret crééconn-string
précédemment.az containerapp update \ --resource-group $RESOURCE_GROUP_NAME \ --name $API_CONTAINER_NAME \ --image "$CONTAINER_REGISTRY_LOGIN_SERVER/adventureworkslt-dab:latest" \ --set-env-vars DATABASE_CONNECTION_STRING=secretref:conn-string
Récupérez le nom de domaine complet de la dernière révision dans l’application conteneur en cours d’exécution à l’aide de
az containerapp show
. Stockez cette valeur dans une variable nomméeAPPLICATION_URL
.APPLICATION_URL=$( \ az containerapp show \ --resource-group $RESOURCE_GROUP_NAME \ --name $API_CONTAINER_NAME \ --query "properties.latestRevisionFqdn" \ --output "tsv" \ )
Conseil
Vous pouvez toujours case activée la sortie de cette commande.
echo $APPLICATION_URL
Accédez à l’URL et testez l’API
Product
REST.echo "https://$APPLICATION_URL/api/Product"
Avertissement
Le déploiement peut prendre jusqu’à une minute. Si vous ne voyez pas de réponse réussie, attendez et actualisez votre navigateur.
Nettoyer les ressources
Lorsque vous n’avez plus besoin de l’exemple d’application ou de ressources, supprimez le déploiement correspondant et toutes les ressources.
az group delete \
--name $RESOURCE_GROUP_NAME