Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Распределенная среда выполнения приложений (Dapr) помогает разработчикам создавать устойчивые, надежные микрослужбы. В этом кратком руководстве вы узнаете, как включить сайдкары Dapr, чтобы они работали вместе с контейнерными приложениями микросервисов. Вам потребуется выполнить следующие задачи:
- Создайте среду "Приложения контейнеров" и хранилище состояний хранилища блогов Azure для приложений-контейнеров.
- Разверните приложение контейнера Python, которое публикует сообщения.
- Разверните приложение контейнера Node.js, которое подписывается на сообщения и сохраняет их в хранилище состояний.
- Проверьте взаимодействие между двумя микрослужбами с помощью портал Azure.
В этом кратком руководстве для быстрого старта подробно рассматриваются приложения, которые вы развертываете в быстром старте Dapr Hello World с открытым кодом.
Предпосылки
- Учетная запись Azure с активной подпиской. Если у вас нет учетной записи, создайте бесплатную учетную запись.
- Учетная запись GitHub. Если у вас ее нет, зарегистрируйтесь бесплатно.
- Установите Azure CLI.
- Установка Git.
Настройка
Чтобы войти в Azure из ИНТЕРФЕЙСА командной строки, выполните следующую команду и следуйте инструкциям, чтобы завершить процесс проверки подлинности.
az login
Чтобы убедиться, что вы используете последнюю версию интерфейса командной строки, выполните команду обновления.
az upgrade
Затем установите или обновите расширение "Приложения контейнеров Azure" для интерфейса командной строки.
Если при выполнении az containerapp команд в Azure CLI или командлетах из Az.App модуля PowerShell возникают ошибки, связанные с отсутствующими параметрами, убедитесь, что у вас установлена последняя версия расширения для Azure Container Apps.
az extension add --name containerapp --upgrade
Примечание.
Начиная с мая 2024 г. расширения Azure CLI больше не поддерживают предварительные версии функций по умолчанию. Чтобы получить доступ к функциям предварительной версии Container Apps, установите расширение Container Apps с помощью --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="<new-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"
Настройте хранилище состояний
Создайте учетную запись Azure Blob Storage
После развертывания среды разверните учетную запись Azure Blob Storage, которую использует контейнерное приложение 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
Настройте идентификатор, назначенный пользователем, для Node.js приложения.
Хотя Container Apps поддерживает как управляемое удостоверение, назначаемое пользователем, так и назначаемое системой, удостоверение, назначаемое пользователем, предоставляет Node.js-приложению с поддержкой Dapr разрешения на доступ к учетной записи Blob Storage.
Создайте назначаемый пользователем идентификатор.
az identity create --resource-group $RESOURCE_GROUP --name "nodeAppIdentity" --output jsonИзвлеките свойства
principalIdиid, а затем сохраните их в переменных.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 со свойствами, полученными из предыдущих шагов. Замените значения
<placeholders>на свои.# 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
Совет
Возникли проблемы? Сообщите нам на GitHub, открыв запрос в репозитории Azure Container Apps.