Samouczek: wdrażanie konstruktora interfejsu API danych w usłudze Azure Container Apps przy użyciu interfejsu wiersza polecenia platformy Azure
Konstruktor interfejsu API danych można szybko wdrożyć w usługach platformy Azure, takich jak Azure Container Apps w ramach stosu aplikacji. W tym samouczku użyjesz interfejsu wiersza polecenia platformy Azure, aby zautomatyzować typowe zadania podczas wdrażania konstruktora interfejsu API danych na platformie Azure. Najpierw utworzysz obraz kontenera za pomocą konstruktora interfejsu API danych i zapiszesz go w Azure Container Registry. Następnie wdrożysz obraz kontenera w usłudze Azure Container Apps przy użyciu bazy danych Azure SQL kopii zapasowej. Cały samouczek uwierzytelnia się w każdym składniku przy użyciu tożsamości zarządzanych.
W tym samouczku zostały wykonane następujące czynności:
- Twórca tożsamości zarządzanej z uprawnieniami kontroli dostępu opartej na rolach
- Wdrażanie Azure SQL przy użyciu przykładowego zestawu danych AdventureWorksLT
- Przygotowywanie obrazu kontenera w Azure Container Registry
- Wdrażanie aplikacji kontenera platformy Azure przy użyciu obrazu kontenera konstruktora interfejsu API danych
Jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto.
Wymagania wstępne
- Subskrypcja platformy Azure
- Azure Cloud Shell
- Azure Cloud Shell to interaktywne środowisko powłoki, którego można użyć za pośrednictwem przeglądarki. Użyj tej powłoki i wstępnie zainstalowanych poleceń, aby uruchomić kod w tym artykule bez konieczności instalowania niczego w środowisku lokalnym. Aby uruchomić środowisko Azure Cloud Shell:
- Wybierz pozycję Wypróbuj w kodzie lub bloku poleceń w tym artykule. Wybranie pozycji Wypróbuj nie powoduje automatycznego skopiowania kodu lub polecenia w celu Cloud Shell.
- Przejdź do https://shell.azure.compozycji , lub wybierz pozycję Uruchom Cloud Shell.
- Wybierz Cloud Shell na pasku menu Azure Portal (https://portal.azure.com)
- Azure Cloud Shell to interaktywne środowisko powłoki, którego można użyć za pośrednictwem przeglądarki. Użyj tej powłoki i wstępnie zainstalowanych poleceń, aby uruchomić kod w tym artykule bez konieczności instalowania niczego w środowisku lokalnym. Aby uruchomić środowisko Azure Cloud Shell:
aplikacja kontenera Twórca
Najpierw utwórz wystąpienie usługi Azure Container Apps z przypisaną przez system tożsamością zarządzaną. Ta tożsamość zostanie ostatecznie udzielona uprawnienia kontroli dostępu opartej na rolach w celu uzyskania dostępu do Azure SQL i Azure Container Registry.
Twórca zmienną uniwersalną
SUFFIX
do użycia dla wielu nazw zasobów w dalszej części tego samouczka.let SUFFIX=$RANDOM*$RANDOM
Twórca zmienną
LOCATION
z regionem platformy Azure wybranym do użycia w tym samouczku.LOCATION="<azure-region>"
Uwaga
Jeśli na przykład chcesz wdrożyć w regionie Zachodnie stany USA , użyj tego skryptu.
LOCATION="westus"
Aby uzyskać listę obsługiwanych regionów dla bieżącej subskrypcji, użyj polecenia
az account list-locations
az account list-locations --query "[].{Name:displayName,Slug:name}" --output table
Aby uzyskać więcej informacji, zobacz Regiony platformy Azure.
Twórca zmienną o nazwie
RESOURCE_GROUP_NAME
z nazwą grupy zasobów. W tym samouczku zalecamymsdocs-dab-*
. Ta wartość jest używana wiele razy w tym samouczku.RESOURCE_GROUP_NAME="msdocs-dab$SUFFIX"
Twórca nową grupę zasobów przy użyciu polecenia
az group create
.az group create \ --name $RESOURCE_GROUP_NAME \ --location $LOCATION \ --tag "source=msdocs-dab-tutorial"
Twórca zmiennych o nazwie i
CONTAINER_ENV_NAME
z unikatowymi nazwamiAPI_CONTAINER_NAME
dla wystąpienia usługi Azure Container Apps. Te zmienne są używane w ramach tego samouczka.API_CONTAINER_NAME="api$SUFFIX" CONTAINER_ENV_NAME="env$SUFFIX"
Użyj
az containerapp env create
polecenia , aby utworzyć nowe środowisko usługi Azure Container Apps.az containerapp env create \ --resource-group $RESOURCE_GROUP_NAME \ --name $CONTAINER_ENV_NAME \ --logs-destination none \ --location $LOCATION
Twórca nowej aplikacji kontenera przy użyciu polecenia
mcr.microsoft.com/azure-databases/data-api-builder
Obraz konteneraaz containerapp create
języka DAB i polecenie . Ta aplikacja kontenera działa pomyślnie, ale nie jest połączona z żadną bazą danych.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
Pobierz identyfikator główny tożsamości zarządzanej przy użyciu
az identity show
i zapisz wartość w zmiennej o nazwieMANAGED_IDENTITY_PRINCIPAL_ID
.MANAGED_IDENTITY_PRINCIPAL_ID=$( \ az containerapp show \ --resource-group $RESOURCE_GROUP_NAME \ --name $API_CONTAINER_NAME \ --query "identity.principalId" \ --output "tsv" \ )
Porada
Zawsze możesz sprawdzić dane wyjściowe tego polecenia.
echo $MANAGED_IDENTITY_PRINCIPAL_ID
Przypisywanie uprawnień
Teraz przypisz przypisane przez system uprawnienia tożsamości zarządzanej do odczytu danych z Azure SQL i Azure Container Registry. Ponadto przypisz uprawnienia tożsamości do zapisu w Azure Container Registry.
Twórca zmienną o nazwie
RESOURCE_GROUP_ID
do przechowywania identyfikatora grupy zasobów. Pobierz identyfikator przy użyciu poleceniaaz group show
. Ta zmienna jest używana wiele razy w tym samouczku.RESOURCE_GROUP_ID=$( \ az group show \ --name $RESOURCE_GROUP_NAME \ --query "id" \ --output "tsv" \ )
Porada
Zawsze możesz sprawdzić dane wyjściowe tego polecenia.
echo $RESOURCE_GROUP_ID
Służy
az role assignment create
do przypisywania roli AcrPush do konta, aby można było wypychać kontenery 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
Przypisz rolę AcrPull do tożsamości zarządzanej przy użyciu
az role assignment create
ponownie. To przypisanie umożliwia tożsamości zarządzanej ściąganie obrazów kontenerów z Azure Container Registry. Tożsamość zarządzana zostanie ostatecznie przypisana do wystąpienia usługi Azure Container Apps.# AcrPull az role assignment create \ --assignee $MANAGED_IDENTITY_PRINCIPAL_ID \ --role "7f951dda-4ed3-4680-a7ca-43fe172d538d" \ --scope $RESOURCE_GROUP_ID
Wdrażanie bazy danych
Następnie wdróż nowy serwer i bazę danych w usłudze Azure SQL. Baza danych używa przykładowego zestawu danych AdventureWorksLT .
Twórca zmienną o nazwie
SQL_SERVER_NAME
o unikatowo wygenerowanej nazwie dla wystąpienia serwera Azure SQL. Ta zmienna zostanie użyta w dalszej części tej sekcji.SQL_SERVER_NAME="srvr$SUFFIX"
Twórca nowy zasób serwera Azure SQL przy użyciu polecenia
az sql server create
. Skonfiguruj tożsamość zarządzaną jako administrator tego serwera.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
Użyj
az sql server firewall-rule create
polecenia , aby utworzyć regułę zapory, aby zezwolić na dostęp z usług platformy 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"
Użyj polecenia
az sql db create
, aby utworzyć bazę danych na serwerze Azure SQL o nazwieadventureworks
. Skonfiguruj bazę danych, aby korzystała z przykładowychAdventureWorksLT
danych.az sql db create \ --resource-group $RESOURCE_GROUP_NAME \ --server $SQL_SERVER_NAME \ --name "adventureworks" \ --sample-name "AdventureWorksLT"
Twórca zmienną o nazwie
SQL_CONNECTION_STRING
z parametry połączenia dla bazy danych w wystąpieniuadventureworks
serwera Azure SQL. Skonstruuj parametry połączenia z w pełni kwalifikowaną nazwą domeny serwera przy użyciu poleceniaaz sql server show
. Ta zmienna zostanie użyta w dalszej części tego samouczka.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;"
Porada
Zawsze możesz sprawdzić dane wyjściowe tego polecenia.
echo $SQL_CONNECTION_STRING
Tworzenie obrazu kontenera
Następnie skompiluj obraz kontenera przy użyciu pliku Dockerfile. Następnie wdróż ten obraz kontenera w nowo utworzonym wystąpieniu Azure Container Registry.
Twórca zmienną o nazwie
CONTAINER_REGISTRY_NAME
o unikatowo wygenerowanej nazwie dla wystąpienia Azure Container Registry. Ta zmienna zostanie użyta w dalszej części tej sekcji.CONTAINER_REGISTRY_NAME="reg$SUFFIX"
Twórca nowego wystąpienia Azure Container Registry przy użyciu polecenia
az acr create
.az acr create \ --resource-group $RESOURCE_GROUP_NAME \ --name $CONTAINER_REGISTRY_NAME \ --sku "Standard" \ --location $LOCATION \ --admin-enabled false
Twórca wieloetapowy plik Dockerfile o nazwie
Dockerfile
. W pliku zaimplementuj te kroki.Użyj obrazu kontenera
mcr.microsoft.com/dotnet/sdk
jako podstawy etapu kompilacjiZainstaluj interfejs wiersza polecenia języka DAB.
Twórca pliku konfiguracji dla połączenia z bazą danych SQL (
mssql
) przy użyciuDATABASE_CONNECTION_STRING
zmiennej środowiskowej jako parametry połączenia.Twórca jednostkę o nazwie
Product
zamapowanej na tabelęSalesLT.Product
.Skopiuj plik konfiguracji do końcowego
mcr.microsoft.com/azure-databases/data-api-builder
obrazu kontenera.
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
Skompiluj plik Dockerfile jako zadanie Azure Container Registry przy użyciu polecenia
az acr build
.az acr build \ --registry $CONTAINER_REGISTRY_NAME \ --image adventureworkslt-dab:latest \ --image adventureworkslt-dab:{{.Run.ID}} \ --file Dockerfile \ .
Użyj polecenia
az acr show
, aby pobrać punkt końcowy dla rejestru kontenerów i zapisać go w zmiennej o nazwieCONTAINER_REGISTRY_LOGIN_SERVER
.CONTAINER_REGISTRY_LOGIN_SERVER=$( \ az acr show \ --resource-group $RESOURCE_GROUP_NAME \ --name $CONTAINER_REGISTRY_NAME \ --query "loginServer" \ --output "tsv" \ )
Porada
Zawsze możesz sprawdzić dane wyjściowe tego polecenia.
echo $CONTAINER_REGISTRY_LOGIN_SERVER
Wdrażanie obrazu kontenera
Na koniec zaktualizuj aplikację kontenera platformy Azure przy użyciu nowego niestandardowego obrazu kontenera i poświadczeń. Przetestuj uruchomioną aplikację, aby zweryfikować łączność z bazą danych.
Skonfiguruj aplikację kontenera do korzystania z rejestru kontenerów przy użyciu polecenia
az containerapp registry set
.az containerapp registry set \ --resource-group $RESOURCE_GROUP_NAME \ --name $API_CONTAINER_NAME \ --server $CONTAINER_REGISTRY_LOGIN_SERVER \ --identity "system"
Użyj
az containerapp secret set
polecenia , aby utworzyć wpis tajny o nazwieconn-string
z Azure SQL parametry połączenia.az containerapp secret set \ --resource-group $RESOURCE_GROUP_NAME \ --name $API_CONTAINER_NAME \ --secrets conn-string="$SQL_CONNECTION_STRING"
Ważne
Ta parametry połączenia nie zawiera żadnych nazw użytkowników ani haseł. Parametry połączenia używa tożsamości zarządzanej do uzyskiwania dostępu do bazy danych Azure SQL. Dzięki temu można bezpiecznie używać parametry połączenia jako wpisu tajnego na hoście.
Zaktualizuj aplikację kontenera przy użyciu nowego niestandardowego obrazu kontenera przy użyciu polecenia
az containerapp update
. Ustaw zmienną środowiskowąDATABASE_CONNECTION_STRING
na odczyt z wcześniej utworzonegoconn-string
wpisu tajnego.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
Pobierz w pełni kwalifikowaną nazwę domeny najnowszej poprawki w uruchomionej aplikacji kontenera przy użyciu polecenia
az containerapp show
. Zapisz wartość w zmiennej o nazwieAPPLICATION_URL
.APPLICATION_URL=$( \ az containerapp show \ --resource-group $RESOURCE_GROUP_NAME \ --name $API_CONTAINER_NAME \ --query "properties.latestRevisionFqdn" \ --output "tsv" \ )
Porada
Zawsze możesz sprawdzić dane wyjściowe tego polecenia.
echo $APPLICATION_URL
Przejdź do adresu URL i przetestuj
Product
interfejs API REST.echo "https://$APPLICATION_URL/api/Product"
Ostrzeżenie
Wdrożenie może potrwać do minuty. Jeśli nie widzisz pomyślnej odpowiedzi, zaczekaj i odśwież przeglądarkę.
Czyszczenie zasobów
Jeśli nie potrzebujesz już przykładowej aplikacji lub zasobów, usuń odpowiednie wdrożenie i wszystkie zasoby.
az group delete \
--name $RESOURCE_GROUP_NAME