Sdílet prostřednictvím


Kurz: Nasazení Tvůrce rozhraní API pro data do Azure Container Apps pomocí Azure CLI

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)

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.

  1. Vytvořte univerzální SUFFIX proměnnou, která se použije pro více názvů prostředků dále v tomto kurzu.

    let SUFFIX=$RANDOM*$RANDOM
    
  2. Vytvořte proměnnou LOCATION s 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-locations

    az account list-locations --query "[].{Name:displayName,Slug:name}" --output table
    

    Další informace najdete v tématu Oblasti Azure.

  3. Vytvořte proměnnou pojmenovanou RESOURCE_GROUP_NAME, což je název skupiny prostředků. Pro účely tohoto kurzu doporučujeme msdocs-dab-*. Tuto hodnotu použijete vícekrát v tomto kurzu.

    RESOURCE_GROUP_NAME="msdocs-dab$SUFFIX"    
    
  4. 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"
    
  5. Vytvořte proměnné pojmenované API_CONTAINER_NAME a CONTAINER_ENV_NAME s 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"
    
  6. Slouží az containerapp env create k 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 $LOCATION
    
  7. Vytvořte novou aplikaci kontejneru pomocí image kontejneru DAB mcr.microsoft.com/azure-databases/data-api-builder a příkazu az 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-assigned
    
  8. Získejte hlavní identifikátor spravované identity pomocí az identity show a uložte hodnotu do proměnné s názvem MANAGED_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.

  1. Vytvořte proměnnou s názvem RESOURCE_GROUP_ID pro 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_ID
    
  2. Slouží az role assignment create k 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_ID
    
  3. Opě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 .

  1. Vytvořte proměnnou SQL_SERVER_NAME s 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"
    
  2. 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_ID
    
  3. Využijte az sql server firewall-rule create k 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"
    
  4. Slouží az sql db create k vytvoření databáze na serveru Azure SQL s názvem adventureworks. Nakonfigurujte databázi k použití ukázkových dat AdventureWorksLT.

    az sql db create \
      --resource-group $RESOURCE_GROUP_NAME \
      --server $SQL_SERVER_NAME \
      --name "adventureworks" \
      --sample-name "AdventureWorksLT"
    
  5. Vytvořte proměnnou nazvanou SQL_CONNECTION_STRING s připojovacím řetězcem pro adventureworks databá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.

  1. Vytvořte proměnnou CONTAINER_REGISTRY_NAME s 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"
    
  2. 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 false
    
  3. Vytvoř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_STRING jako řetězce pro připojení.

    • Vytvořte entitu s názvem Product namapovanou na SalesLT.Product tabulku.

    • Zkopírujte konfigurační soubor do konečné mcr.microsoft.com/azure-databases/data-api-builder image 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 /App
    
  4. Sestavte 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 \
      .
    
  5. Slouží az acr show k získání koncového bodu pro registr kontejneru a jeho uložení do proměnné s názvem CONTAINER_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.

  1. 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"
    
  2. Použijte az containerapp secret set k vytvoření tajemství s názvem conn-string pomocí 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.

  3. Aktualizujte aplikaci kontejneru pomocí nové vlastní kontejnerové image prostřednictvím az containerapp update. Nastavte proměnnou DATABASE_CONNECTION_STRING prostředí tak, aby se načetla z dříve vytvořeného conn-string tajné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-string
    
  4. Zí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ázvem APPLICATION_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_URL
    
  5. Přejděte na adresu URL a otestujte Product rozhraní 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

Další krok