SuperAPI AI 工具集

azure-functions

部署与运维

查看项目

更新于 10-15 11:58

技能介绍

用途

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 的函数应用部署。