Azure Functions'da işlev uygulamanız için kaynak dağıtımını otomatikleştirme

İşlev uygulaması dağıtımını otomatikleştirmek için Bicep dosyası veya Azure Resource Manager şablonu (ARM şablonu) kullanın. Dağıtım sırasında mevcut Azure kaynaklarını kullanabilir veya yenilerini oluşturabilirsiniz.

Hem kod olarak altyapı (IaC) hem de sürekli tümleştirme ve dağıtım (CI/CD) olmak üzere dağıtım otomasyonunu kullanarak üretim uygulamalarınıza şu avantajları getirebilirsiniz:

  • Tutarlılık: Ortamlar arasında tutarlı dağıtımlar sağlamak için kodda altyapınızı tanımlayın.
  • Sürüm Denetimi: Proje kodunuzla birlikte kaynak denetiminde altyapınızda ve uygulama yapılandırmalarınızda yapılan değişiklikleri izleyin.
  • Otomasyon: El ile yapılan hataları azaltan ve yayın sürecini kısaltan dağıtımı otomatikleştirin.
  • Ölçeklenebilirlik: Geliştirme, test ve üretim gibi birden çok ortam için altyapıyı kolayca çoğaltabilirsiniz.
  • Olağanüstü Durum Kurtarma: Hatalar veya geçişler sırasında altyapıyı hızla yeniden oluşturun.

Bu makalede, Azure Functions için Azure kaynaklarının ve dağıtım yapılandırmalarının oluşturulmasını otomatikleştirme işlemi gösterilmektedir. Proje kodunuzun sürekli dağıtımı hakkında daha fazla bilgi edinmek için bkz. Azure Functions için sürekli dağıtım.

Gerekli Azure kaynaklarını oluşturmak için kullanılacak şablon kodu, işlev uygulamanız için istenen barındırma seçeneklerine bağlıdır. Bu makale aşağıdaki barındırma seçeneklerini destekler:

Barındırma seçeneği Dağıtım türü Örnek şablonlar
Esnek Tüketim planı Code-only Bicep
ARM şablonu
Terraform
Premium plan Kod | Konteyner Bicep
ARM şablonu
Özel plan Kod | Konteyner Bicep
ARM şablonu
Azure Container Apps Container-only Bicep
Tüketim planı (eski) Code-only Bicep
ARM şablonu

Yeni sunucusuz işlev uygulamaları için Flex Consumption planını kullanın.
Tüketim planı eski bir barındırma planıdır. Mevcut uygulamalar için Flex Consumption planına geçin.

Makalenin üst kısmında barındırma planınızı seçtiğinizden emin olun.

Important

Tüketim planında Linux'ta kullanım süresi sonu v3 çalışma zamanını çalıştırmaya devam eden işlev uygulamaları 30 Eylül 2026'dan sonra çalışmayı durduruyor. Hizmet kesintisini önlemek için uygulamanızı v4 çalışma zamanına geçirin.

Tüketim planında Linux'ta işlev uygulamaları barındırma seçeneği 30 Eylül 2028'de kullanımdan kaldırılıyor. Linux Tüketim planı yeni özellikler veya dil sürümleri almayacak. Tüketim planında Windows çalışan uygulamalar şu anda etkilenmez. Uygulamalarınızı kullanımdan kaldırma tarihinden önce Esnek Tüketim planına geçirin.

Bu makaleyi kullanırken şu noktaları göz önünde bulundurun:

  • Örnekler, belirli kaynaklar için tek tek bölümler olarak gösterilir.

Gerekli kaynaklar

Azure Functions barındırılan bir dağıtım için bu kaynakları oluşturmanız veya yapılandırmanız gerekir:

Resource Requirement Sözdizimi ve özellikler referansı
Depolama hesabı Required Microsoft. Storage/storageAccounts
Application Insights bileşeni Recommended Microsoft. İçgörüler/bileşenler*
Barındırma planı Required Microsoft.Web/sunucularçiftliği
İşlev uygulaması Required Microsoft.Web/siteler

Azure Functions barındırılan bir dağıtım için bu kaynakları oluşturmanız veya yapılandırmanız gerekir:

Resource Requirement Sözdizimi ve özellikler referansı
Depolama hesabı Required Microsoft. Storage/storageAccounts
Application Insights bileşeni Recommended Microsoft. İçgörüler/bileşenler*
İşlev uygulaması Required Microsoft.Web/siteler

Azure Container Apps barındırılan dağıtım genellikle şu kaynaklardan oluşur:

Resource Requirement Sözdizimi ve özellikler referansı
Depolama hesabı Required Microsoft. Storage/storageAccounts
Application Insights bileşeni Recommended Microsoft. İçgörüler/bileşenler*
Yönetilen ortam Required Microsoft.App/managedEnvironments
İşlev uygulaması Required Microsoft.Web/siteler

*Application Insights örneğinizin kullanabileceği bir Log Analytics Çalışma Alanınız yoksa bu kaynağı da oluşturmanız gerekir.

Tek bir Bicep dosyasına veya ARM şablonuna birden çok kaynak dağıttığınızda, kaynakların oluşturulma sırası önemlidir. Bu gereksinim, kaynaklar arasındaki bağımlılıklardan kaynak alır. Bu tür bağımlılıklar için, bağımlı kaynaktaki dependsOn bağımlılığı tanımlamak için öğesini kullandığınızdan emin olun. Daha fazla bilgi için bkz. ARM şablonlarında kaynak dağıtma sırasını tanımlama veya Bicep'teki kaynak bağımlılıkları.

Prerequisites

  • Bu örnekler mevcut bir kaynak grubu bağlamında çalışır.
  • Hem Application Insights hem de depolama günlükleri için mevcut bir Azure Log Analytics çalışma alanı gerekir. Çalışma alanlarını hizmetler arasında paylaşabilirsiniz. Performansı geliştirmek için her coğrafi bölgede bir çalışma alanı oluşturun. Log Analytics çalışma alanı oluşturma örneği için bkz. Log Analytics çalışma alanı oluşturma. Tam çalışma alanı kaynak kimliğini Azure portalındaki bir çalışma alanı sayfasında Ayarlar>Özellikleri>Kaynak Kimliği altında bulabilirsiniz.
  • Bu makalede, Azure Container Apps'te zaten bir yönetilen ortam oluşturduğunuz varsayılır. Container Apps'te barındırılan bir işlev uygulaması oluşturmak için yönetilen ortamın hem adına hem de kimliğine ihtiyacınız vardır.

Depolama hesabı oluştur

Tüm işlev uygulamaları için bir Azure depolama hesabı gerekir. Blobları, tabloları, kuyrukları ve dosyaları destekleyen genel amaçlı bir hesaba ihtiyacınız vardır. Daha fazla bilgi için bkz. Azure Functions depolama hesabı gereksinimleri.

Important

Depolama hesabı, bazen uygulama kodunun kendisi de dahil olmak üzere önemli uygulama verilerini depolamak için kullanılır. Diğer uygulama ve kullanıcılardan depolama hesabına erişimi sınırlamanız gerekir.

Bu örnek bölüm Standart genel amaçlı v2 depolama hesabı oluşturur:

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
    minimumTlsVersion: 'TLS1_2'
  }
}

Daha fazla bağlam için şablonlar deposundaki tam main.bicep dosyasına bakın.

Daha fazla bağlam için örnek depodaki tam storage-PrivateEndpoint.bicep dosyasına bakın.

İşlev uygulamasının bu depolama hesabıyla bir bağlantısı olması gerekir. Bu bağlantıyı AzureWebJobsStorage ayarını kullanarak yapılandırın. Daha fazla bilgi için bkz. Uygulama yapılandırması.

Tip

Daha iyi güvenlik için depolama hesabı özelliklerinize ekleyin allowSharedKeyAccess: false ve bağlantı dizeleri yerine yönetilen kimlik tabanlı bağlantıları kullanın. Bu makaledeki Esnek Tüketim planı örnekleri, kimlik tabanlı ayarları ve sistem tarafından atanan bir yönetilen kimliği içeren bu yaklaşımı kullanır. Daha fazla bilgi için Bir kimlikle konak depolama alanına bağlanma makalesine bakın.

Tip

Daha iyi güvenlik için depolama hesabınızda allowSharedKeyAccess yerine false olarak ayarlayın ve bağlantı dizeleri yerine yönetilen kimlik tabanlı bağlantıları kullanın. Daha fazla bilgi için Bir kimlikle konak depolama alanına bağlanma makalesine bakın.

Important

Elastik Premium ve Tüketim planları içerik paylaşımı için Azure Dosyalar'ı kullanır ve Azure Dosyalar şu anda yönetilen kimlik tabanlı bağlantıları desteklemez. Bu sınırlama, bu planların depolama hesabına paylaşılan anahtar erişimi gerektirdiği anlamına gelir, bu yüzden allowSharedKeyAccess öğesini false olarak ayarlamayın. Bağlantı dizelerini kullanmanız gerektiğinde, bunları Azure Key Vault'ta depolayın ve anahtarları doğrudan depolamak yerine uygulama ayarlarınızda Key Vault başvurularını kullanın. Azure Dosyalar bağımlılığını kaldırmak istiyorsanız bkz. Azure Dosyalar olmadan uygulama oluşturma.

Dağıtım kapsayıcısı

Flex Consumption planında çalışan bir uygulamaya dağıtmak için dağıtım kaynağı olarak Azure Blob Depolama'da bir kapsayıcıya ihtiyacınız vardır. Varsayılan depolama hesabını kullanabilir veya ayrı bir depolama hesabı belirtebilirsiniz. Daha fazla bilgi için bkz . Dağıtım ayarlarını yapılandırma.

Uygulamanızı oluştururken dağıtımlar için kullanılan kapsayıcı da dahil olmak üzere bu dağıtım hesabını yapılandırmanız gerekir. Dağıtımları yapılandırma hakkında daha fazla bilgi edinmek için bkz . Dağıtım kaynakları.

Bu örnekte, depolama hesabında nasıl kapsayıcı oluşturulacağı gösterilmektedir:

}

// Azure Functions Flex Consumption
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'
          }

Bu örnek, depolama hesabıyla birlikte blob depolama kapsayıcısını oluşturmak için AVM'nin depolama hesapları için nasıl kullanılacağını göstermektedir. Bağlam içindeki kod parçacığı için bkz. bu dağıtım örneği.

Diğer dağıtım ayarlarını uygulamanın kendisiyle yapılandırın.

Depolama günlüklerini etkinleştirme

Depolama hesabı önemli işlev uygulaması verileri için kullanıldığından, söz konusu içeriğin değiştirilmesi için hesabı izleyin. Depolama hesabınızı izlemek için Azure Depolama için Azure İzleyici kaynak günlüklerini yapılandırın. Bu örnek bölümde, bu günlükler için hedef olarak myLogAnalytics adlı bir Log Analytics çalışma alanı kullanılır.

resource blobService 'Microsoft.Storage/storageAccounts/blobServices@2023-05-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
      }
    ]
  }
}

Daha sonra tanımlanan Application Insights kaynağı için aynı çalışma alanını kullanabilirsiniz. Bu günlüklerle nasıl çalışılacağı da dahil olmak üzere daha fazla bilgi için bkz. Azure Depolama İzleme.

Application Insights oluşturma

İşlev uygulaması yürütmelerinizi izlemek için Application Insights'i kullanın. Application Insights artık paylaşılabilen bir Azure Log Analytics çalışma alanı gerektiriyor. Bu örneklerde, var olan bir çalışma alanını kullandığınız ve çalışma alanı için tam kaynak kimliğine sahip olduğunuz varsayılır. Daha fazla bilgi için bkz. Azure Log Analytics çalışma alanı.

Bu örnek bölümde, Microsoft.Insights/components türü ve web türü ile Application Insights kaynağını tanımlayın:

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>'
  }
}

Daha fazla bağlam için şablonlar deposundaki tam main.bicep dosyasına bakın.

Uygulama ayarını kullanarak APPLICATIONINSIGHTS_CONNECTION_STRING işlev uygulamasına bağlantı sağlamanız gerekir. Daha fazla bilgi için bkz. Uygulama yapılandırması.

Bu makaledeki örnekler, oluşturulan örneğin bağlantı dizesi değerini alır. Eski sürümler bunun yerine artık önerilmemiş olan izleme anahtarını ayarlamak için kullanabilir APPINSIGHTS_INSTRUMENTATIONKEY .

Barındırma planını oluşturma

Azure İşlevleri Esnek Tüketim planı, Premium planı veya Ayrılmış (App Service) planında barındırılan uygulamalar için barındırma planını açıkça tanımlamanız gerekir.

Flex Consumption, sunucusuz faturalama modelini kullandığınız ödeme için Tüketim ödemesini temel alan Linux tabanlı bir barındırma planıdır. Planda özel ağ desteği, örnek bellek boyutu seçimi ve geliştirilmiş yönetilen kimlik desteği bulunur.

Esnek Tüketim planı özel bir kaynak türüdür serverfarm . FC1 özelliğindeki Name özellik değeri için sku değeri tier olan FlexConsumption kullanarak belirtebilirsiniz.

Bu örnek bölüm bir Esnek Tüketim planı oluşturur:

  scaleAndConcurrency: {
    maximumInstanceCount: maximumInstanceCount
    instanceMemoryMB: instanceMemoryMB
  }
  runtime: { 
    name: functionAppRuntime
    version: functionAppRuntimeVersion
  }
}
siteConfig: {
  alwaysOn: false
}
configs: [{
  name: 'appsettings'
  properties:{

Bu örnekte App Service planları için AVM kullanılır. Bağlam içindeki kod parçacığı için bkz. bu dağıtım örneği.

Flex Tüketim planı şu anda yalnızca Linux'ı desteklediğinden reserved özelliğini trueolarak da ayarlamanız gerekir.

Premium plan, Tüketim planıyla aynı ölçeklendirmeyi sunar, ancak ayrılmış kaynaklar ve ek özellikler içerir. Daha fazla bilgi edinmek için bkz. Azure Functions Premium Plan.

Premium plan özel bir kaynak türüdür serverfarm . Özelliğindeki özellik değeri EP1 için EP2 , EP3veya Name kullanarak skubelirtebilirsiniz. İşlev barındırma planını tanımlama yönteminiz, işlev uygulamanızın Windows veya Linux üzerinde çalışıp çalışmadığına bağlıdır. Bu örnek bölüm bir EP1 plan oluşturur:

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

Daha fazla bağlam için şablonlar deposundaki tam main.bicep dosyasına bakın.

Nesne hakkında sku daha fazla bilgi için örnek şablonlara bakın SkuDefinition veya gözden geçirin.

Ayrılmış (App Service) planında, işlev uygulamanız web uygulamalarına benzer şekilde App Service planlarındaki Temel, Standart ve Premium SKU'larda ayrılmış sanal makinelerde çalışır. Daha fazla bilgi için bkz. Ayrılmış plan.

Örnek Bicep dosyası/Azure Resource Manager şablonu için bkz. Azure App Service planında Function uygulaması.

İşlevler'de Ayrılmış plan, bir kaynak tarafından tanımlanan normal bir serverfarm App Service planıdır. En azından name değeri sağlamanız gerekir. Desteklenen plan adlarının listesi için Ayrılmış plan için desteklenen değerlerin geçerli listesinin ayarına --sku bakınaz appservice plan create.

Barındırma planını tanımlama yönteminiz, işlev uygulamanızın Windows veya Linux üzerinde çalışıp çalışmadığına bağlıdır:

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

Daha fazla bağlam için şablonlar deposundaki tam main.bicep dosyasına bakın.

Barındırma planını oluşturma

Tüketim barındırma planı kaynağını açıkça tanımlamanız gerekmez. Bu kaynak tanımını atladığınızda, işlev uygulaması kaynağının kendisini oluşturduğunuzda portal bölge bazında otomatik olarak bir plan oluşturur veya seçer.

Tüketim planını özel bir kaynak türü serverfarm olarak açıkça tanımlayabilirsiniz. computeMode ve sku özelliklerini Dynamic olarak ayarlayın. Bu örnek bölümde, bir tüketim planının açıkça nasıl tanımlanacağı gösterilmektedir. Barındırma planı tanımlama yönteminiz, işlev uygulamanızın Windows veya Linux üzerinde çalışıp çalışmadığına bağlıdır.

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

Daha fazla bağlam için şablonlar deposundaki tam main.bicep dosyasına bakın.

İşlev uygulaması oluşturma

İşlev uygulaması kaynağını, Microsoft.Web/sites türünde bir kaynak ve kind özelliği içeren bir functionapp olarak tanımlayın.

İşlev uygulaması kaynağını tanımlama şekliniz, Linux'ta mı yoksa Windows'da mı barındırdığınıza bağlıdır:

Windows çalışırken gereken uygulama ayarlarının listesi için bkz. Uygulama yapılandırması. Örnek Bicep dosyası veya Azure Resource Manager şablonu için, Tüketim planı şablonunda Windows'ta barındırılan işlev uygulaması şablonuna bakın.

Windows çalışırken gereken uygulama ayarlarının listesi için bkz. Uygulama yapılandırması.

Flex Consumption, Bicep ve ARM şablonu dağıtımlarında kullanılan birçok standart uygulama ayarı ve site yapılandırma özelliği yerine geçer. Daha fazla bilgi için bkz. Uygulama yapılandırması.

        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'
    }
    }]
  }
}

// Consolidated Role Assignments
module rbacAssignments 'rbac.bicep' = {
  name: 'rbacAssignments'
  scope: rg
  params: {
    storageAccountName: storage.outputs.name
    appInsightsName: applicationInsights.outputs.name
    managedIdentityPrincipalId: functionApp.outputs.?systemAssignedMIPrincipalId ?? ''
    userIdentityPrincipalId: principalId
    allowUserIdentityPrincipal: !empty(principalId)
  }
}

// Outputs
output AZURE_LOCATION string = location
output AZURE_TENANT_ID string = tenant().tenantId
output AZURE_FUNCTION_NAME string = functionApp.outputs.name
output APPLICATIONINSIGHTS_CONNECTION_STRING string = applicationInsights.outputs.connectionString

Bu örnekte işlev uygulamaları için AVM kullanılır. Bağlam içindeki kod parçacığı için bkz. bu dağıtım örneği.

Note

İsteğe bağlı olarak Tüketim planınızı tanımlamayı seçerseniz, uygulamadaki özelliği planın kaynak kimliğine işaret etmesi için ayarlamanız serverFarmId gerekir. İşlev uygulamasının plana da referans veren bir dependsOn ayara sahip olduğundan emin olun. Açıkça bir plan tanımlamadıysanız sizin için bir plan oluşturulur.

Uygulamadaki serverFarmId özelliğini, planın kaynak kimliğine işaret eden şekilde ayarlayın. İşlev uygulamasının plana da referans veren bir dependsOn ayara sahip olduğundan emin olun.

resource functionAppName_resource 'Microsoft.Web/sites@2024-04-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: '~20'
        }
      ]
    }
  }
}

Uçtan uca eksiksiz bir örnek için bu main.bicep dosyasına bakın.

resource functionApp 'Microsoft.Web/sites@2024-04-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: '~20'
        }
      ]
    }
  }
}

Uçtan uca eksiksiz bir örnek için bu main.bicep dosyasına bakın.

Dağıtım kaynakları

Uygulama oluştururken, ona dağıtılmak üzere belirli bir Linux kapsayıcısı istemek için linuxFxVersion site ayarını kullanın. Özel bir depodaki görüntülere erişmek için daha fazla ayara ihtiyacınız vardır. Daha fazla bilgi için bkz. Uygulama yapılandırması.

Important

Kendi kapsayıcılarınızı oluştururken kapsayıcınızın temel görüntüsünü desteklenen en son temel görüntüye güncel tutmanız gerekir. Azure Functions için desteklenen temel görüntüler dile özeldir. Azure Functions temel görüntü depolarına bakın.

İşlevler ekibi, bu temel görüntüler için aylık güncelleştirmeleri yayımlamaya kararlıdır. Düzenli güncelleştirmeler, hem İşlevler çalışma zamanı hem de diller için en son ikincil sürüm güncelleştirmelerini ve güvenlik düzeltmelerini içerir. Kapsayıcınızı düzenli olarak en son temel görüntüden güncelleştirmeli ve kapsayıcınızın güncelleştirilmiş sürümünü yeniden dağıtmalısınız. Daha fazla bilgi için bkz . Özel kapsayıcıları koruma.

Bicep dosyanız veya ARM şablonunuz isteğe bağlı olarak işlev kodunuz için bir dağıtım da tanımlayabilir. Bu dağıtım şu yöntemleri içerebilir:

Esnek Tüketim planı, proje kodunuzu dağıtım kapsayıcısı olarak bilinen bir blob depolama kapsayıcısında zip sıkıştırılmış paket dosyasında tutar. Hem depolama hesabını hem de dağıtım için kullanılan kapsayıcıyı yapılandırabilirsiniz. Daha fazla bilgi için bkz . Dağıtım.

Kod paketinizi dağıtım kapsayıcısına yayımlamak için tek bir dağıtım kullanmanız gerekir. ARM şablonu veya Bicep dağıtımı sırasında, uzantıyı kullanan /onedeploy bu adımı gerçekleştirebilirsiniz. Bunun yerine paketinizi doğrudan kapsayıcıya yüklemeyi seçerseniz paket otomatik olarak dağıtılmaz.

Dağıtım kapsayıcısı

Dağıtımlar için kullanılan belirli depolama hesabını ve kapsayıcıyı, kimlik doğrulama yöntemini ve kimlik bilgilerini sitenin functionAppConfig.deployment.storage öğesindeki properties bölümünde ayarlayın. Uygulamayı oluşturduğunuzda kapsayıcı ve tüm uygulama ayarları mevcut olmalıdır. Depolama kapsayıcısının nasıl oluşturulacağını gösteren bir örnek için bkz . Dağıtım kapsayıcısı.

Bu örnek, dağıtımın başka bir yerinde oluşturulan belirtilen blob depolama kapsayıcısına erişmek için sistem tarafından atanan yönetilen kimliği kullanır:

// Consolidated Role Assignments
module rbacAssignments 'rbac.bicep' = {
  name: 'rbacAssignments'
  scope: rg
  params: {
    storageAccountName: storage.outputs.name
    appInsightsName: applicationInsights.outputs.name
    managedIdentityPrincipalId: functionApp.outputs.?systemAssignedMIPrincipalId ?? ''
    userIdentityPrincipalId: principalId
    allowUserIdentityPrincipal: !empty(principalId)
  }
}

// Outputs
output AZURE_LOCATION string = location
output AZURE_TENANT_ID string = tenant().tenantId
output AZURE_FUNCTION_NAME string = functionApp.outputs.name
output APPLICATIONINSIGHTS_CONNECTION_STRING string = applicationInsights.outputs.connectionString

Bu örnekte işlev uygulamaları için AVM kullanılır. Bağlam içindeki kod parçacığı için bkz. bu dağıtım örneği.

Yönetilen kimlikleri kullandığınızda, bu örnekte gösterildiği gibi işlev uygulamasının kimliği kullanarak depolama hesabına erişmesini de etkinleştirmeniz gerekir:

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'
  }
}

Bu örnekte, kaynak kapsamlı rol ataması için AVM kullanılır. Bağlam içindeki kod parçacığı için bkz. bu dağıtım örneği.

Bu örnekte, atadığınız rolün GUID değerini bilmeniz gerekir. Herhangi bir kolay rol adı için bu kimlik değerini almak için, bu örnekte gösterildiği gibi az role definition list komutunu kullanın:

az role definition list --output tsv --query "[?roleName=='Storage Blob Data Owner'].{name:name}"

Yönetilen kimlikler yerine bir bağlantı dizesi kullandığınızda, authentication.type değerini StorageAccountConnectionString olarak ayarlayın ve authentication.storageAccountConnectionStringName değerini dağıtım depolama hesabı bağlantı dizesini içeren uygulama ayarının adı olarak ayarlayın.

Dağıtım paketi

Esnek Tüketim planı, kod projenizi dağıtmak için tek bir dağıtım kullanır. Kod paketinin kendisi, diğer İşlev barındırma planlarında zip dağıtımı için kullandığınız paketle aynıdır. Ancak, paket dosyasının adı olmalıdır released-package.zip.

Şablonunuza tek bir dağıtım paketi eklemek için dağıtım paketini içeren uzak URL'nin kaynak tanımını kullanın /onedeploy . İşlevler ana bilgisayarının hem bu uzak paket kaynağına hem de dağıtım kapsayıcısına erişebilmesi gerekir.

Bu örnek, var olan bir uygulamaya tek bir dağıtım kaynağı ekler:

@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 dosyanız veya ARM şablonunuz isteğe bağlı olarak bir zip dağıtım paketi kullanarak işlev kodunuz için bir dağıtım tanımlayabilir.

Azure Resource Manager'ı kullanarak uygulamanızı başarıyla dağıtmak için, kaynakların Azure'da nasıl dağıtıldığından anlamanız gerekir. Çoğu örnekte, siteConfig kullanarak üst düzey yapılandırmaları uygularsınız. İşlevler çalışma zamanına ve dağıtım altyapısına bilgi aktardıkları için bu yapılandırmaları en üst düzeyde ayarlayın. Dağıtım motoru, alt sourcecontrols/web kaynağı uygulamadan önce üst düzey bilgilere ihtiyaç duyar. Bu ayarları alt düzey config/appSettings kaynakta yapılandırabilirsiniz ancak bazı durumlarda işlev uygulamanızın uygulanmadan önceconfig/appSettings dağıtılması gerekir.

Zip dağıtım paketi

zip dağıtımı, işlev uygulama kodunuzu dağıtmanın önerilen yoludur. Varsayılan olarak, zip dağıtımını kullanan işlevler dağıtım paketinin kendisinde çalıştırılır. Dağıtım paketi gereksinimleri de dahil olmak üzere daha fazla bilgi için bkz. Azure Functions için Zip dağıtımı. Kaynak dağıtım otomasyonunu kullanırken, Bicep veya ARM şablonunuzdaki .zip dağıtım paketine başvurabilirsiniz.

Şablonunuzda zip dağıtımını kullanmak için uygulamadaki ayarı olarak WEBSITE_RUN_FROM_PACKAGE ayarlayın 1 ve kaynak tanımını ekleyin/zipDeploy.

Linux'ta tüketim planı için dağıtım paketinin URI'sini WEBSITE_RUN_FROM_PACKAGE'de gösterildiği gibi doğrudan ayarında ayarlayın.

Bu örnek, mevcut bir uygulamaya zip dağıtım kaynağı ekler:

@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@2024-04-01' = {
  name: '${functionAppName}/ZipDeploy'
  location: location
  properties: {
    packageUri: packageUri
  }
}

Şablonunuza zip dağıtım kaynaklarını dahil ederken aşağıdaki noktaları göz önünde bulundurun:

  • , İşlevler'in packageUri erişebileceği bir konum olmalıdır. Paylaşılan erişim imzası (SAS) ile Azure Blob depolama kullanmayı göz önünde bulundurun. SAS süresi dolduktan sonra, İşlevler artık dağıtımlar için paylaşıma erişemez. SAS'ınızı yeniden oluşturduğunuzda, WEBSITE_RUN_FROM_PACKAGE ayarını yeni URI değeriyle güncellemeyi unutmayın.

  • URI'ye ayarlarken WEBSITE_RUN_FROM_PACKAGE tetikleyicileri el ile eşitlemeniz gerekir.

  • Ayarları eklerken veya güncelleştirirken koleksiyondaki appSettings tüm gerekli uygulama ayarlarını her zaman ayarlayın. Güncelleştirme, açıkça ayarlamadığınız mevcut ayarları kaldırır. Daha fazla bilgi için bkz. Uygulama yapılandırması.

  • İşlevler, paket dağıtımları için Web Deploy (msdeploy) desteği sağlamaz. Bunun yerine dağıtım işlem hatlarınızda ve otomasyonunuzda zip dağıtımını kullanmanız gerekir. Daha fazla bilgi için Azure Functions için Zip dağıtımı bölümüne bakınız.

Uzaktan yapılar

Dağıtım işlemi, kullandığınız .zip dosyasının veya zip dağıtımının çalışmaya hazır bir uygulama içerdiğini varsayar. Bu varsayım, varsayılan olarak hiçbir özelleştirmenin çalıştırılamdığı anlamına gelir.

Bazı senaryolarda uygulamanızı uzaktan yeniden oluşturmanız gerekir. Örneklerden biri, Bir Windows bilgisayarda geliştirdiğiniz Python veya Node.js uygulamalarına Linux'a özgü paketleri eklemeniz gerektiği durumlardır. Bu durumda, İşlevler'i zip dağıtımından sonra kodunuz üzerinde uzaktan derleme gerçekleştirecek şekilde yapılandırabilirsiniz.

Uzak derleme isteğinde bulunma şekliniz, dağıttığınız işletim sistemine bağlıdır:

Bir uygulamayı Windows'a dağıttığınızda, dağıtım işlemi C# uygulamaları veya dotnet restore Node.js uygulamaları gibi npm install dile özgü komutları çalıştırır.

Sürekli tümleştirmede elde edilen derleme işlemlerini etkinleştirmek için, dağıtım kodunuzda SCM_DO_BUILD_DURING_DEPLOYMENT=true öğesini uygulama ayarlarınıza ekleyin ve WEBSITE_RUN_FROM_PACKAGE ayarını tamamen kaldırın.

Linux kapsayıcıları

Azure Functions Premium veya Ayrılmış plana containerized işlev uygulaması dağıtıyorsanız, yapmanız gereken:

Bazı ayarlar eksikse, uygulama sağlama şu HTTP/500 hatasıyla başarısız olabilir:

Function app provisioning failed.

Daha fazla bilgi için bkz. Uygulama yapılandırması.

resource functionApp 'Microsoft.Web/sites@2024-04-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: '~20'
        }
        {
          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
  ]
}

containerized işlevlerini Azure Container Apps'a dağıtırken şablonunuz şunları yapmalıdır:

  • kind alanını değerine functionapp,linux,container,azurecontainerappsayarlayın.
  • managedEnvironmentId site özelliğini Container Apps ortamının tam nitelikli URI'sine ayarlayın.
  • Siteyle aynı anda bir dependsOn kaynağı oluştururken sitenin Microsoft.App/managedEnvironments koleksiyonuna bir kaynak bağlantısı ekleyin.

Özel bir kapsayıcı kayıt defterinden mevcut container Apps ortamına dağıtılan kapsayıcılı işlev uygulamasının tanımı şu örneğe benzer olabilir:

resource functionApp 'Microsoft.Web/sites@2024-04-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
  ]
}

Uygulama yapılandırması

Flex Consumption planında işlev uygulamanızı iki tür özellikle Azure yapılandırabilirsiniz:

Configuration Microsoft.Web/sites özelliği
Uygulama yapılandırması functionAppConfig
Uygulama ayarları siteConfig.appSettings koleksiyon

Bu uygulama yapılandırmalarını functionAppConfig içinde yönetirsiniz:

Behavior ayarı: functionAppConfig
Her zaman hazır örnekler scaleAndConcurrency.alwaysReady
Dağıtım kaynağı deployment
Örnek boyutu scaleAndConcurrency.instanceMemoryMB
HTTP tetikleyici eşzamanlılığı scaleAndConcurrency.triggers.http.perInstanceConcurrency
Dil yürütme ortamı runtime.name
Dil versiyonu runtime.version
En fazla örnek sayısı scaleAndConcurrency.maximumInstanceCount
Site güncelleştirme stratejisi siteUpdateStrategy.type

Flex Consumption planı şu uygulama ayarlarını da destekler:

İşlevler, Azure'de işlev uygulamanızı yapılandırmak için aşağıdaki seçenekleri sağlar:

Configuration Microsoft.Web/sites özelliği
Site ayarları siteConfig
Uygulama ayarları siteConfig.appSettings koleksiyon

Bu site ayarları, siteConfig mülkünde gereklidir.

Bu site ayarları yalnızca bir Azure Container Registry örneğinden görüntüyü almak için yönetilen kimlikler kullanılırken gereklidir:

Bu uygulama ayarları belirli bir işletim sistemi ve barındırma seçeneği için gereklidir (veya önerilir):

Kapsayıcı dağıtımları için bu uygulama ayarları gereklidir:

Bu ayarlar yalnızca özel bir kapsayıcı kayıt defterinden dağıtım yaparken gereklidir:

Bicep dosyaları veya ARM şablonlarını kullanarak site ve uygulama ayarlarıyla çalışırken şu noktaları göz önünde bulundurun:

  • Otomatik dağıtımda WEBSITE_CONTENTSHARE ayarlamayı ne zaman gerçekleştireceğinizi göz önünde bulundurun. Ayrıntılı yönergeler için WEBSITE_CONTENTSHARE referansına bakın.
  • Kapsayıcı dağıtımları için, uygulama içeriğiniz kapsayıcının kendisinde sağlandığından WEBSITES_ENABLE_APP_SERVICE_STORAGE değerini false olarak da ayarlayın.
  • Uygulama ayarlarınızı, bu makaledeki siteConfig/appSettings örneklerde gösterildiği gibi, her zaman oluşturduğunuz Microsoft.Web/sites kaynağın koleksiyonu olarak tanımlayın. Bu tanım, işlev uygulamanızın çalışması için gereken ayarların ilk başlangıçta kullanılabilir olmasını garanti eder.

  • Şablonları kullanarak uygulama ayarlarını eklerken veya güncelleştirirken, güncelleştirmeye tüm mevcut ayarları eklediğinizden emin olun. Altta yatan güncelleştirme REST API çağrıları kaynağın tamamını /config/appsettings olarak değiştirdiğinden, bunu yapmalısınız. Mevcut ayarları kaldırırsanız işlev uygulamanız çalışmaz. Tek tek uygulama ayarlarını program aracılığıyla güncelleştirmek için bunun yerine Azure CLI, Azure PowerShell veya Azure portalını kullanarak bu değişiklikleri yapabilirsiniz. Daha fazla bilgi için bkz . Uygulama ayarlarıyla çalışma.

  • Mümkün olduğunda, bağlantı dahil olmak üzere AzureWebJobsStorage diğer Azure hizmetlerine yönelik yönetilen kimlik tabanlı bağlantıları kullanın. Daha fazla bilgi için bkz . Kimlik tabanlı bağlantı yapılandırma.

Slot dağıtımları

İşlevler, kodunuzun farklı sürümlerini işlev uygulamanızdaki benzersiz uç noktalara dağıtmanıza olanak tanır. Bu seçenek, üretimde çalışan işlevleri etkilemeden işlev güncelleştirmelerini geliştirmeyi, doğrulamayı ve dağıtmayı kolaylaştırır. Dağıtım yuvaları Azure App Service özelliğidir. Hosting planınıza bağlı olarak kullanılabilir yuva sayısı değişir. Daha fazla bilgi için Azure İşlevleri dağıtım yuvaları bölümüne bakın.

Bir slot kaynağını, bir Function App kaynağı (Microsoft.Web/sites) ile aynı şekilde tanımlarsınız, ancak bunun yerine Microsoft.Web/sites/slots kaynak tanımlayıcısını kullanırsınız. Premium planda hem üretim hem de hazırlama yuvası oluşturan örnek bir dağıtım (hem Bicep hem de ARM şablonlarında) için bkz. Dağıtım Yuvası ile Azure İşlev Uygulaması.

Şablonları kullanarak yuvaları değiştirme hakkında bilgi edinmek için Resource Manager şablonlarıyla otomasyon kısmına bakın.

Slot dağıtımlarıyla çalışırken aşağıdaki noktaları göz önünde bulundurun:

  • Dağıtım yuvası tanımında WEBSITE_CONTENTSHARE ayarı açıkça ayarlamayın. Dağıtım yuvasındaki uygulama oluşturma işlemi sizin için bu ayarı oluşturur.

  • Yerleri değiştirdiğinizde, bazı uygulama ayarları değiştirilmekte olan kodla değil, yerle birlikte kaldıkları için "yapışkan" olarak kabul edilir. Bu tür bir yuva ayarını , şablonunuzdaki belirli uygulama ayarı tanımına ekleyerek "slotSetting":true tanımlayabilirsiniz. Daha fazla bilgi için bkz. Ayarları yönetme.

Güvenli dağıtımlar

İşlev uygulamanızı, sanal ağlarla tümleştirerek bir veya daha fazla kaynağın güvenliğini sağladığınız bir dağıtımda oluşturabilirsiniz. Kaynak Microsoft.Web/sites/networkConfig , işlev uygulamanız için sanal ağ tümleştirmesini tanımlar. Bu tümleştirme hem başvuruda bulunan işlev uygulamasına hem de sanal ağ kaynaklarına bağlıdır. İşlev uygulamanız özel uç noktalar ve yollar gibi diğer özel ağ kaynaklarına da bağlı olabilir. Daha fazla bilgi için bkz. Azure Functions ağ seçenekleri.

Bu projeler, ağ erişim kısıtlamaları dahil olmak üzere işlev uygulamalarınızı bir sanal ağa dağıtmaya yönelik Bicep tabanlı örnekler sağlar:

Güvenli bir depolama hesabı kullanan bir dağıtım oluşturduğunuzda, WEBSITE_CONTENTSHARE ayarını açıkça belirtmeniz ve bu ayarda adı geçen dosya paylaşım kaynağını oluşturmanız gerekir. Bu örnekte gösterildiği gibi değerini Microsoft.Storage/storageAccounts/fileServices/shareskullanarak bir WEBSITE_CONTENTSHARE kaynak oluşturduğunuzdan emin olun (ARM şablonu|Bicep dosyası). Site özelliğini vnetContentShareEnabled true olarak da ayarlamanız gerekir.

Note

Bu ayarlar güvenli depolama hesabı kullanan bir dağıtımın parçası olmadığında, dağıtım doğrulaması sırasında şu hatayı görürsünüz: Could not access storage account using provided connection string.

Bu projeler, ağ erişim kısıtlamaları dahil olmak üzere işlev uygulamalarınızı sanal ağa dağıtmaya yönelik hem Bicep hem de ARM şablonu örnekleri sağlar:

Kısıtlı senaryo Description
Sanal ağ tümleştirmesi ile işlev uygulaması oluşturma İşlev uygulamanızı, bu ağdaki kaynaklara tam erişime sahip bir sanal ağda oluşturursunuz. İşlev uygulamanıza gelen ve giden erişim kısıtlanmış değildir. Daha fazla bilgi için bkz . Sanal ağ tümleştirmesi.
Güvenli depolama hesabına erişen bir işlev uygulaması oluşturun Oluşturduğunuz işlev uygulaması, İşlevler'in özel uç noktaları kullanarak eriştiği güvenli bir depolama hesabı kullanır. Daha fazla bilgi için bkz. Depolama hesabınızı bir sanal ağ ile kısıtlama.
Özal uç noktaları kullanan bir işlev uygulaması ve depolama hesabı oluşturun Oluşturduğunuz işlev uygulamasına yalnızca özel uç noktalar kullanılarak erişilebilir ve depolama kaynaklarına erişmek için özel uç noktaları kullanır. Daha fazla bilgi için bkz . Özel uç noktalar.

Kısıtlı ağ ayarları

İşlev uygulamanızda ağ kısıtlamaları olduğunda da bu ayarları kullanmanız gerekebilir:

Setting Value Description
WEBSITE_CONTENTOVERVNET 1 Depolama hesabı bir sanal ağ ile sınırlı olduğunda işlev uygulamanızın ölçeklendirilmesini sağlayan uygulama ayarı. Daha fazla bilgi için bkz. Depolama hesabınızı bir sanal ağ ile kısıtlama.
vnetrouteallenabled 1 İşlev uygulamasından gelen tüm trafiği sanal ağı kullanmaya zorlayan site ayarı. Daha fazla bilgi için bkz . Bölgesel sanal ağ tümleştirmesi. Bu site ayarı, uygulama ayarının WEBSITE_VNET_ROUTE_ALLyerini alır.

Ağ kısıtlamalarıyla ilgili dikkat edilmesi gerekenler

Özel uç noktalar üzerinden depolama hesabına erişimi kısıtladığınızda, depolama hesabına portaldan veya sanal ağ dışındaki herhangi bir cihazdan erişemezsiniz. Varsayılan ağ erişim kuralını yöneterek depolama hesabında güvenli IP adresinize veya sanal ağınıza erişim verebilirsiniz.

İşlev erişim anahtarları

Konak düzeyinde işlev erişim anahtarlarını Azure kaynakları olarak tanımlayın. Bu yaklaşım ARM şablonlarınızda ve Bicep dosyalarınızda konak anahtarları oluşturmanıza ve yönetmenize olanak tanır. Konak anahtarı, Microsoft.Web/sites/host/functionKeys türünde bir kaynak olarak tanımlanır. Aşağıdaki örnek, bir işlev uygulaması oluşturulduğunda my_custom_key adlı bir konak düzeyinde erişim anahtarı oluşturur.

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'))
  ]
}

Bu örnekte parametresi, name yeni işlev uygulamasının adıdır. Anahtarın yeni işlev uygulamasıyla oluşturulduğunu garanti etmek için bir dependsOn ayar eklemeniz gerekir. Son olarak, properties konak anahtarının nesnesi belirli bir value anahtarı ayarlamak için kullanabileceğiniz bir özellik de içerebilir.

Özelliğini ayarlamadığınızda value , kaynak oluşturulduğunda İşlevler sizin için otomatik olarak yeni bir anahtar oluşturur ve bu önerilir. Erişim anahtarlarıyla çalışmaya yönelik en iyi güvenlik yöntemleri de dahil olmak üzere erişim anahtarları hakkında daha fazla bilgi edinmek için bkz. Azure Functions'da erişim anahtarlarıyla çalışma.

Şablonunuzu oluşturma

Bicep veya ARM şablonlarına sahip uzmanlar, basit bir metin düzenleyicisi kullanarak dağıtımlarını el ile kodlayabilir. Geri kalanımız için çeşitli seçenekler geliştirme sürecini kolaylaştırır:

  • Visual Studio Code: Uzantılar, hem Bicep dosyaları hem de ARM şablonlarıyla çalışmanıza yardımcı olmak için kullanılabilir. Kodunuzun doğru olduğundan emin olmak için bu araçları kullanın. Bazı temel doğrulamalar sağlar.

  • Azure portal: portalda işlev uygulamanızı ve ilgili kaynakları oluştururken, son Review + create ekranında Otomasyon için şablon indir bağlantısı bulunur.

    şablon bağlantısını Azure portalındaki Azure Functions oluşturma işleminden indirin.

    Bu bağlantı, portalda seçtiğiniz seçeneklere göre oluşturulan ARM şablonunu gösterir. Birçok yeni kaynak içeren bir işlev uygulaması oluştururken bu şablon biraz karmaşık görünebilir. Ancak ARM şablonunuzun nasıl görünebileceğine ilişkin iyi bir başvuru sağlayabilir.

Şablonunuzu doğrulama

Dağıtım şablonu dosyanızı el ile oluşturduğunuzda, dağıtımdan önce şablonunuzu doğrulamanız önemlidir. Tüm dağıtım yöntemleri şablon söz diziminizi doğrular ve aşağıdaki JSON biçimli örnekte gösterildiği gibi bir validation failed hata iletisi oluşturur:

{"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":""}}]}}

Dağıtımdan önce şablonunuzu doğrulamak için aşağıdaki yöntemleri kullanın:

Aşağıdaki Azure kaynak grubu dağıtımı v2 görevi, Azure Pipelines'a şablonun doğrulanmasını talimat verir.

- 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'

Ayrıca, denetim öncesi ve dağıtım hatalarını bulmak için bir test kaynak grubu da oluşturabilirsiniz.

Şablonunuzu dağıtın

Bicep dosyanızı ve şablonunuzu dağıtmak için aşağıdaki yöntemlerden birini kullanın:

Azure'a Dağıt Düğmesi

Note

Bu yöntem şu anda Bicep dosyalarını dağıtmayı desteklemez.

<url-encoded-path-to-azuredeploy-json> değerini GitHub dosyanızın ham yolunun azuredeploy.json sürümüyle değiştirin.

Markdown kullanan bir örnek aşağıda verilmişti:

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

AŞAĞıDA HTML kullanan bir örnek verilmişti:

<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 kullanarak dağıtma

Aşağıdaki PowerShell komutları bir kaynak grubu oluşturur ve gerekli kaynaklarıyla bir işlev uygulaması oluşturan bir Bicep dosyası veya ARM şablonu dağıtır. Komutları yerel olarak çalıştırmak için Azure PowerShell'in yüklü olması gerekir. Azure'da oturum açmak için önce komutunu çalıştırın 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

Bu dağıtımı test etmek için, Tüketim planında Windows'ta işlev uygulaması oluşturan bunun gibi bir şablon kullanın.

Sonraki Adımlar

Azure Functions geliştirme ve yapılandırma hakkında daha fazla bilgi edinin.