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

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

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

先决条件

设置环境

  1. 在终端中,登录到 Azure 帐户。

    az login
    
  2. 设置要使用的活动订阅。

    az account set --subscription <subscription-id-or-name>
    
  3. 注册Microsoft.AppMicrosoft.OperationalInsights命名空间。

    az provider register --namespace Microsoft.App
    
    az provider register --namespace Microsoft.OperationalInsights
    
  4. 克隆 Azure Functions 存储库的 Dapr 扩展

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

创建资源组

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

az group create --name <resource-group-name> --location <region>

部署 Azure 函数模板

  1. 切换到保存模板的文件夹。

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

    az deployment group create --resource-group <resource-group-name> --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
    • 日志分析工作空间
    • 用于状态管理的 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.cn
  • <quickstart-functionapp-name> 替换为函数应用名称。

若要查找函数应用 URL,请在 Azure 门户中导航到 容器应用 ,然后选择新的容器应用。

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-name>