Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Для автоматизации процесса развертывания приложения-функции можно использовать файл Bicep или шаблон Azure Resource Manager (ARM). Во время развертывания можно использовать существующие ресурсы Azure или создать новые.
Эти преимущества можно получить в рабочих приложениях с помощью автоматизации развертывания, как инфраструктуры как кода (IaC), так и непрерывной интеграции и развертывания (CI/CD):
- Согласованность. Определите инфраструктуру в коде, чтобы обеспечить согласованность развертываний в разных средах.
- Управление версиями: отслеживайте изменения в конфигурации инфраструктуры и приложений в системе управления версиями вместе с кодом проекта.
- Автоматизация: автоматизация развертывания, что сокращает количество ошибок вручную и сокращает процесс выпуска.
- Масштабируемость: легко реплицировать инфраструктуру для нескольких сред, таких как разработка, тестирование и производство.
- Аварийное восстановление: быстро создайте инфраструктуру после сбоев или во время миграции.
В этой статье показано, как автоматизировать создание ресурсов Azure и конфигураций развертывания для Функций Azure. Дополнительные сведения о непрерывном развертывании кода проекта см. в статье "Непрерывное развертывание для функций Azure".
Код шаблона для создания необходимых ресурсов Azure зависит от требуемых параметров размещения для приложения-функции. В этой статье поддерживаются следующие варианты размещения:
| Вариант размещения | Тип развертывания | Шаблоны с примерами |
|---|---|---|
| План потребления Flex | Code-only |
Bicep Шаблон ARM Terraform |
| План "Премиум" | Код | Контейнер |
Bicep Шаблон ARM |
| Выделенный план | Код | Контейнер |
Bicep Шаблон ARM |
| Приложения контейнеров Azure | Container-only | Bicep |
| План потребления | Code-only |
Bicep Шаблон ARM |
Убедитесь, что выбрали план размещения в верхней части статьи.
Important
После 30 сентября 2028 г. возможность размещения функционального приложения на Linux в плане потребления будет прекращена. Чтобы избежать сбоев, перенесите существующие приложения плана потребления, которые работают в Linux, в план потребления Flex до этой даты. Приложения, работающие в Windows в плане потребления, не влияют на это изменение. Дополнительные сведения см. в уведомлении о выходе из плана потребления Linux.
При использовании этой статьи следует учитывать следующие аспекты:
Нет канонического способа структурировать шаблон ARM.
Развертывание Bicep может быть разделено на несколько файлов Bicep и проверенных модулей Azure (AVM).
В этой статье предполагается, что у вас есть базовое знание о создании файлов Bicep или создании шаблонов Azure Resource Manager.
- Примеры показаны в виде отдельных разделов для определенных ресурсов. Полный набор примеров файлов Bicep и шаблонов ARM представлен в этих примерах развертывания приложений-функций.
- Примеры показаны в виде отдельных разделов для определенных ресурсов. Для Bicep отображаются проверенные модули Azure (AVM) при наличии. Для широкого набора полных примеров файлов Bicep и шаблонов ARM см. эти примеры развертывания приложений Flex Consumption.
- Примеры показаны в виде отдельных разделов для определенных ресурсов.
Обязательные ресурсы
Необходимо создать или настроить следующие ресурсы для развертывания, размещенного в среде Azure Functions.
| Resource | Requirement | Справочник по синтаксису и свойствам |
|---|---|---|
| Учетная запись хранения | Required | Microsoft.Storage/storageAccounts |
| Компонент Application Insights | Recommended | Microsoft.Insights/components* |
| План размещения | Required | Microsoft.Web/serverfarms |
| Функция приложения | Required | Microsoft.Web/sites |
Необходимо создать или настроить следующие ресурсы для развертывания, размещенного в среде Azure Functions.
| Resource | Requirement | Справочник по синтаксису и свойствам |
|---|---|---|
| Учетная запись хранения | Required | Microsoft.Storage/storageAccounts |
| Компонент Application Insights | Recommended | Microsoft.Insights/components* |
| Функция приложения | Required | Microsoft.Web/sites |
Развертывание, размещённое в Azure Container Apps, обычно состоит из следующих ресурсов:
| Resource | Requirement | Справочник по синтаксису и свойствам |
|---|---|---|
| Учетная запись хранения | Required | Microsoft.Storage/storageAccounts |
| Компонент Application Insights | Recommended | Microsoft.Insights/components* |
| Управляемая среда | Required | Microsoft.App/managedEnvironments |
| Функция приложения | Required | Microsoft.Web/sites |
Развертывание, размещенное в Azure Arc, обычно состоит из следующих ресурсов:
| Resource | Requirement | Справочник по синтаксису и свойствам |
|---|---|---|
| Учетная запись хранения | Required | Microsoft.Storage/storageAccounts |
| Компонент Application Insights | Recommended | Microsoft.Insights/components1 |
| Среда Kubernetes для Службы приложений | Required | Microsoft.ExtendedLocation/customLocations |
| Функция приложения | Required | Microsoft.Web/sites |
*Если у вас еще нет рабочей области Log Analytics, которая может использоваться экземпляром Application Insights, необходимо также создать этот ресурс.
При развертывании нескольких ресурсов в одном файле Bicep или шаблоне ARM важно указать порядок создания ресурсов. Это требование является результатом зависимостей между ресурсами. Для таких зависимостей обязательно используйте dependsOn элемент для определения зависимости в зависимом ресурсе. Дополнительные сведения см. в разделе "Определение порядка развертывания ресурсов в шаблонах ARM" или зависимостях ресурсов в Bicep.
Prerequisites
- Примеры предназначены для выполнения в контексте существующей группы ресурсов.
- Для работы как с журналами Application Insights, так и с журналами хранилища требуется существующая рабочая область Azure Log Analytics. Рабочие области можно совместно использовать между службами, и как правило, необходимо создать рабочую область в каждом географическом регионе, чтобы повысить производительность. Пример создания рабочей области Log Analytics см. в статье "Создание рабочей области Log Analytics". Полный идентификатор ресурса рабочей области можно найти на странице рабочей области на портале Azure в разделе "Параметры>свойства>ресурса".
- В этой статье предполагается, что вы уже создали управляемую среду в приложениях контейнеров Azure. Для создания приложения-функции, размещенного в контейнерных приложениях, необходимо имя и идентификатор управляемой среды.
- В этой статье предполагается, что вы уже создали пользовательское расположение с поддержкой Службы приложений в кластере Kubernetes с поддержкой Azure Arc. Для создания приложения-функции, размещенного в пользовательском расположении Azure Arc, необходимы как идентификатор пользовательского расположения, так и идентификатор среды Kubernetes.
Создание учетной записи хранения
Для всех приложений-функций требуется учетная запись хранения Azure. Вам необходима учетная запись общего назначения, которая поддерживает BLOB-объекты, таблицы, очереди и файлы. Дополнительные сведения см. в разделе Требования к учетной записи хранения Azure Functions.
Important
Учетная запись хранения используется для хранения важных данных приложения, иногда включая сам код приложения. Необходимо ограничить доступ от других приложений и пользователей к учетной записи хранения.
В этом примере создается учетная запись хранения общего назначения уровня "Стандартный" версии 2.
resource storageAccount 'Microsoft.Storage/storageAccounts@2023-05-01' = {
name: storageAccountName
location: location
kind: 'StorageV2'
sku: {
name: 'Standard_LRS'
}
properties: {
supportsHttpsTrafficOnly: true
defaultToOAuthAuthentication: true
allowBlobPublicAccess: false
}
}
Дополнительные сведения см. в полном файле main.bicep в репозитории шаблонов.
Дополнительные сведения см. в полном файле storage-PrivateEndpoint.bicep в примере репозитория.
Необходимо задать строку подключения этой учетной записи хранения в качестве AzureWebJobsStorage параметра приложения, которую требуют функции. Шаблоны, приведенные в этой статье, создают это значение строки подключения на основе созданной учетной записи хранения, что является рекомендованной практикой. Дополнительные сведения см. в разделе "Конфигурация приложения".
Контейнер развертывания
Для развертываний приложения, работающего в плане Flex Consumption, требуется контейнер в Хранилище BLOB-объектов Azure в качестве источника развертывания. Вы можете использовать учетную запись хранения по умолчанию или указать отдельную учетную запись хранения. Дополнительные сведения см. в разделе "Настройка параметров развертывания".
Эта учетная запись развертывания уже должна быть настроена при создании приложения, включая конкретный контейнер, используемый для развертываний. Дополнительные сведения о настройке развертываний см. в статье "Источники развертывания".
В этом примере показано, как создать контейнер в учетной записи хранения:
module storage 'br/public:avm/res/storage/storage-account:0.25.0' = {
name: 'storage'
scope: rg
params: {
name: !empty(storageAccountName) ? storageAccountName : '${abbrs.storageStorageAccounts}${resourceToken}'
allowBlobPublicAccess: false
allowSharedKeyAccess: false // Disable local authentication methods as per policy
dnsEndpointType: 'Standard'
publicNetworkAccess: 'Enabled'
networkAcls: {
defaultAction: 'Allow'
bypass: 'AzureServices'
}
blobServices: {
containers: [{name: deploymentStorageContainerName}]
}
tableServices:{}
queueServices: {}
minimumTlsVersion: 'TLS1_2' // Enforcing TLS 1.2 for better security
location: location
tags: tags
}
}
В этом примере показано, как использовать AVM для учетных записей хранения для создания контейнера блоб-хранилища вместе с учетной записью хранения. Для фрагмента в контексте см. этот пример развертывания.
Другие параметры развертывания настраиваются с самим приложением.
Включение журналов хранилища
Поскольку учетная запись хранения используется для важных данных функционального приложения, следует отслеживать учетную запись за изменениями этих данных. Чтобы отслеживать учетную запись хранилища, необходимо настроить журналы ресурсов Azure Monitor для Azure-хранилища. В этом примере рабочая область Log Analytics, называемая myLogAnalytics, используется в качестве назначения для этих журналов.
resource blobService 'Microsoft.Storage/storageAccounts/blobServices@2021-09-01' existing = {
name:'default'
parent:storageAccountName
}
resource storageDataPlaneLogs 'Microsoft.Insights/diagnosticSettings@2021-05-01-preview' = {
name: '${storageAccountName}-logs'
scope: blobService
properties: {
workspaceId: myLogAnalytics.id
logs: [
{
category: 'StorageWrite'
enabled: true
}
]
metrics: [
{
category: 'Transaction'
enabled: true
}
]
}
}
Эту же рабочую область можно использовать для ресурса Application Insights, определенного позже. Дополнительную информацию, включая работу с этими журналами, см. в "Мониторинг Azure Storage".
Создайте Application Insights
Вы должны использовать Application Insights для мониторинга выполнения приложения-функции. Теперь Application Insights требует рабочей области Azure Log Analytics, которую можно совместно использовать. В этих примерах предполагается, что вы используете существующую рабочую область и имеете полный идентификатор ресурса для рабочей области. Дополнительные сведения см. в рабочей области Azure Log Analytics.
В этом примере ресурс Application Insights определяется типом Microsoft.Insights/components и типом web:
resource applicationInsight 'Microsoft.Insights/components@2020-02-02' = {
name: applicationInsightsName
location: appInsightsLocation
tags: tags
kind: 'web'
properties: {
Application_Type: 'web'
WorkspaceResourceId: '<FULLY_QUALIFIED_RESOURCE_ID>'
}
}
Дополнительные сведения см. в полном файле main.bicep в репозитории шаблонов.
Подключение должно быть предоставлено функциональному приложению с использованием настройки приложения APPLICATIONINSIGHTS_CONNECTION_STRING. Дополнительные сведения см. в разделе "Конфигурация приложения".
Примеры, приведенные в этой статье, получают значение строки подключения для созданного экземпляра. Старые версии могут вместо этого использовать APPINSIGHTS_INSTRUMENTATIONKEY для задания ключа инструментирования, который больше не рекомендуется.
Создание плана размещения
Приложения, размещенные в планах потребления Azure Functions Flex, Premium или выделенного (App Service), должны иметь явно определенный план размещения.
Flex Consumption — это план хостинга на основе Linux, который использует модель выставления счетов без сервера по принципу "плати за то, что используешь". План предусматривает поддержку частной сети, выбор размера памяти экземпляра и улучшенную поддержку управляемого удостоверения.
План потребления Flex — это особый serverfarm тип ресурса. Можно задать это, используя FC1 для значения свойства Name в свойстве sku со значением tierFlexConsumption.
В этом примере создается план потребления Flex:
module appServicePlan 'br/public:avm/res/web/serverfarm:0.1.1' = {
name: 'appserviceplan'
scope: rg
params: {
name: !empty(functionPlanName) ? functionPlanName : '${abbrs.webServerFarms}${resourceToken}'
sku: {
name: 'FC1'
tier: 'FlexConsumption'
}
reserved: true
location: location
tags: tags
zoneRedundant: zoneRedundant
}
}
В этом примере используется AVM для планов службы приложений. Для фрагмента в контексте см. этот пример развертывания.
Так как план потребления Flex в настоящее время поддерживает только Linux, необходимо также задать для свойства reserved значение true.
План "Премиум" предлагает такие же возможности масштабирования, как и план потребления, предоставляя выделенные ресурсы и дополнительные возможности. Чтобы узнать больше, см. План "Премиум" функций Azure.
План "Премиум" — это специальный тип ресурса serverfarm. Его можно указать с помощью EP1, EP2 либо EP3 для значения свойства Name в свойстве sku. Способ определения плана размещения функций зависит от того, работает ли приложение-функция в Windows или Linux. Этот пример создает план EP1:
resource hostingPlan 'Microsoft.Web/serverfarms@2022-03-01' = {
name: hostingPlanName
location: location
sku: {
name: 'EP1'
tier: 'ElasticPremium'
family: 'EP'
}
kind: 'elastic'
properties: {
maximumElasticWorkerCount: 20
}
}
Дополнительные сведения см. в полном файле main.bicep в репозитории шаблонов.
Дополнительные сведения об объекте sku см. в SkuDefinition или ознакомьтесь с примерами шаблонов.
В плане Выделенный (Служба приложений) ваше приложение-функция работает на выделенных ВМ типов Basic, Standard и Premium в планах службы приложений, подобно веб-приложениям. Дополнительные сведения см. в разделе "Выделенный план".
Для примера файла Bicep или шаблона Azure Resource Manager, см. Приложение-функция на плане Службы приложений Azure.
В Функциях план "Dedicated" — это стандартный план службы приложений, который определяется ресурсом serverfarm. Необходимо указать значение как минимум name. Список имен поддерживаемых планов смотрите в параметре --sku в az appservice plan create для получения текущего списка поддерживаемых значений для выделенного плана.
Способ определения плана размещения зависит от того, работает ли ваше приложение-функция в Windows или Linux:
resource hostingPlanName 'Microsoft.Web/serverfarms@2022-03-01' = {
name: hostingPlanName
location: location
sku: {
tier: 'Standard'
name: 'S1'
size: 'S1'
family: 'S'
capacity: 1
}
}
Дополнительные сведения см. в полном файле main.bicep в репозитории шаблонов.
Создание плана размещения
Вам не нужно явно определять ресурс плана размещения потребления. При пропуске этого определения ресурса план автоматически создается или выбирается в зависимости от региона при создании ресурса приложения функций.
Вы можете явно определить план потребления как специальный тип ресурса serverfarm, который вы указываете, используя значение Dynamic для свойств computeMode и sku. В этом примере показано, как явно определить план потребления. Способ определения плана размещения зависит от того, работает ли ваше приложение-функция в Windows или Linux.
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'
}
}
Дополнительные сведения см. в полном файле main.bicep в репозитории шаблонов.
Среда Kubernetes
Функции Azure можно развернуть в Kubernetes с поддержкой Azure Arc либо как проект кода, либо как контейнерное приложение-функцию.
Чтобы создать приложение и планировать ресурсы, у вас уже должна быть созданная среда Kubernetes для Службы приложений для кластера Kubernetes с поддержкой Azure Arc. В примерах в этой статье предполагается, что у вас есть идентификатор ресурса настраиваемого расположения (customLocationId) и Служба приложений в среде Kubernetes (kubeEnvironmentId), в которые вы выполняете развертывание, как показано в этом примере.
param kubeEnvironmentId string
param customLocationId string
Сайты и планы должны ссылаться на пользовательское местоположение через поле extendedLocation. Как показано в этом усеченном примере, extendedLocation находится за пределами properties, как равный узлам kind и location.
resource hostingPlan 'Microsoft.Web/serverfarms@2022-03-01' = {
...
{
extendedLocation: {
name: customLocationId
}
}
}
Ресурс плана должен использовать значение Kubernetes (K1) для SKU, поле kind должно быть linux,kubernetes, а свойство reserved должно быть true, так как это развертывание Linux. Необходимо также задать extendedLocation и kubeEnvironmentProfile.id на идентификатор пользовательского расположения и идентификатор среды Kubernetes соответственно, пример может выглядеть следующим образом:
resource hostingPlan 'Microsoft.Web/serverfarms@2022-03-01' = {
name: hostingPlanName
location: location
kind: 'linux,kubernetes'
sku: {
name: 'K1'
tier: 'Kubernetes'
}
extendedLocation: {
name: customLocationId
}
properties: {
kubeEnvironmentProfile: {
id: kubeEnvironmentId
}
reserved: true
}
}
Создайте функциональное приложение
Ресурс приложения-функции определяется ресурсом типа Microsoft.Web/sites и kind, и включает functionapp, как минимум.
Способ определения ресурса приложения функции зависит от того, работаете ли вы на Linux или на Windows.
Список параметров приложения, необходимых при запуске в Windows, см. в разделе "Конфигурация приложения". Пример шаблона Bicep-файла или Azure Resource Manager см. функциональное приложение, размещенное на Windows в плане потребления.
Список параметров приложения, необходимых при запуске в Windows, см. в разделе "Конфигурация приложения".
Flex Consumption заменяет многие стандартные параметры приложения и свойства конфигурации сайта, используемые в развертываниях шаблонов Bicep и ARM. Дополнительные сведения см. в разделе "Конфигурация приложения".
module functionApp 'br/public:avm/res/web/site:0.16.0' = {
name: 'functionapp'
scope: rg
params: {
kind: 'functionapp,linux'
name: functionAppName_resolved
location: location
tags: union(tags, { 'azd-service-name': 'api' })
serverFarmResourceId: appServicePlan.outputs.resourceId
managedIdentities: {
systemAssigned: true
}
functionAppConfig: {
deployment: {
storage: {
type: 'blobContainer'
value: '${storage.outputs.primaryBlobEndpoint}${deploymentStorageContainerName}'
authentication: {
type: 'SystemAssignedIdentity'
}
}
}
scaleAndConcurrency: {
maximumInstanceCount: maximumInstanceCount
instanceMemoryMB: instanceMemoryMB
}
runtime: {
name: functionAppRuntime
version: functionAppRuntimeVersion
}
}
siteConfig: {
alwaysOn: false
}
configs: [{
name: 'appsettings'
properties:{
// Only include required credential settings unconditionally
AzureWebJobsStorage__credential: 'managedidentity'
AzureWebJobsStorage__blobServiceUri: 'https://${storage.outputs.name}.blob.${environment().suffixes.storage}'
AzureWebJobsStorage__queueServiceUri: 'https://${storage.outputs.name}.queue.${environment().suffixes.storage}'
AzureWebJobsStorage__tableServiceUri: 'https://${storage.outputs.name}.table.${environment().suffixes.storage}'
// Application Insights settings are always included
APPLICATIONINSIGHTS_CONNECTION_STRING: applicationInsights.outputs.connectionString
APPLICATIONINSIGHTS_AUTHENTICATION_STRING: 'Authorization=AAD'
}
}]
}
}
В этом примере для приложений-функций используется AVM. Для фрагмента в контексте см. этот пример развертывания.
Note
Если вы решили дополнительно определить план потребления, необходимо установить serverFarmId свойство в приложении таким образом, чтобы оно указывало на идентификатор ресурса плана. Убедитесь, что функциональное приложение имеет dependsOn параметр, который также ссылается на план. Если вы явно не определили план, он создается для вас.
Установите свойство serverFarmId в приложении, чтобы оно указывало на идентификатор ресурса плана. Убедитесь, что функциональное приложение имеет dependsOn параметр, который также ссылается на план.
resource functionAppName_resource 'Microsoft.Web/sites@2022-03-01' = {
name: functionAppName
location: location
kind: 'functionapp'
properties: {
serverFarmId: hostingPlanName.id
siteConfig: {
appSettings: [
{
name: 'APPLICATIONINSIGHTS_CONNECTION_STRING'
value: applicationInsightsName.properties.ConnectionString
}
{
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'
}
]
}
}
}
Полный пример см. в этом файле main.bicep.
resource functionApp 'Microsoft.Web/sites@2022-03-01' = {
name: functionAppName
location: location
kind: 'functionapp'
properties: {
serverFarmId: hostingPlan.id
siteConfig: {
alwaysOn: true
appSettings: [
{
name: 'APPLICATIONINSIGHTS_CONNECTION_STRING'
value: applicationInsightsName.properties.ConnectionString
}
{
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'
}
]
}
}
}
Полный пример см. в этом файле main.bicep.
Источники развертывания
Вы можете использовать linuxFxVersion параметр сайта, чтобы запросить развертывание определенного контейнера Linux в приложении при его создании. Для доступа к изображениям в частном репозитории требуются дополнительные параметры. Дополнительные сведения см. в разделе "Конфигурация приложения".
Important
При создании собственных контейнеров необходимо сохранить базовый образ контейнера обновленным до последнего поддерживаемого базового образа. Поддерживаемые базовые образы функций Azure зависят от языка. См. репозитории базовых образов Функций Azure.
Команда по функциям обязуется выпускать ежемесячные обновления для этих базовых образов. Регулярные обновления включают последние незначительные обновления версий и исправления безопасности для среды выполнения функций и языков. Необходимо регулярно обновлять контейнер из последнего базового образа и повторно развертывать обновленную версию контейнера. Дополнительные сведения см. в разделе "Обслуживание пользовательских контейнеров".
Ваш файл Bicep или шаблон ARM может, по желанию, также определить развертывание для вашего кода функции, которое может включать такие методы:
План потребления Flex хранит код вашего проекта в zip-архиве пакета в контейнере блоб-хранилища, известном как контейнер развертывания. Вы можете настроить учетную запись хранения и контейнер, используемые для развертывания. Дополнительные сведения см. в разделе "Развертывание".
Необходимо использовать одно развертывание для публикации пакета кода в контейнере развертывания. Во время развертывания шаблона ARM или Bicep это можно сделать, определив источник пакета, который использует расширение /onedeploy. Если вы решили напрямую отправить пакет в контейнер, пакет не будет развернут автоматически.
Контейнер развертывания
Определенная учетная запись хранения и контейнер, используемые для развертываний, метод проверки подлинности и учетные данные задаются в functionAppConfig.deployment.storage элементе properties сайта. Контейнер и все параметры приложения должны существовать при создании приложения. Пример создания контейнера хранилища см. в разделе "Контейнер развертывания".
В этом примере используется управляемая системная идентичность для доступа к указанному контейнеру хранилища BLOB-объектов, который создается в другом месте развертывания.
functionAppConfig: {
deployment: {
storage: {
type: 'blobContainer'
value: '${storage.outputs.primaryBlobEndpoint}${deploymentStorageContainerName}'
authentication: {
type: 'SystemAssignedIdentity'
}
}
}
scaleAndConcurrency: {
maximumInstanceCount: maximumInstanceCount
instanceMemoryMB: instanceMemoryMB
}
runtime: {
name: functionAppRuntime
version: functionAppRuntimeVersion
}
}
В этом примере для приложений-функций используется AVM. Для фрагмента в контексте см. этот пример развертывания.
При использовании управляемых удостоверений нужно также предоставить функциональному приложению доступ к учетной записи хранилища, используя удостоверение, как показано в этом примере:
module storageRoleAssignment_User 'br/public:avm/ptn/authorization/resource-role-assignment:0.1.2' = if (allowUserIdentityPrincipal && !empty(userIdentityPrincipalId)) {
name: 'storageRoleAssignment-User-${uniqueString(storageAccount.id, userIdentityPrincipalId)}'
params: {
resourceId: storageAccount.id
roleDefinitionId: roleDefinitions.storageBlobDataOwner
principalId: userIdentityPrincipalId
principalType: 'User'
description: 'Storage Blob Data Owner role for user identity (development/testing)'
roleName: 'Storage Blob Data Owner'
}
}
В этом примере используется AVM для назначения ролей в рамках ресурсов. Для фрагмента в контексте см. этот пример развертывания.
В этом примере необходимо знать значение GUID для назначенной роли. Это значение идентификатора можно получить для любого понятного имени роли с помощью команды az role definition list , как показано в следующем примере:
az role definition list --output tsv --query "[?roleName=='Storage Blob Data Owner'].{name:name}"
При использовании строки подключения вместо управляемых удостоверений необходимо установить authentication.type в StorageAccountConnectionString и задать authentication.storageAccountConnectionStringName имя параметра приложения, содержащего строку подключения для учетной записи хранения развертывания.
Пакет развертывания
План потребления Flex использует одно развертывание для развертывания проекта кода. Сам пакет кода такой же, как и для развертывания ZIP во всех других планах размещения функций. Однако имя самого файла пакета должно быть released-package.zip.
Чтобы включить однопакетное развертывание в шаблон, используйте /onedeploy определение ресурса для удаленного URL-адреса, содержащего пакет развертывания. Узел функций должен иметь доступ как к этому удаленному источнику пакетов, так и к контейнеру развертывания.
В этом примере добавляется один источник развертывания в существующее приложение:
@description('The name of the function app.')
param functionAppName string
@description('The location into which the resources should be deployed.')
param location string = resourceGroup().location
@description('The zip content URL for released-package.zip.')
param packageUri string
resource functionAppName_OneDeploy 'Microsoft.Web/sites/extensions@2022-09-01' = {
name: '${functionAppName}/onedeploy'
location: location
properties: {
packageUri: packageUri
remoteBuild: false
}
}
Файл Bicep или шаблон ARM может также при необходимости определить развертывание кода функции с помощью ZIP-пакета развертывания.
Чтобы с помощью Azure Resource Manager успешно развернуть приложение, важно понимать, каким образом ресурсы развертываются в Azure. В большинстве примеров конфигурации верхнего уровня применяются с помощью siteConfig. Их важно задать на верхнем уровне, так как эти конфигурации передают сведения в среду выполнения функций и механизм развертывания. Сведения верхнего уровня требуются перед применением дочернего sourcecontrols/web ресурса. Хотя эти параметры можно настроить в ресурсе дочернего уровня config/appSettings , в некоторых случаях приложение-функцию необходимо развернуть передconfig/appSettings применением.
Пакет развертывания ZIP
Развертывание ZIP-файла — это рекомендуемый способ развертывания кода приложения-функции. По умолчанию функции, использующие zip-развертывание, выполняются в самом пакете развертывания. Дополнительные сведения, включая требования к пакету развертывания, см. в статье Развертывание Zip для Функций Azure. При использовании автоматизации развертывания ресурсов можно ссылаться на пакет развертывания .zip в шаблоне Bicep или ARM.
Чтобы использовать развертывание zip в шаблоне, установите параметр WEBSITE_RUN_FROM_PACKAGE в приложении на 1 и добавьте определение ресурса /zipDeploy.
Для плана потребления в Linux вместо этого задайте URI пакета развертывания непосредственно в параметре WEBSITE_RUN_FROM_PACKAGE, как показано в этом примере шаблона.
В этом примере в существующее приложение добавляется источник zip-развертывания:
@description('The name of the function app.')
param functionAppName string
@description('The location into which the resources should be deployed.')
param location string = resourceGroup().location
@description('The zip content url.')
param packageUri string
resource functionAppName_ZipDeploy 'Microsoft.Web/sites/extensions@2021-02-01' = {
name: '${functionAppName}/ZipDeploy'
location: location
properties: {
packageUri: packageUri
}
}
При включении ресурсов zip-развертывания в шаблон следует учитывать следующие моменты:
- Планы потребления в Linux не поддерживают
WEBSITE_RUN_FROM_PACKAGE = 1. Вместо этого необходимо непосредственно в параметреWEBSITE_RUN_FROM_PACKAGEзадать универсальный код ресурса (URI) пакета развертывания. Для получения дополнительной информации см. WEBSITE_RUN_FROM_PACKAGE. Пример шаблона см. в разделе функциональное приложение, размещенное на Linux в плане 'Потребление'.
Это
packageUriдолжно быть местом, к которому могут получить доступ Функции. Рассмотрите использование хранилища BLOB-объектов Azure с маркером совместного доступа (SAS). После истечения срока действия SAS функции больше не смогут получить доступ к общему ресурсу для целей развертывания. При повторном создании SAS не забудьте обновитьWEBSITE_RUN_FROM_PACKAGEпараметр с новым значением URI.При настройке
WEBSITE_RUN_FROM_PACKAGEURI необходимо вручную синхронизировать триггеры.Всегда устанавливайте все необходимые параметры приложения в
appSettingsколлекции при добавлении или обновлении параметров. Существующие параметры, не заданные явным образом, удаляются обновлением. Дополнительные сведения см. в разделе "Конфигурация приложения".Функции не поддерживают веб-развертывание (
msdeploy) для развертываний пакетов. Вместо этого необходимо использовать zip-развертывание в процессах развертывания и автоматизации. Дополнительные сведения см. в статье о развертывании приложения с помощью Zip для Azure Functions.
Удаленные сборки
В процессе развертывания предполагается, что используемый вами файл .zip или zip-развертывание содержит готовое к выполнению приложение. Это означает, что по умолчанию настройки не выполняются.
Существуют сценарии, требующие удаленного перестроения приложения. Один из таких примеров - это необходимость включения пакетов, специфичных для Linux, в приложения на Python или Node.js, разработанные на компьютере под управлением Windows. В этом случае функции можно настроить для удаленной сборки кода после развертывания ZIP.
Способ запроса удаленной сборки зависит от операционной системы, в которой выполняется развертывание:
При развертывании приложения в Windows выполняются команды, относящиеся к языку (например dotnet restore , для приложений C# или npm install для приложений Node.js).
Чтобы включить те же процессы сборки, которые вы получаете с непрерывной интеграцией, добавьте SCM_DO_BUILD_DURING_DEPLOYMENT=true в настройки вашего приложения в коде развертывания и удалите WEBSITE_RUN_FROM_PACKAGE.
Контейнеры Linux
Если вы развертываете контейнеризованное приложение функции на тарифных планах Azure Functions "Премиум" или "Выделенный", необходимо:
-
linuxFxVersionЗадайте параметр сайта с идентификатором образа контейнера. - Задайте все необходимые
DOCKER_REGISTRY_SERVER_*параметры при получении контейнера из частного реестра. - Установите параметр приложения
WEBSITES_ENABLE_APP_SERVICE_STORAGEнаfalse.
Если отсутствуют некоторые параметры, подготовка приложений может завершиться ошибкой HTTP/500:
Function app provisioning failed.
Дополнительные сведения см. в разделе "Конфигурация приложения".
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: '~4'
}
{
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
]
}
При развертывании контейнеризованных функций для приложений Azure Container Apps, ваш шаблон должен:
-
kindЗадайте для поля значениеfunctionapp,linux,container,azurecontainerapps. - Задайте свойству
managedEnvironmentIdсайта полный универсальный код ресурса (URI) среды контейнерных приложений. - Добавьте ссылку на ресурс в коллекцию сайта
dependsOnпри одновременном создании ресурсаMicrosoft.App/managedEnvironmentsвместе с сайтом.
Определение контейнерного приложения-функции, развернутого из частного реестра контейнеров в существующей среде приложений контейнеров, может выглядеть следующим образом:
resource functionApp 'Microsoft.Web/sites@2022-03-01' = {
name: functionAppName
kind: 'functionapp,linux,container,azurecontainerapps'
location: location
properties: {
serverFarmId: hostingPlanName
siteConfig: {
linuxFxVersion: 'DOCKER|myacr.azurecr.io/myimage:mytag'
appSettings: [
{
name: 'FUNCTIONS_EXTENSION_VERSION'
value: '~4'
}
{
name: 'AzureWebJobsStorage'
value: 'DefaultEndpointsProtocol=https;AccountName=${storageAccountName};AccountKey=${storageAccount.listKeys().keys[0].value}'
}
{
name: 'APPLICATIONINSIGHTS_CONNECTION_STRING'
value: applicationInsightsName.properties.ConnectionString
}
]
}
managedEnvironmentId: managedEnvironmentId
}
dependsOn: [
storageAccount
hostingPlan
]
}
При развертывании функций в Azure Arc значение, заданное для kind поля ресурса приложения-функции, зависит от типа развертывания:
| Тип развертывания |
kind значение поля |
|---|---|
| Развертывание только с использованием кода | functionapp,linux,kubernetes |
| Контейнерное развертывание | functionapp,linux,kubernetes,container |
Кроме того, необходимо установить customLocationId так же, как вы сделали для ресурса плана размещения.
Определение контейнеризованного приложения-функции с использованием образа .NET 6 quickstart может выглядеть так:
resource functionApp 'Microsoft.Web/sites@2022-03-01' = {
name: functionAppName
kind: 'kubernetes,functionapp,linux,container'
location: location
extendedLocation: {
name: customLocationId
}
properties: {
serverFarmId: hostingPlanName
siteConfig: {
linuxFxVersion: 'DOCKER|mcr.microsoft.com/azure-functions/4-dotnet-isolated6.0-appservice-quickstart'
appSettings: [
{
name: 'FUNCTIONS_EXTENSION_VERSION'
value: '~4'
}
{
name: 'AzureWebJobsStorage'
value: 'DefaultEndpointsProtocol=https;AccountName=${storageAccountName};AccountKey=${storageAccount.listKeys().keys[0].value}'
}
{
name: 'APPLICATIONINSIGHTS_CONNECTION_STRING'
value: applicationInsightsName.properties.ConnectionString
}
]
alwaysOn: true
}
}
dependsOn: [
storageAccount
hostingPlan
]
}
Конфигурация приложений
В плане потребления Flex вы настраиваете приложение-функцию в Azure с двумя типами свойств:
| Configuration | Свойство Microsoft.Web/sites |
|---|---|
| Конфигурация приложений | functionAppConfig |
| Параметры приложения | Коллекция siteConfig.appSettings |
Эти конфигурации приложений содержатся в functionAppConfig.
| Behavior | Настройка в functionAppConfig |
|---|---|
| Экземпляры постоянной готовности | scaleAndConcurrency.alwaysReady |
| Источник развертывания | deployment |
| Размер экземпляра | scaleAndConcurrency.instanceMemoryMB |
| Конкурентность триггера HTTP | scaleAndConcurrency.triggers.http.perInstanceConcurrency |
| Языковая среда выполнения | runtime.name |
| Языковая версия | runtime.version |
| Максимальное число экземпляров | scaleAndConcurrency.maximumInstanceCount |
| Стратегия обновления сайта | siteUpdateStrategy.type |
План потребления Flex также поддерживает следующие параметры приложения:
- Настройки, основанные на строке подключения:
- Параметры на основе управляемых удостоверений:
Функции предоставляют следующие параметры настройки приложения-функции в Azure:
| Configuration | Свойство Microsoft.Web/sites |
|---|---|
| Параметры сайта | siteConfig |
| Параметры приложения | Коллекция siteConfig.appSettings |
На объекте siteConfig необходимы следующие параметры сайта:
Эти настройки сайта необходимы только при использовании управляемых удостоверений для получения образа из экземпляра Azure Container Registry.
Эти параметры приложения являются обязательными (или рекомендуемыми) для определенной операционной системы и варианта размещения:
Эти параметры приложения необходимы для развертываний контейнеров:
Эти параметры требуются только при развертывании из частного реестра контейнеров:
Учитывайте эти рекомендации при работе с параметрами сайта и приложения с помощью файлов Bicep или шаблонов ARM:
- Необязательный
alwaysReadyпараметр содержит массив одного или нескольких{name,instanceCount}объектов, каждый из которых предназначен для группировки масштабирования для каждой функции. Это группы шкал, используемые для принятия оперативных решений по шкалированию. В этом примере задаются счётчики, которые всегда готовы к работе, как для группыhttp, так и для отдельной функцииhelloworld, имеющей тип негруппированного триггера.alwaysReady: [ { name: 'http' instanceCount: 2 } { name: 'function:helloworld' instanceCount: 1 } ]
- Существуют важные аспекты, которые следует учитывать при настройке
WEBSITE_CONTENTSHAREв автоматическом развертывании. Подробные инструкции см. в справочникеWEBSITE_CONTENTSHARE.
- Для развертываний контейнеров также установите
WEBSITES_ENABLE_APP_SERVICE_STORAGEнаfalse, так как содержимое приложения предоставляется в самом контейнере.
Вы всегда должны определять параметры приложения как
siteConfig/appSettingsколлекцию создаваемогоMicrosoft.Web/sitesресурса, как показано в примерах в этой статье. Это определение гарантирует, что параметры, необходимые для работы вашего функционального приложения, доступны при первоначальном запуске.При добавлении или обновлении параметров приложения с помощью шаблонов убедитесь, что все существующие параметры включены в обновление. Это необходимо сделать, так как базовые вызовы REST API обновления заменяют весь
/config/appsettingsресурс. Если удалить существующие параметры, приложение-функция не будет запускаться. Для программного обновления отдельных параметров приложения можно использовать Azure CLI, Azure PowerShell или портал Azure для внесения этих изменений. Дополнительные сведения см. в разделе Работа с параметрами приложения.По возможности следует использовать подключения на основе управляемых удостоверений к другим службам Azure, включая подключение
AzureWebJobsStorage. Дополнительные сведения см. в разделе Настройка подключения на основе удостоверений.
Развертывания слотов
Функции позволяют развертывать различные версии кода в уникальных конечных точках в приложении-функции. Этот параметр упрощает разработку, проверку и развертывание обновлений функций без влияния на функции, выполняемые в рабочей среде. Слоты развертывания являются функцией службы приложений Azure. Количество доступных слотов зависит от размещающего плана. Дополнительные сведения см. в разделе Функции слотов развертывания Azure Functions.
Ресурс слота определяется так же, как ресурс приложения-функции (Microsoft.Web/sites), но вместо этого используется Microsoft.Web/sites/slots идентификатор ресурса. Пример развертывания (в шаблонах Bicep и ARM), создающий рабочий и промежуточный слот в тарифе Premium, см. Приложение-функция Azure с слотом развертывания.
Чтобы узнать, как заменять слоты, используя шаблоны, см. Автоматизация с помощью шаблонов Resource Manager.
При работе с развертываниями слотов следует учитывать следующие аспекты.
Не задавайте параметр
WEBSITE_CONTENTSHAREявно в определении слота развертывания. Этот параметр создается для вас автоматически, когда приложение создается в слоте развертывания.При перемещении слотов некоторые параметры приложения считаются "постоянными", поскольку они остаются с текущим слотом и не перемещаются вместе с кодом, который меняется местами. Вы можете определить такой параметр слота , включив
"slotSetting":trueв определение конкретного параметра приложения в шаблоне. Дополнительные сведения см. в разделе "Управление параметрами".
Защищенные развертывания
Вы можете создать своё приложение-функцию в развертывании, где один или несколько ресурсов защищены, интегрировав с виртуальными сетями. Интеграция виртуальной сети для вашего функционального приложения определяется ресурсом Microsoft.Web/sites/networkConfig. Эта интеграция зависит от указанных приложений-функций и ресурсов виртуальной сети. Приложение-функция может также зависеть от других ресурсов частной сети, таких как частные конечные точки и маршруты. Дополнительные сведения см. в статье Возможности работы с сетью в Функциях Azure.
Эти проекты предоставляют примеры развертывания приложений-функций в виртуальной сети на основе Bicep, включая ограничения доступа к сети:
- Высокомасштабная функция HTTP,активируемая http, подключается к концентратору событий, защищенному виртуальной сетью: активируемая http-функция (изолированный рабочий режим .NET) принимает вызовы из любого источника, а затем отправляет текст этих HTTP-вызовов в защищенный концентратор событий, работающий в виртуальной сети с помощью интеграции виртуальной сети.
- Функция активируется очередью в служебной шине, защищённой в виртуальной сети: функция Python активируется очередью в служебной шине, защищённой в виртуальной сети. Доступ к очереди осуществляется в виртуальной сети через частную конечную точку. Виртуальная машина в виртуальной сети используется для отправки сообщений.
При создании развертывания, использующего защищенную учетную запись хранения, необходимо явно указать параметр WEBSITE_CONTENTSHARE и создать файловый ресурс с именем, заданным в этом параметре. Убедитесь, что вы создаете Microsoft.Storage/storageAccounts/fileServices/shares ресурс с помощью значения WEBSITE_CONTENTSHARE, как показано в этом примере (шаблон ARM|, файл Bicep). Кроме того, необходимо задать для свойства vnetContentShareEnabled сайта значение true.
Note
Если эти параметры не являются частью развертывания, использующего защищенную учетную запись хранения, вы увидите эту ошибку во время проверки развертывания: Could not access storage account using provided connection string
Эти проекты предоставляют примеры шаблонов Bicep и ARM о том, как развертывать приложения-функции в виртуальной сети, в том числе с ограничениями доступа к сети:
| Ограниченный сценарий | Description |
|---|---|
| Создание приложения-функции с интеграцией виртуальной сети | Приложение-функция создается в виртуальной сети с полным доступом к ресурсам в этой сети. Входящий и исходящий доступ к приложению-функции не ограничен. Дополнительные сведения см. в разделе Интеграция виртуальной сети. |
| Создать приложение-функцию, имеющее доступ к защищенной учетной записи хранилища | Созданное приложение-функция использует безопасную учетную запись хранения, к которой функции обращаются с помощью частных конечных точек. Для получения дополнительной информации см. Ограничьте доступ к своей учетной записи хранения в пределах виртуальной сети. |
| Создайте функциональное приложение и учетную запись хранилища, оба используют частные конечные точки | Доступ к созданному приложению-функции можно получить только с помощью частных конечных точек, а для доступа к ресурсам хранилища используется частная конечная точка. Дополнительные сведения см. в разделе Частные конечные точки. |
Параметры ограниченной сети
Возможно, вам также потребуется использовать эти параметры, если приложение-функция имеет ограничения сети:
| Setting | Value | Description |
|---|---|---|
WEBSITE_CONTENTOVERVNET |
1 |
Параметр приложения, позволяющий приложению-функции масштабироваться, если учетная запись хранения ограничена виртуальной сетью. Для получения дополнительной информации см. Ограничьте доступ к своей учетной записи хранения в пределах виртуальной сети. |
vnetrouteallenabled |
1 |
Параметр сайта, который заставляет весь трафик из приложения-функции использовать виртуальную сеть. Дополнительные сведения см. в разделе "Интеграция региональной виртуальной сети". Этот параметр сайта заменяет параметр WEBSITE_VNET_ROUTE_ALLприложения. |
Рекомендации по ограничениям сети
При ограничении доступа к учетной записи хранения через частные конечные точки вы не сможете получить доступ к учетной записи хранения через портал или любое устройство за пределами виртуальной сети. Вы можете предоставить доступ к защищенному IP-адресу или виртуальной сети в учетной записи хранения, управляя правилом доступа к сети по умолчанию.
Ключи доступа к функции
Ключи доступа к функциям уровня узла определяются как ресурсы Azure. Это означает, что вы можете создавать ключи узлов и управлять ими в шаблонах ARM и Bicep-файлах. Ключ узла определяется как ресурс типа Microsoft.Web/sites/host/functionKeys. В этом примере создается ключ доступа на уровне узла с именем my_custom_key при создании приложения-функции:
resource functionKey 'Microsoft.Web/sites/host/functionKeys@2022-09-01' = {
name: '${parameters('name')}/default/my_custom_key'
properties: {
name: 'my_custom_key'
}
dependsOn: [
resourceId('Microsoft.Web/Sites', parameters('name'))
]
}
В этом примере name параметр — это имя нового приложения-функции. Необходимо включить dependsOn параметр, чтобы гарантировать создание ключа с помощью нового приложения-функции. Наконец, properties объект ключа узла также может включать value свойство, которое можно использовать для задания определенного ключа.
Если вы не задаете свойство value, Functions автоматически генерирует новый ключ при создании ресурса, что рекомендуется. Дополнительные сведения о ключах доступа, включая рекомендации по обеспечению безопасности для работы с ключами доступа, см. в статье "Работа с ключами доступа" в Функции Azure.
Создание шаблона
Эксперты, работающие с шаблонами Bicep или ARM, могут вручную кодировать свои развертывания с помощью простого текстового редактора. Для остальных нас существует несколько способов упростить процесс разработки:
Visual Studio Code: доступны расширения, которые помогут вам работать как с файлами Bicep, так и с шаблонами ARM. Вы можете использовать эти средства, чтобы убедиться, что ваш код правильный, и они предоставляют некоторую базовую проверку.
Портал Azure: При создании приложения-функции и связанных ресурсов на портале, окончательный экран Проверить и создать содержит ссылку для скачивания шаблона для автоматизации.
Эта ссылка показывает шаблон ARM, созданный на основе параметров, выбранных на портале. Этот шаблон может показаться немного сложным при создании приложения-функции с большим количеством новых ресурсов. Однако он может предоставить хорошую ссылку на то, как может выглядеть шаблон ARM.
Проверка шаблона
При создании файла шаблона развертывания вручную важно проверить шаблон перед развертыванием. Все методы развертывания проверяют синтаксис шаблона и вызывают сообщение об ошибке validation failed , как показано в следующем формате JSON:
{"error":{"code":"InvalidTemplate","message":"Deployment template validation failed: 'The resource 'Microsoft.Web/sites/func-xyz' is not defined in the template. Please see https://aka.ms/arm-template for usage details.'.","additionalInfo":[{"type":"TemplateViolation","info":{"lineNumber":0,"linePosition":0,"path":""}}]}}
Для проверки шаблона перед развертыванием можно использовать следующие методы:
Следующая задача развертывания группы ресурсов Azure версии 2 с помощью deploymentMode: 'Validation' инструктирует Azure Pipelines проверить правильность шаблона.
- task: AzureResourceManagerTemplateDeployment@3
inputs:
deploymentScope: 'Resource Group'
subscriptionId: # Required subscription ID
action: 'Create Or Update Resource Group'
resourceGroupName: # Required resource group name
location: # Required when action == Create Or Update Resource Group
templateLocation: 'Linked artifact'
csmFile: # Required when TemplateLocation == Linked Artifact
csmParametersFile: # Optional
deploymentMode: 'Validation'
Вы также можете создать тестовую группу ресурсов для поиска ошибок предварительной проверки и развертывания .
Разверните ваш шаблон
Для развертывания файла Bicep и шаблона можно использовать любой из следующих способов:
Кнопка "Развертывание в Azure"
Note
Этот метод сейчас не поддерживает развертывание файлов Bicep.
Замените <url-encoded-path-to-azuredeploy-json> на URL-кодированную версию необработанного пути вашего файла azuredeploy.json в GitHub.
Ниже приведен пример использования разметки:
[](https://portal.azure.com/#create/Microsoft.Template/uri/<url-encoded-path-to-azuredeploy-json>)
Ниже приведен пример использования HTML:
<a href="https://portal.azure.com/#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 . Чтобы войти в Azure, необходимо сначала запустить Connect-AzAccount.
# 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 'West Europe'
# Deploy the template
New-AzResourceGroupDeployment -ResourceGroupName "MyResourceGroup" -TemplateFile main.bicep -Verbose
Чтобы протестировать это развертывание, попробуйте применить шаблон такого вида, который создает приложение-функцию в Windows с планом потребления.
Дальнейшие шаги
Дополнительные сведения о разработке и настройке Функций Azure: