Zelfstudie: Data API Builder implementeren in Azure Container Apps met Azure CLI
Data API Builder kan snel worden geïmplementeerd in Azure-services zoals Azure Container Apps als onderdeel van uw toepassingsstack. In deze zelfstudie gebruikt u de Azure CLI om algemene taken te automatiseren bij het implementeren van Data API Builder in Azure. Eerst bouwt u een containerinstallatiekopieën met Data API Builder en slaat u deze op in Azure Container Registry. Vervolgens implementeert u de containerinstallatiekopieën in Azure Container Apps met een back-Azure SQL-database. In de hele zelfstudie wordt elk onderdeel geverifieerd met behulp van beheerde identiteiten.
In deze zelfstudie gaat u:
- Creatie een beheerde identiteit met machtigingen voor op rollen gebaseerd toegangsbeheer
- Implementeer Azure SQL met de voorbeeldgegevensset AdventureWorksLT
- Faseer de containerinstallatiekopieën in Azure Container Registry
- Azure Container App implementeren met de containerinstallatiekopieën van Data API Builder
Als u nog geen abonnement op Azure hebt, maak dan een gratis account aan voordat u begint.
Vereisten
- Azure-abonnement
- Azure Cloud Shell
- Azure Cloud Shell is een interactieve shell-omgeving die u via uw browser kunt gebruiken. Gebruik deze shell en de vooraf geïnstalleerde opdrachten om de code in dit artikel uit te voeren, zonder dat u iets in uw lokale omgeving hoeft te installeren. Om Azure Cloud Shell op te starten:
- Selecteer Uitproberen in een code- of opdrachtblok in dit artikel. Als u Proberen selecteert, wordt de code of opdracht niet automatisch gekopieerd naar Cloud Shell.
- Ga naar https://shell.azure.comof selecteer Cloud Shell starten.
- Selecteer Cloud Shell in de menubalk van de Azure Portal (https://portal.azure.com)
- Azure Cloud Shell is een interactieve shell-omgeving die u via uw browser kunt gebruiken. Gebruik deze shell en de vooraf geïnstalleerde opdrachten om de code in dit artikel uit te voeren, zonder dat u iets in uw lokale omgeving hoeft te installeren. Om Azure Cloud Shell op te starten:
Creatie container-app
Maak eerst een Azure Container Apps-exemplaar met een door het systeem toegewezen beheerde identiteit. Deze identiteit krijgt uiteindelijk toegangsbeheermachtigingen op basis van rollen voor toegang tot Azure SQL en Azure Container Registry.
Creatie een universele
SUFFIX
variabele voor gebruik voor meerdere resourcenamen verderop in deze zelfstudie.let SUFFIX=$RANDOM*$RANDOM
Creatie een
LOCATION
variabele met een Azure-regio die u in deze zelfstudie hebt geselecteerd voor gebruik.LOCATION="<azure-region>"
Notitie
Als u bijvoorbeeld wilt implementeren in de regio VS - west, gebruikt u dit script.
LOCATION="westus"
Gebruik voor een lijst met ondersteunde regio's voor het huidige abonnement
az account list-locations
az account list-locations --query "[].{Name:displayName,Slug:name}" --output table
Zie Azure-regio's voor meer informatie.
Creatie een variabele met de naam
RESOURCE_GROUP_NAME
van de resourcegroep. Voor deze zelfstudie raden we aanmsdocs-dab-*
. U gebruikt deze waarde meerdere keren in deze zelfstudie.RESOURCE_GROUP_NAME="msdocs-dab$SUFFIX"
Creatie een nieuwe resourcegroep met behulp van
az group create
.az group create \ --name $RESOURCE_GROUP_NAME \ --location $LOCATION \ --tag "source=msdocs-dab-tutorial"
Creatie variabelen met de naam
API_CONTAINER_NAME
enCONTAINER_ENV_NAME
met uniek gegenereerde namen voor uw Azure Container Apps-exemplaar. U gebruikt deze variabelen in de hele zelfstudie.API_CONTAINER_NAME="api$SUFFIX" CONTAINER_ENV_NAME="env$SUFFIX"
Gebruik
az containerapp env create
om een nieuwe Azure Container Apps-omgeving te maken.az containerapp env create \ --resource-group $RESOURCE_GROUP_NAME \ --name $CONTAINER_ENV_NAME \ --logs-destination none \ --location $LOCATION
Creatie een nieuwe container-app met behulp van de
mcr.microsoft.com/azure-databases/data-api-builder
DAB-containerinstallatiekopieën en deaz containerapp create
opdracht . Deze container-app wordt uitgevoerd, maar is niet verbonden met een database.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
Haal de principal-id van de beheerde identiteit op met behulp van
az identity show
en sla de waarde op in een variabele met de naamMANAGED_IDENTITY_PRINCIPAL_ID
.MANAGED_IDENTITY_PRINCIPAL_ID=$( \ az containerapp show \ --resource-group $RESOURCE_GROUP_NAME \ --name $API_CONTAINER_NAME \ --query "identity.principalId" \ --output "tsv" \ )
Tip
U kunt altijd de uitvoer van deze opdracht controleren.
echo $MANAGED_IDENTITY_PRINCIPAL_ID
Machtigingen toewijzen
Wijs nu de door het systeem toegewezen beheerde identiteitsmachtigingen toe om gegevens te lezen uit Azure SQL en Azure Container Registry. Wijs bovendien uw identiteitsmachtigingen toe om naar Azure Container Registry te schrijven.
Creatie een variabele met de naam
RESOURCE_GROUP_ID
om de id van de resourcegroep op te slaan. Haal de id op met behulp vanaz group show
. U gebruikt deze variabele meerdere keren in deze zelfstudie.RESOURCE_GROUP_ID=$( \ az group show \ --name $RESOURCE_GROUP_NAME \ --query "id" \ --output "tsv" \ )
Tip
U kunt altijd de uitvoer van deze opdracht controleren.
echo $RESOURCE_GROUP_ID
Gebruik
az role assignment create
om de rol AcrPush toe te wijzen aan uw account, zodat u containers naar Azure Container Registry kunt pushen.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
Wijs de AcrPull-rol opnieuw toe aan uw beheerde identiteit.
az role assignment create
Met deze toewijzing kan de beheerde identiteit containerinstallatiekopieën ophalen uit Azure Container Registry. De beheerde identiteit wordt uiteindelijk toegewezen aan een Azure Container Apps-exemplaar.# AcrPull az role assignment create \ --assignee $MANAGED_IDENTITY_PRINCIPAL_ID \ --role "7f951dda-4ed3-4680-a7ca-43fe172d538d" \ --scope $RESOURCE_GROUP_ID
Database implementeren
Implementeer vervolgens een nieuwe server en database in de Azure SQL-service. De database maakt gebruik van de voorbeeldgegevensset AdventureWorksLT .
Creatie een variabele met de naam
SQL_SERVER_NAME
met een uniek gegenereerde naam voor uw Azure SQL serverexemplaren. U gebruikt deze variabele verderop in deze sectie.SQL_SERVER_NAME="srvr$SUFFIX"
Creatie een nieuwe Azure SQL serverresource met behulp van
az sql server create
. Configureer de beheerde identiteit als de beheerder van deze server.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
Gebruik
az sql server firewall-rule create
om een firewallregel te maken om toegang vanuit Azure-services toe te staan.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"
Gebruik
az sql db create
om een database te maken in de Azure SQL-server met de naamadventureworks
. Configureer de database voor het gebruik van deAdventureWorksLT
voorbeeldgegevens.az sql db create \ --resource-group $RESOURCE_GROUP_NAME \ --server $SQL_SERVER_NAME \ --name "adventureworks" \ --sample-name "AdventureWorksLT"
Creatie een variabele met de naam
SQL_CONNECTION_STRING
met de verbindingsreeks voor deadventureworks
database in uw Azure SQL serverexemplaren. Maak de verbindingsreeks met de volledig gekwalificeerde domeinnaam van de server met behulp vanaz sql server show
. U gebruikt deze variabele verderop in deze zelfstudie.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;"
Tip
U kunt altijd de uitvoer van deze opdracht controleren.
echo $SQL_CONNECTION_STRING
Containerinstallatiekopie maken
Bouw vervolgens een containerinstallatiekopieën met behulp van een Dockerfile. Implementeer die containerinstallatiekopieën vervolgens in een nieuw Azure Container Registry exemplaar.
Creatie een variabele met de naam
CONTAINER_REGISTRY_NAME
met een uniek gegenereerde naam voor uw Azure Container Registry exemplaar. U gebruikt deze variabele verderop in deze sectie.CONTAINER_REGISTRY_NAME="reg$SUFFIX"
Creatie een nieuw Azure Container Registry-exemplaar met behulp van
az acr create
.az acr create \ --resource-group $RESOURCE_GROUP_NAME \ --name $CONTAINER_REGISTRY_NAME \ --sku "Standard" \ --location $LOCATION \ --admin-enabled false
Creatie een Dockerfile met meerdere fasen met de naam
Dockerfile
. Implementeer deze stappen in het bestand.mcr.microsoft.com/dotnet/sdk
De containerinstallatiekopieën gebruiken als basis van de buildfaseInstalleer de DAB CLI.
Creatie een configuratiebestand voor een SQL-databaseverbinding (
mssql
) met behulp van deDATABASE_CONNECTION_STRING
omgevingsvariabele als de verbindingsreeks.Creatie een entiteit met de naam
Product
toegewezen aan deSalesLT.Product
tabel.Kopieer het configuratiebestand naar de uiteindelijke
mcr.microsoft.com/azure-databases/data-api-builder
containerinstallatiekopie.
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
Bouw het Dockerfile als een Azure Container Registry taak met behulp van
az acr build
.az acr build \ --registry $CONTAINER_REGISTRY_NAME \ --image adventureworkslt-dab:latest \ --image adventureworkslt-dab:{{.Run.ID}} \ --file Dockerfile \ .
Gebruik
az acr show
om het eindpunt voor het containerregister op te halen en op te slaan in een variabele met de naamCONTAINER_REGISTRY_LOGIN_SERVER
.CONTAINER_REGISTRY_LOGIN_SERVER=$( \ az acr show \ --resource-group $RESOURCE_GROUP_NAME \ --name $CONTAINER_REGISTRY_NAME \ --query "loginServer" \ --output "tsv" \ )
Tip
U kunt altijd de uitvoer van deze opdracht controleren.
echo $CONTAINER_REGISTRY_LOGIN_SERVER
Containerinstallatiekopieën implementeren
Werk ten slotte de Azure Container App bij met de nieuwe aangepaste containerinstallatiekopieën en referenties. Test de actieve toepassing om de connectiviteit met de database te valideren.
Configureer de container-app om het containerregister te gebruiken met behulp van
az containerapp registry set
.az containerapp registry set \ --resource-group $RESOURCE_GROUP_NAME \ --name $API_CONTAINER_NAME \ --server $CONTAINER_REGISTRY_LOGIN_SERVER \ --identity "system"
Gebruik
az containerapp secret set
om een geheim met de naamconn-string
te maken met de Azure SQL verbindingsreeks.az containerapp secret set \ --resource-group $RESOURCE_GROUP_NAME \ --name $API_CONTAINER_NAME \ --secrets conn-string="$SQL_CONNECTION_STRING"
Belangrijk
Deze verbindingsreeks bevat geen gebruikersnaam of wachtwoorden. De verbindingsreeks gebruikt de beheerde identiteit voor toegang tot de Azure SQL-database. Dit maakt het veilig om de verbindingsreeks te gebruiken als een geheim in de host.
Werk de container-app bij met uw nieuwe aangepaste containerinstallatiekopieën met behulp van
az containerapp update
. Stel de omgevingsvariabeleDATABASE_CONNECTION_STRING
in om te lezen uit het eerder gemaakteconn-string
geheim.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
Haal de volledig gekwalificeerde domeinnaam van de meest recente revisie in de actieve container-app op met behulp van
az containerapp show
. Sla die waarde op in een variabele met de naamAPPLICATION_URL
.APPLICATION_URL=$( \ az containerapp show \ --resource-group $RESOURCE_GROUP_NAME \ --name $API_CONTAINER_NAME \ --query "properties.latestRevisionFqdn" \ --output "tsv" \ )
Tip
U kunt altijd de uitvoer van deze opdracht controleren.
echo $APPLICATION_URL
Navigeer naar de URL en test de
Product
REST API.echo "https://$APPLICATION_URL/api/Product"
Waarschuwing
De implementatie kan tot een minuut duren. Als u geen geslaagd antwoord ziet, wacht u en vernieuwt u uw browser.
Resources opschonen
Wanneer u de voorbeeldtoepassing of -resources niet meer nodig hebt, verwijdert u de bijbehorende implementatie en alle resources.
az group delete \
--name $RESOURCE_GROUP_NAME