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

Dapr (Distributed Application Runtime) 可帮助开发人员构建可复原的可靠微服务。 在本快速入门中,你将使 Dapr 跨斗与两个容器应用一起运行,这两个应用会生成和使用存储在 Azure Blob 存储状态存储中的消息。 Azure 资源管理器或 Bicep 模板可用于执行以下操作:

  • 传递 Azure CLI 命令部署一个模板,该模板会启动运行微服务所需的一切。
  • 验证 Azure 门户中两项微服务之间的交互情况。

Azure 容器应用上的 Dapr Hello World 微服务的体系结构关系图

本快速入门反映了你在开源 Dapr Hello World 快速入门中部署的应用程序。

先决条件

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

安装

若要从 CLI 登录到 Azure,请运行以下命令,然后按照提示完成身份验证过程。

az cloud set -n AzureChinaCloud
az login
# az cloud set -n AzureCloud   //means return to Public Azure.

为了确保运行最新版本的 CLI,请运行升级命令。

az upgrade

接下来,安装或更新适用于 CLI 的 Azure 容器应用扩展。

如果在 Azure CLI 中运行 az containerapp 命令,或在 Azure PowerShell 中运行 Az.App 模块中的 cmdlet 时收到有关缺少参数的错误,请确保已安装最新版本的 Azure 容器应用扩展。

az extension add --name containerapp --upgrade

注意

从 2024 年 5 月开始,Azure CLI 扩展不再默认启用预览功能。 要访问容器应用预览功能,请使用 --allow-preview true 安装容器应用扩展。

az extension add --name containerapp --upgrade --allow-preview true

现在已安装当前扩展或模块,接下来请注册 Microsoft.AppMicrosoft.OperationalInsights 命名空间。

注意

Azure 容器应用资源已从 Microsoft.Web 命名空间迁移到 Microsoft.App 命名空间。 如需更多详细信息,请参阅 2022 年 3 月的从 Azure.Web 到 Microsoft.App 的命名空间迁移

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"

准备 GitHub 存储库

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

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

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

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

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

部署

导航到 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 分布式跟踪。
  • targetPort: 3000 上运行的 nodeapp 应用服务器,该服务器启用了 Dapr 并配置了:
    • "appId": "nodeapp"
    • "appPort": 3000
    • 用户分配的标识,可以通过存储数据参与者角色分配访问 Azure Blob 存储
  • 范围为 "type": "state.azure.blobstorage" 的 Dapr 组件,供 nodeapp 用来存储状态。
  • 已启用 Dapr 的无外设 pythonapp,它使用 Dapr 服务调用来调用 nodeapp 服务。
  • Dapr 组件用于建立与 Blob 存储的连接的 Node.js 应用的 Microsoft Entra ID 角色分配。

验证结果

确认状态持久性是否成功

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

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

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

  3. 从左侧的菜单中选择“数据存储”>“容器”。

  4. 选择创建的容器。

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

  6. 选择文件。

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

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

查看日志

容器应用中的日志存储在 Log Analytics 工作区的 ContainerAppConsoleLogs_CL 自定义表中。 可通过 Azure 门户或 CLI 查看日志。 表出现在工作区中时,一开始可能会有小的延迟。

使用以下命令在 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

清理资源

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

如果要删除在本演练过程中创建的资源,请运行以下命令。

az group delete \
  --resource-group $RESOURCE_GROUP

提示

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

后续步骤