Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Конструктор 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