为 Azure Functions 中的函数应用自动执行资源部署

可以使用 Bicep 文件或 Azure 资源管理器模板来部署函数应用。 本文概述了完成此操作所需的资源和参数。 可能还需要部署其他资源,具体取决于函数应用中的触发器和绑定。 有关创建 Bicep 文件的详细信息,请参阅了解 Bicep 文件的结构和语法。 有关创建模板的详细信息,请参阅创作 Azure 资源管理器模板

有关示例 Bicep 文件和 ARM 模板,请参阅:

所需资源

Azure Functions 部署通常包括以下资源:

1只有选择在高级计划应用服务计划上运行函数应用时,托管计划才是必需的。

提示

虽然不是必需的,但强烈建议为应用配置 Application Insights。

存储帐户

函数应用需要存储帐户。 你需要一个支持 blob、表、队列和文件的常规用途帐户。 有关详细信息,请参阅 Azure Functions 存储帐户要求

resource storageAccountName 'Microsoft.Storage/storageAccounts@2021-09-01' = {
  name: storageAccountName
  location: location
  kind: 'StorageV2'
  sku: {
    name: storageAccountType
  }
}

还必须在站点配置中将 AzureWebJobsStorage 属性指定为应用设置。 如果函数应用未使用 Application Insights 进行监视,还应将 AzureWebJobsDashboard 指定为应用设置。

Azure Functions 运行时使用 AzureWebJobsStorage 连接字符串创建内部队列。 如果未启用 Application Insights,运行时将使用 AzureWebJobsDashboard 连接字符串登录到 Azure 表存储并启动门户中的“监视”选项卡。

这些属性在 siteConfig 对象中的 appSettings 集合中指定:

resource functionApp 'Microsoft.Web/sites@2022-03-01' = {
  ...
  properties: {
    ...
    siteConfig: {
      ...
      appSettings: [
        {
          name: 'AzureWebJobsDashboard'
          value: 'DefaultEndpointsProtocol=https;AccountName=${storageAccountName};AccountKey=${storageAccount.listKeys().keys[0].value}'
        }
        {
          name: 'AzureWebJobsStorage'
          value: 'DefaultEndpointsProtocol=https;AccountName=${storageAccountName};AccountKey=${storageAccount.listKeys().keys[0].value}'
        }
        ...
      ]
    }
  }
}

Application Insights

建议使用 Application Insights 监视函数应用。 使用类型 Microsoft.Insights/components 和种类“web”定义 Application Insights 资源:

resource applicationInsights 'Microsoft.Insights/components@2020-02-02' = {
  name: applicationInsightsName
  location: appInsightsLocation
  kind: 'web'
  properties: {
    Application_Type: 'web'
    Request_Source: 'IbizaWebAppExtensionCreate'
  }
}

此外,需要使用 APPINSIGHTS_INSTRUMENTATIONKEY 应用程序设置向函数应用提供检测密钥。 此属性在 siteConfig 对象的 appSettings 集合中指定:

resource functionApp 'Microsoft.Web/sites@2022-03-01' = {
  ...
  properties: {
    ...
    siteConfig: {
      ...
      appSettings: [
        {
          name: 'APPINSIGHTS_INSTRUMENTATIONKEY'
          value: appInsights.properties.InstrumentationKey
        }
        ...
      ]
    }
  }
}

托管计划

托管计划的定义是变化的,并且可能是下列计划之一:

函数应用

函数应用资源是使用类型为 Microsoft.Web/sites 且种类为 functionapp 的资源定义的:

resource functionApp 'Microsoft.Web/sites@2022-03-01' = {
  name: functionAppName
  location: location
  kind: 'functionapp'
  identity:{
    type:'SystemAssigned'
  }
  properties: {
    serverFarmId: hostingPlan.id
    clientAffinityEnabled: false
    siteConfig: {
      alwaysOn: true
    }
    httpsOnly: true
  }
  dependsOn: [
    storageAccount
  ]
}

重要

如果要显式定义托管计划,则 dependsOn 数组中可能需要一个额外的项:"[resourceId('Microsoft.Web/serverfarms', parameters('hostingPlanName'))]"

函数应用必须包括以下应用程序设置:

设置名 说明 示例值
AzureWebJobsStorage Functions 运行时用于内部排队的存储帐户的连接字符串 请参阅存储帐户
FUNCTIONS_EXTENSION_VERSION Azure Functions 运行时的版本 ~4
FUNCTIONS_WORKER_RUNTIME 要为此应用中的函数使用的语言堆栈 dotnetnodejavapythonpowershell
WEBSITE_NODE_DEFAULT_VERSION 仅当在 Windows 上使用 node 语言堆栈时才需要。请指定要使用的版本 ~14

这些属性是在 siteConfig 属性中的 appSettings 集合中指定的:

resource functionApp 'Microsoft.Web/sites@2022-03-01' = {
  ...
  properties: {
    ...
    siteConfig: {
      ...
      appSettings: [
        {
          name: 'AzureWebJobsStorage'
          value: 'DefaultEndpointsProtocol=https;AccountName=${storageAccountName};AccountKey=${listKeys(storageAccountName, '2021-09-01').keys[0].value}'
        }
        {
          name: 'FUNCTIONS_WORKER_RUNTIME'
          value: 'node'
        }
        {
          name: 'WEBSITE_NODE_DEFAULT_VERSION'
          value: '~14'
        }
        {
          name: 'FUNCTIONS_EXTENSION_VERSION'
          value: '~4'
        }
        ...
      ]
    }
  }
}

在消耗计划上部署

消耗计划会在代码运行时自动分配计算能力,根据处理负载的需要扩大规模,在代码不运行时缩小规模。 你不需要为空闲的 VM 付费,也不需要提前保留容量。 若要了解更多信息,请参阅 Azure Functions 的缩放和托管

有关 Bicep 文件/Azure 资源管理器模板示例,请参阅基于消耗计划的函数应用

创建消耗计划

无需定义消耗计划。 如果未定义,则在创建函数应用资源本身时,不会基于区域自动创建或选择消耗计划。

消耗计划是一种特殊的 serverfarm 资源。 可按如下所示通过为 computeModesku 属性使用 Dynamic 值来指定它:

Windows

resource hostingPlan 'Microsoft.Web/serverfarms@2022-03-01' = {
  name: hostingPlanName
  location: location
  sku: {
    name: 'Y1'
    tier: 'Dynamic'
    size: 'Y1'
    family: 'Y'
    capacity: 0
  }
  properties: {
    computeMode: 'Dynamic'
  }
}

Linux

若要在 Linux 上运行应用,还必须为 serverfarms 资源设置属性 "reserved": true

resource hostingPlan 'Microsoft.Web/serverfarms@2022-03-01' = {
  name: hostingPlanName
  location: location
  sku: {
    name: 'Y1'
    tier: 'Dynamic'
    size: 'Y1'
    family: 'Y'
    capacity: 0
  }
  properties: {
    computeMode: 'Dynamic'
    reserved: true
  }
}

创建函数应用

如果显式定义了消耗计划,则必须在应用上设置 serverFarmId 属性,使其指向计划的资源 ID。 确保函数应用还有一个引用该计划的 dependsOn 设置。

消耗计划中运行的函数应用所需的设置在 Windows 和 Linux 之间有所不同。

Windows

在 Windows 上,消耗计划还需要在站点配置中指定另外两个设置:WEBSITE_CONTENTAZUREFILECONNECTIONSTRINGWEBSITE_CONTENTSHARE。 此属性配置用于存储函数应用代码和配置的存储帐户。

有关示例 Bicep 文件/Azure 资源管理器模板,请参阅托管在 Windows 消耗计划中的 Azure 函数应用

resource functionApp 'Microsoft.Web/sites@2022-03-01' = {
  name: functionAppName
  location: location
  kind: 'functionapp'
  properties: {
    serverFarmId: hostingPlan.id
    siteConfig: {
      appSettings: [
        {
          name: 'APPINSIGHTS_INSTRUMENTATIONKEY'
          value: applicationInsights.properties.InstrumentationKey
        }
        {
          name: 'AzureWebJobsStorage'
          value: 'DefaultEndpointsProtocol=https;AccountName=${storageAccountName};EndpointSuffix=${environment().suffixes.storage};AccountKey=${storageAccount.listKeys().keys[0].value}'
        }
        {
          name: 'WEBSITE_CONTENTAZUREFILECONNECTIONSTRING'
          value: 'DefaultEndpointsProtocol=https;AccountName=${storageAccountName};EndpointSuffix=${environment().suffixes.storage};AccountKey=${storageAccount.listKeys().keys[0].value}'
        }
        {
          name: 'WEBSITE_CONTENTSHARE'
          value: toLower(functionAppName)
        }
        {
          name: 'FUNCTIONS_EXTENSION_VERSION'
          value: '~4'
        }
        {
          name: 'FUNCTIONS_WORKER_RUNTIME'
          value: 'node'
        }
        {
          name: 'WEBSITE_NODE_DEFAULT_VERSION'
          value: '~14'
        }
      ]
    }
  }
}

重要

请勿在部署槽位中设置 WEBSITE_CONTENTSHARE 设置。 在部署槽位中创建应用时,会生成此设置。

Linux

函数应用必须设置 "kind": "functionapp,linux",并且必须设置属性 "reserved": true。 Linux 应用还应在 siteConfig 下包含一个 linuxFxVersion 属性。 如果只是部署代码,则此属性的值取决于 runtime|runtimeVersion 格式的所需运行时堆栈。 例如:python|3.7node|14dotnet|3.1

Linux 消耗计划不支持 WEBSITE_CONTENTAZUREFILECONNECTIONSTRINGWEBSITE_CONTENTSHARE 设置。

有关示例 Bicep 文件/Azure 资源管理器模板,请参阅托管在 Linux 消耗计划中的 Azure 函数应用

resource functionApp 'Microsoft.Web/sites@2022-03-01' = {
  name: functionAppName
  location: location
  kind: 'functionapp,linux'
  properties: {
    reserved: true
    serverFarmId: hostingPlan.id
    siteConfig: {
      linuxFxVersion: 'node|14'
      appSettings: [
        {
          name: 'APPINSIGHTS_INSTRUMENTATIONKEY'
          value: applicationInsights.properties.InstrumentationKey
        }
        {
          name: 'AzureWebJobsStorage'
          value: 'DefaultEndpointsProtocol=https;AccountName=${storageAccountName};EndpointSuffix=${environment().suffixes.storage};AccountKey=${storageAccount.listKeys().keys[0].value}'
        }
        {
          name: 'FUNCTIONS_EXTENSION_VERSION'
          value: '~4'
        }
        {
          name: 'FUNCTIONS_WORKER_RUNTIME'
          value: 'node'
        }
      ]
    }
  }
}

在高级计划上部署

高级计划提供与消耗计划相同的扩展,但包括专用资源和附加功能。 若要了解详细信息,请参阅 Azure Functions 高级计划

创建高级计划

高级计划是特殊类型的 serverfarm 资源。 可通过使用 EP1EP2EP3 作为 sku 中的 Name 属性值进行指定,如下所示:

Windows

resource hostingPlan 'Microsoft.Web/serverfarms@2022-03-01' = {
  name: hostingPlanName
  location: location
  sku: {
    name: 'EP1'
    tier: 'ElasticPremium'
    family: 'EP'
  }
  kind: 'elastic'
  properties: {
    maximumElasticWorkerCount: 20
  }
}

Linux

若要在 Linux 上运行应用,还必须为 serverfarms 资源设置属性 "reserved": true

resource hostingPlan 'Microsoft.Web/serverfarms@2022-03-01' = {
  name: hostingPlanName
  location: location
  sku: {
    name: 'EP1'
    tier: 'ElasticPremium'
    family: 'EP'
  }
  kind: 'elastic'
  properties: {
    maximumElasticWorkerCount: 20
    reserved: true
  }
}

创建函数应用

对于高级计划中的函数应用,将需要在应用上设置 serverFarmId 属性,使其指向计划的资源 ID。 你还应当确保函数应用有一个针对该计划的 dependsOn 设置。

高级计划需要在站点配置中指定其他设置:WEBSITE_CONTENTAZUREFILECONNECTIONSTRINGWEBSITE_CONTENTSHARE。 此属性配置存储函数应用代码和配置(用于动态缩放)的存储帐户。

有关示例 Bicep 文件/Azure 资源管理器模板,请参阅托管在高级计划中的 Azure 函数应用

在高级计划中运行的函数应用所需的设置在 Windows 和 Linux 之间有所不同。

Windows

resource functionAppName_resource 'Microsoft.Web/sites@2022-03-01' = {
  name: functionAppName
  location: location
  kind: 'functionapp'
  properties: {
    serverFarmId: hostingPlanName.id
    siteConfig: {
      appSettings: [
        {
          name: 'APPINSIGHTS_INSTRUMENTATIONKEY'
          value: applicationInsightsName.properties.InstrumentationKey
        }
        {
          name: 'AzureWebJobsStorage'
          value: 'DefaultEndpointsProtocol=https;AccountName=${storageAccountName};EndpointSuffix=${environment().suffixes.storage};AccountKey=${storageAccount.listKeys().keys[0].value}'
        }
        {
          name: 'WEBSITE_CONTENTAZUREFILECONNECTIONSTRING'
          value: 'DefaultEndpointsProtocol=https;AccountName=${storageAccountName};EndpointSuffix=${environment().suffixes.storage};AccountKey=${storageAccount.listKeys().keys[0].value}'
        }
        {
          name: 'WEBSITE_CONTENTSHARE'
          value: toLower(functionAppName)
        }
        {
          name: 'FUNCTIONS_EXTENSION_VERSION'
          value: '~4'
        }
        {
          name: 'FUNCTIONS_WORKER_RUNTIME'
          value: 'node'
        }
        {
          name: 'WEBSITE_NODE_DEFAULT_VERSION'
          value: '~14'
        }
      ]
    }
  }
}

重要

无需指定 WEBSITE_CONTENTSHARE 设置,因为在首次创建站点时,系统会自动生成此设置。

Linux

函数应用必须设置 "kind": "functionapp,linux",并且必须设置属性 "reserved": true。 Linux 应用还应在 siteConfig 下包含一个 linuxFxVersion 属性。 如果只是部署代码,则此属性的值取决于 runtime|runtimeVersion 格式的所需运行时堆栈。 例如:python|3.7node|14dotnet|3.1

resource functionApp 'Microsoft.Web/sites@2021-02-01' = {
  name: functionAppName
  location: location
  kind: 'functionapp,linux'
  properties: {
    reserved: true
    serverFarmId: hostingPlan.id
    siteConfig: {
      linuxFxVersion: 'node|14'
      appSettings: [
        {
          name: 'APPINSIGHTS_INSTRUMENTATIONKEY'
          value: applicationInsightsName.properties.InstrumentationKey
        }
        {
          name: 'AzureWebJobsStorage'
          value: 'DefaultEndpointsProtocol=https;AccountName=${storageAccountName};EndpointSuffix=${environment().suffixes.storage};AccountKey=${storageAccount.listKeys().keys[0].value}'
        }
        {
          name: 'WEBSITE_CONTENTAZUREFILECONNECTIONSTRING'
          value: 'DefaultEndpointsProtocol=https;AccountName=${storageAccountName};EndpointSuffix=${environment().suffixes.storage};AccountKey=${storageAccount.listKeys().keys[0].value}'
        }
        {
          name: 'WEBSITE_CONTENTSHARE'
          value: toLower(functionAppName)
        }
        {
          name: 'FUNCTIONS_EXTENSION_VERSION'
          value: '~4'
        }
        {
          name: 'FUNCTIONS_WORKER_RUNTIME'
          value: 'node'
        }
      ]
    }
  }
}

在应用服务计划上部署

在应用服务计划中,函数应用在基本、标准和高级 SKU 中的专用 VM 上运行,类似于 Web 应用。 如需详细了解如何使用应用服务计划,请参阅 Azure 应用服务计划深入概述

有关 Bicep 文件/Azure 资源管理器模板示例,请参阅基于 Azure 应用服务计划的函数应用

创建专用计划

在 Functions 中,专用计划只是由 serverfarm 资源定义的常规应用服务计划。 可按如下所示指定 SKU:

Windows

resource hostingPlanName 'Microsoft.Web/serverfarms@2022-03-01' = {
  name: hostingPlanName
  location: location
  sku: {
    tier: 'Standard'
    name: 'S1'
    size: 'S1'
    family: 'S'
    capacity: 1
  }
}

Linux

若要在 Linux 上运行应用,还必须为 serverfarms 资源设置属性 "reserved": true

resource hostingPlan 'Microsoft.Web/serverfarms@2022-03-01' = {
  name: hostingPlanName
  location: location
  sku: {
    tier: 'Standard'
    name: 'S1'
    size: 'S1'
    family: 'S'
    capacity: 1
  }
  properties: {
    reserved: true
  }
}

创建函数应用

对于专用计划中的函数应用,必须在应用上设置 serverFarmId 属性,使其指向计划的资源 ID。 确保函数应用还有一个引用该计划的 dependsOn 设置。

在应用服务计划中,应在站点配置下启用 "alwaysOn": true 设置,使函数应用能够正常运行。 在应用服务计划中,如果函数运行时处于不活动状态,几分钟后就会进入空闲状态,因此只有 HTTP 触发器才能“唤醒”函数。

专用计划不支持 WEBSITE_CONTENTAZUREFILECONNECTIONSTRINGWEBSITE_CONTENTSHARE 设置。

有关示例 Bicep 文件/Azure 资源管理器模板,请参阅托管在专用计划中的 Azure 函数应用

在专用计划中运行的函数应用所需的设置在 Windows 和 Linux 之间有所不同。

Windows

resource functionApp 'Microsoft.Web/sites@2022-03-01' = {
  name: functionAppName
  location: location
  kind: 'functionapp'
  properties: {
    serverFarmId: hostingPlan.id
    siteConfig: {
      alwaysOn: true
      appSettings: [
        {
          name: 'APPINSIGHTS_INSTRUMENTATIONKEY'
          value: applicationInsightsName.properties.InstrumentationKey
        }
        {
          name: 'AzureWebJobsStorage'
          value: 'DefaultEndpointsProtocol=https;AccountName=${storageAccountName};EndpointSuffix=${environment().suffixes.storage};AccountKey=${storageAccount.listKeys().keys[0].value}'
        }
        {
          name: 'FUNCTIONS_EXTENSION_VERSION'
          value: '~4'
        }
        {
          name: 'FUNCTIONS_WORKER_RUNTIME'
          value: 'node'
        }
        {
          name: 'WEBSITE_NODE_DEFAULT_VERSION'
          value: '~14'
        }
      ]
    }
  }
}

Linux

函数应用必须设置 "kind": "functionapp,linux",并且必须设置属性 "reserved": true。 Linux 应用还应在 siteConfig 下包含一个 linuxFxVersion 属性。 如果只是部署代码,则此属性的值取决于 runtime|runtimeVersion 格式的所需运行时堆栈。 linuxFxVersion 属性的示例包括:python|3.7node|14dotnet|3.1

resource functionApp 'Microsoft.Web/sites@2022-03-01' = {
  name: functionAppName
  location: location
  kind: 'functionapp,linux'
  properties: {
    reserved: true
    serverFarmId: hostingPlan.id
    siteConfig: {
      alwaysOn: true
      linuxFxVersion: 'node|14'
      appSettings: [
        {
          name: 'APPINSIGHTS_INSTRUMENTATIONKEY'
          value: applicationInsightsName.properties.InstrumentationKey
        }
        {
          name: 'AzureWebJobsStorage'
          value: 'DefaultEndpointsProtocol=https;AccountName=${storageAccountName};EndpointSuffix=${environment().suffixes.storage};AccountKey=${storageAccount.listKeys().keys[0].value}'
        }
        {
          name: 'FUNCTIONS_EXTENSION_VERSION'
          value: '~4'
        }
        {
          name: 'FUNCTIONS_WORKER_RUNTIME'
          value: 'node'
        }
      ]
    }
  }
}

自定义容器映像

如果要部署自定义容器映像,必须使用 linuxFxVersion 进行指定并包括允许拉取映像的配置,如用于容器的 Web 应用中所示。 此外,将 WEBSITES_ENABLE_APP_SERVICE_STORAGE 设置为 false,因为容器本身提供了应用内容:

resource functionApp 'Microsoft.Web/sites@2022-03-01' = {
  name: functionAppName
  location: location
  kind: 'functionapp'
  properties: {
    serverFarmId: hostingPlan.id
    siteConfig: {
      appSettings: [
        {
          name: 'AzureWebJobsStorage'
          value: 'DefaultEndpointsProtocol=https;AccountName=${storageAccountName};AccountKey=${storageAccount.listKeys().keys[0].value}'
        }
        {
          name: 'FUNCTIONS_WORKER_RUNTIME'
          value: 'node'
        }
        {
          name: 'WEBSITE_NODE_DEFAULT_VERSION'
          value: '~14'
        }
        {
          name: 'FUNCTIONS_EXTENSION_VERSION'
          value: '~3'
        }
        {
          name: 'DOCKER_REGISTRY_SERVER_URL'
          value: dockerRegistryUrl
        }
        {
          name: 'DOCKER_REGISTRY_SERVER_USERNAME'
          value: dockerRegistryUsername
        }
        {
          name: 'DOCKER_REGISTRY_SERVER_PASSWORD'
          value: dockerRegistryPassword
        }
        {
          name: 'WEBSITES_ENABLE_APP_SERVICE_STORAGE'
          value: 'false'
        }
      ]
      linuxFxVersion: 'DOCKER|myacr.azurecr.io/myimage:mytag'
    }
  }
  dependsOn: [
    storageAccount
  ]
}

自定义部署

函数应用有许多可用于部署的子资源,包括应用设置和源代码管理选项。 还可以选择删除 sourcecontrols 子资源,改用另一个部署选项。

重要

若要使用 Azure 资源管理器成功部署应用程序,了解如何在 Azure 中部署资源尤为重要。 在下面的示例中,通过使用 siteConfig 应用顶级配置。 请务必在顶级设置这些配置,因为这些配置会将信息传达给 Functions 运行时和部署引擎。 应用 sourcecontrols/web 子资源前,需要顶级信息。 虽然可以在子级别 config/appSettings 资源中配置这些设置,但在某些情况下,需要在应用 config/appSettings之前部署函数应用。 例如在逻辑应用中使用函数时,函数是另一资源的依赖项。

resource functionApp 'Microsoft.Web/sites@2022-03-01' = {
  name: functionAppName
  location: location
  kind: 'functionapp'
  properties: {
    serverFarmId: hostingPlan.id
    siteConfig: {
      alwaysOn: true
      appSettings: [
        {
          name: 'FUNCTIONS_EXTENSION_VERSION'
          value: '~3'
        }
        {
          name: 'Project'
          value: 'src'
        }
      ]
    }
  }
  dependsOn: [
    storageAccount
  ]
}

resource config 'Microsoft.Web/sites/config@2022-03-01' = {
  parent: functionApp
  name: 'appsettings'
  properties: {
    AzureWebJobsStorage: 'DefaultEndpointsProtocol=https;AccountName=${storageAccountName};AccountKey=${storageAccount.listKeys().keys[0].value}'
    AzureWebJobsDashboard: 'DefaultEndpointsProtocol=https;AccountName=${storageAccountName};AccountKey=${storageAccount.listKeys().keys[0].value}'
    FUNCTIONS_EXTENSION_VERSION: '~3'
    FUNCTIONS_WORKER_RUNTIME: 'dotnet'
    Project: 'src'
  }
  dependsOn: [
    sourcecontrol
    storageAccount
  ]
}

resource sourcecontrol 'Microsoft.Web/sites/sourcecontrols@2022-03-01' = {
  parent: functionApp
  name: 'web'
  properties: {
    repoUrl: repoUrl
    branch: branch
    isManualIntegration: true
  }
}

提示

此 Bicep/ARM 模板使用 Project 应用设置值,这会设置基本目录,函数部署引擎 (Kudu) 在此目录中查找可部署代码。 在存储库内,函数位于 src 文件夹的子文件夹中。 因此,在前一个示例中,将应用设置值设置为 src。 如果函数位于存储库的根目录中,或者不从源代码管理进行部署,则可删除此应用设置值。

部署模板

可以使用以下任意方法部署 Bicep 文件和模板:

“部署到 Azure”按钮

备注

这种方法目前不支持部署 Bicep 文件。

<url-encoded-path-to-azuredeploy-json> 替换为 GitHub 中 azuredeploy.json 文件的原始路径的 URL 编码版本。

下面为使用 Markdown 的示例:

[![Deploy to Azure](https://azuredeploy.net/deploybutton.png)](https://portal.azure.cn/#create/Microsoft.Template/uri/<url-encoded-path-to-azuredeploy-json>)

下面为使用 HTML 的示例:

<a href="https://portal.azure.cn/#create/Microsoft.Template/uri/<url-encoded-path-to-azuredeploy-json>" target="_blank"><img src="https://azuredeploy.net/deploybutton.png"></a>

使用 PowerShell 进行部署

以下 PowerShell 命令将创建一个资源组并部署一个 Bicep 文件/ARM 模板,该文件/模板将创建具有所需资源的函数应用。 若要在本地运行,必须安装 Azure PowerShell。 运行 Connect-AzAccount -Environment AzureChinaCloud 进行登录。

# Register Resource Providers if they're not already registered
Register-AzResourceProvider -ProviderNamespace "microsoft.web"
Register-AzResourceProvider -ProviderNamespace "microsoft.storage"

# Create a resource group for the function app
New-AzResourceGroup -Name "MyResourceGroup" -Location 'China North 2 2'

# Deploy the template
New-AzResourceGroupDeployment -ResourceGroupName "MyResourceGroup" -TemplateFile main.bicep  -Verbose

若要测试此部署,可以使用这样的模板,该模板在消耗计划中在 Windows 上创建函数应用。

后续步骤

深入了解如何开发和配置 Azure Functions。