Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
İşlev uygulamanızı dağıtma işlemini otomatikleştirmek için bicep dosyası veya Azure Resource Manager (ARM) şablonu kullanabilirsiniz. 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) gibi dağıtım otomasyonunu kullanarak üretim uygulamalarınızda bu avantajları elde edebilirsiniz:
- 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 İşlevleri için Azure kaynaklarının ve dağıtım yapılandırmalarının oluşturulmasını otomatikleştirme adımları gösterilmektedir. Proje kodunuzun sürekli dağıtımı hakkında daha fazla bilgi edinmek için bkz. Azure İşlevleri 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ı | Code-only |
Bicep ARM şablonu |
Makalenin üst kısmında barındırma planınızı seçtiğinizden emin olun.
Important
30 Eylül 2028'in ardından işlev uygulamanızı Bir Tüketim planında Linux'ta barındırma seçeneği kullanımdan kaldırılmıştır. Kesintileri önlemek için Linux üzerinde çalışan mevcut Tüketim planı uygulamalarınızı bu tarihten önce Flex Consumption planına geçirin. Tüketim planında Windows üzerinde çalışan uygulamalar bu değişiklikten etkilenmez. Daha fazla bilgi için Bkz. Linux Tüketim planı kullanımdan kaldırma bildirimi.
Bu makaleyi kullanırken şu noktaları göz önünde bulundurun:
ARM şablonunu yapılandırmanın kurallı bir yolu yoktur.
Bicep dağıtımı, birden çok Bicep dosyası ve Azure Doğrulanmış Modüller (AVM) şeklinde modülerleştirilebilir.
Bu makalede, Bicep dosyaları oluşturma veya Azure Resource Manager şablonları yazma hakkında temel bilgilere sahip olduğunuz varsayılır.
- Örnekler, belirli kaynaklar için tek tek bölümler olarak gösterilir. Kapsamlı bir Bicep dosyası ve ARM şablonu örnekleri kümesi için bu işlev uygulaması dağıtım örneklerine bakın.
- Örnekler, belirli kaynaklar için tek tek bölümler olarak gösterilir. Kullanılabilir olduğunda Bicep için Azure Doğrulanmış Modüller (AVM) gösterilir. Kapsamlı bir Bicep dosyası ve ARM şablonu örnekleri kümesi için bu Flex Consumption uygulaması dağıtım örneklerine bakın.
- Örnekler, belirli kaynaklar için tek tek bölümler olarak gösterilir.
Gerekli kaynaklar
Azure İşlevleri 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.Insights/components* |
| Barındırma planı | Required | Microsoft.Web/serverfarms |
| İşlev uygulaması | Required | Microsoft.Web/sites |
Azure İşlevleri 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.Insights/components* |
| İşlev uygulaması | Required | Microsoft.Web/sites |
Azure Container Apps tarafından barındırılan bir 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.Insights/components* |
| Yönetilen ortam | Required | Microsoft.App/managedEnvironments |
| İşlev uygulaması | Required | Microsoft.Web/sites |
Azure Arc tarafından barındırılan bir 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.Insights/components1 |
| Uygulama Hizmeti Kubernetes Ortamı | Required | Microsoft.ExtendedLocation/customLocations |
| İşlev uygulaması | Required | Microsoft.Web/sites |
*Application Insights örneğiniz tarafından kullanılabilecek 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ıkların bir sonucudur. 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
- Örnekler, mevcut bir kaynak grubu bağlamında yürütülecek şekilde tasarlanmıştır.
- Hem Application Insights hem de depolama günlükleri mevcut bir Azure Log Analytics çalışma alanına sahip olmanız gerekir. Çalışma alanları hizmetler arasında paylaşılabilir ve temel kural olarak performansı artırmak için her coğrafi bölgede bir çalışma alanı oluşturmanız gerekir. 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.
- Bu makalede, Azure Arc özellikli kubernetes kümesinde App Service özellikli özel bir konum oluşturduğunuz varsayılır. Azure Arc özel konumunda barındırılan bir işlev uygulaması oluşturmak için hem özel konum kimliğine hem de Kubernetes ortam 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 İşlevleri 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:
- Bicep
- ARM şablonu
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
}
}
Daha fazla bağlam için şablonlar deposundaki main.bicep dosyasının tamamına bakın.
Daha fazla bağlam için örnek depodaki tam storage-PrivateEndpoint.bicep dosyasına bakın.
Bu depolama hesabının bağlantı dizesini, İşlevler'in gerektirdiği uygulama ayarı olarak AzureWebJobsStorage ayarlamanız gerekir. Bu makaledeki şablonlar, oluşturulan depolama hesabına göre bu bağlantı dizesi değeri oluşturur ve bu en iyi yöntemdir. Daha fazla bilgi için bkz. Uygulama yapılandırması.
Dağıtım kapsayıcısı
Flex Consumption planında çalışan bir uygulamaya yapılan dağıtımlar, dağıtım kaynağı olarak Azure Blob Depolama'da bir kapsayıcı gerektirir. 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ın zaten yapılandırılmış olması 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:
- Bicep
- ARM şablonu
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
}
}
Bu örnekte, depolama hesabıyla birlikte blob depolama kapsayıcısını oluşturmak için AVM'nin depolama hesaplarına nasıl uygulanacağı gösterilmektedir. Bağlam içindeki kod parçacığı için bu dağıtım örneğine bakın.
Diğer dağıtım ayarları uygulamanın kendisiyle yapılandırılır.
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ı izlemeniz gerekir. Depolama hesabınızı izlemek için Azure Depolama için Azure İzleyici kaynak günlüklerini yapılandırmanız gerekir. Bu örnek bölümde, bu günlükler için hedef olarak adlı myLogAnalytics bir Log Analytics çalışma alanı kullanılır.
- Bicep
- ARM şablonu
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
}
]
}
}
Daha sonra tanımlanan Application Insights kaynağı için aynı çalışma alanı kullanılabilir. Daha fazla bilgi için, bu günlüklerle nasıl çalışılacağını da içeren, Azure Depolama İzleme konusuna bakın.
Application Insights oluşturma
İşlev uygulaması yürütmelerinizi izlemek için Application Insights kullanıyor olmanız gerekir. Application Insights artık paylaşılabilen bir Azure Log Analytics çalışma alanı gerektirir. 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 Application Insights kaynağı türü Microsoft.Insights/components ve web türüyle tanımlanır:
- Bicep
- ARM şablonu
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 main.bicep dosyasının tamamına bakın.
Fonksiyon uygulamasına bağlantı, APPLICATIONINSIGHTS_CONNECTION_STRING uygulama ayarı kullanılarak sağlanmalıdır. 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 Flex Tüketim planı, Premium planı veya Ayrılmış (App Service) planında barındırılan uygulamaların barındırma planı açıkça tanımlanmış olmalıdır.
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:
- Bicep
- ARM şablonu
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
}
}
Bu örnekte App Service planları için AVM kullanılır. Bağlam içindeki kod parçacığı için bu dağıtım örneğine bakın.
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. premium plan Azure İşlevleri.
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'da mı yoksa Linux'ta mı çalıştığına bağlıdır. Bu örnek bölüm bir EP1 plan oluşturur:
resource hostingPlan 'Microsoft.Web/serverfarms@2022-03-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 main.bicep dosyasının tamamı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'lardaki ayrılmış VM'lerde çalışır. Daha fazla bilgi için bkz. Ayrılmış plan.
Örnek bicep dosyası/Azure Resource Manager şablonu için bkz. Azure Uygulaması Service planında işlev 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'ta mı yoksa Linux'ta mı çalıştığına bağlıdır:
resource hostingPlanName 'Microsoft.Web/serverfarms@2022-03-01' = {
name: hostingPlanName
location: location
sku: {
tier: 'Standard'
name: 'S1'
size: 'S1'
family: 'S'
capacity: 1
}
}
Daha fazla bağlam için şablonlar deposundaki main.bicep dosyasının tamamı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 bölge bazında otomatik olarak bir plan oluşturulur veya seçilir.
Bir Tüketim planını ve özellikleri için serverfarmDynamic değerini computeMode kullanarak belirttiğiniz özel bir kaynak türü sku olarak açıkça tanımlayabilirsiniz. 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'da mı yoksa Linux'ta mı çalıştığına bağlıdır.
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'
}
}
Daha fazla bağlam için şablonlar deposundaki main.bicep dosyasının tamamına bakın.
Kubernetes ortamı
Azure İşlevleri, Azure Arc özellikli Kubernetes üzerine ya bir kod projesi olarak ya da kapsayıcı tabanlı bir işlev uygulaması olarak dağıtılabilir.
Uygulamayı oluşturmak ve kaynakları planlamak için Azure Arc özellikli bir Kubernetes kümesi için app service Kubernetes ortamı oluşturmuş olmanız gerekir. Bu makaledeki örneklerde, dağıtmakta olduğunuz özel konumun (customLocationId) ve App Service Kubernetes ortamının (kubeEnvironmentId) kaynak kimliğinin bu örnekte ayarlandığı varsayılır:
- ARM şablonu
- Bicep
param kubeEnvironmentId string
param customLocationId string
Hem siteler hem de planlar bir extendedLocation alan aracılığıyla özel konuma başvurmalıdır. Bu kesilmiş örnekte gösterildiği gibi, extendedLocation öğesi, properties'in dışında, kind ve location ile eş düzeyde durur.
- ARM şablonu
- Bicep
resource hostingPlan 'Microsoft.Web/serverfarms@2022-03-01' = {
...
{
extendedLocation: {
name: customLocationId
}
}
}
Plan kaynağı, K1 için Kubernetes (SKU) değerini kullanmalı, kind alanı linux,kubernetes olmalı ve reserved özelliği true olmalı, çünkü bu bir Linux dağıtımıdır. Ayrıca, extendedLocation ve kubeEnvironmentProfile.id değerlerini sırasıyla özel konum kimliğine ve Kubernetes çevre kimliğine ayarlamanız gerekir. Bu, şu örnek bölüme benzer olabilir:
- ARM şablonu
- Bicep
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
}
}
İşlev uygulaması oluşturma
İşlev uygulaması kaynağı, türündeki Microsoft.Web/sites ve kind kaynaklarında en az functionapp içerecek şekilde tanımlanır.
İşlev uygulaması kaynağını tanımlama şekliniz, Linux'ta mı yoksa Windows'da mı barındırdığınıza bağlıdır:
Windows'da çalışırken gereken uygulama ayarlarının listesi için bkz. Uygulama yapılandırması. Örnek bir Bicep dosyası/Azure Resource Manager şablonu için, Windows'ta barındırılan bir işlev uygulaması için Tüketim planı şablonuna bakın.
Windows'da ç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ğinin yerini alır. Daha fazla bilgi için bkz. Uygulama yapılandırması.
- Bicep
- ARM şablonu
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'
}
}]
}
}
Bu örnekte işlev uygulamaları için AVM kullanılır. Bağlam içindeki kod parçacığı için bu dağıtım örneğine bakın.
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@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'
}
]
}
}
}
Uçtan uca eksiksiz bir örnek için bu main.bicep dosyasına bakın.
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'
}
]
}
}
}
Uçtan uca eksiksiz bir örnek için bu main.bicep dosyasına bakın.
Dağıtım kaynakları
Uygulamanız oluşturulduğunda belirli bir Linux kapsayıcısının dağıtılması için linuxFxVersion site ayarını kullanabilirsiniz. Özel bir depodaki görüntülere erişmek için daha fazla ayar gereklidir. 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 İşlevleri için desteklenen temel görüntüler dile özeldir. Bkz. Azure İşlevleri temel görüntü depoları.
İş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 şu yöntemleri içerebilecek bir dağıtım tanımlayabilir:
Flex 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 bunu yapabilirsiniz. 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 depolama hesabı ve kapsayıcı, kimlik doğrulama yöntemi ve kimlik bilgileri, sitenin functionAppConfig.deployment.storage öğesindeki properties unsurunda ayarlanır. Uygulama oluşturulduğunda 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:
- Bicep
- ARM şablonu
functionAppConfig: {
deployment: {
storage: {
type: 'blobContainer'
value: '${storage.outputs.primaryBlobEndpoint}${deploymentStorageContainerName}'
authentication: {
type: 'SystemAssignedIdentity'
}
}
}
scaleAndConcurrency: {
maximumInstanceCount: maximumInstanceCount
instanceMemoryMB: instanceMemoryMB
}
runtime: {
name: functionAppRuntime
version: functionAppRuntimeVersion
}
}
Bu örnekte işlev uygulamaları için AVM kullanılır. Bağlam içindeki kod parçacığı için bu dağıtım örneğine bakın.
Yönetilen kimlikleri kullanırken, bu örnekte gösterildiği gibi işlev uygulamasının kimliği kullanarak depolama hesabına erişmesini de etkinleştirmeniz gerekir:
- Bicep
- ARM şablonu
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 kaynağa özgü rol ataması için AVM kullanılır. Bağlam içindeki kod parçacığı için bu dağıtım örneğine bakın.
Bu örnekte, atanan rolün GUID değerini bilmeniz gerekir. Bu örnekte olduğu gibi, az role definition list komutunu kullanarak herhangi bir tanımlı rol adı için bu kimlik değerini alabilirsiniz.
az role definition list --output tsv --query "[?roleName=='Storage Blob Data Owner'].{name:name}"
Yönetilen kimlikler yerine bir bağlantı dizesi kullanırken, bunun yerine authentication.typeStorageAccountConnectionString dağıtım depolama hesabı bağlantı dizesi içeren uygulama ayarını olarak ve olarak ayarlamanız authentication.storageAccountConnectionStringName gerekir.
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ızla 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:
- Bicep
- ARM şablonu
@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 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ılı bir şekilde dağıtmak için, kaynakların Azure'da nasıl dağıtıldıklarının anlaşılması önemlidir. Çoğu örnekte, üst düzey yapılandırmalar kullanılarak siteConfiguygulanır. İşlevler çalışma zamanına ve dağıtım altyapısına bilgi aktardığından bu yapılandırmaları en üst düzeyde ayarlamak önemlidir. Alt sourcecontrols/web kaynak uygulanmadan önce üst düzey bilgiler gereklidir. Bu ayarları alt düzey config/appSettings kaynakta yapılandırmak mümkün olsa da, 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 bir 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 İşlevleri 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 bir Tüketim planı için, dağıtım paketinin URI'sini WEBSITE_RUN_FROM_PACKAGE ayarında, bu örnek şablonda gösterildiği gibi doğrudan ayarlayın.
Bu örnek, mevcut bir uygulamaya zip dağıtım kaynağı ekler:
- Bicep
- ARM şablonu
@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
}
}
Şablonunuza zip dağıtım kaynaklarını dahil ederken aşağıdakileri göz önünde bulundurun:
- Linux'ta tüketim planları desteklemez
WEBSITE_RUN_FROM_PACKAGE = 1. Bunun yerine dağıtım paketinin URI'sini doğrudanWEBSITE_RUN_FROM_PACKAGEayarında ayarlamanız gerekir. Daha fazla bilgi için bkz. WEBSITE_RUN_FROM_PACKAGE. Örnek şablon için, bir Tüketim planında Linux üzerinde barındırılan işlev uygulaması hakkındaki şekle bakın.
,
packageUriİşlevler tarafından erişilebilen 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_PACKAGEayarını yeni URI değeriyle güncellemeyi unutmayın.URI'ye ayarlarken
WEBSITE_RUN_FROM_PACKAGEtetikleyicileri el ile eşitlemeniz gerekir.Ayarları eklerken veya güncelleştirirken koleksiyondaki tüm gerekli uygulama ayarlarını her zaman ayarladığınızdan
appSettingsemin olun. Açıkça ayarlanmayan mevcut ayarlar güncelleştirme tarafından kaldırılı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 İşlevleri için Zip Dağıtımı bölümüne bakın.
Uzak derlemeler
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ılan olarak hiçbir özelleştirmenin çalıştırılamdığı anlamına gelir.
Uygulamanızı uzaktan yeniden derlemenizi gerektiren senaryolar vardır. Bu tür örneklerden biri, Linux'a özgü paketleri Bir Windows bilgisayarda geliştirdiğiniz Python veya Node.js uygulamalarına 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 uygulama Windows'a dağıtıldığında, dile özgü komutlar (C# uygulamaları veya dotnet restore Node.js uygulamaları gibinpm install) çalıştırılır.
Sürekli tümleştirme ile elde ettiğiniz aynı derleme işlemlerini etkinleştirmek için, SCM_DO_BUILD_DURING_DEPLOYMENT=true öğesini dağıtım kodunuzda uygulama ayarlarınıza ekleyin ve WEBSITE_RUN_FROM_PACKAGE öğesini tamamen kaldırın.
Linux kapsayıcıları
Azure İşlevleri Premium veya Ayrılmış plana bir kapsayıcılı işlev uygulamasını dağıtıyorsanız, aşağıdakileri yapmanız gerekir:
-
linuxFxVersionSite ayarını kapsayıcı görüntünüzün tanımlayıcısıyla ayarlayın. - Kapsayıcıyı özel bir kayıt defterinden alırken gerekli
DOCKER_REGISTRY_SERVER_*ayarlarını yapın. - Uygulama ayarını olarak
WEBSITES_ENABLE_APP_SERVICE_STORAGEayarlayınfalse.
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ı.
- Bicep
- ARM şablonu
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
]
}
Kapsayıcılı işlevleri Azure Container Apps'e dağıtırken şablonunuz şunları yapmalıdır:
-
kindalanını değerinefunctionapp,linux,container,azurecontainerappsayarlayın. -
managedEnvironmentIdsite özelliğini Container Apps ortamının tam nitelikli URI'sine ayarlayın. - Siteyle aynı anda kaynak oluştururken sitenin
dependsOnkoleksiyonuna birMicrosoft.App/managedEnvironmentskaynak 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:
- Bicep
- ARM şablonu
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
]
}
İşlevleri Azure Arc'a dağıtırken, işlev uygulaması kaynağının kind alanı için ayarladığınız değer dağıtım türüne bağlıdır:
| Dağıtım türü |
kind alan değeri |
|---|---|
| Yalnızca kod dağıtımı | functionapp,linux,kubernetes |
| Konteyner dağıtımı | functionapp,linux,kubernetes,container |
customLocationId Öğesini, barındırma planı kaynağı için yaptığınız gibi ayarlamanız gerekir.
.NET 6 hızlı başlangıç görüntüsü kullanan kapsayıcılı işlev uygulamasının tanımı şu örneğe benzer olabilir:
- Bicep
- ARM şablonu
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
]
}
Uygulama yapılandırması
Flex Consumption planında, Azure'da işlev uygulamanızı iki tür özellikle yapılandırabilirsiniz:
| Configuration |
Microsoft.Web/sites mülk |
|---|---|
| Uygulama yapılandırması | functionAppConfig |
| Uygulama ayarları |
siteConfig.appSettings koleksiyon |
Bu uygulama yapılandırmaları functionAppConfig içinde yönetilir:
| 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:
- Bağlantı dizesi tabanlı ayarlar:
- Yönetilen kimlik tabanlı ayarlar:
İşlevler, Azure'da işlev uygulamanızı yapılandırmak için aşağıdaki seçenekleri sağlar:
| Configuration |
Microsoft.Web/sites mülk |
|---|---|
| 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ını veya ARM şablonlarını kullanarak site ve uygulama ayarlarıyla çalışırken şu noktaları göz önünde bulundurun:
- İsteğe bağlı
alwaysReadyayar, her işlev başına ölçek grubu için bir tane içeren bir veya daha fazla{name,instanceCount}nesneden oluşan bir dizi içerir. Bunlar, her zaman hazır ölçek kararları almak için kullanılan ölçek gruplarıdır. Bu örnek, hemhttpgrubunun hem dehelloworldadlı, gruplandırılmamış tetikleyici türündeki tek bir işlevin her zaman hazır sayımlarını ayarlar.- Bicep
- ARM şablonu
alwaysReady: [ { name: 'http' instanceCount: 2 } { name: 'function:helloworld' instanceCount: 1 } ]
- Otomatik dağıtımda ne zaman ayarlamanız
WEBSITE_CONTENTSHAREgerektiği konusunda önemli noktalar vardır. Ayrıntılı yönergeler içinWEBSITE_CONTENTSHAREreferansı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_STORAGEdeğerinifalseolarak da ayarlayın.
Uygulama ayarlarınızı her zaman, bu makaledeki
siteConfig/appSettingsörneklerde olduğu gibi oluşturulan kaynağın koleksiyonuMicrosoft.Web/sitesolarak tanımlamanız gerekir. 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/appsettingsolarak 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
AzureWebJobsStoragediğer Azure hizmetlerine yönelik yönetilen kimlik tabanlı bağlantıları kullanmanız gerekir. 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 Uygulaması Hizmeti'nin bir ö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ı konusuna bakın.
Yuva kaynağı, işlev uygulaması kaynağı ()Microsoft.Web/sites ile aynı şekilde tanımlanır, ancak bunun yerine kaynak tanımlayıcısını Microsoft.Web/sites/slots kullanırsınız. Premium planda hem üretim hem de hazırlık yuvası oluşturan (hem Bicep hem de ARM şablonlarında) örnek bir dağıtım için Dağıtım Yuvası ile Azure İşlev Uygulaması konusuna bakın.
Şablonları kullanarak yuvaları değiştirme hakkında bilgi edinmek için Resource Manager şablonlarıyla otomasyonu inceleyin.
Slot dağıtımlarıyla çalışırken aşağıdaki noktaları göz önünde bulundurun:
Dağıtım yuvası tanımında
WEBSITE_CONTENTSHAREayarı açıkça ayarlamayın. Bu ayar, uygulama dağıtım yuvasında oluşturulduğunda sizin için oluşturulur.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":truetanımlayabilirsiniz. Daha fazla bilgi için bkz. Ayarları yönetme.
Güvenli dağıtımlar
İşlev uygulamanızı, sanal ağlarla tümleştirilerek bir veya daha fazla kaynağın güvenliğinin sağlandığı bir dağıtımda oluşturabilirsiniz. İşlev uygulamanız için sanal ağ tümleştirmesi bir Microsoft.Web/sites/networkConfig kaynak tarafından tanımlanır. 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 İşlevleri 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:
- Yüksek ölçekli HTTP ile tetiklenen işlev, sanal ağ tarafından güvenliği sağlanan bir olay hub'ına bağlanır: HTTP ile tetiklenen bir işlev (.NET yalıtılmış çalışan modu) herhangi bir kaynaktan gelen çağrıları kabul eder ve ardından bu HTTP çağrılarının gövdesini sanal ağ tümleştirmesini kullanarak sanal ağda çalışan güvenli bir olay hub'ına gönderir.
- İşlev, sanal ağda güvenliği sağlanan bir Service Bus kuyruğu tarafından tetiklenir: Python işlevi, sanal ağda güvenliği sağlanan bir Service Bus kuyruğu tarafından tetiklenir. Kuyruğa sanal ağda özel uç nokta kullanılarak erişilir. İleti göndermek için sanal ağdaki bir sanal makine kullanılır.
Güvenli bir depolama hesabı kullanan bir dağıtım oluştururken, hem WEBSITE_CONTENTSHARE ayarını açıkça tanımlamanız hem de 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ı bir 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şturulur. İş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şturma | 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. |
| Her ikisi de özel uç noktaları kullanan bir işlev uygulaması ve depolama hesabı oluşturma | 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ıtlarken, 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ı Azure kaynakları olarak tanımlanır. Bu, ARM şablonlarınızda ve Bicep dosyalarınızda konak anahtarları oluşturabileceğiniz ve yönetebileceğiniz anlamına gelir. Bir konak anahtarı, Microsoft.Web/sites/host/functionKeys türünde bir kaynak olarak tanımlanır. Bu örnek, fonksiyon uygulaması oluşturulduğunda my_custom_key adlı bir konak düzeyinde erişim anahtarı oluşturur.
- Bicep
- ARM şablonu
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 kullanılabilecek 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 İşlevleri'de 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 geliştirme sürecini kolaylaştırmanın birkaç yolu vardır:
Visual Studio Code: Hem Bicep dosyalarıhem de ARM şablonlarıyla çalışmanıza yardımcı olacak uzantılar vardır. Kodunuzun doğru olduğundan emin olmak ve bazı temel doğrulamalar sağlamak için bu araçları kullanabilirsiniz.
Azure portalı: Portalda işlev uygulamanızı ve ilgili kaynakları oluşturduğunuzda, son Gözden Geçir ve oluştur ekranında Otomasyon için şablon indir bağlantısı bulunur.
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öntemler kullanılabilir:
Aşağıdaki Azure kaynak grubu dağıtım v2 görevi, Azure Pipelines'a şablonu doğrulaması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 yollardan herhangi birini kullanabilirsiniz:
- Bicep
- ARM şablonu
Azure'a Dağıt düğmesi
Note
Bu yöntem şu anda Bicep dosyalarını dağıtmayı desteklemez.
değerini GitHub'daki dosyanızın <url-encoded-path-to-azuredeploy-json> ham yolunun URL ile kodlanmış bir sürümüyle değiştirinazuredeploy.json.
Markdown kullanan bir örnek aşağıda verilmişti:
[](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. 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ırmanız Connect-AzAccountgerekir.
- Bicep
- ARM şablonu
# 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 kullanabilirsiniz.
Sonraki Adımlar
Azure İşlevleri geliştirme ve yapılandırma hakkında daha fazla bilgi edinin.