Поделиться через


Краткое руководство. Развертывание приложения Dapr в приложениях контейнеров Azure с помощью Azure CLI

Dapr (распределенная среда выполнения приложений) помогает разработчикам создавать устойчивые и надежные микрослужбы. В этом кратком руководстве вы узнаете, как включить клиентские контейнеры Dapr для запуска вместе с приложениями контейнеров микрослужб. Вам потребуется выполнить следующие задачи:

  • Создайте среду "Приложения контейнеров" и хранилище состояний хранилища блогов Azure для приложений-контейнеров.
  • Разверните приложение контейнера Python, которое публикует сообщения.
  • Разверните приложение контейнера Node.js, которое подписывается на сообщения и сохраняет их в хранилище состояний.
  • Проверьте взаимодействие между двумя микрослужбами с помощью портал Azure.

Схема архитектуры микрослужб Dapr Hello World в приложениях контейнеров 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-объектов.

  1. Создайте удостоверение, назначаемое пользователем.

    az identity create --resource-group $RESOURCE_GROUP --name "nodeAppIdentity"     --output json
    
  2. Извлеките и 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 \")
    
  3. Получите идентификатор подписки для текущей подписки.

    SUBSCRIPTION_ID=$(az account show --query id --output tsv)
    
  4. 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-объектов с помощью управляемого удостоверения.

  1. В текстовом редакторе создайте файл с именем 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 получить доступ к хранилищу состояний.

  2. Перейдите в каталог, в котором хранится файл 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.

  1. Откройте портал Azure в браузере и перейдите к нужной учетной записи хранения.

  2. Выберите контейнеры хранилища>данных в меню слева.

  3. Выберите приложение контейнера.

  4. Убедитесь, что в этом контейнере отображается файл с именем order.

  5. Выберите файл .

  6. Щелкните вкладку Изменить.

  7. Нажмите кнопку Обновить, чтобы понаблюдать, как данные обновляются автоматически.

Просмотр журналов

Журналы из приложений-контейнеров хранятся в пользовательской 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.

Следующие шаги