Delen via


Zelfstudie: Data API Builder implementeren in Azure Container Apps met Azure CLI

Data API Builder kan snel worden geïmplementeerd in Azure-services zoals Azure Container Apps als onderdeel van uw toepassingsstack. In deze zelfstudie gebruikt u de Azure CLI om algemene taken te automatiseren bij het implementeren van Data API Builder in Azure. Eerst bouwt u een containerinstallatiekopieën met Data API Builder en slaat u deze op in Azure Container Registry. Vervolgens implementeert u de containerinstallatiekopieën in Azure Container Apps met een back-Azure SQL-database. In de hele zelfstudie wordt elk onderdeel geverifieerd met behulp van beheerde identiteiten.

In deze zelfstudie gaat u:

  • Creatie een beheerde identiteit met machtigingen voor op rollen gebaseerd toegangsbeheer
  • Implementeer Azure SQL met de voorbeeldgegevensset AdventureWorksLT
  • Faseer de containerinstallatiekopieën in Azure Container Registry
  • Azure Container App implementeren met de containerinstallatiekopieën van Data API Builder

Als u nog geen abonnement op Azure hebt, maak dan een gratis account aan voordat u begint.

Vereisten

  • Azure-abonnement
  • Azure Cloud Shell
    • Azure Cloud Shell is een interactieve shell-omgeving die u via uw browser kunt gebruiken. Gebruik deze shell en de vooraf geïnstalleerde opdrachten om de code in dit artikel uit te voeren, zonder dat u iets in uw lokale omgeving hoeft te installeren. Om Azure Cloud Shell op te starten:
      • Selecteer Uitproberen in een code- of opdrachtblok in dit artikel. Als u Proberen selecteert, wordt de code of opdracht niet automatisch gekopieerd naar Cloud Shell.
      • Ga naar https://shell.azure.comof selecteer Cloud Shell starten.
      • Selecteer Cloud Shell in de menubalk van de Azure Portal (https://portal.azure.com)

Creatie container-app

Maak eerst een Azure Container Apps-exemplaar met een door het systeem toegewezen beheerde identiteit. Deze identiteit krijgt uiteindelijk toegangsbeheermachtigingen op basis van rollen voor toegang tot Azure SQL en Azure Container Registry.

  1. Creatie een universele SUFFIX variabele voor gebruik voor meerdere resourcenamen verderop in deze zelfstudie.

    let SUFFIX=$RANDOM*$RANDOM
    
  2. Creatie een LOCATION variabele met een Azure-regio die u in deze zelfstudie hebt geselecteerd voor gebruik.

    LOCATION="<azure-region>"
    

    Notitie

    Als u bijvoorbeeld wilt implementeren in de regio VS - west, gebruikt u dit script.

    LOCATION="westus"
    

    Gebruik voor een lijst met ondersteunde regio's voor het huidige abonnement az account list-locations

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

    Zie Azure-regio's voor meer informatie.

  3. Creatie een variabele met de naam RESOURCE_GROUP_NAME van de resourcegroep. Voor deze zelfstudie raden we aan msdocs-dab-*. U gebruikt deze waarde meerdere keren in deze zelfstudie.

    RESOURCE_GROUP_NAME="msdocs-dab$SUFFIX"    
    
  4. Creatie een nieuwe resourcegroep met behulp van az group create.

    az group create \
      --name $RESOURCE_GROUP_NAME \
      --location $LOCATION \
      --tag "source=msdocs-dab-tutorial"
    
  5. Creatie variabelen met de naam API_CONTAINER_NAME en CONTAINER_ENV_NAME met uniek gegenereerde namen voor uw Azure Container Apps-exemplaar. U gebruikt deze variabelen in de hele zelfstudie.

    API_CONTAINER_NAME="api$SUFFIX"
    CONTAINER_ENV_NAME="env$SUFFIX"
    
  6. Gebruik az containerapp env create om een nieuwe Azure Container Apps-omgeving te maken.

    az containerapp env create \ 
      --resource-group $RESOURCE_GROUP_NAME \
      --name $CONTAINER_ENV_NAME \
      --logs-destination none \
      --location $LOCATION
    
  7. Creatie een nieuwe container-app met behulp van de mcr.microsoft.com/azure-databases/data-api-builder DAB-containerinstallatiekopieën en de az containerapp create opdracht . Deze container-app wordt uitgevoerd, maar is niet verbonden met een database.

    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. Haal de principal-id van de beheerde identiteit op met behulp van az identity show en sla de waarde op in een variabele met de naam 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

    U kunt altijd de uitvoer van deze opdracht controleren.

    echo $MANAGED_IDENTITY_PRINCIPAL_ID
    

Machtigingen toewijzen

Wijs nu de door het systeem toegewezen beheerde identiteitsmachtigingen toe om gegevens te lezen uit Azure SQL en Azure Container Registry. Wijs bovendien uw identiteitsmachtigingen toe om naar Azure Container Registry te schrijven.

  1. Creatie een variabele met de naam RESOURCE_GROUP_ID om de id van de resourcegroep op te slaan. Haal de id op met behulp van az group show. U gebruikt deze variabele meerdere keren in deze zelfstudie.

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

    Tip

    U kunt altijd de uitvoer van deze opdracht controleren.

    echo $RESOURCE_GROUP_ID
    
  2. Gebruik az role assignment create om de rol AcrPush toe te wijzen aan uw account, zodat u containers naar Azure Container Registry kunt pushen.

    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. Wijs de AcrPull-rol opnieuw toe aan uw beheerde identiteit.az role assignment create Met deze toewijzing kan de beheerde identiteit containerinstallatiekopieën ophalen uit Azure Container Registry. De beheerde identiteit wordt uiteindelijk toegewezen aan een Azure Container Apps-exemplaar.

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

Database implementeren

Implementeer vervolgens een nieuwe server en database in de Azure SQL-service. De database maakt gebruik van de voorbeeldgegevensset AdventureWorksLT .

  1. Creatie een variabele met de naam SQL_SERVER_NAME met een uniek gegenereerde naam voor uw Azure SQL serverexemplaren. U gebruikt deze variabele verderop in deze sectie.

    SQL_SERVER_NAME="srvr$SUFFIX"
    
  2. Creatie een nieuwe Azure SQL serverresource met behulp van az sql server create. Configureer de beheerde identiteit als de beheerder van deze server.

    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. Gebruik az sql server firewall-rule create om een firewallregel te maken om toegang vanuit Azure-services toe te staan.

    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. Gebruik az sql db create om een database te maken in de Azure SQL-server met de naam adventureworks. Configureer de database voor het gebruik van de AdventureWorksLT voorbeeldgegevens.

    az sql db create \
      --resource-group $RESOURCE_GROUP_NAME \
      --server $SQL_SERVER_NAME \
      --name "adventureworks" \
      --sample-name "AdventureWorksLT"
    
  5. Creatie een variabele met de naam SQL_CONNECTION_STRING met de verbindingsreeks voor de adventureworks database in uw Azure SQL serverexemplaren. Maak de verbindingsreeks met de volledig gekwalificeerde domeinnaam van de server met behulp van az sql server show. U gebruikt deze variabele verderop in deze zelfstudie.

    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

    U kunt altijd de uitvoer van deze opdracht controleren.

    echo $SQL_CONNECTION_STRING
    

Containerinstallatiekopie maken

Bouw vervolgens een containerinstallatiekopieën met behulp van een Dockerfile. Implementeer die containerinstallatiekopieën vervolgens in een nieuw Azure Container Registry exemplaar.

  1. Creatie een variabele met de naam CONTAINER_REGISTRY_NAME met een uniek gegenereerde naam voor uw Azure Container Registry exemplaar. U gebruikt deze variabele verderop in deze sectie.

    CONTAINER_REGISTRY_NAME="reg$SUFFIX"
    
  2. Creatie een nieuw Azure Container Registry-exemplaar met behulp van az acr create.

    az acr create \
      --resource-group $RESOURCE_GROUP_NAME \
      --name $CONTAINER_REGISTRY_NAME \
      --sku "Standard" \
      --location $LOCATION \
      --admin-enabled false
    
  3. Creatie een Dockerfile met meerdere fasen met de naam Dockerfile. Implementeer deze stappen in het bestand.

    • mcr.microsoft.com/dotnet/sdk De containerinstallatiekopieën gebruiken als basis van de buildfase

    • Installeer de DAB CLI.

    • Creatie een configuratiebestand voor een SQL-databaseverbinding (mssql) met behulp van de DATABASE_CONNECTION_STRING omgevingsvariabele als de verbindingsreeks.

    • Creatie een entiteit met de naam Product toegewezen aan de SalesLT.Product tabel.

    • Kopieer het configuratiebestand naar de uiteindelijke mcr.microsoft.com/azure-databases/data-api-builder containerinstallatiekopie.

    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. Bouw het Dockerfile als een Azure Container Registry taak met behulp van az acr build.

    az acr build \
      --registry $CONTAINER_REGISTRY_NAME \
      --image adventureworkslt-dab:latest \
      --image adventureworkslt-dab:{{.Run.ID}} \
      --file Dockerfile \
      .
    
  5. Gebruik az acr show om het eindpunt voor het containerregister op te halen en op te slaan in een variabele met de naam 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

    U kunt altijd de uitvoer van deze opdracht controleren.

    echo $CONTAINER_REGISTRY_LOGIN_SERVER
    

Containerinstallatiekopieën implementeren

Werk ten slotte de Azure Container App bij met de nieuwe aangepaste containerinstallatiekopieën en referenties. Test de actieve toepassing om de connectiviteit met de database te valideren.

  1. Configureer de container-app om het containerregister te gebruiken met behulp van 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. Gebruik az containerapp secret set om een geheim met de naam conn-string te maken met de Azure SQL verbindingsreeks.

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

    Belangrijk

    Deze verbindingsreeks bevat geen gebruikersnaam of wachtwoorden. De verbindingsreeks gebruikt de beheerde identiteit voor toegang tot de Azure SQL-database. Dit maakt het veilig om de verbindingsreeks te gebruiken als een geheim in de host.

  3. Werk de container-app bij met uw nieuwe aangepaste containerinstallatiekopieën met behulp van az containerapp update. Stel de omgevingsvariabele DATABASE_CONNECTION_STRING in om te lezen uit het eerder gemaakte conn-string geheim.

    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. Haal de volledig gekwalificeerde domeinnaam van de meest recente revisie in de actieve container-app op met behulp van az containerapp show. Sla die waarde op in een variabele met de naam APPLICATION_URL.

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

    Tip

    U kunt altijd de uitvoer van deze opdracht controleren.

    echo $APPLICATION_URL
    
  5. Navigeer naar de URL en test de Product REST API.

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

    Waarschuwing

    De implementatie kan tot een minuut duren. Als u geen geslaagd antwoord ziet, wacht u en vernieuwt u uw browser.

Resources opschonen

Wanneer u de voorbeeldtoepassing of -resources niet meer nodig hebt, verwijdert u de bijbehorende implementatie en alle resources.

az group delete \
  --name $RESOURCE_GROUP_NAME

Volgende stap