Краткое руководство. Развертывание приложения Dapr в приложениях контейнеров Azure с помощью Azure CLI
Dapr (распределенная среда выполнения приложений) помогает разработчикам создавать устойчивые и надежные микрослужбы. В этом кратком руководстве вы узнаете, как включить клиентские контейнеры Dapr для запуска вместе с приложениями контейнеров микрослужб. Вам потребуется выполнить следующие задачи:
- Создайте среду "Приложения контейнеров" и хранилище состояний хранилища блогов Azure для приложений-контейнеров.
- Разверните приложение контейнера Python, которое публикует сообщения.
- Разверните приложение контейнера Node.js, которое подписывается на сообщения и сохраняет их в хранилище состояний.
- Проверьте взаимодействие между двумя микрослужбами с помощью портал Azure.
В этом кратком руководстве описаны приложения, развернутые в кратком руководстве dapr Hello World с открытым кодом.
Настройка
Чтобы войти в Azure из ИНТЕРФЕЙСА командной строки, выполните следующую команду и следуйте инструкциям, чтобы завершить процесс проверки подлинности.
az login
Чтобы убедиться, что вы используете последнюю версию интерфейса командной строки, выполните команду обновления.
az upgrade
Затем установите или обновите расширение "Приложения контейнеров Azure" для интерфейса командной строки.
Если при выполнении az containerapp
команд в Azure CLI или командлетах из модуля Azure PowerShell возникают ошибки о отсутствующих параметрах Az.App
, убедитесь, что установлена последняя версия расширения "Приложения контейнеров Azure".
az extension add --name containerapp --upgrade
Примечание.
Начиная с мая 2024 г. расширения Azure CLI больше не поддерживают предварительные версии функций по умолчанию. Чтобы получить доступ к функциям предварительной версии контейнерных приложений, установите расширение "Приложения контейнеров" с --allow-preview true
помощью .
az extension add --name containerapp --upgrade --allow-preview true
Теперь, когда установлено текущее расширение или модуль, зарегистрируйте Microsoft.App
пространства имен и Microsoft.OperationalInsights
пространств имен.
az provider register --namespace Microsoft.App
az provider register --namespace Microsoft.OperationalInsights
Настройка переменных среды
Задайте следующие переменные среды. Замените значения следующими <PLACEHOLDERS>
значениями:
RESOURCE_GROUP="<RESOURCE_GROUP>"
LOCATION="<LOCATION>"
CONTAINERAPPS_ENVIRONMENT="<CONTAINERAPPS_ENVIRONMENT>"
создание группы ресурсов Azure;
Создайте группу ресурсов для упорядочивания служб, связанных с развертыванием приложения контейнера.
az group create \
--name $RESOURCE_GROUP \
--location "$LOCATION"
Создать среду
Среда в Azure Container Apps создает безопасную границу вокруг группы приложений-контейнеров. Развертываемые в одной среде приложения-контейнеры развертываются в одной виртуальной сети и записывают журналы в одну рабочую область Log Analytics.
Чтобы создать среду, выполните следующую команду:
az containerapp env create \
--name $CONTAINERAPPS_ENVIRONMENT \
--resource-group $RESOURCE_GROUP \
--location "$LOCATION"
Настройка хранилища состояний
Создание учетной записи хранения BLOB-объектов Azure
При развертывании среды разверните учетную запись Хранилище BLOB-объектов Azure, которая используется приложением контейнера Node.js для хранения данных. Перед развертыванием службы выберите имя учетной записи хранения. Имена учетных записей хранения должны быть уникальными в Azure, содержать от 3 до 24 символов и состоять только из цифр и строчных букв.
STORAGE_ACCOUNT_NAME="<storage account name>"
Чтобы создать учетную запись служба хранилища Azure, используйте следующую команду.
az storage account create \
--name $STORAGE_ACCOUNT_NAME \
--resource-group $RESOURCE_GROUP \
--location "$LOCATION" \
--sku Standard_RAGRS \
--kind StorageV2
Настройка удостоверения, назначаемого пользователем для приложения узла
Хотя контейнерные приложения поддерживают управляемое удостоверение, назначаемое пользователем и назначаемое системой, удостоверение, назначаемое пользователем, предоставляет приложению с поддержкой Dapr Node.js с разрешениями на доступ к учетной записи хранения BLOB-объектов.
Создайте удостоверение, назначаемое пользователем.
az identity create --resource-group $RESOURCE_GROUP --name "nodeAppIdentity" --output json
Извлеките и
id
сохраните свойства и сохранитеprincipalId
их в переменных.PRINCIPAL_ID=$(az identity show -n "nodeAppIdentity" --resource-group $RESOURCE_GROUP --query principalId | tr -d \") IDENTITY_ID=$(az identity show -n "nodeAppIdentity" --resource-group $RESOURCE_GROUP --query id | tr -d \") CLIENT_ID=$(az identity show -n "nodeAppIdentity" --resource-group $RESOURCE_GROUP --query clientId | tr -d \")
Получите идентификатор подписки для текущей подписки.
SUBSCRIPTION_ID=$(az account show --query id --output tsv)
Storage Blob Data Contributor
Назначьте роль назначенному пользователем удостоверению.az role assignment create --assignee $PRINCIPAL_ID \ --role "Storage Blob Data Contributor" \ --scope "/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/ Microsoft.Storage/storageAccounts/$STORAGE_ACCOUNT_NAME"
Настройка компонента хранилища состояний
Хотя у вас есть несколько вариантов проверки подлинности во внешних ресурсах с помощью Dapr. В этом примере используется хранилище состояний на основе Azure, поэтому вы можете предоставить прямой доступ из приложения Node.js в хранилище BLOB-объектов с помощью управляемого удостоверения.
В текстовом редакторе создайте файл с именем statestore.yaml со свойствами, полученными из предыдущих шагов.
# statestore.yaml for Azure Blob storage component componentType: state.azure.blobstorage version: v1 metadata: - name: accountName value: "<STORAGE_ACCOUNT_NAME>" - name: containerName value: mycontainer - name: azureClientId value: "<MANAGED_IDENTITY_CLIENT_ID>" scopes: - nodeapp
Этот файл позволяет приложению Dapr получить доступ к хранилищу состояний.
Перейдите в каталог, в котором хранится файл yaml, и выполните следующую команду, чтобы настроить компонент Dapr в среде "Приложения контейнеров".
az containerapp env dapr-component set \ --name $CONTAINERAPPS_ENVIRONMENT --resource-group $RESOURCE_GROUP \ --dapr-component-name statestore \ --yaml statestore.yaml
Развертывание приложения Node.js
az containerapp create \
--name nodeapp \
--resource-group $RESOURCE_GROUP \
--user-assigned $IDENTITY_ID \
--environment $CONTAINERAPPS_ENVIRONMENT \
--image dapriosamples/hello-k8s-node:latest \
--min-replicas 1 \
--max-replicas 1 \
--enable-dapr \
--dapr-app-id nodeapp \
--dapr-app-port 3000 \
--env-vars 'APP_PORT=3000'
Если вы используете Реестр контейнеров Azure, добавьте --registry-server <REGISTRY_NAME>.azurecr.io
флаг в команду.
По умолчанию образ извлекается из Docker Hub.
Развертывание приложения Python
az containerapp create \
--name pythonapp \
--resource-group $RESOURCE_GROUP \
--environment $CONTAINERAPPS_ENVIRONMENT \
--image dapriosamples/hello-k8s-python:latest \
--min-replicas 1 \
--max-replicas 1 \
--enable-dapr \
--dapr-app-id pythonapp
Если вы используете Реестр контейнеров Azure, добавьте --registry-server <REGISTRY_NAME>.azurecr.io
флаг в команду.
Проверка результатов
Проверка успешного сохранения состояния
Чтобы убедиться, что службы работают правильно, просмотрите данные в учетной записи хранения Azure.
Откройте портал Azure в браузере и перейдите к нужной учетной записи хранения.
Выберите контейнеры хранилища>данных в меню слева.
Выберите приложение контейнера.
Убедитесь, что в этом контейнере отображается файл с именем
order
.Выберите файл .
Щелкните вкладку Изменить.
Нажмите кнопку Обновить, чтобы понаблюдать, как данные обновляются автоматически.
Просмотр журналов
Журналы из приложений-контейнеров хранятся в пользовательской ContainerAppConsoleLogs_CL
таблице в рабочей области Log Analytics. Журналы можно просматривать через портал Azure или с помощью интерфейса командной строки. Сначала в рабочей области может возникнуть небольшая задержка.
Просмотр журналов с помощью командной строки с помощью следующей команды CLI.
LOG_ANALYTICS_WORKSPACE_CLIENT_ID=`az containerapp env show --name $CONTAINERAPPS_ENVIRONMENT --resource-group $RESOURCE_GROUP --query properties.appLogsConfiguration.logAnalyticsConfiguration.customerId --out tsv`
az monitor log-analytics query \
--workspace $LOG_ANALYTICS_WORKSPACE_CLIENT_ID \
--analytics-query "ContainerAppConsoleLogs_CL | where ContainerAppName_s == 'nodeapp' and (Log_s contains 'persisted' or Log_s contains 'order') | project ContainerAppName_s, Log_s, TimeGenerated | sort by TimeGenerated | take 5" \
--out table
В выходных данных ниже показан тип ответа, который следует ожидать от команды CLI.
ContainerAppName_s Log_s TableName TimeGenerated
-------------------- ------------------------------- ------------- ------------------------
nodeapp Got a new order! Order ID: 61 PrimaryResult 2021-10-22T21:31:46.184Z
nodeapp Successfully persisted state. PrimaryResult 2021-10-22T21:31:46.184Z
nodeapp Got a new order! Order ID: 62 PrimaryResult 2021-10-22T22:01:57.174Z
nodeapp Successfully persisted state. PrimaryResult 2021-10-22T22:01:57.174Z
nodeapp Got a new order! Order ID: 63 PrimaryResult 2021-10-22T22:45:44.618Z
Очистка ресурсов
Так как pythonapp
непрерывно выполняет вызовы к nodeapp
с сообщениями, которые сохраняются в настроенном хранилище состояний, важно выполнить эти действия по очистке, чтобы избежать оплаты за текущие операции.
Если вы хотите удалить ресурсы, созданные в рамках этого пошагового руководства, выполните следующую команду.
Внимание
Эта команда удаляет указанную группу ресурсов и все ресурсы, содержащиеся в ней. Если в указанной группе ресурсов существуют другие ресурсы, кроме созданных для работы с этим учебником, они также будут удалены.
az group delete --resource-group $RESOURCE_GROUP
Совет
Возникли проблемы? Сообщите о них в репозитории Azure Container Apps на GitHub.