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

在 Azure 容器应用中使用 Azure Functions

本文介绍如何 在 Azure 容器应用中创建 Azure Functions 应用,并完成预配置的自动缩放规则。

先决条件

资源 DESCRIPTION
Azure 帐户 拥有有效订阅的 Azure 帐户。

如果没有帐户,可以免费创建一个帐户
Azure 存储帐户 一个用于储存 Azure Functions 的状态的 Blob 存储帐户
Azure Application Insights Azure Application Insights 的实例,用于收集有关容器应用的数据。

创建 函数应用

以下步骤演示如何使用示例容器映像创建容器应用。 如果要将此过程用于自定义容器映像,请参阅 在 Azure 容器应用中创建第一个函数应用

  1. 转到 Azure 门户并在搜索栏中搜索 容器应用

  2. 选择“容器应用”

  3. 选择 创建

  4. 选择 容器应用

  5. “基本信息 ”部分中,输入以下值。

    在“项目详细信息”下

    资产 价值
    订阅 选择 Azure 订阅。
    资源组 选择“ 创建新资源组”,将其命名 为 my-aca-functions-group,然后选择“ 确定”。
    容器应用名称 输入 my-aca-functions-app
  6. 在“针对 Azure Functions 进行优化”旁边,选中复选框

    创建为 Azure Functions 预配置的容器应用时 Azure 门户的屏幕截图。

  7. 在“容器应用环境”下,输入

    资产 价值
    区域 选择离你最近的区域。
    容器应用环境 选择“ 创建新环境”。
  8. 在环境设置窗口中,输入:

    资产 价值
    环境名称 输入 my-aca-functions-environment
    区域冗余 选择“已禁用”。
  9. 选择 “创建” 以保存值。

  10. 选择“ 下一步:容器 ”切换到 “容器 ”部分。

  11. 在“使用快速入门映像”旁边,使此框保持未选中状态。

  12. “容器详细信息 ”部分下,输入以下值。

    资产 价值
    名称 此框已根据您在上一节中的选择进行预填充。
    图像源 选择“Docker Hub 或其他注册表”
    订阅 选择订阅。
    映像类型 选择公共
    注册表登录服务器 输入 mcr.microsoft.com
    映像和标记 输入 k8se/quickstart-functions:latest
  13. 在“环境变量”下,输入以下变量的值

    • AzureWebJobsStorage
    • APPINSIGHTS_INSTRUMENTATIONKEYAPPLICATIONINSIGHTS_CONNECTION_STRING

    为这些变量输入托管标识或连接字符串值。 建议使用托管标识。

    AzureWebJobsStorage 变量是 Azure Functions 所需的 Azure 存储帐户连接字符串。 此存储帐户存储函数执行日志、管理触发器和绑定,并维护持久函数的状态。

    Application Insights 是一种监视和诊断服务,提供对 Azure Functions 性能和使用情况的见解。 此监视可帮助你跟踪请求速率、响应时间、故障率和其他指标。

  14. 选择“下一步”>“Ingress”以切换到“Ingress”部分,并输入以下值。

    资产 价值
    流入量 选中 “启用 ”复选框以启用入口。
    入口流量 选择 “从任意位置接受流量”。
    入口类型 选择“HTTP”。
    目标端口 输入 80
  15. 选择 审阅 + 创建

  16. 选择 创建

  17. 部署完成后,选择转到资源

  18. “概述 ”页中,选择 应用程序 URL 旁边的链接,在新浏览器选项卡中打开该应用程序。

  19. /api/HttpExample 追加到 URL 的末尾。

    浏览器中返回一条消息,指出“HTTP 触发器函数已处理请求”。

先决条件

创建函数应用程序

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

  1. 登录到 Azure。

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

    az upgrade
    
  3. 安装或更新 CLI 的 Azure 容器应用扩展。

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

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

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

    az provider register --namespace Microsoft.App
    
    az provider register --namespace Microsoft.OperationalInsights
    
  4. 创建环境变量。

    RESOURCE_GROUP_NAME="my-aca-functions-group"
    CONTAINER_APP_NAME="my-aca-functions-app"
    ENVIRONMENT_NAME="my-aca-functions-environment"
    LOCATION="westus"
    STORAGE_ACCOUNT_NAME="storage-account-name"
    STORAGE_ACCOUNT_SKU="storage-account-sku"
    APPLICATION_INSIGHTS_NAME="application-insights-name"
    
  5. 创建资源组。

    az group create \
      --name $RESOURCE_GROUP_NAME \
      --location $LOCATION \
      --output none
    
  6. 创建容器应用环境。

    az containerapp env create \
        --name $ENVIRONMENT_NAME \
        --resource-group $RESOURCE_GROUP_NAME \
        --location $LOCATION \
        --output none
    
  7. 创建存储帐户

    az storage account create \
      --name $STORAGE_ACCOUNT_NAME \
      --resource-group $RESOURCE_GROUP \
      --location $LOCATION \
      --sku $STORAGE_ACCOUNT_SKU
    
  8. 获取存储帐户连接字符串

    $STORAGE_ACCOUNT_CONNECTION_STRING = az storage account show-connection-string \
      --name $STORAGE_ACCOUNT_NAME \
      --resource-group $RESOURCE_GROUP \
      --query connectionString \
      --output tsv
    
  9. 创建 Azure Applications Insights

    az monitor app-insights component create \
    --app $APPLICATION_INSIGHTS_NAME \
    --location $LOCATION \
      --resource-group $RESOURCE_GROUP \
      --application-type web
    
  10. 获取 Application Insights 连接字符串

    $APPLICATION_INSIGHTS_CONNECTION_STRING = az monitor app-insights component show \
      --app $APPLICATION_INSIGHTS_NAME \
      --resource-group $RESOURCE_GROUP \
      --query connectionString \
      --output tsv
    
  11. 创建 Azure Functions 容器应用。

    az containerapp create \
      --resource-group $RESOURCE_GROUP_NAME \
      --name $CONTAINER_APP_NAME \
      --environment $ENVIRONMENT_NAME \
      --image mcr.microsoft.com/azure-functions/dotnet8-quickstart-demo:1.0 \
      --ingress external \
      --target-port 80 \
      --kind functionapp \
      --query properties.outputs.fqdn
    

    此命令返回 Functions 应用的 URL。 复制此 URL 并将其粘贴到 Web 浏览器中。

  12. 为多版本场景创建具有 --revisions-mode multiple 的 Azure Functions 容器应用

    az containerapp create \
      --name $CONTAINERAPP_NAME \
      --resource-group $RESOURCE_GROUP \
      --environment $CONTAINERAPPS_ENVIRONMENT \
      --image mcr.microsoft.com/azure-functions/dotnet8-quickstart-demo:1.0 \
      --target-port 80 \
      --ingress external \
      --kind functionapp \
      --workload-profile-name $WORKLOAD_PROFILE_NAME \
      --env-vars AzureWebJobsStorage="$STORAGE_ACCOUNT_CONNECTION_STRING" APPLICATIONINSIGHTS_CONNECTION_STRING="$APPLICATION_INSIGHTS_CONNECTION_STRING"
    
  13. 对于多版本场景,请升级 containerapp 并拆分流量。

    az containerapp update \
      --resource-group $RESOURCE_GROUP \
      --name $CONTAINERAPP_NAME \
      --image mcr.microsoft.com/azure-functions/dotnet8-quickstart-demo:latest
    
    az containerapp ingress traffic set -resource-group \
      --name $CONTAINERAPP_NAME \
      --resource-group $RESOURCE_GROUP \
      --revision-weight {revision1_name}=50 \
      --revision-weight {revision2_name}=50
    
  14. /api/HttpExample 追加到 URL 的末尾。

    浏览器中返回一条消息,指出“HTTP 触发器函数已处理请求”。

管理功能

可以使用 Azure CLI 在 Azure 容器应用中管理已部署的函数。 以下命令可帮助你列出、检查和与容器化环境中运行的函数进行交互。

注释

处理多修订场景时,将 --revision <REVISION_NAME> 参数添加到命令以针对特定修订。

列表函数

查看容器应用中部署的所有函数:

# List all functions
az containerapp function list \
  --resource-group $RESOURCE_GROUP \
  --name $CONTAINERAPP_NAME

显示函数详细信息

获取有关特定函数的详细信息:

az containerapp function show \
  --resource-group $RESOURCE_GROUP \
  --name $CONTAINERAPP_NAME \
  --function-name <FUNCTIONS_APP_NAME>

监视函数调用

监视函数应用对于了解其性能和诊断问题至关重要。 以下命令演示如何使用 Azure CLI 检索函数 URL、触发调用以及查看详细的遥测和调用摘要。 在调用跟踪之前,请确保通过 curl -X POST "fqdn/api/HttpExample" 调用该函数几次。

  1. 若要查看调用跟踪,请获取函数调用的详细跟踪。

    az containerapp function invocations traces \
      --name $CONTAINERAPP_NAME \
      --resource-group $RESOURCE_GROUP \
      --function-name <FUNCTIONS_APP_NAME> \
      --timespan 5h \
      --limit 3
    
  2. 查看调用摘要以查看成功和失败的调用。

    az containerapp function invocations summary \
      --name $CONTAINERAPP_NAME \
      --resource-group $RESOURCE_GROUP \
      --function-name <FUNCTIONS_APP_NAME> \
      --timespan 5h
    

管理函数密钥

Azure Functions 使用 密钥进行身份验证和授权。 可以管理以下不同类型的密钥:

  • 主机密钥:访问应用中的任何函数
  • 主密钥:提供管理访问权限
  • 系统密钥:Azure 服务使用
  • 函数键:访问特定函数

以下命令演示如何管理主机的密钥。 若要针对特定 Functions 应用运行相同的命令,请将 --function-name <FUNCTIONS_APP_NAME> 参数添加到命令。

列出密钥

使用以下命令列出容器应用中运行的 Azure Functions 的主机级和特定于函数的密钥。

注释

请至少运行一个副本,以便运行以下密钥管理命令。

az containerapp function keys list \
  --resource-group $RESOURCE_GROUP \
  --name $CONTAINERAPP_NAME \
  --key-type hostKey

显示特定密钥

使用以下命令显示函数应用的特定主机级密钥的值:

az containerapp function keys show \
  --resource-group $RESOURCE_GROUP \
  --name $CONTAINERAPP_NAME \
  --key-name <KEY_NAME> \
  --key-type hostKey

设置密钥

使用以下命令为函数应用设置特定的主机级密钥:

az containerapp function keys set \
  --resource-group $RESOURCE_GROUP \
  --name $CONTAINERAPP_NAME \
  --key-name <KEY_NAME> \
  --key-value <KEY_VALUE> \
  --key-type hostKey