你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
本文介绍如何 在 Azure 容器应用中创建 Azure Functions 应用,并完成预配置的自动缩放规则。
先决条件
| 资源 | DESCRIPTION |
|---|---|
| Azure 帐户 | 拥有有效订阅的 Azure 帐户。 如果没有帐户,可以免费创建一个帐户。 |
| Azure 存储帐户 | 一个用于储存 Azure Functions 的状态的 Blob 存储帐户。 |
| Azure Application Insights | Azure Application Insights 的实例,用于收集有关容器应用的数据。 |
创建 函数应用
以下步骤演示如何使用示例容器映像创建容器应用。 如果要将此过程用于自定义容器映像,请参阅 在 Azure 容器应用中创建第一个函数应用。
转到 Azure 门户并在搜索栏中搜索 容器应用 。
选择“容器应用”。
选择 创建。
选择 容器应用
在 “基本信息 ”部分中,输入以下值。
在“项目详细信息”下:
资产 价值 订阅 选择 Azure 订阅。 资源组 选择“ 创建新资源组”,将其命名 为 my-aca-functions-group,然后选择“ 确定”。 容器应用名称 输入 my-aca-functions-app。 在“针对 Azure Functions 进行优化”旁边,选中复选框。
在“容器应用环境”下,输入:
资产 价值 区域 选择离你最近的区域。 容器应用环境 选择“ 创建新环境”。 在环境设置窗口中,输入:
资产 价值 环境名称 输入 my-aca-functions-environment 区域冗余 选择“已禁用”。 选择 “创建” 以保存值。
选择“ 下一步:容器 ”切换到 “容器 ”部分。
在“使用快速入门映像”旁边,使此框保持未选中状态。
在 “容器详细信息 ”部分下,输入以下值。
资产 价值 名称 此框已根据您在上一节中的选择进行预填充。 图像源 选择“Docker Hub 或其他注册表” 订阅 选择订阅。 映像类型 选择公共。 注册表登录服务器 输入 mcr.microsoft.com 映像和标记 输入 k8se/quickstart-functions:latest 在“环境变量”下,输入以下变量的值:
AzureWebJobsStorage-
APPINSIGHTS_INSTRUMENTATIONKEY或APPLICATIONINSIGHTS_CONNECTION_STRING
为这些变量输入托管标识或连接字符串值。 建议使用托管标识。
该
AzureWebJobsStorage变量是 Azure Functions 所需的 Azure 存储帐户连接字符串。 此存储帐户存储函数执行日志、管理触发器和绑定,并维护持久函数的状态。Application Insights 是一种监视和诊断服务,提供对 Azure Functions 性能和使用情况的见解。 此监视可帮助你跟踪请求速率、响应时间、故障率和其他指标。
选择“下一步”>“Ingress”以切换到“Ingress”部分,并输入以下值。
资产 价值 流入量 选中 “启用 ”复选框以启用入口。 入口流量 选择 “从任意位置接受流量”。 入口类型 选择“HTTP”。 目标端口 输入 80。 选择 审阅 + 创建。
选择 创建。
部署完成后,选择转到资源。
在 “概述 ”页中,选择 应用程序 URL 旁边的链接,在新浏览器选项卡中打开该应用程序。
将
/api/HttpExample追加到 URL 的末尾。浏览器中返回一条消息,指出“HTTP 触发器函数已处理请求”。
先决条件
创建函数应用程序
若要从 CLI 登录到 Azure,请运行以下命令,然后按照提示完成身份验证过程。
登录到 Azure。
az login为了确保运行最新版本的 CLI,请运行升级命令。
az upgrade安装或更新 CLI 的 Azure 容器应用扩展。
如果在 Azure CLI 中运行
az containerapp命令,或在 PowerShell 中运行Az.App模块中的 cmdlet 时收到有关缺少参数的错误,请确保已安装最新版本的 Azure 容器应用扩展。az extension add --name containerapp --allow-preview true --upgrade现在已安装当前扩展或模块,接下来请注册
Microsoft.App和Microsoft.OperationalInsights命名空间。az provider register --namespace Microsoft.Appaz provider register --namespace Microsoft.OperationalInsights创建环境变量。
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"创建资源组。
az group create \ --name $RESOURCE_GROUP_NAME \ --location $LOCATION \ --output none创建容器应用环境。
az containerapp env create \ --name $ENVIRONMENT_NAME \ --resource-group $RESOURCE_GROUP_NAME \ --location $LOCATION \ --output none创建存储帐户
az storage account create \ --name $STORAGE_ACCOUNT_NAME \ --resource-group $RESOURCE_GROUP \ --location $LOCATION \ --sku $STORAGE_ACCOUNT_SKU获取存储帐户连接字符串
$STORAGE_ACCOUNT_CONNECTION_STRING = az storage account show-connection-string \ --name $STORAGE_ACCOUNT_NAME \ --resource-group $RESOURCE_GROUP \ --query connectionString \ --output tsv创建 Azure Applications Insights
az monitor app-insights component create \ --app $APPLICATION_INSIGHTS_NAME \ --location $LOCATION \ --resource-group $RESOURCE_GROUP \ --application-type web获取 Application Insights 连接字符串
$APPLICATION_INSIGHTS_CONNECTION_STRING = az monitor app-insights component show \ --app $APPLICATION_INSIGHTS_NAME \ --resource-group $RESOURCE_GROUP \ --query connectionString \ --output tsv创建 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 浏览器中。
为多版本场景创建具有 --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"对于多版本场景,请升级 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将
/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" 调用该函数几次。
若要查看调用跟踪,请获取函数调用的详细跟踪。
az containerapp function invocations traces \ --name $CONTAINERAPP_NAME \ --resource-group $RESOURCE_GROUP \ --function-name <FUNCTIONS_APP_NAME> \ --timespan 5h \ --limit 3查看调用摘要以查看成功和失败的调用。
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