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


Краткое руководство. Развертывание приложения 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 или командлетах из 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.

  1. Создайте назначаемый пользователем идентификатор.

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

  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

Совет

Возникли проблемы? Сообщите нам на GitHub, открыв запрос в репозитории Azure Container Apps.

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