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.
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 containerimage met Data API Builder en slaat u deze op in Azure Container Registry. Vervolgens implementeert u de containerimage in Azure Container Apps, ondersteund door een Azure SQL-database. De volledige handleiding authenticeert bij elk onderdeel met behulp van beheerde identiteiten.
In deze handleiding leert u:
- Een beheerde identiteit maken met machtigingen voor op rollen gebaseerd toegangsbeheer
- Azure SQL implementeren met de voorbeeldgegevensset AdventureWorksLT
- Zet de containerafbeelding klaar in Azure Container Registry
- Azure Container App deployen met de containerbeelden van de Data API Builder
Als je geen Azure-abonnement hebt, maak dan een gratis account aan voordat je begint.
Vereiste voorwaarden
- 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 hoeft te installeren in uw lokale omgeving. Azure Cloud Shell 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 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 hoeft te installeren in uw lokale omgeving. Azure Cloud Shell starten:
Container-app maken
Maak eerst een Azure Container Apps-exemplaar met een door het systeem toegewezen beheerde identiteit. Aan deze identiteit worden uiteindelijk machtigingen voor op rollen gebaseerd toegangsbeheer verleend voor toegang tot Azure SQL en Azure Container Registry.
Maak een universele
SUFFIXvariabele voor meerdere resourcenamen verderop in deze zelfstudie.let SUFFIX=$RANDOM*$RANDOMMaak een
LOCATIONvariabele met een Azure-regio die u hebt geselecteerd voor gebruik in deze zelfstudie.LOCATION="<azure-region>"Opmerking
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-locationsaz account list-locations --query "[].{Name:displayName,Slug:name}" --output tableZie Azure-regio'svoor meer informatie.
Maak een variabele met de naam
RESOURCE_GROUP_NAMEvan de resourcegroep. Voor deze zelfstudie raden we u aanmsdocs-dab-*. U gebruikt deze waarde meerdere keren in deze handleiding.RESOURCE_GROUP_NAME="msdocs-dab$SUFFIX"Maak een nieuwe resourcegroep met behulp van
az group create.az group create \ --name $RESOURCE_GROUP_NAME \ --location $LOCATION \ --tag "source=msdocs-dab-tutorial"Maak variabelen met de naam
API_CONTAINER_NAMEenCONTAINER_ENV_NAMEmet unieke gegenereerde namen voor uw Azure Container Apps-exemplaar. U gebruikt deze variabelen in de gehele handleiding.API_CONTAINER_NAME="api$SUFFIX" CONTAINER_ENV_NAME="env$SUFFIX"Hiermee
az containerapp env createmaakt u een nieuwe Azure Container Apps-omgeving.az containerapp env create \ --resource-group $RESOURCE_GROUP_NAME \ --name $CONTAINER_ENV_NAME \ --logs-destination none \ --location $LOCATIONMaak een nieuwe containerapp met behulp van de
mcr.microsoft.com/azure-databases/data-api-builderDAB-containerafbeelding en deaz containerapp createopdracht. 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-assignedHaal de principal-id van de beheerde identiteit op met behulp van
az identity showde waarde en sla deze 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" \ )Aanbeveling
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.
Maak een variabele met de naam
RESOURCE_GROUP_IDom de id van de resourcegroep op te slaan. Haal de identifier 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" \ )Aanbeveling
U kunt altijd de uitvoer van deze opdracht controleren.
echo $RESOURCE_GROUP_IDGebruik
az role assignment createdit om de AcrPush-rol 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_IDWijs opnieuw de AcrPull-rol toe aan uw beheerde identiteit met behulp van
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 .
Maak een variabele met de naam
SQL_SERVER_NAMEmet een unieke gegenereerde naam voor uw Azure SQL Server-exemplaar. U gebruikt deze variabele verderop in deze sectie.SQL_SERVER_NAME="srvr$SUFFIX"Maak 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_IDHiermee
az sql server firewall-rule createmaakt u een firewallregel 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"Hiermee
az sql db createmaakt u een database binnen de Azure SQL-server met de naamadventureworks. Configureer de database om deAdventureWorksLTvoorbeeldgegevens te gebruiken.az sql db create \ --resource-group $RESOURCE_GROUP_NAME \ --server $SQL_SERVER_NAME \ --name "adventureworks" \ --sample-name "AdventureWorksLT"Maak een variabele met de naam
SQL_CONNECTION_STRINGmet de verbindingsreeks voor deadventureworksdatabase in uw Azure SQL Server-exemplaar. 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;"Aanbeveling
U kunt altijd de uitvoer van deze opdracht controleren.
echo $SQL_CONNECTION_STRING
Containerafbeelding maken
Bouw vervolgens een containerimage met behulp van een Dockerfile. Implementeer vervolgens die containerimage naar een nieuw aangemaakte Azure Container Registry-instantie.
Maak een variabele met de naam
CONTAINER_REGISTRY_NAMEmet een unieke gegenereerde naam voor uw Azure Container Registry-exemplaar. U gebruikt deze variabele verderop in deze sectie.CONTAINER_REGISTRY_NAME="reg$SUFFIX"Maak een nieuwe Azure Container Registry-instantie met behulp van
az acr create.az acr create \ --resource-group $RESOURCE_GROUP_NAME \ --name $CONTAINER_REGISTRY_NAME \ --sku "Standard" \ --location $LOCATION \ --admin-enabled falseMaak een Dockerfile met meerdere fasen met de naam
Dockerfile. Implementeer deze stappen in het bestand.Gebruik de
mcr.microsoft.com/dotnet/sdkcontainerafbeelding als basis van buildfaseInstalleer de DAB CLI.
Maak een configuratiebestand voor een SQL-databaseverbinding (
mssql) met behulp van deDATABASE_CONNECTION_STRINGomgevingsvariabele als de verbindingsreeks.Maak een entiteit genaamd
Productdie is gekoppeld aan deSalesLT.Producttabel.Kopieer het configuratiebestand naar de uiteindelijke
mcr.microsoft.com/azure-databases/data-api-buildercontainerinstallatiekopie.
FROM mcr.microsoft.com/dotnet/sdk:8.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:latest COPY --from=build /config /AppBouw 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 showdit 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" \ )Aanbeveling
U kunt altijd de uitvoer van deze opdracht controleren.
echo $CONTAINER_REGISTRY_LOGIN_SERVER
Container-image deployen
Werk ten slotte de Azure Container App bij met de nieuwe aangepaste containerimage en referenties. Test de actieve toepassing om de connectiviteit met de database te valideren.
Configureer de container-app voor het gebruik van het containerregister 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 setom een geheim met de naamconn-stringte 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 maakt gebruik van de beheerde identiteit voor toegang tot de Azure SQL-database. Hierdoor is het veilig om de verbindingsreeks als geheim in de host te gebruiken.
Werk de containerapplicatie bij met uw nieuwe aangepaste containerafbeelding met behulp van
az containerapp update. Stel deDATABASE_CONNECTION_STRINGomgevingsvariabele in om te lezen uit de eerder gemaakteconn-stringgeheime gegevens.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-stringHaal de volledig gekwalificeerde domeinnaam op van de meest recente revisie in de actieve container-app 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" \ )Aanbeveling
U kunt altijd de uitvoer van deze opdracht controleren.
echo $APPLICATION_URLNavigeer naar de URL en test de
ProductREST 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 de browser.
De hulpbronnen 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