Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Tvůrce rozhraní API pro data je možné rychle nasadit do služeb Azure, jako je Azure Container Apps, jako součást zásobníku aplikací. V tomto kurzu použijete Azure CLI k automatizaci běžných úloh při nasazování Tvůrce rozhraní API pro data do Azure. Nejprve vytvoříte image kontejneru pomocí Tvůrce rozhraní Data API a uložíte ji do služby Azure Container Registry. Image kontejneru pak nasadíte do Azure Container Apps s backingovou databází Azure SQL. Celý kurz se autentizuje u každé komponenty pomocí spravovaných identit.
V tomto kurzu se naučíte:
- Vytvoření spravované identity s oprávněními řízení přístupu na základě role
- Nasazení Azure SQL s ukázkovou datovou sadou AdventureWorksLT
- Příprava image kontejneru ve službě Azure Container Registry
- Nasazení aplikace Azure Container pomocí image kontejneru Data API Builder
Pokud nemáte předplatné Azure, vytvořte si bezplatný účet před zahájením.
Požadavky
- Předplatné Azure
- Azure Cloud Shell
- Azure Cloud Shell je interaktivní prostředí, které můžete použít v prohlížeči. Pomocí tohoto prostředí a jeho předinstalovaných příkazů spusťte kód v tomto článku, aniž byste museli instalovat cokoli do místního prostředí. Spuštění Azure Cloud Shellu:
- V tomto článku vyberte Vyzkoušet v bloku kódu nebo příkazu. Výběrem Vyzkoušet se kód ani příkaz automaticky nezkopíruje do Cloud Shell.
- Přejděte na https://shell.azure.com, nebo vyberte Spustit Cloud Shell.
- Vyberte Cloud Shell na řádku nabídek portálu Azure (https://portal.azure.com)
- Azure Cloud Shell je interaktivní prostředí, které můžete použít v prohlížeči. Pomocí tohoto prostředí a jeho předinstalovaných příkazů spusťte kód v tomto článku, aniž byste museli instalovat cokoli do místního prostředí. Spuštění Azure Cloud Shellu:
Vytvoření aplikace typu kontejner
Nejprve vytvořte instanci Azure Container Apps se spravovanou identitou přiřazenou systémem. Tato identita má nakonec udělená oprávnění řízení přístupu na základě role pro přístup k Azure SQL a Azure Container Registry.
Vytvořte univerzální
SUFFIXproměnnou, která se použije pro více názvů prostředků dále v tomto kurzu.let SUFFIX=$RANDOM*$RANDOMVytvořte proměnnou
LOCATIONs oblastí Azure, kterou jste vybrali pro použití v tomto kurzu.LOCATION="<azure-region>"Poznámka:
Pokud například chcete nasadit do oblasti USA – západ , použijte tento skript.
LOCATION="westus"Seznam podporovaných oblastí pro aktuální předplatné použijte
az account list-locationsaz account list-locations --query "[].{Name:displayName,Slug:name}" --output tableDalší informace najdete v tématu Oblasti Azure.
Vytvořte proměnnou pojmenovanou
RESOURCE_GROUP_NAME, což je název skupiny prostředků. Pro účely tohoto kurzu doporučujememsdocs-dab-*. Tuto hodnotu použijete vícekrát v tomto kurzu.RESOURCE_GROUP_NAME="msdocs-dab$SUFFIX"Vytvořte novou skupinu prostředků pomocí
az group createpříkazu .az group create \ --name $RESOURCE_GROUP_NAME \ --location $LOCATION \ --tag "source=msdocs-dab-tutorial"Vytvořte proměnné pojmenované
API_CONTAINER_NAMEaCONTAINER_ENV_NAMEs jedinečně vygenerovanými názvy pro vaši instanci Azure Container Apps. Tyto proměnné použijete v průběhu kurzu.API_CONTAINER_NAME="api$SUFFIX" CONTAINER_ENV_NAME="env$SUFFIX"Slouží
az containerapp env createk vytvoření nového prostředí Azure Container Apps.az containerapp env create \ --resource-group $RESOURCE_GROUP_NAME \ --name $CONTAINER_ENV_NAME \ --logs-destination none \ --location $LOCATIONVytvořte novou aplikaci kontejneru pomocí image kontejneru DAB
mcr.microsoft.com/azure-databases/data-api-buildera příkazuaz containerapp create. Tato aplikace kontejneru se úspěšně spustí, ale není připojená k žádné databázi.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-assignedZískejte hlavní identifikátor spravované identity pomocí
az identity showa uložte hodnotu do proměnné s názvemMANAGED_IDENTITY_PRINCIPAL_ID.MANAGED_IDENTITY_PRINCIPAL_ID=$( \ az containerapp show \ --resource-group $RESOURCE_GROUP_NAME \ --name $API_CONTAINER_NAME \ --query "identity.principalId" \ --output "tsv" \ )Návod
Výstup tohoto příkazu můžete kdykoli zkontrolovat.
echo $MANAGED_IDENTITY_PRINCIPAL_ID
Přiřadit oprávnění
Teď přiřaďte oprávnění spravované identity přiřazené systémem ke čtení dat z Azure SQL a Azure Container Registry. Kromě toho přiřaďte oprávnění vaší identity k zápisu do služby Azure Container Registry.
Vytvořte proměnnou s názvem
RESOURCE_GROUP_IDpro uložení identifikátoru skupiny prostředků. Získejte identifikátor pomocíaz group show. Tuto proměnnou použijete vícekrát v tomto kurzu.RESOURCE_GROUP_ID=$( \ az group show \ --name $RESOURCE_GROUP_NAME \ --query "id" \ --output "tsv" \ )Návod
Výstup tohoto příkazu můžete kdykoli zkontrolovat.
echo $RESOURCE_GROUP_IDSlouží
az role assignment createk přiřazení role AcrPush k vašemu účtu, abyste mohli odesílat kontejnery do služby 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_IDOpět přiřaďte roli AcrPull spravované identitě pomocí
az role assignment create. Toto přiřazení umožňuje spravované identitě načíst image kontejneru ze služby Azure Container Registry. Spravovaná identita se nakonec přiřadí k instanci Azure Container Apps.# AcrPull az role assignment create \ --assignee $MANAGED_IDENTITY_PRINCIPAL_ID \ --role "7f951dda-4ed3-4680-a7ca-43fe172d538d" \ --scope $RESOURCE_GROUP_ID
Nasazení databáze
V dalším kroku nasaďte nový server a databázi ve službě Azure SQL. Databáze používá ukázkovou datovou sadu AdventureWorksLT .
Vytvořte proměnnou
SQL_SERVER_NAMEs jedinečným vygenerovaným názvem pro instanci azure SQL Serveru. Tuto proměnnou použijete později v této části.SQL_SERVER_NAME="srvr$SUFFIX"Vytvořte nový prostředek Azure SQL serveru pomocí
az sql server create. Nakonfigurujte spravovanou identitu jako správce tohoto serveru.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_IDVyužijte
az sql server firewall-rule createk vytvoření pravidla brány firewall pro povolení přístupu ze služeb 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"Slouží
az sql db createk vytvoření databáze na serveru Azure SQL s názvemadventureworks. Nakonfigurujte databázi k použití ukázkových datAdventureWorksLT.az sql db create \ --resource-group $RESOURCE_GROUP_NAME \ --server $SQL_SERVER_NAME \ --name "adventureworks" \ --sample-name "AdventureWorksLT"Vytvořte proměnnou nazvanou
SQL_CONNECTION_STRINGs připojovacím řetězcem proadventureworksdatabázi v instanci Azure SQL serveru. Vytvořte připojovací řetězec s plně kvalifikovaným názvem domény serveru pomocíaz sql server show. Tuto proměnnou použijete později v tomto kurzu.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;"Návod
Výstup tohoto příkazu můžete kdykoli zkontrolovat.
echo $SQL_CONNECTION_STRING
Vytvořit obraz kontejneru
Dále sestavte image kontejneru pomocí souboru Dockerfile. Potom nasaďte image kontejneru do nově vytvořené instance služby Azure Container Registry.
Vytvořte proměnnou
CONTAINER_REGISTRY_NAMEs jedinečným vygenerovaným názvem pro instanci služby Azure Container Registry. Tuto proměnnou použijete později v této části.CONTAINER_REGISTRY_NAME="reg$SUFFIX"Vytvořte novou instanci služby Azure Container Registry pomocí
az acr create.az acr create \ --resource-group $RESOURCE_GROUP_NAME \ --name $CONTAINER_REGISTRY_NAME \ --sku "Standard" \ --location $LOCATION \ --admin-enabled falseVytvořte vícefázový soubor Dockerfile s názvem
Dockerfile. V souboru implementujte tyto kroky.Použijte image kontejneru jako základ pro fázi sestavení
Nainstalujte CLI DAB.
Vytvořte konfigurační soubor pro připojení k databázi SQL (
mssql) pomocí proměnné prostředíDATABASE_CONNECTION_STRINGjako řetězce pro připojení.Vytvořte entitu s názvem
Productnamapovanou naSalesLT.Producttabulku.Zkopírujte konfigurační soubor do konečné
mcr.microsoft.com/azure-databases/data-api-builderimage kontejneru.
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 /AppSestavte soubor Dockerfile jako úlohu služby Azure Container Registry pomocí
az acr build.az acr build \ --registry $CONTAINER_REGISTRY_NAME \ --image adventureworkslt-dab:latest \ --image adventureworkslt-dab:{{.Run.ID}} \ --file Dockerfile \ .Slouží
az acr showk získání koncového bodu pro registr kontejneru a jeho uložení do proměnné s názvemCONTAINER_REGISTRY_LOGIN_SERVER.CONTAINER_REGISTRY_LOGIN_SERVER=$( \ az acr show \ --resource-group $RESOURCE_GROUP_NAME \ --name $CONTAINER_REGISTRY_NAME \ --query "loginServer" \ --output "tsv" \ )Návod
Výstup tohoto příkazu můžete kdykoli zkontrolovat.
echo $CONTAINER_REGISTRY_LOGIN_SERVER
Nasazení kontejnerového obrazu
Nakonec aktualizujte aplikaci Kontejner Azure novou vlastní imagí kontejneru a přihlašovacími údaji. Otestujte spuštěnou aplikaci a ověřte její připojení k databázi.
Nakonfigurujte aplikaci kontejneru tak, aby používala registr kontejneru pomocí
az containerapp registry set.az containerapp registry set \ --resource-group $RESOURCE_GROUP_NAME \ --name $API_CONTAINER_NAME \ --server $CONTAINER_REGISTRY_LOGIN_SERVER \ --identity "system"Použijte
az containerapp secret setk vytvoření tajemství s názvemconn-stringpomocí připojovacího řetězce Azure SQL.az containerapp secret set \ --resource-group $RESOURCE_GROUP_NAME \ --name $API_CONTAINER_NAME \ --secrets conn-string="$SQL_CONNECTION_STRING"Důležité
Tento připojovací řetězec neobsahuje žádná uživatelská jména ani hesla. Připojovací řetězec používá spravovanou identitu pro přístup k databázi Azure SQL. Díky tomu je bezpečné používat připojovací řetězec jako tajný kód v hostiteli.
Aktualizujte aplikaci kontejneru pomocí nové vlastní kontejnerové image prostřednictvím
az containerapp update. Nastavte proměnnouDATABASE_CONNECTION_STRINGprostředí tak, aby se načetla z dříve vytvořenéhoconn-stringtajného kódu.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-stringZískejte plně kvalifikovaný název domény nejnovější revize aplikace spuštěné v kontejneru pomocí
az containerapp show. Uložte hodnotu do proměnné s názvemAPPLICATION_URL.APPLICATION_URL=$( \ az containerapp show \ --resource-group $RESOURCE_GROUP_NAME \ --name $API_CONTAINER_NAME \ --query "properties.latestRevisionFqdn" \ --output "tsv" \ )Návod
Výstup tohoto příkazu můžete kdykoli zkontrolovat.
echo $APPLICATION_URLPřejděte na adresu URL a otestujte
Productrozhraní REST API.echo "https://$APPLICATION_URL/api/Product"Výstraha
Nasazení může trvat až minutu. Pokud se vám nezobrazuje úspěšná odpověď, počkejte a aktualizujte prohlížeč.
Vyčistěte zdroje
Pokud už ukázkovou aplikaci nebo prostředky nepotřebujete, odeberte odpovídající nasazení a všechny prostředky.
az group delete \
--name $RESOURCE_GROUP_NAME