Självstudie: Distribuera Data API Builder till Azure Container Apps med Azure CLI
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. Hela självstudien autentiserar till varje komponent med hanterade identiteter.
I den här kursen får du:
- Skapa en hanterad identitet med behörigheter för rollbaserad åtkomstkontroll
- Distribuera Azure SQL med exempeldatauppsättningen AdventureWorksLT
- Mellanlagra containeravbildningen i Azure Container Registry
- Distribuera Azure Container App med containeravbildningen Data API Builder
Om du inte har någon Azure-prenumeration kan du skapa ett kostnadsfritt 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 för att Cloud Shell.
- Gå till https://shell.azure.comeller välj Starta Cloud Shell.
- Välj Cloud Shell på menyraden i Azure Portal (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 så småningom rollbaserad åtkomstkontrollbehörighet för åtkomst Azure SQL och Azure Container Registry.
Skapa en universell
SUFFIX
variabel som ska användas för flera resursnamn senare i den här självstudien.let SUFFIX=$RANDOM*$RANDOM
Skapa en
LOCATION
variabel med en Azure-region som du valde att använda i den här självstudien.LOCATION="<azure-region>"
Anteckning
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-locations
az account list-locations --query "[].{Name:displayName,Slug:name}" --output table
Mer information finns i Azure-regioner.
Skapa en variabel med namnet
RESOURCE_GROUP_NAME
med resursgruppens namn. I den här självstudien rekommenderarmsdocs-dab-*
vi . Du använder det här värdet flera gånger i den här självstudien.RESOURCE_GROUP_NAME="msdocs-dab$SUFFIX"
Skapa en ny resursgrupp med .
az group create
az group create \ --name $RESOURCE_GROUP_NAME \ --location $LOCATION \ --tag "source=msdocs-dab-tutorial"
Skapa variabler med namnet
API_CONTAINER_NAME
ochCONTAINER_ENV_NAME
med unikt genererade namn för din Azure Container Apps-instans. Du använder dessa variabler under hela självstudien.API_CONTAINER_NAME="api$SUFFIX" CONTAINER_ENV_NAME="env$SUFFIX"
Använd
az containerapp env create
fö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 $LOCATION
Skapa en ny containerapp med hjälp av
mcr.microsoft.com/azure-databases/data-api-builder
DAB-containeravbildningenaz containerapp create
och kommandot . Den här containerappen körs 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-assigned
Hämta huvudidentifieraren för den hanterade identiteten med och
az identity show
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
Du kan alltid kontrollera utdata för det här kommandot.
echo $MANAGED_IDENTITY_PRINCIPAL_ID
Tilldela behörigheter
Tilldela nu behörigheterna för den systemtilldelade hanterade identiteten för att läsa data från Azure SQL och Azure Container Registry. Dessutom tilldelar du din identitet behörighet att skriva till Azure Container Registry.
Skapa en variabel med namnet
RESOURCE_GROUP_ID
fö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 självstudien.RESOURCE_GROUP_ID=$( \ az group show \ --name $RESOURCE_GROUP_NAME \ --query "id" \ --output "tsv" \ )
Tips
Du kan alltid kontrollera utdata för det här kommandot.
echo $RESOURCE_GROUP_ID
Använd
az role assignment create
fö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_ID
Tilldela rollen AcrPull till din hanterade identitet med hjälp av
az role assignment create
igen. 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 exempeldatauppsättningen AdventureWorksLT .
Skapa en variabel med namnet
SQL_SERVER_NAME
med ett unikt genererat namn för din Azure SQL serverinstans. 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 hjälp av
az sql server create
. Konfigurera 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_ID
Använd
az sql server firewall-rule create
fö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 create
för att skapa en databas i Azure SQL-servern med namnetadventureworks
. Konfigurera databasen så att denAdventureWorksLT
anvä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_STRING
med anslutningssträng föradventureworks
databasen i din Azure SQL-serverinstans. Skapa anslutningssträng 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 självstudien.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
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_NAME
med 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 create
az acr create \ --resource-group $RESOURCE_GROUP_NAME \ --name $CONTAINER_REGISTRY_NAME \ --sku "Standard" \ --location $LOCATION \ --admin-enabled false
Skapa en Dockerfile i flera steg med namnet
Dockerfile
. Implementera de här stegen i filen.Använd containeravbildningen
mcr.microsoft.com/dotnet/sdk
som bas för byggfasenInstallera DAB CLI.
Skapa en konfigurationsfil för en SQL-databasanslutning (
mssql
) medDATABASE_CONNECTION_STRING
miljövariabeln som anslutningssträng.Skapa en entitet med namnet
Product
mappad till tabellenSalesLT.Product
.Kopiera konfigurationsfilen till den slutliga
mcr.microsoft.com/azure-databases/data-api-builder
containeravbildningen.
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
Skapa 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 show
fö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
Du kan alltid kontrollera utdata för det här kommandot.
echo $CONTAINER_REGISTRY_LOGIN_SERVER
Distribuera containeravbildning
Slutligen uppdaterar du Azure Container App med den nya anpassade containeravbildningen och autentiseringsuppgifterna. Testa det program som körs för att verifiera anslutningen 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 set
för att skapa en hemlighet med namnetconn-string
med Azure SQL anslutningssträng.az containerapp secret set \ --resource-group $RESOURCE_GROUP_NAME \ --name $API_CONTAINER_NAME \ --secrets conn-string="$SQL_CONNECTION_STRING"
Viktigt
Den här anslutningssträng innehåller inga användarnamn eller lösenord. Anslutningssträng använder den hanterade identiteten för att komma åt Azure SQL-databasen. Det gör det säkert att använda anslutningssträng som en hemlighet i värden.
Uppdatera containerappen med din nya anpassade containeravbildning med hjälp av
az containerapp update
.DATABASE_CONNECTION_STRING
Ange att miljövariabeln ska läsa från den tidigare skapadeconn-string
hemligheten.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
Hämta det fullständigt kvalificerade domännamnet för den senaste revisionen i containerappen som körs 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
Du kan alltid kontrollera utdata för det här kommandot.
echo $APPLICATION_URL
Gå 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 ett lyckat svar väntar du och uppdaterar webbläsaren.
Rensa resurser
När du inte längre behöver exempelprogrammet eller exempelresurserna tar du bort motsvarande distribution och alla resurser.
az group delete \
--name $RESOURCE_GROUP_NAME