Megosztás a következőn keresztül:


Oktatóanyag: Data API Builder üzembe helyezése az Azure Container Appsben az Azure CLI-vel

A Data API Builder gyorsan üzembe helyezhető az Azure-szolgáltatásokban, például az Azure Container Appsben az alkalmazásverem részeként. Ebben az oktatóanyagban az Azure CLI használatával automatizálhatja a Data API Builder Azure-ban való üzembe helyezésekor felmerülő gyakori feladatokat. Először hozzon létre egy tárolórendszerképet a Data API Builderrel, és tárolja az Azure Container Registryben. Ezután üzembe helyezheti a tárolórendszerképet az Azure Container Appsben egy háttérbeli Azure SQL-adatbázissal. A teljes oktatóanyag felügyelt identitások használatával hitelesíti az egyes összetevőket.

Ebben az útmutatóban Ön:

  • Felügyelt identitás létrehozása szerepköralapú hozzáférés-vezérlési engedélyekkel
  • Azure SQL üzembe helyezése az AdventureWorksLT minta-adatkészlettel
  • A tárolórendszerkép előkészítése az Azure Container Registryben
  • Az Azure Container App üzembe helyezése a Data API Builder tárolórendszerképével

Ha nincs Azure-előfizetésed, hozz létre egy ingyenes fiókot mielőtt elkezdenéd.

Előfeltételek

  • Azure-előfizetés
  • Azure Cloud Shell
    • Az Azure Cloud Shell egy interaktív shell környezet, amelyet a böngészőn keresztül használhat. Ezzel a felülettel és annak előre telepített parancsaival futtathatja a jelen cikkben szereplő kódot anélkül, hogy bármit is telepítenie kellene a helyi környezetben. Az Azure Cloud Shell indítása:
      • Válassza a Jelen cikk egyik kódjában vagy parancsblokkjában a Kipróbálás lehetőséget. A Kipróbálás lehetőség választása nem másolja automatikusan a kódot vagy a parancsot a Cloud Shellbe.
      • Nyissa meg a https://shell.azure.comCloud Shellt, vagy válassza a Launch Cloud Shell (Cloud Shell indítása) lehetőséget.
      • Válassza a Cloud Shellt az Azure Portal menüsávján (https://portal.azure.com)

Tárolóalkalmazás létrehozása

Először hozzon létre egy Azure Container Apps-példányt egy rendszer által hozzárendelt felügyelt identitással. Ez az identitás végül szerepköralapú hozzáférés-vezérlési engedélyeket kap az Azure SQL és az Azure Container Registry eléréséhez.

  1. Hozzon létre egy univerzális SUFFIX változót több erőforrásnévhez az oktatóanyag későbbi részében.

    let SUFFIX=$RANDOM*$RANDOM
    
  2. Hozzon létre egy változót LOCATION az oktatóanyagban használni kívánt Azure-régióval.

    LOCATION="<azure-region>"
    

    Megjegyzés:

    Ha például a Nyugat-USA régiójában szeretné végrehajtani az üzembe helyezést, akkor ezt a szkriptet fogja használni.

    LOCATION="westus"
    

    Az aktuális előfizetés támogatott régióinak listájához használja a az account list-locations

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

    További információ: Azure-régiók.

  3. Hozzon létre egy erőforráscsoport nevével elnevezett RESOURCE_GROUP_NAME változót. Ebben az oktatóanyagban azt javasoljuk msdocs-dab-*. Ezt az értéket az oktatóanyagban többször is használhatja.

    RESOURCE_GROUP_NAME="msdocs-dab$SUFFIX"    
    
  4. Hozzon létre egy új erőforráscsoportot a következő használatával az group create: .

    az group create \
      --name $RESOURCE_GROUP_NAME \
      --location $LOCATION \
      --tag "source=msdocs-dab-tutorial"
    
  5. Az Azure Container Apps-példányhoz egyedileg létrehozott névvel rendelkező API_CONTAINER_NAMECONTAINER_ENV_NAME változókat hozhat létre. Ezeket a változókat az oktatóanyag során használhatja.

    API_CONTAINER_NAME="api$SUFFIX"
    CONTAINER_ENV_NAME="env$SUFFIX"
    
  6. Új Azure Container Apps-környezet létrehozásához használható az containerapp env create .

    az containerapp env create \ 
      --resource-group $RESOURCE_GROUP_NAME \
      --name $CONTAINER_ENV_NAME \
      --logs-destination none \
      --location $LOCATION
    
  7. Hozzon létre egy új tárolóalkalmazást a mcr.microsoft.com/azure-databases/data-api-builder DAB-tároló lemezképe és a az containerapp create parancs használatával. Ez a tárolóalkalmazás sikeresen fut, de nincs adatbázishoz csatlakoztatva.

    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. Szerezze be a felügyelt identitás az identity show azonosítóját, és tárolja az értéket egy nevesített MANAGED_IDENTITY_PRINCIPAL_IDváltozóban.

    MANAGED_IDENTITY_PRINCIPAL_ID=$( \
      az containerapp show \ 
        --resource-group $RESOURCE_GROUP_NAME \
        --name $API_CONTAINER_NAME \
        --query "identity.principalId" \
        --output "tsv" \
    )
    

    Jótanács

    A parancs kimenetét mindig ellenőrizheti.

    echo $MANAGED_IDENTITY_PRINCIPAL_ID
    

Engedélyek hozzárendelése

Most rendelje hozzá a rendszer által hozzárendelt felügyelt identitásengedélyeket, hogy adatokat olvasson be az Azure SQL-ből és az Azure Container Registryből. Emellett rendelje hozzá az identitásengedélyeket az Azure Container Registryhez való íráshoz.

  1. Hozzon létre egy változót RESOURCE_GROUP_ID , amely az erőforráscsoport azonosítóját tárolja. Az azonosító lekérése a az group show segítségével. Ebben az oktatóanyagban ezt a változót többször is használhatja.

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

    Jótanács

    A parancs kimenetét mindig ellenőrizheti.

    echo $RESOURCE_GROUP_ID
    
  2. Használja a az role assignment create-t az AcrPush szerepkör hozzárendeléséhez a fiókjához, hogy tárolókat küldhessen az Azure Container Registrybe.

    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. Rendelje hozzá a felügyelt identitáshoz ismét az AcrPull szerepkört az role assignment create használatával. Ez a hozzárendelés lehetővé teszi, hogy a felügyelt identitás lekérje a tárolólemezképeket az Azure Container Registryből. A felügyelt identitás végül egy Azure Container Apps-példányhoz lesz hozzárendelve.

    # AcrPull    
    az role assignment create \
      --assignee $MANAGED_IDENTITY_PRINCIPAL_ID \
      --role "7f951dda-4ed3-4680-a7ca-43fe172d538d" \
      --scope $RESOURCE_GROUP_ID
    

Adatbázis üzembe helyezése

Ezután helyezzen üzembe egy új kiszolgálót és adatbázist az Azure SQL szolgáltatásban. Az adatbázis az AdventureWorksLT mintaadatkészletet használja.

  1. Hozzon létre egy egyedileg létrehozott névvel ellátott SQL_SERVER_NAME változót az Azure SQL Server-példányhoz. Ezt a változót a szakasz későbbi részében fogja használni.

    SQL_SERVER_NAME="srvr$SUFFIX"
    
  2. Hozzon létre egy új Azure SQL Server erőforrást a az sql server create használatával. Konfigurálja a felügyelt identitást a kiszolgáló rendszergazdájaként.

    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. Az Azure-szolgáltatások hozzáférésének engedélyezéséhez használjuk a az sql server firewall-rule create tűzfalszabály létrehozását.

    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. Adatbázis az sql db create létrehozása az Azure SQL Serveren belül.adventureworks Konfigurálja az adatbázist a AdventureWorksLT mintaadatok használatára.

    az sql db create \
      --resource-group $RESOURCE_GROUP_NAME \
      --server $SQL_SERVER_NAME \
      --name "adventureworks" \
      --sample-name "AdventureWorksLT"
    
  5. Hozzon létre egy, az Azure SQL Server-példányban lévő adatbázis kapcsolati SQL_CONNECTION_STRING sztringjével elnevezett adventureworks változót. Hozza létre a kapcsolati sztringet a kiszolgáló teljes tartománynevével a az sql server show használatával. Ezt a változót az oktatóanyag későbbi részében fogja használni.

    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;"
    

    Jótanács

    A parancs kimenetét mindig ellenőrizheti.

    echo $SQL_CONNECTION_STRING
    

Konténerkép létrehozása

Ezután hozzon létre egy tárolórendszerképet egy Dockerfile használatával. Ezután helyezze üzembe a tárolórendszerképet egy újonnan létrehozott Azure Container Registry-példányon.

  1. Hozzon létre egy egyedileg létrehozott névvel ellátott CONTAINER_REGISTRY_NAME változót az Azure Container Registry-példányhoz. Ezt a változót a szakasz későbbi részében fogja használni.

    CONTAINER_REGISTRY_NAME="reg$SUFFIX"
    
  2. Hozzon létre egy új Azure Container Registry-példányt a .az acr create

    az acr create \
      --resource-group $RESOURCE_GROUP_NAME \
      --name $CONTAINER_REGISTRY_NAME \
      --sku "Standard" \
      --location $LOCATION \
      --admin-enabled false
    
  3. Hozzon létre egy többfázisú Dockerfile nevű Dockerfile. A fájlban hajtsa végre ezeket a lépéseket.

    • mcr.microsoft.com/dotnet/sdk A tárolórendszerkép használata a buildelési fázis alapjaként

    • Telepítse a DAB CLI-t.

    • Hozzon létre egy konfigurációs fájlt egy SQL-adatbázis-kapcsolathoz (mssql) a DATABASE_CONNECTION_STRING környezeti változóval kapcsolati sztringként.

    • Hozzon létre egy Product táblához hozzárendelt entitást SalesLT.Product.

    • Másolja a konfigurációs fájlt a végső tárolórendszerképbe mcr.microsoft.com/azure-databases/data-api-builder .

    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. Építse a Dockerfile-t Azure Container Registry feladatként a az acr build használatával.

    az acr build \
      --registry $CONTAINER_REGISTRY_NAME \
      --image adventureworkslt-dab:latest \
      --image adventureworkslt-dab:{{.Run.ID}} \
      --file Dockerfile \
      .
    
  5. A tárolóregisztrációs adatbázis végpontjának lekérésére és tárolására használható az acr show egy nevesített CONTAINER_REGISTRY_LOGIN_SERVERváltozóban.

    CONTAINER_REGISTRY_LOGIN_SERVER=$( \
      az acr show \
        --resource-group $RESOURCE_GROUP_NAME \
        --name $CONTAINER_REGISTRY_NAME \
        --query "loginServer" \
        --output "tsv" \
    )
    

    Jótanács

    A parancs kimenetét mindig ellenőrizheti.

    echo $CONTAINER_REGISTRY_LOGIN_SERVER
    

Konténerkép üzembe helyezése

Végül frissítse az Azure Container App alkalmazást az új egyéni tárolórendszerképpel és hitelesítő adatokkal. Tesztelje a futó alkalmazást az adatbázishoz való kapcsolódás ellenőrzéséhez.

  1. Konfigurálja a tárolóalkalmazást a tárolóregisztrációs adatbázis az containerapp registry sethasználatára.

    az containerapp registry set \
      --resource-group $RESOURCE_GROUP_NAME \
      --name $API_CONTAINER_NAME \
      --server $CONTAINER_REGISTRY_LOGIN_SERVER \
      --identity "system"
    
  2. Az az containerapp secret set parancs segítségével hozzon létre egy conn-string nevű titkot az Azure SQL kapcsolati sztringjével.

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

    Fontos

    Ez a kapcsolati sztring nem tartalmaz felhasználónevet vagy jelszót. A kapcsolati sztring a felügyelt identitást használja az Azure SQL-adatbázis eléréséhez. Így biztonságosan használhatja a kapcsolati sztringet titkos kódként a gazdagépen.

  3. Frissítse a tárolóalkalmazást az új egyéni tárolórendszerkép használatával az containerapp update. Állítsa be a DATABASE_CONNECTION_STRING környezeti változót a korábban létrehozott conn-string titkos kódból való olvasásra.

    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. Kérdezze le a működő tárolóalkalmazás legújabb verziójának teljesen képzett tartománynevét a az containerapp show használatával. Ezt az értéket egy névvel ellátott APPLICATION_URLváltozóban tárolja.

    APPLICATION_URL=$( \
      az containerapp show \
        --resource-group $RESOURCE_GROUP_NAME \
        --name $API_CONTAINER_NAME \
        --query "properties.latestRevisionFqdn" \
        --output "tsv" \
    )
    

    Jótanács

    A parancs kimenetét mindig ellenőrizheti.

    echo $APPLICATION_URL
    
  5. Lépjen az URL-címre, és tesztelje a Product REST API-t.

    echo "https://$APPLICATION_URL/api/Product"
    

    Figyelmeztetés

    Az üzembe helyezés akár egy percet is igénybe vehet. Ha nem látja a sikeres választ, várjon, és frissítse a böngészőt.

Erőforrások tisztítása

Ha már nincs szüksége a mintaalkalmazásra vagy erőforrásokra, távolítsa el a megfelelő üzembe helyezést és az összes erőforrást.

az group delete \
  --name $RESOURCE_GROUP_NAME

Következő lépés

Az Application Insights használata a Data API Builderrel