Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Data-API-byggare kan snabbt distribueras till Azure-tjänster som Azure Container Apps som en del av din programstack. I den här självstudien använder du Azure CLI för att automatisera vanliga uppgifter när du distribuerar Data API Builder till Azure. Först skapar du en containeravbildning med Data API Builder och lagrar den i Azure Container Registry. Sedan distribuerar du containeravbildningen till Azure Container Apps med en Azure SQL-databas som backas upp. Hela självstudien autentiserar sig mot varje komponent med hanterade identiteter.
I den här handledningen kommer du att:
- Skapa en hanterad identitet med rollbaserad åtkomstkontrollbehörighet
 - Distribuera Azure SQL med exempeldatauppsättningen AdventureWorksLT
 - Mellanlagra containeravbildningen i Azure Container Registry
 - Distribuera en Azure Container App med Data API Builder-containeravbildningen
 
Om du inte har en Azure-prenumeration, skapa ett gratis konto innan du börjar.
Förutsättningar
- Azure-prenumeration
 
- Azure Cloud Shell 
- Azure Cloud Shell är en interaktiv gränssnittsmiljö som du kan använda via webbläsaren. Använd det här gränssnittet och dess förinstallerade kommandon för att köra koden i den här artikeln, utan att behöva installera något i din lokala miljö. Så här startar du Azure Cloud Shell: 
- Välj Prova i ett kod- eller kommandoblock i den här artikeln. Om du väljer Prova kopieras inte koden eller kommandot automatiskt till Cloud Shell.
 - Gå till https://shell.azure.comeller välj Starta Cloud Shell.
 - Välj Cloud Shell i menyraden i Azure-portalen (https://portal.azure.com)
 
 
 - Azure Cloud Shell är en interaktiv gränssnittsmiljö som du kan använda via webbläsaren. Använd det här gränssnittet och dess förinstallerade kommandon för att köra koden i den här artikeln, utan att behöva installera något i din lokala miljö. Så här startar du Azure Cloud Shell: 
 
Skapa containerapp
Skapa först en Azure Container Apps-instans med en systemtilldelad hanterad identitet. Den här identiteten beviljas slutligen rollbaserad åtkomstkontrollbehörighet för åtkomst till Azure SQL och Azure Container Registry.
Skapa en universell
SUFFIXvariabel som ska användas för flera resursnamn senare i den här handledningen.let SUFFIX=$RANDOM*$RANDOMSkapa en
LOCATIONvariabel med en Azure-region som du valde att använda i den här självstudien.LOCATION="<azure-region>"Anmärkning
Om du till exempel vill distribuera till regionen USA, västra använder du det här skriptet.
LOCATION="westus"En lista över regioner som stöds för den aktuella prenumerationen finns i
az account list-locationsaz account list-locations --query "[].{Name:displayName,Slug:name}" --output tableMer information finns i Azure-regioner.
Skapa en variabel med namnet
RESOURCE_GROUP_NAMEmed resursgruppens namn. I den här självstudien rekommenderar vimsdocs-dab-*. Du använder det här värdet flera gånger i den här handledningen.RESOURCE_GROUP_NAME="msdocs-dab$SUFFIX"Skapa en ny resursgrupp med .
az group createaz group create \ --name $RESOURCE_GROUP_NAME \ --location $LOCATION \ --tag "source=msdocs-dab-tutorial"Skapa variabler med namnet
API_CONTAINER_NAMEochCONTAINER_ENV_NAMEmed unikt genererade namn för din Azure Container Apps-instans. Du använder de här variablerna i handledningen.API_CONTAINER_NAME="api$SUFFIX" CONTAINER_ENV_NAME="env$SUFFIX"Använd
az containerapp env createför att skapa en ny Azure Container Apps-miljö.az containerapp env create \ --resource-group $RESOURCE_GROUP_NAME \ --name $CONTAINER_ENV_NAME \ --logs-destination none \ --location $LOCATIONSkapa en ny containerapp med hjälp av DAB-containeravbildningen
mcr.microsoft.com/azure-databases/data-api-builderaz containerapp createoch kommandot . Den här containerappen körs (framgångsrikt), men är inte ansluten till någon databas.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-assignedHämta huvudidentifieraren för den hanterade identiteten genom att använda
az identity showoch lagra värdet i en variabel med namnetMANAGED_IDENTITY_PRINCIPAL_ID.MANAGED_IDENTITY_PRINCIPAL_ID=$( \ az containerapp show \ --resource-group $RESOURCE_GROUP_NAME \ --name $API_CONTAINER_NAME \ --query "identity.principalId" \ --output "tsv" \ )Tips/Råd
Du kan alltid kontrollera utdata för det här kommandot.
echo $MANAGED_IDENTITY_PRINCIPAL_ID
Tilldela behörigheter
Tilldela nu de systemtilldelade hanterade identitetsbehörigheterna för att läsa data från Azure SQL och Azure Container Registry. Tilldela dessutom dina identitetsbehörigheter för att skriva till Azure Container Registry.
Skapa en variabel med namnet
RESOURCE_GROUP_IDför att lagra resursgruppens identifierare. Hämta identifieraren med hjälp avaz group show. Du använder den här variabeln flera gånger i den här handledningen.RESOURCE_GROUP_ID=$( \ az group show \ --name $RESOURCE_GROUP_NAME \ --query "id" \ --output "tsv" \ )Tips/Råd
Du kan alltid kontrollera utdata för det här kommandot.
echo $RESOURCE_GROUP_IDAnvänd
az role assignment createför att tilldela AcrPush-rollen till ditt konto så att du kan skicka containrar till 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_IDTilldela AcrPull-rollen till din hanterade identitet med hjälp av
az role assignment createigen. Med den här tilldelningen kan den hanterade identiteten hämta containeravbildningar från Azure Container Registry. Den hanterade identiteten tilldelas så småningom till en Azure Container Apps-instans.# AcrPull az role assignment create \ --assignee $MANAGED_IDENTITY_PRINCIPAL_ID \ --role "7f951dda-4ed3-4680-a7ca-43fe172d538d" \ --scope $RESOURCE_GROUP_ID
Distribuera databas
Distribuera sedan en ny server och databas i Azure SQL-tjänsten. Databasen använder AdventureWorksLT-exempeldatauppsättningen .
Skapa en variabel med namnet
SQL_SERVER_NAMEmed ett unikt genererat namn för din Azure SQL Server-instans. Du använder den här variabeln senare i det här avsnittet.SQL_SERVER_NAME="srvr$SUFFIX"Skapa en ny Azure SQL-serverresurs med .
az sql server createKonfigurera den hanterade identiteten som administratör för den här servern.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_IDAnvänd
az sql server firewall-rule createför att skapa en brandväggsregel för att tillåta åtkomst från Azure-tjänster.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"Använd
az sql db createför att skapa en databas i Azure SQL-servern med namnetadventureworks. Konfigurera databasen så att denAdventureWorksLTanvänder exempeldata.az sql db create \ --resource-group $RESOURCE_GROUP_NAME \ --server $SQL_SERVER_NAME \ --name "adventureworks" \ --sample-name "AdventureWorksLT"Skapa en variabel med namnet
SQL_CONNECTION_STRINGmed anslutningssträngenadventureworksför databasen i din Azure SQL Server-instans. Konstruera anslutningssträngen med serverns fullständigt kvalificerade domännamn med hjälp avaz sql server show. Du använder den här variabeln senare i den här handledningen.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;"Tips/Råd
Du kan alltid kontrollera utdata för det här kommandot.
echo $SQL_CONNECTION_STRING
Skapa containeravbildning
Skapa sedan en containeravbildning med hjälp av en Dockerfile. Distribuera sedan containeravbildningen till en nyligen skapad Azure Container Registry-instans.
Skapa en variabel med namnet
CONTAINER_REGISTRY_NAMEmed ett unikt genererat namn för din Azure Container Registry-instans. Du använder den här variabeln senare i det här avsnittet.CONTAINER_REGISTRY_NAME="reg$SUFFIX"Skapa en ny Azure Container Registry-instans med .
az acr createaz acr create \ --resource-group $RESOURCE_GROUP_NAME \ --name $CONTAINER_REGISTRY_NAME \ --sku "Standard" \ --location $LOCATION \ --admin-enabled falseSkapa en Dockerfile med flera steg med namnet
Dockerfile. Implementera de här stegen i filen.Använda containeravbildningen
mcr.microsoft.com/dotnet/sdksom bas för byggfasenInstallera DAB CLI.
Skapa en konfigurationsfil för en SQL-databasanslutning (
mssql) med miljövariabelnDATABASE_CONNECTION_STRINGsom anslutningssträng.Skapa en entitet med namnet
Productmappad tillSalesLT.Producttabellen.Kopiera konfigurationsfilen till den slutliga
mcr.microsoft.com/azure-databases/data-api-buildercontaineravbildningen.
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 COPY --from=build /config /AppSkapa Dockerfile som en Azure Container Registry-uppgift med hjälp av
az acr build.az acr build \ --registry $CONTAINER_REGISTRY_NAME \ --image adventureworkslt-dab:latest \ --image adventureworkslt-dab:{{.Run.ID}} \ --file Dockerfile \ .Använd
az acr showför att hämta slutpunkten för containerregistret och lagra den i en variabel med namnetCONTAINER_REGISTRY_LOGIN_SERVER.CONTAINER_REGISTRY_LOGIN_SERVER=$( \ az acr show \ --resource-group $RESOURCE_GROUP_NAME \ --name $CONTAINER_REGISTRY_NAME \ --query "loginServer" \ --output "tsv" \ )Tips/Råd
Du kan alltid kontrollera utdata för det här kommandot.
echo $CONTAINER_REGISTRY_LOGIN_SERVER
Implementera containeravbildning
Uppdatera slutligen Azure Container App med den nya anpassade containeravbildningen och autentiseringsuppgifterna. Testa det program som körs för att verifiera dess anslutning till databasen.
Konfigurera containerappen så att den använder containerregistret med hjälp av
az containerapp registry set.az containerapp registry set \ --resource-group $RESOURCE_GROUP_NAME \ --name $API_CONTAINER_NAME \ --server $CONTAINER_REGISTRY_LOGIN_SERVER \ --identity "system"Använd
az containerapp secret setför att skapa en hemlighet med namnetconn-stringmed Azure SQL-anslutningssträngen.az containerapp secret set \ --resource-group $RESOURCE_GROUP_NAME \ --name $API_CONTAINER_NAME \ --secrets conn-string="$SQL_CONNECTION_STRING"Viktigt!
Den här anslutningssträngen innehåller inga användarnamn eller lösenord. Anslutningssträngen använder den hanterade identiteten för att komma åt Azure SQL-databasen. Detta gör det säkert att använda anslutningssträngen som en hemlighet i värdtjänsten.
Uppdatera containerappen med din nya anpassade containeravbildning med hjälp av
az containerapp update.DATABASE_CONNECTION_STRINGAnge att miljövariabeln ska läsas från den tidigare skapadeconn-stringhemligheten.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-stringHämta det fullständigt kvalificerade domännamnet för senaste revisionens körande containerapplikation med
az containerapp show. Lagra värdet i en variabel med namnetAPPLICATION_URL.APPLICATION_URL=$( \ az containerapp show \ --resource-group $RESOURCE_GROUP_NAME \ --name $API_CONTAINER_NAME \ --query "properties.latestRevisionFqdn" \ --output "tsv" \ )Tips/Råd
Du kan alltid kontrollera utdata för det här kommandot.
echo $APPLICATION_URLGå till URL:en och testa REST-API:et
Product.echo "https://$APPLICATION_URL/api/Product"Varning
Distributionen kan ta upp till en minut. Om du inte ser något lyckat svar väntar du och uppdaterar webbläsaren.
Rensa resurser
När du inte längre behöver exempelprogrammet eller resurserna tar du bort motsvarande distribution och alla resurser.
az group delete \
  --name $RESOURCE_GROUP_NAME