在 Azure 容器应用中为 Azure Functions 部署 Dapr 扩展

使用 Azure Functions 的 Dapr 扩展,可以使用触发器和绑定从 Azure 函数轻松与 Dapr API 进行交互。 本指南介绍如何:

  • 创建 Azure Redis 缓存以用作 Dapr 状态存储
  • 部署 Azure 容器应用环境以托管容器应用
  • 在 Azure 容器应用上部署已启用 Dapr 的函数:
    • 调用另一个服务的函数
    • 一个函数,用于创建订单并通过 Dapr 状态存储将其保存到存储中
  • 验证两个应用之间的交互

先决条件

设置环境

  1. 在终端中登录到 Azure 订阅。

    az cloud set -n AzureChinaCloud
    az login
    # az cloud set -n AzureCloud   //means return to Public Azure.
    
  2. 使用要使用的活动订阅设置 Azure 登录。

    az account set --subscription {subscription-id-or-name}
    
  3. 克隆 Azure Functions 存储库的 Dapr 扩展

    git clone https://github.com/Azure/azure-functions-dapr-extension.git
    

创建资源组

指定可用区域之一,为容器应用创建资源组。

az group create --name {resourceGroupName} --location {region}

部署 Azure 函数模板

  1. 从根目录更改为保存模板的文件夹。

    cd quickstarts/dotnet-isolated/deploy/aca
    
  2. 创建部署组并指定要部署的模板。

    az deployment group create --resource-group {resourceGroupName} --template-file deploy-quickstart.bicep
    
  3. 收到 CLI 提示时,输入资源名称前缀。 所选名称必须是数字和小写字母的组合,长度介于 3 到 24 个字符之间。

    Please provide string value for 'resourceNamePrefix' (? for help): {your-resource-name-prefix}
    

    该模板部署以下资源,并且可能需要一段时间:

    • 容器应用环境
    • 函数应用
    • Azure Blob 存储帐户和默认存储容器
    • Application Insights
    • Log Analytics 工作区
    • 面向状态管理的 Dapr 组件(Azure Redis 缓存)
    • 以下启用了 .NET Dapr 的函数:
      • OrderService
      • CreateNewOrder
      • RetrieveOrder
  4. 在 Azure 门户中,导航到资源组并选择“部署”以跟踪部署状态

    屏幕截图显示 Azure 门户中的部署组部署状态。

验证结果

成功部署模板后,运行以下命令启动 OrderService,以触发 CreateNewOrder 进程。 此时,将创建新订单并将其存储在 Redis 状态存储中。

在命令中:

  • {quickstart-functionapp-url} 替换为实际的函数应用 URL。 例如:https://daprext-funcapp.wittyglacier-20884174.chinanorth3.azurecontainerapps.dev
  • {quickstart-functionapp-name} 替换为函数应用名称。
Invoke-RestMethod -Uri 'https://{quickstart-functionapp-url.io}/api/invoke/{quickstart-functionapp-name}/CreateNewOrder' -Method POST -Headers @{"Content-Type" = "application/json"} -Body '{
    "data": {
        "value": {
            "orderId": "Order22"
        }
    }
}'

查看日志

通过函数应用记录的数据存储在 Log Analytics 工作区的 ContainerAppConsoleLogs_CL 自定义表中。 分析结果第一次到达要等待几分钟,然后才能查询记录的数据。

可以通过 Azure 门户或命令行查看日志。

通过 Azure 门户

  1. 导航到容器应用环境。

  2. 在左侧菜单中的“监视”下,选择“日志”

  3. 运行如下所示的查询,以验证函数应用是否正在从 Dapr 接收已调用的消息。

    ContainerAppsConsoleLogs_CL
    | where RevisionName_s == $revision_name
    | where Log_s contains "Order22"
    | project Log_s
    

屏幕截图演示如何运行控制台日志查询来查看日志。

通过 Azure CLI

运行以下命令,以查看保存的状态。

Invoke-RestMethod -Uri 'https://{quickstart-functionapp-url.io}/api/retrieveorder' -Method GET

清理资源

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

az group delete --resource-group $RESOURCE_GROUP