Sdílet prostřednictvím


Kurz: Nasazení Tvůrce rozhraní API dat 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 vaší sady aplikací. V tomto kurzu použijete Azure CLI k automatizaci běžných úloh při nasazování Tvůrce rozhraní DATA API do Azure. Nejprve vytvoříte image kontejneru pomocí Tvůrce rozhraní DATA API a uložíte ji do Azure Container Registry. Image kontejneru pak nasadíte do Azure Container Apps s databází Azure SQL. Celý kurz se ověřuje u každé komponenty pomocí spravovaných identit.

V tomto kurzu jste:

  • Create spravované identity s oprávněními řízení přístupu na základě role
  • Nasazení Azure SQL pomocí ukázkové datové sady AdventureWorksLT
  • Příprava image kontejneru v Azure Container Registry
  • Nasazení aplikace Azure Container App s imagí kontejneru Data API Builderu

Pokud ještě nemáte předplatné Azure, vytvořte si napřed bezplatný účet.

Požadavky

  • Předplatné Azure
  • Azure Cloud Shell
    • Azure Cloud Shell je interaktivní prostředí prostředí, které můžete používat prostřednictvím prohlížeče. Pomocí tohoto prostředí a jeho předinstalovaných příkazů spusťte kód v tomto článku, aniž byste museli cokoli instalovat do místního prostředí. Spuštění služby Azure Cloud Shell:
      • V tomto článku vyberte Vyzkoušet v bloku kódu nebo příkazů. Výběrem možnosti Vyzkoušet se kód nebo příkaz automaticky nezkopíruje do Cloud Shell.
      • Přejděte na https://shell.azure.comnebo vyberte Spustit Cloud Shell.
      • Vyberte Cloud Shell v řádku nabídek Azure Portal (https://portal.azure.com)

Create aplikace kontejneru

Nejprve vytvořte instanci Azure Container Apps se spravovanou identitou přiřazenou systémem. Této identitě se nakonec udělí oprávnění řízení přístupu na základě role pro přístup k Azure SQL a Azure Container Registry.

  1. Create 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. Create 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"
    

    Pokud chcete zobrazit 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. Create proměnnou s názvem RESOURCE_GROUP_NAME skupiny prostředků. Pro účely tohoto kurzu doporučujeme msdocs-dab-*. Tuto hodnotu použijete v tomto kurzu několikrát.

    RESOURCE_GROUP_NAME="msdocs-dab$SUFFIX"    
    
  4. Create novou skupinu prostředků pomocí az group create.

    az group create \
      --name $RESOURCE_GROUP_NAME \
      --location $LOCATION \
      --tag "source=msdocs-dab-tutorial"
    
  5. Create proměnné s názvem 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. Použijte 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. Create novou aplikaci kontejneru mcr.microsoft.com/azure-databases/data-api-builder pomocí Image kontejneru DAB a az containerapp create příkaz 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 identifikátor objektu zabezpečení 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" \
    )
    

    Tip

    Výstup tohoto příkazu můžete kdykoli zkontrolovat.

    echo $MANAGED_IDENTITY_PRINCIPAL_ID
    

Přiřazení oprávnění

Teď přiřaďte spravované identitě přiřazené systémem oprávnění ke čtení dat z Azure SQL a Azure Container Registry. Kromě toho přiřaďte identitě oprávnění k zápisu do Azure Container Registry.

  1. Create 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 tomto kurzu několikrát.

    RESOURCE_GROUP_ID=$( \
      az group show \
        --name $RESOURCE_GROUP_NAME \
        --query "id" \
        --output "tsv" \
    )
    

    Tip

    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 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. Znovu přiřaďte roli AcrPull spravované identitě az role assignment create . Toto přiřazení umožňuje spravované identitě načíst image kontejneru z Azure Container Registry. Spravovaná identita se nakonec přiřadí 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

Dále nasaďte nový server a databázi ve službě Azure SQL. Databáze používá ukázkovou datovou sadu AdventureWorksLT .

  1. Create proměnnou SQL_SERVER_NAME s jedinečným názvem pro instanci Azure SQL serveru. Tuto proměnnou použijete dále v této části.

    SQL_SERVER_NAME="srvr$SUFFIX"
    
  2. Create 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. Slouží az sql server firewall-rule create k vytvoření pravidla brány firewall, které povolí přístup 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 tak, aby používala AdventureWorksLT ukázková data.

    az sql db create \
      --resource-group $RESOURCE_GROUP_NAME \
      --server $SQL_SERVER_NAME \
      --name "adventureworks" \
      --sample-name "AdventureWorksLT"
    
  5. Create proměnnou s názvem SQL_CONNECTION_STRING připojovací řetězec databáze adventureworks 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;"
    

    Tip

    Výstup tohoto příkazu můžete kdykoli zkontrolovat.

    echo $SQL_CONNECTION_STRING
    

Sestavení image kontejneru

Dále vytvořte image kontejneru pomocí souboru Dockerfile. Pak nasaďte image kontejneru do nově vytvořené instance Azure Container Registry.

  1. Create proměnnou s jedinečným CONTAINER_REGISTRY_NAME názvem pro vaši instanci Azure Container Registry. Tuto proměnnou použijete dále v této části.

    CONTAINER_REGISTRY_NAME="reg$SUFFIX"
    
  2. Create novou instanci 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. Create vícefázový soubor Dockerfile s názvem Dockerfile. V souboru implementujte tyto kroky.

    • Použití image kontejneru mcr.microsoft.com/dotnet/sdk jako základ fáze sestavení

    • Nainstalujte rozhraní příkazového řádku DAB.

    • Create konfigurační soubor pro připojení k databázi SQL (mssql) s použitím DATABASE_CONNECTION_STRING proměnné prostředí jako připojovací řetězec.

    • Create 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: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
    
  4. Sestavte soubor Dockerfile jako úlohu 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. Použijte 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" \
    )
    

    Tip

    Výstup tohoto příkazu můžete kdykoli zkontrolovat.

    echo $CONTAINER_REGISTRY_LOGIN_SERVER
    

Nasazení image kontejneru

Nakonec aktualizujte aplikaci kontejneru Azure pomocí nové vlastní image kontejneru a přihlašovacích údajů. 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í tajného kódu s názvem conn-string Azure SQL připojovací řetězec.

    az containerapp secret set \
      --resource-group $RESOURCE_GROUP_NAME \
      --name $API_CONTAINER_NAME \
      --secrets conn-string="$SQL_CONNECTION_STRING"
    

    Důležité

    Tato připojovací řetězec neobsahuje žádné uživatelské jméno 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ý klíč v hostiteli.

  3. Aktualizujte aplikaci kontejneru pomocí nové vlastní image kontejneru pomocí az containerapp updatepříkazu . Nastavte proměnnou DATABASE_CONNECTION_STRING prostředí na čtení 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. Pomocí příkazu načtěte plně kvalifikovaný název domény nejnovější revize ve spuštěné aplikaci az containerapp showkontejneru. 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" \
    )
    

    Tip

    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"
    

    Upozornění

    Nasazení může trvat až minutu. Pokud se vám nezobrazuje úspěšná odpověď, počkejte a aktualizujte prohlížeč.

Vyčištění prostředků

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