用途
Azure Functions 用于在 Azure 上构建和部署无服务器应用程序。当需要事件驱动、可自动伸缩至零的计算资源,或构建 API、Webhook、后台处理管道,以及希望按执行次数计费而无需管理服务器时,可使用本技能。它也适用于响应 Azure 服务事件(Blob 存储、Service Bus、Cosmos DB 变更)、实现轻量级微服务或定时任务。
主要能力
- 函数应用创建:支持 Consumption 计划(按执行计费)与 Premium 计划(VNet 集成、无冷启动)。
- 触发器与绑定配置:涵盖 HTTP 触发器、Blob 触发器、Timer 触发器、Service Bus 队列触发器、Cosmos DB 输出绑定、Cosmos DB 变更源触发器。
- 多语言支持:提供 Python(v2 编程模型)与 Node.js(v4 编程模型)代码示例。
- 本地开发:使用 Azure Functions Core Tools 初始化项目、创建函数、本地运行与测试。
- 部署:支持 Core Tools 发布、ZIP 包部署、GitHub Actions CI/CD、部署槽(staging/production 交换与回滚)。
- 应用设置与安全:配置应用设置、槽特定设置、托管标识、CORS、最低 TLS 版本、Application Insights。
- 基础设施即代码:提供 Terraform 配置示例。
- 故障排查:列出常见症状、原因与修复方法。
使用方式
前置条件包括安装 Azure CLI、Azure Functions Core Tools v4,并登录 Azure 账户、创建资源组与存储账户。
安装 Azure CLI:
curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash
安装 Azure Functions Core Tools v4:
npm install -g azure-functions-core-tools@4
验证安装:
func --version
登录并设置订阅:
az login
az account set --subscription "my-subscription-id"
创建资源组与存储账户:
az group create --name functions-rg --location eastus
az storage account create \
--name myfuncstorageacct \
--resource-group functions-rg \
--location eastus \
--sku Standard_LRS
创建函数应用(Consumption 计划,Python):
az functionapp create \
--resource-group functions-rg \
--consumption-plan-location eastus \
--runtime python \
--runtime-version 3.11 \
--functions-version 4 \
--name myapp-func \
--storage-account myfuncstorageacct \
--os-type Linux
创建函数应用(Consumption 计划,Node.js):
az functionapp create \
--resource-group functions-rg \
--consumption-plan-location eastus \
--runtime node \
--runtime-version 20 \
--functions-version 4 \
--name myapp-node-func \
--storage-account myfuncstorageacct \
--os-type Linux
创建 Premium 计划与函数应用:
az functionapp plan create \
--resource-group functions-rg \
--name myapp-premium-plan \
--location eastus \
--sku EP1 \
--is-linux true
az functionapp create \
--resource-group functions-rg \
--plan myapp-premium-plan \
--runtime python \
--runtime-version 3.11 \
--functions-version 4 \
--name myapp-premium-func \
--storage-account myfuncstorageacct
本地开发:
func init MyFunctionProject --python
cd MyFunctionProject
func new --name HttpExample --template "HTTP trigger" --authlevel function
func start
func start --port 7072
curl http://localhost:7071/api/HttpExample?name=World
部署:
func azure functionapp publish myapp-func
func azure functionapp publish myapp-func --build remote
zip -r function.zip . -x ".git/*" ".venv/*" "__pycache__/*"
az functionapp deployment source config-zip \
--resource-group functions-rg \
--name myapp-func \
--src function.zip
az functionapp deployment github-actions add \
--resource-group functions-rg \
--name myapp-func \
--repo "myorg/myrepo" \
--branch main \
--runtime python \
--login-with-github
部署槽:
az functionapp deployment slot create \
--resource-group functions-rg \
--name myapp-func \
--slot staging
func azure functionapp publish myapp-func --slot staging
az functionapp deployment slot swap \
--resource-group functions-rg \
--name myapp-func \
--slot staging \
--target-slot production
应用设置与安全:
az functionapp config appsettings set \
--resource-group functions-rg \
--name myapp-func \
--settings \
ServiceBusConnection="Endpoint=sb://..." \
CosmosDBConnection="AccountEndpoint=https://..." \
CUSTOM_SETTING="my-value"
az functionapp config appsettings set \
--resource-group functions-rg \
--name myapp-func \
--slot-settings \
ENVIRONMENT="staging"
az functionapp identity assign \
--resource-group functions-rg \
--name myapp-func
az functionapp cors add \
--resource-group functions-rg \
--name myapp-func \
--allowed-origins "https://myapp.example.com"
az functionapp config set \
--resource-group functions-rg \
--name myapp-func \
--min-tls-version 1.2
az functionapp config appsettings set \
--resource-group functions-rg \
--name myapp-func \
--settings APPINSIGHTS_INSTRUMENTATIONKEY="your-key"
适用场景
- 需要自动伸缩至零的事件驱动计算。
- 构建 API、Webhook 或后台处理管道。
- 按执行计费、无需管理服务器的工作负载。
- 响应 Azure 服务事件(Blob 存储、Service Bus、Cosmos DB 变更)。
- 轻量级微服务或定时任务。
限制
- Consumption 计划存在冷启动延迟(可能超过 10 秒),可通过 Premium 计划或设置 WEBSITE_RUN_FROM_PACKAGE=1 缓解。
- Premium 计划多实例可能导致 Timer 触发器重复运行,需设置 WEBSITE_MAX_DYNAMIC_APPLICATION_SCALE_OUT=1 或使用单例锁。
- 大负载或内存泄漏可能导致内存不足错误,需流式处理数据或提升计划层级。
- 部署槽交换失败通常因槽设置未正确配置,需使用 --slot-settings 标记槽特定设置。
- 其他具体收费、价格与平台细节暂未提供。
相关技能
- azure-networking:Premium 计划函数的 VNet 集成以访问私有资源。
- azure-sql:从函数绑定连接数据库。
- terraform-azure:函数应用预配的基础设施即代码。
- arm-templates:基于 Bicep 的函数应用部署。