你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

教程:使用 Azure 资源管理器或 Bicep 模板将 Dapr 应用程序部署到 Azure 容器应用

Dapr (Distributed Application Runtime) 是一种运行时,可帮助构建可复原、无状态和有状态的微服务。 在本教程中,示例 Dapr 解决方案通过 Azure 资源管理器 (ARM) 或 Bicep 模板部署到 Azure 容器应用。

学习如何:

  • 创建用作 Dapr 状态存储的 Azure Blob 存储
  • 部署容器应用环境来托管容器应用
  • 部署两个启用了 dapr 的容器应用:一个用于生成订单,另一个使用订单并存储它们
  • 将用户分配的标识分配给容器应用,并向其提供适当的角色分配来向 Dapr 状态存储进行身份验证
  • 验证两项微服务之间的交互情况。

使用 Azure 容器应用,你可以在生成微服务时获得完全托管的 Dapr API 版本。 在 Azure 容器应用中使用 Dapr 时,可以让挎斗在提供一组丰富功能的微服务旁边运行。

在本教程中,你将通过 Dapr Hello World 快速入门部署解决方案。

此应用程序包括:

  • 用于生成消息的客户端 (Python) 容器应用。
  • 一个服务(节点)容器应用,用于在状态存储中消费和持久化这些消息

下面的体系结构关系图说明了构成本教程的组件:

Architecture diagram for Dapr Hello World microservices on Azure Container Apps

先决条件

  • 需要一个具有活动订阅的 Azure 帐户。 如果还没有帐户,可以免费创建一个帐户
  • 一个 GitHub 帐户。 如果没有该帐户,请注册免费版

设置

首先,登录到 Azure。

az login

确保通过 upgrade 命令运行最新版本的 CLI,然后安装 Azure CLI 的 Azure 容器应用扩展。

az upgrade

az extension add --name containerapp --upgrade

安装当前扩展或模块后,注册 Microsoft.App 命名空间。

az provider register --namespace Microsoft.App

接下来,设置以下环境变量:

RESOURCE_GROUP="my-container-apps"
LOCATION="centralus"
CONTAINERAPPS_ENVIRONMENT="my-environment"

定义这些变量后,可创建一个资源组来整理本教程需要的服务。

az group create \
  --name $RESOURCE_GROUP \
  --location $LOCATION

准备 GitHub 存储库

转到包含用于部署解决方案的 ARM 和 Bicep 模板的存储库。

选择存储库顶部的“创建分支”按钮,在你的帐户中创建该存储库的分支。

现在,可克隆该分支以在本地使用它。

使用以下 git 命令将分支存储库克隆到 acadapr-templates 目录。

git clone https://github.com/$GITHUB_USERNAME/Tutorial-Deploy-Dapr-Microservices-ACA.git acadapr-templates

部署

模板会部署以下内容:

  • 一个容器应用环境
  • 一个与容器应用环境关联的 Log Analytics 工作区
  • 一个用于分布式跟踪的 Application Insights 资源
  • 一个 Blob 存储帐户和一个默认的存储容器
  • 一个用于 Blob 存储帐户的 Dapr 组件
  • 节点 - 已启用 Dapr 的容器应用,具有用户分配的托管标识:hello-k8s-node
  • python - 已启用 Dapr 的容器应用:hello-k8s-python
  • 节点应用的 Active Directory 角色分配,供 Dapr 组件用来建立与 Blob 存储的连接

导航到 acadapr-templates 目录并运行以下命令:

az deployment group create \
  --resource-group "$RESOURCE_GROUP" \
  --template-file ./azuredeploy.json \
  --parameters environment_name="$CONTAINERAPPS_ENVIRONMENT"

可能会出现 (BCP081) 警告。 此警告对应用程序的成功部署没有影响。

az deployment group create \
  --resource-group "$RESOURCE_GROUP" \
  --template-file ./azuredeploy.bicep \
  --parameters environment_name="$CONTAINERAPPS_ENVIRONMENT"

此命令部署以下内容:

  • 容器应用环境和关联的 Log Analytics 工作区,用于托管 hello world Dapr 解决方案
  • 一个 Application Insights 实例,用于 Dapr 分布式跟踪
  • 已启用 Dapr 并使用 "appId": "nodeapp""appPort": 3000 配置的 targetPort: 3000 上运行的 nodeapp 应用服务器,以及通过“存储数据参与者”角色分配有权访问 Azure Blob 存储的用户分配的标识
  • 范围为 "type": "state.azure.blobstorage" 的 Dapr 组件,供 nodeapp 用来存储状态
  • 已启用 Dapr 的无外设 pythonapp,它使用 Dapr 服务调用来调用 nodeapp 服务

验证结果

确认状态持久性是否成功

可以通过查看 Azure 存储帐户中的数据来确认服务是否正常工作。

  1. 在浏览器中,打开 Azure 门户

  2. 转到资源组中新创建的存储帐户。

  3. 从左侧的菜单中选择“容器”。

  4. 选择创建的容器。

  5. 验证是否可以在容器中看到名为 order 的文件。

  6. 选择文件。

  7. 选择“编辑”选项卡。

  8. 选择“刷新”按钮以查看更新。

查看日志

通过容器应用记录的数据存储在 Log Analytics 工作区的 ContainerAppConsoleLogs_CL 自定义表中。 可以通过 Azure 门户或命令行查看日志。 分析结果第一次到达要等待几分钟,然后才能查询记录的数据。

使用以下命令在 bash 或 PowerShell 中查看日志。

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 | take 5" \
  --out table

以下输出演示了期望从命令获得的响应类型。

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

清理资源

完成后,运行以下命令以删除你的资源组以及你在本教程中创建的所有资源。

az group delete \
  --resource-group $RESOURCE_GROUP

注意

由于 pythonapp 通过持久保存在配置的状态存储中的消息持续调用 nodeapp,因此请务必完成这些清理步骤,以免计费操作持续进行。


提示

遇到问题? 在 Azure 容器应用存储库中提交问题,告知我们有关 GitHub 的信息。

后续步骤