Руководство по развертыванию конструктора API данных в контейнерах приложений Azure с помощью Azure CLI
Конструктор API данных можно быстро развернуть в службах Azure, таких как контейнеры приложений Azure, как часть стека приложений. В этом руководстве вы используете Azure CLI для автоматизации распространенных задач при развертывании конструктора API данных в Azure. Сначала создайте образ контейнера с помощью построителя API данных и сохраните его в Реестр контейнеров Azure. Затем вы развернете образ контейнера в контейнере приложений Azure с резервной Azure SQL базы данных. Во всем руководстве выполняется проверка подлинности для каждого компонента с помощью управляемых удостоверений.
Изучив это руководство, вы:
- Create управляемого удостоверения с разрешениями на управление доступом на основе ролей
- Развертывание Azure SQL с помощью примера набора данных AdventureWorksLT
- Размещение образа контейнера в Реестр контейнеров Azure
- Развертывание контейнерного приложения Azure с помощью образа контейнера конструктора API данных
Если у вас еще нет подписки Azure, создайте бесплатную учетную запись, прежде чем начинать работу.
Предварительные требования
- Подписка Azure.
- Azure Cloud Shell
- Azure Cloud Shell — это интерактивная среда оболочки, которую можно использовать в браузере. Используйте эту оболочку и ее предустановленные команды для выполнения кода, описанного в этой статье, без необходимости устанавливать ничего в локальной среде. Начало работы с Azure Cloud Shell
- Выберите Попробовать в блоке кода или команд в этой статье. Если выбрать Попробовать, код или команда не копируются автоматически в Cloud Shell.
- Перейдите к https://shell.azure.comили выберите Запустить Cloud Shell.
- Выберите Cloud Shell в строке меню портал Azure (https://portal.azure.com).
- Azure Cloud Shell — это интерактивная среда оболочки, которую можно использовать в браузере. Используйте эту оболочку и ее предустановленные команды для выполнения кода, описанного в этой статье, без необходимости устанавливать ничего в локальной среде. Начало работы с Azure Cloud Shell
приложение-контейнер Create
Сначала создайте экземпляр Контейнеров приложений Azure с управляемым удостоверением, назначаемое системой. В конечном итоге этому удостоверению предоставляются разрешения на управление доступом на основе ролей для доступа к Azure SQL и Реестр контейнеров Azure.
Create универсальную
SUFFIX
переменную, используемую для нескольких имен ресурсов далее в этом руководстве.let SUFFIX=$RANDOM*$RANDOM
Create переменную
LOCATION
с регионом Azure, выбранным для использования в этом руководстве.LOCATION="<azure-region>"
Примечание
Например, если вы хотите выполнить развертывание в регионе "Западная часть США ", используйте этот скрипт.
LOCATION="westus"
Чтобы получить список поддерживаемых регионов для текущей подписки, используйте
az account list-locations
az account list-locations --query "[].{Name:displayName,Slug:name}" --output table
Дополнительные сведения см. на странице Регионы Azure.
Create переменную с именем
RESOURCE_GROUP_NAME
группы ресурсов. В этом руководстве рекомендуетсяmsdocs-dab-*
. Это значение используется несколько раз в этом руководстве.RESOURCE_GROUP_NAME="msdocs-dab$SUFFIX"
Create новую группу ресурсов с помощью
az group create
.az group create \ --name $RESOURCE_GROUP_NAME \ --location $LOCATION \ --tag "source=msdocs-dab-tutorial"
Create переменные с именами
API_CONTAINER_NAME
иCONTAINER_ENV_NAME
с уникальными именами для экземпляра контейнеров приложений Azure. Эти переменные используются на протяжении всего учебника.API_CONTAINER_NAME="api$SUFFIX" CONTAINER_ENV_NAME="env$SUFFIX"
Используйте
az containerapp env create
для создания новой среды контейнеров приложений Azure.az containerapp env create \ --resource-group $RESOURCE_GROUP_NAME \ --name $CONTAINER_ENV_NAME \ --logs-destination none \ --location $LOCATION
Create новое приложение-контейнер с помощью
mcr.microsoft.com/azure-databases/data-api-builder
Образ контейнера DAB иaz containerapp create
команда . Это приложение-контейнер успешно выполняется, но не подключено к какой-либо базе данных.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
Получите идентификатор субъекта управляемого удостоверения с помощью
az identity show
и сохраните значение в переменной с именем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" \ )
Совет
Вы всегда можете проверка выходные данные этой команды.
echo $MANAGED_IDENTITY_PRINCIPAL_ID
Назначение разрешений
Теперь назначьте управляемому удостоверению, назначаемому системой, разрешения на чтение данных из Azure SQL и Реестр контейнеров Azure. Кроме того, назначьте удостоверениям разрешения на запись в Реестр контейнеров Azure.
Create переменную с именем
RESOURCE_GROUP_ID
для хранения идентификатора группы ресурсов. Получите идентификатор с помощьюaz group show
. Эта переменная используется несколько раз в этом руководстве.RESOURCE_GROUP_ID=$( \ az group show \ --name $RESOURCE_GROUP_NAME \ --query "id" \ --output "tsv" \ )
Совет
Вы всегда можете проверка выходные данные этой команды.
echo $RESOURCE_GROUP_ID
Используйте
az role assignment create
для назначения учетной записи роли AcrPush, чтобы можно было отправлять контейнеры в Реестр контейнеров Azure.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
Снова назначьте роль AcrPull управляемому удостоверению.
az role assignment create
Это назначение позволяет управляемому удостоверению извлекать образы контейнеров из Реестр контейнеров Azure. Управляемое удостоверение в конечном итоге назначается экземпляру Контейнеров приложений Azure.# AcrPull az role assignment create \ --assignee $MANAGED_IDENTITY_PRINCIPAL_ID \ --role "7f951dda-4ed3-4680-a7ca-43fe172d538d" \ --scope $RESOURCE_GROUP_ID
Развертывание базы данных
Затем разверните новый сервер и базу данных в службе Azure SQL. База данных использует пример набора данных AdventureWorksLT .
Create переменную
SQL_SERVER_NAME
с уникальным именем для экземпляра сервера Azure SQL. Эта переменная будет использоваться далее в этом разделе.SQL_SERVER_NAME="srvr$SUFFIX"
Create новый ресурс сервера Azure SQL с помощью
az sql server create
. Настройте управляемое удостоверение в качестве администратора этого сервера.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
Используйте
az sql server firewall-rule create
, чтобы создать правило брандмауэра для разрешения доступа из служб 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"
Используйте
az sql db create
для создания базы данных на сервере Azure SQL с именемadventureworks
. Настройте базу данных для использования примеровAdventureWorksLT
данных.az sql db create \ --resource-group $RESOURCE_GROUP_NAME \ --server $SQL_SERVER_NAME \ --name "adventureworks" \ --sample-name "AdventureWorksLT"
Create переменную с именем
SQL_CONNECTION_STRING
с строка подключения дляadventureworks
базы данных в экземпляре сервера Azure SQL. Создайте строка подключения с полным доменным именем сервера с помощьюaz sql server show
. Эта переменная будет использоваться далее в этом руководстве.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;"
Совет
Вы всегда можете проверка выходные данные этой команды.
echo $SQL_CONNECTION_STRING
Создание образа контейнера
Затем создайте образ контейнера с помощью Dockerfile. Затем разверните этот образ контейнера во вновь созданном экземпляре Реестр контейнеров Azure.
Create переменную с уникальным
CONTAINER_REGISTRY_NAME
именем для экземпляра Реестр контейнеров Azure. Эта переменная будет использоваться далее в этом разделе.CONTAINER_REGISTRY_NAME="reg$SUFFIX"
Create новый экземпляр Реестр контейнеров Azure с помощью
az acr create
.az acr create \ --resource-group $RESOURCE_GROUP_NAME \ --name $CONTAINER_REGISTRY_NAME \ --sku "Standard" \ --location $LOCATION \ --admin-enabled false
Create многоэтапный файл Dockerfile с именем
Dockerfile
. В файле выполните эти действия.mcr.microsoft.com/dotnet/sdk
Использование образа контейнера в качестве основы этапа сборкиУстановите ИНТЕРФЕЙС КОМАНДНОй строки DAB.
Create файл конфигурации для подключения к базе данных SQL (
mssql
), используяDATABASE_CONNECTION_STRING
переменную среды в качестве строка подключения.Create сущность с именем
Product
, сопоставленная с таблицейSalesLT.Product
.Скопируйте файл конфигурации в окончательный
mcr.microsoft.com/azure-databases/data-api-builder
образ контейнера.
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
Создайте Dockerfile в качестве задачи Реестр контейнеров Azure с помощью
az acr build
.az acr build \ --registry $CONTAINER_REGISTRY_NAME \ --image adventureworkslt-dab:latest \ --image adventureworkslt-dab:{{.Run.ID}} \ --file Dockerfile \ .
Используйте ,
az acr show
чтобы получить конечную точку для реестра контейнеров и сохранить ее в переменной с именемCONTAINER_REGISTRY_LOGIN_SERVER
.CONTAINER_REGISTRY_LOGIN_SERVER=$( \ az acr show \ --resource-group $RESOURCE_GROUP_NAME \ --name $CONTAINER_REGISTRY_NAME \ --query "loginServer" \ --output "tsv" \ )
Совет
Вы всегда можете проверка выходные данные этой команды.
echo $CONTAINER_REGISTRY_LOGIN_SERVER
Развертывание образа контейнера
Наконец, обновите контейнерное приложение Azure, указав новый пользовательский образ контейнера и учетные данные. Протестируйте работающее приложение, чтобы проверить его подключение к базе данных.
Настройте приложение-контейнер для использования реестра контейнеров с помощью
az containerapp registry set
.az containerapp registry set \ --resource-group $RESOURCE_GROUP_NAME \ --name $API_CONTAINER_NAME \ --server $CONTAINER_REGISTRY_LOGIN_SERVER \ --identity "system"
Используйте для
az containerapp secret set
создания секрета с именемconn-string
Azure SQL строка подключения.az containerapp secret set \ --resource-group $RESOURCE_GROUP_NAME \ --name $API_CONTAINER_NAME \ --secrets conn-string="$SQL_CONNECTION_STRING"
Важно!
Этот строка подключения не содержит ни имени пользователя, ни паролей. Строка подключения использует управляемое удостоверение для доступа к базе данных Azure SQL. Это позволяет безопасно использовать строка подключения в качестве секрета на узле.
Обновите приложение-контейнер с помощью нового пользовательского образа контейнера с помощью
az containerapp update
.DATABASE_CONNECTION_STRING
Задайте переменную среды для чтения из ранее созданного секретаconn-string
.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
Получите полное доменное имя последней редакции в работающем приложении-контейнере с помощью
az containerapp show
. Сохраните это значение в переменной с именемAPPLICATION_URL
.APPLICATION_URL=$( \ az containerapp show \ --resource-group $RESOURCE_GROUP_NAME \ --name $API_CONTAINER_NAME \ --query "properties.latestRevisionFqdn" \ --output "tsv" \ )
Совет
Вы всегда можете проверка выходные данные этой команды.
echo $APPLICATION_URL
Перейдите по URL-адресу и протестируйте
Product
REST API.echo "https://$APPLICATION_URL/api/Product"
Предупреждение
Развертывание может занять до минуты. Если вы не видите успешный ответ, подождите и обновите браузер.
Очистка ресурсов
Если пример приложения или ресурсов больше не нужен, удалите соответствующее развертывание и все ресурсы.
az group delete \
--name $RESOURCE_GROUP_NAME