Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Der Daten-API-Generator kann schnell in Azure-Diensten wie Azure-Container-Apps als Teil Ihres Anwendungsstapels bereitgestellt werden. In diesem Lernprogramm verwenden Sie die Azure CLI, um allgemeine Aufgaben beim Bereitstellen des Daten-API-Generators in Azure zu automatisieren. Zunächst erstellen Sie ein Containerimage mit dem Daten-API-Generator und speichern es in azure Container Registry. Anschließend stellen Sie das Containerimage in Azure-Container-Apps mit einer zugrunde stehenden Azure SQL-Datenbank bereit. Das gesamte Lernprogramm authentifiziert sich bei jeder Komponente mit verwalteten Identitäten.
In diesem Tutorial erfahren Sie:
- Erstellen einer verwalteten Identität mit rollenbasierten Zugriffssteuerungsberechtigungen
- Bereitstellen von Azure SQL mit dem AdventureWorksLT-Beispiel-Dataset
- Bereitstellen des Containerimages in der Azure-Containerregistrierung
- Bereitstellung der Azure Container-App mit dem Container-Image des Data-API-Builder
Wenn Sie noch kein Azure-Abonnement haben, erstellen Sie ein kostenloses Konto, bevor Sie beginnen.
Voraussetzungen
- Azure-Abonnement
- Azure Cloud Shell
- Azure Cloud Shell ist eine interaktive Shellumgebung, die Sie über Ihren Browser verwenden können. Verwenden Sie diese Shell und die vorinstallierten Befehle, um den Code in diesem Artikel auszuführen, ohne etwas in Ihrer lokalen Umgebung installieren zu müssen. So starten Sie Azure Cloud Shell:
- Wählen Sie "Testen" in einem Code- oder Befehlsblock in diesem Artikel aus. Wenn Sie "Testen" auswählen, wird der Code oder befehl nicht automatisch in Cloud Shell kopiert.
- Wechseln Sie zu https://shell.azure.com, oder wählen Sie "Cloud Shell starten" aus.
- Wählen Sie Cloud Shell in der Menüleiste des Azure-Portals () aus.https://portal.azure.com
- Azure Cloud Shell ist eine interaktive Shellumgebung, die Sie über Ihren Browser verwenden können. Verwenden Sie diese Shell und die vorinstallierten Befehle, um den Code in diesem Artikel auszuführen, ohne etwas in Ihrer lokalen Umgebung installieren zu müssen. So starten Sie Azure Cloud Shell:
Erstellen einer Container-App
Erstellen Sie zunächst eine Azure-Container-Apps-Instanz mit einer vom System zugewiesenen verwalteten Identität. Diese Identität erhält schließlich rollenbasierte Zugriffssteuerungsberechtigungen für den Zugriff auf Azure SQL und Azure Container Registry.
Erstellen Sie eine universelle
SUFFIXVariable, die später in diesem Lernprogramm für mehrere Ressourcennamen verwendet werden soll.let SUFFIX=$RANDOM*$RANDOMErstellen Sie eine
LOCATIONVariable mit einer Azure-Region, die Sie in diesem Lernprogramm verwenden möchten.LOCATION="<azure-region>"Hinweis
Wenn Sie z. B. in der Region West-USA bereitstellen möchten, verwenden Sie dieses Skript.
LOCATION="westus"Verwenden Sie für eine Liste der unterstützten Regionen für das aktuelle Abonnement
az account list-locationsaz account list-locations --query "[].{Name:displayName,Slug:name}" --output tableWeitere Informationen finden Sie unter Azure-Regionen.
Erstellen Sie eine Variable
RESOURCE_GROUP_NAMEmit dem Ressourcengruppennamen. Für dieses Lernprogramm empfehlen wirmsdocs-dab-*. Sie verwenden diesen Wert in diesem Lernprogramm mehrmals.RESOURCE_GROUP_NAME="msdocs-dab$SUFFIX"Erstellen Sie eine neue Ressourcengruppe mithilfe von
az group create.az group create \ --name $RESOURCE_GROUP_NAME \ --location $LOCATION \ --tag "source=msdocs-dab-tutorial"Erstellen Sie Variablen namens
API_CONTAINER_NAMEundCONTAINER_ENV_NAMEmit eindeutig generierten Namen für Ihre Azure Container Apps-Instanz. Sie verwenden diese Variablen im gesamten Lernprogramm.API_CONTAINER_NAME="api$SUFFIX" CONTAINER_ENV_NAME="env$SUFFIX"Verwenden Sie
az containerapp env create, um eine neue Azure-Container-Apps-Umgebung zu erstellen.az containerapp env create \ --resource-group $RESOURCE_GROUP_NAME \ --name $CONTAINER_ENV_NAME \ --logs-destination none \ --location $LOCATIONErstellen Sie eine neue Container-App mit dem
mcr.microsoft.com/azure-databases/data-api-builderDAB-Containerimage und demaz containerapp createBefehl. Diese Container-App wird erfolgreich ausgeführt, ist jedoch nicht mit einer Datenbank verbunden.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-assignedRufen Sie den Prinzipal-Bezeichner der verwalteten Identität mit
az identity showab und speichern Sie den Wert in einer Variablen namensMANAGED_IDENTITY_PRINCIPAL_ID.MANAGED_IDENTITY_PRINCIPAL_ID=$( \ az containerapp show \ --resource-group $RESOURCE_GROUP_NAME \ --name $API_CONTAINER_NAME \ --query "identity.principalId" \ --output "tsv" \ )Tipp
Sie können immer die Ausgabe dieses Befehls überprüfen.
echo $MANAGED_IDENTITY_PRINCIPAL_ID
Berechtigungen zuweisen
Weisen Sie nun die vom System zugewiesenen Berechtigungen für verwaltete Identitäten zum Lesen von Daten aus der Azure SQL- und Azure-Containerregistrierung zu. Weisen Sie außerdem Ihre Identitätsberechtigungen zum Schreiben in die Azure-Containerregistrierung zu.
Erstellen Sie eine Variable, die zum Speichern des Bezeichners der Ressourcengruppe benannt
RESOURCE_GROUP_IDist. Rufen Sie den Bezeichner mithilfe vonaz group show. Sie verwenden diese Variable in diesem Lernprogramm mehrmals.RESOURCE_GROUP_ID=$( \ az group show \ --name $RESOURCE_GROUP_NAME \ --query "id" \ --output "tsv" \ )Tipp
Sie können immer die Ausgabe dieses Befehls überprüfen.
echo $RESOURCE_GROUP_IDVerwenden Sie
az role assignment create, um Ihrem Konto die Rolle AcrPush zuzuweisen, sodass Sie Container an das Azure-Container-Repository pushen können.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_IDWeisen Sie der verwalteten Identität die Rolle "AcrPull" erneut
az role assignment createzu. Mit dieser Zuweisung kann die verwaltete Identität Container-Images aus der Azure-Containerregistrierung abrufen. Die verwaltete Identität wird schließlich einer Azure Container Apps-Instanz zugewiesen.# AcrPull az role assignment create \ --assignee $MANAGED_IDENTITY_PRINCIPAL_ID \ --role "7f951dda-4ed3-4680-a7ca-43fe172d538d" \ --scope $RESOURCE_GROUP_ID
Bereitstellen der Datenbank
Stellen Sie als Nächstes einen neuen Server und eine neue Datenbank im Azure SQL-Dienst bereit. Die Datenbank verwendet das AdventureWorksLT-Beispiel-Dataset .
Erstellen Sie eine Variable
SQL_SERVER_NAMEmit einem eindeutig generierten Namen für Ihre Azure SQL Server-Instanz. Sie verwenden diese Variable weiter unten in diesem Abschnitt.SQL_SERVER_NAME="srvr$SUFFIX"Erstellen Sie eine neue Azure SQL Server-Ressource mithilfe von
az sql server create. Konfigurieren Sie die verwaltete Identität als Administrator dieses Servers.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_IDVerwenden Sie
az sql server firewall-rule create, um eine Firewallregel zu erstellen, die den Zugriff von Azure-Diensten erlaubt.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"Dient
az sql db createzum Erstellen einer Datenbank im Azure SQL-Server mit dem Namenadventureworks. Konfigurieren Sie die Datenbank für die Verwendung derAdventureWorksLTBeispieldaten.az sql db create \ --resource-group $RESOURCE_GROUP_NAME \ --server $SQL_SERVER_NAME \ --name "adventureworks" \ --sample-name "AdventureWorksLT"Erstellen Sie eine Variable
SQL_CONNECTION_STRINGmit der Verbindungszeichenfolge für dieadventureworksDatenbank in Ihrer Azure SQL Server-Instanz. Erstellen Sie die Verbindungszeichenfolge mit dem vollqualifizierten Domänennamen des Servers unter Verwendung vonaz sql server show. Sie verwenden diese Variable später in diesem Lernprogramm.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;"Tipp
Sie können immer die Ausgabe dieses Befehls überprüfen.
echo $SQL_CONNECTION_STRING
Erstellen des Containerimage
Erstellen Sie als Nächstes ein Containerimage mit einer Dockerfile-Datei. Stellen Sie dieses Containerimage dann in einer neu erstellten Azure Container Registry-Instanz bereit.
Erstellen Sie eine Variable
CONTAINER_REGISTRY_NAMEmit einem eindeutig generierten Namen für Ihre Azure Container Registry-Instanz. Sie verwenden diese Variable weiter unten in diesem Abschnitt.CONTAINER_REGISTRY_NAME="reg$SUFFIX"Erstellen Sie eine neue Azure Container Registry-Instanz mithilfe von
az acr create.az acr create \ --resource-group $RESOURCE_GROUP_NAME \ --name $CONTAINER_REGISTRY_NAME \ --sku "Standard" \ --location $LOCATION \ --admin-enabled falseErstellen Sie eine mehrstufige Dockerfile-Datei mit dem Namen
Dockerfile. Implementieren Sie in der Datei diese Schritte.Verwenden Sie das
mcr.microsoft.com/dotnet/sdkContainer-Image als Basis der Build-PhaseInstallieren Sie die DAB CLI.
Erstellen Sie eine Konfigurationsdatei für eine SQL-Datenbankverbindung (
mssql) mit derDATABASE_CONNECTION_STRINGUmgebungsvariable als Verbindungszeichenfolge.Erstellen Sie eine Entität,
Productdie derSalesLT.ProductTabelle zugeordnet ist.Kopieren Sie die Konfigurationsdatei in das endgültige
mcr.microsoft.com/azure-databases/data-api-builderContainerimage.
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:latest COPY --from=build /config /AppErstellen Sie das Dockerfile als Aufgabe der Azure-Containerregistrierung mithilfe von
az acr build.az acr build \ --registry $CONTAINER_REGISTRY_NAME \ --image adventureworkslt-dab:latest \ --image adventureworkslt-dab:{{.Run.ID}} \ --file Dockerfile \ .Verwenden Sie
az acr show, um den Endpunkt für die Containerregistrierung zu erhalten und ihn in einer Variablen namensCONTAINER_REGISTRY_LOGIN_SERVERzu speichern.CONTAINER_REGISTRY_LOGIN_SERVER=$( \ az acr show \ --resource-group $RESOURCE_GROUP_NAME \ --name $CONTAINER_REGISTRY_NAME \ --query "loginServer" \ --output "tsv" \ )Tipp
Sie können immer die Ausgabe dieses Befehls überprüfen.
echo $CONTAINER_REGISTRY_LOGIN_SERVER
Container-Image bereitstellen
Aktualisieren Sie schließlich die Azure-Container-App mit dem neuen benutzerdefinierten Containerimage und den Anmeldeinformationen. Testen Sie die ausgeführte Anwendung, um die Verbindung mit der Datenbank zu überprüfen.
Konfigurieren Sie die Container-App, um das Container-Repository mit
az containerapp registry setzu verwenden.az containerapp registry set \ --resource-group $RESOURCE_GROUP_NAME \ --name $API_CONTAINER_NAME \ --server $CONTAINER_REGISTRY_LOGIN_SERVER \ --identity "system"Verwenden Sie
az containerapp secret set, um ein Geheimnis namensconn-stringmit der Azure SQL-Verbindungszeichenfolge zu erstellen.az containerapp secret set \ --resource-group $RESOURCE_GROUP_NAME \ --name $API_CONTAINER_NAME \ --secrets conn-string="$SQL_CONNECTION_STRING"Von Bedeutung
Diese Verbindungszeichenfolge enthält keinen Benutzernamen oder Kennwörter. Die Verbindungszeichenfolge verwendet die verwaltete Identität für den Zugriff auf die Azure SQL-Datenbank. Dadurch ist es sicher, die Verbindungszeichenfolge als geheimer Schlüssel im Host zu verwenden.
Aktualisieren Sie die Container-App mit Ihrem neuen benutzerdefinierten Containerimage mithilfe von
az containerapp update. Legen Sie dieDATABASE_CONNECTION_STRINGUmgebungsvariable fest, um aus dem zuvor erstelltenconn-stringGeheimnis zu lesen.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-stringRufen Sie den vollqualifizierten Domänennamen der neuesten Revision in der laufenden Container-App mithilfe von
az containerapp showab. Speichern Sie diesen Wert in einer Variablen mit dem NamenAPPLICATION_URL.APPLICATION_URL=$( \ az containerapp show \ --resource-group $RESOURCE_GROUP_NAME \ --name $API_CONTAINER_NAME \ --query "properties.latestRevisionFqdn" \ --output "tsv" \ )Tipp
Sie können immer die Ausgabe dieses Befehls überprüfen.
echo $APPLICATION_URLNavigieren Sie zur URL, und testen Sie die
ProductREST-API.echo "https://$APPLICATION_URL/api/Product"Warnung
Die Bereitstellung kann bis zu einer Minute dauern. Wenn keine erfolgreiche Antwort angezeigt wird, warten Sie, und aktualisieren Sie Ihren Browser.
Bereinigen von Ressourcen
Wenn Sie die Beispielanwendung oder Ressourcen nicht mehr benötigen, entfernen Sie die entsprechende Bereitstellung und alle Ressourcen.
az group delete \
--name $RESOURCE_GROUP_NAME