Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Конструктор API данных можно быстро развернуть в службах Azure, таких как Azure Container Apps, в составе вашего стека приложений. В этом руководстве вы используете Azure CLI для автоматизации распространенных задач при развертывании построителя API данных в Azure. Сначала вы создадите образ контейнера с помощью построителя API данных и сохраните его в реестре контейнеров Azure. Затем вы развернете образ контейнера в приложениях контейнеров Azure с резервной базой данных SQL Azure. Весь учебник использует аутентификацию в каждом компоненте с помощью управляемых удостоверений.
Изучив это руководство, вы:
- Создание управляемого удостоверения с разрешениями управления доступом на основе ролей
- Развертывание SQL Azure с помощью примера набора данных AdventureWorksLT
- Подготовка образа контейнера в реестре контейнеров Azure
- Развертывание Azure Container App с образом контейнера для создания 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, выполните приведенные действия.
Создание приложения-контейнера
Сначала создайте экземпляр контейнерных приложений Azure с системно назначенным управляемым удостоверением. Это удостоверение в конечном итоге предоставляет разрешения на управление доступом на основе ролей для доступа к Azure SQL и Реестру контейнеров Azure.
Создайте универсальную переменную
SUFFIX, используемую для нескольких имен ресурсов далее в этом руководстве.let SUFFIX=$RANDOM*$RANDOMСоздайте переменную с выбранным регионом
LOCATIONAzure, который будет использоваться в этом руководстве.LOCATION="<azure-region>"Замечание
Например, если вы хотите развернуть в регионе "Запад США", используйте этот скрипт.
LOCATION="westus"Чтобы получить список поддерживаемых регионов для текущей подписки, используйте
az account list-locationsaz account list-locations --query "[].{Name:displayName,Slug:name}" --output tableДополнительные сведения см. в регионах Azure.
Создайте переменную
RESOURCE_GROUP_NAMEс именем группы ресурсов. В этом руководстве рекомендуетсяmsdocs-dab-*. Это значение используется несколько раз в этом руководстве.RESOURCE_GROUP_NAME="msdocs-dab$SUFFIX"Создайте новую группу ресурсов с помощью
az group create.az group create \ --name $RESOURCE_GROUP_NAME \ --location $LOCATION \ --tag "source=msdocs-dab-tutorial"Создайте переменные с уникальными именами
API_CONTAINER_NAMEиCONTAINER_ENV_NAMEдля вашего экземпляра Azure Container Apps. Вы используете эти переменные во всем руководстве.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Создайте приложение-контейнер с помощью
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 Container Registry. Кроме того, назначьте ваши права доступа для записи в Реестр контейнеров Azure.
Создайте переменную с именем
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 Container Apps.# AcrPull az role assignment create \ --assignee $MANAGED_IDENTITY_PRINCIPAL_ID \ --role "7f951dda-4ed3-4680-a7ca-43fe172d538d" \ --scope $RESOURCE_GROUP_ID
Развертывание базы данных
Затем разверните новый сервер и базу данных в службе SQL Azure. В базе данных используется пример набора данных AdventureWorksLT .
Создайте переменную
SQL_SERVER_NAMEс уникальным именем для экземпляра SQL Server Azure. Эта переменная используется далее в этом разделе.SQL_SERVER_NAME="srvr$SUFFIX"Создайте новый ресурс SQL Server Azure с помощью
az sql server create. Настройте "managed identity" в качестве администратора этого сервера.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для создания базы данных в именованном сервереadventureworksSQL Azure. Настройте базу данных для использования примера данныхAdventureWorksLT.az sql db create \ --resource-group $RESOURCE_GROUP_NAME \ --server $SQL_SERVER_NAME \ --name "adventureworks" \ --sample-name "AdventureWorksLT"Создайте переменную с именем
SQL_CONNECTION_STRING, содержащую строку подключения для базы данныхadventureworksв вашем экземпляре Azure SQL Server. Создайте строку подключения с полным доменным именем сервера, используя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.
Создайте переменную
CONTAINER_REGISTRY_NAMEс уникальным именем для экземпляра реестра контейнеров Azure. Эта переменная используется далее в этом разделе.CONTAINER_REGISTRY_NAME="reg$SUFFIX"Создайте новый экземпляр реестра контейнеров Azure с помощью
az acr create.az acr create \ --resource-group $RESOURCE_GROUP_NAME \ --name $CONTAINER_REGISTRY_NAME \ --sku "Standard" \ --location $LOCATION \ --admin-enabled falseСоздание многоэтапного файла Dockerfile с именем
Dockerfile. В файле выполните эти действия.mcr.microsoft.com/dotnet/sdkИспользование образа контейнера в качестве основы этапа сборкиУстановите интерфейс командной строки DAB.
Создайте файл конфигурации для подключения к базе данных SQL (
mssql) с помощьюDATABASE_CONNECTION_STRINGпеременной среды в качестве строки подключения.Создайте сущность с именем
Product, сопоставленную с таблицейSalesLT.Product.Скопируйте файл конфигурации в окончательный
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:latest 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"Это важно
Эта строка подключения не содержит никаких имен пользователя или паролей. Строка подключения использует управляемое удостоверение для доступа к базе данных SQL Azure. Это позволяет безопасно использовать строку подключения в качестве секрета в узле.
Обновите контейнерное приложение с помощью
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-адресу и проверьте
ProductREST API.echo "https://$APPLICATION_URL/api/Product"Предупреждение
Развертывание может занять до минуты. Если вы не видите успешный ответ, подождите и обновите браузер.
Очистите ресурсы
Когда вы больше не нуждаетесь в демонстрационном приложении или ресурсах, удалите соответствующее развертывание и все ресурсы.
az group delete \
--name $RESOURCE_GROUP_NAME