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

İşlev uygulamasını yeni veya mevcut Azure kaynaklarına dağıtma işlemini otomatikleştirmek için Bicep dosyası veya Azure Resource Manager şablonu kullanabilirsiniz. Bu tür otomasyon, kaynak dağıtımlarınızı DevOps'taki kaynak kodunuzla tümleştirmek, bir işlev uygulamasını ve ilgili kaynakları yedekten geri yüklemek veya bir uygulama topolojisini birden çok kez dağıtmak için harika bir yol sağlar.

Bu makalede, Azure İşlevleri için kaynak ve dağıtım oluşturma işlemini otomatikleştirme işlemi gösterilmektedir. İşlevleriniz tarafından kullanılan tetikleyicilere ve bağlamalara bağlı olarak, bu makalenin kapsamı dışında kalan diğer kaynakları dağıtmanız gerekebilir.

Belirli şablon kodu, işlev uygulamanızın nasıl barındırıldığına, kod dağıttığınıza veya kapsayıcılı işlev uygulamasına ve uygulamanız tarafından kullanılan işletim sistemine 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ü Daha fazla bilgi edinmek için bkz. ...
Azure İşlevleri Tüketim planı Yalnızca kod Tüketim planı
Elastik Premium planı Azure İşlevleri Kod | Kapsayıcı Premium plan
ayrılmış (App Service) planı Azure İşlevleri Kod | Kapsayıcı Ayrılmış plan
Azure Container Apps Yalnızca kapsayıcı Azure İşlevleri barındıran Container Apps
Azure Arc Kod | Kapsayıcı Azure Arc'ta App Service, İşlevler ve Logic Apps (Önizleme)

Gerekli kaynaklar

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

Kaynak Gereksinim Söz dizimi ve özellikler başvurusu
Depolama hesabı Zorunlu Microsoft. Depolama/storageAccounts
Uygulama Analizler bileşeni Önerilir Microsoft. Analizler/bileşenler
Barındırma planı Gerekli1 Microsoft.Web/serverfarms
İşlev uygulaması Zorunlu Microsoft.Web/sites

Tüketim planı için Azure İşlevleri dağıtımı genellikle şu kaynaklardan oluşur:

Kaynak Gereksinim Söz dizimi ve özellikler başvurusu
Depolama hesabı Zorunlu Microsoft. Depolama/storageAccounts
Uygulama Analizler bileşeni Önerilir Microsoft. Analizler/bileşenler
İşlev uygulaması Zorunlu Microsoft.Web/sites

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

Kaynak Gereksinim Söz dizimi ve özellikler başvurusu
Depolama hesabı Zorunlu Microsoft. Depolama/storageAccounts
Uygulama Analizler bileşeni Önerilir Microsoft. Analizler/bileşenler
Yönetilen ortam Zorunlu Microsoft.App/managedEnvironments
İşlev uygulaması Zorunlu Microsoft.Web/sites

Azure Arc tarafından barındırılan bir dağıtım genellikle şu kaynaklardan oluşur:

Kaynak Gereksinim Söz dizimi ve özellikler başvurusu
Depolama hesabı Zorunlu Microsoft. Depolama/storageAccounts
Uygulama Analizler bileşeni Önerilir Microsoft. Analizler/bileşenler
App Service Kubernetes ortamı Zorunlu Microsoft.ExtendedLocation/customLocations
İşlev uygulaması Zorunlu Microsoft.Web/sites

1İşlev uygulamanızı tüketim planında barındırmayı seçtiğinizde açık bir barındırma planı gerekmez.

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ı.

Bu makalede, Bicep dosyaları oluşturma veya Azure Resource Manager şablonları yazma hakkında temel bilgilere sahip olduğunuz varsayılır ve örnekler belirli kaynaklar için ayrı 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.

Önkoşullar

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.

Önemli

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:

"resources": [
  {
    "type": "Microsoft.Storage/storageAccounts",
    "apiVersion": "2022-05-01",
    "name": "[parameters('storageAccountName')]",
    "location": "[parameters('location')]",
    "kind": "StorageV2",
    "sku": {
      "name": "[parameters('storageAccountType')]"
    },
    "properties": {
      "supportsHttpsTrafficOnly": true,
      "defaultToOAuthAuthentication": true
    }
  }
]

Daha fazla bağlam için şablonlar deposundaki azuredeploy.json dosyasının tamamına bakın.

bu depolama hesabının bağlantı dizesi İş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ı.

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.

"resources": [
  {
    "type": "Microsoft.Insights/diagnosticSettings",
    "apiVersion": "2021-05-01-preview",
    "scope": "[format('Microsoft.Storage/storageAccounts/{0}/blobServices/default', parameters('storageAccountName'))]",
    "name": "[parameters('storageDataPlaneLogsName')]",
    "properties": {
        "workspaceId": "[resourceId('Microsoft.OperationalInsights/workspaces', parameters('myLogAnalytics'))]",
        "logs": [
          {
            "category": "StorageWrite",
            "enabled": true
          }
        ],
        "metrics": [
          {
            "category": "Transaction",
            "enabled": true
          }
        ]
    }
  }
]

Bu çalışma alanı daha sonra tanımlanan Uygulama Analizler kaynağı için kullanılabilir. Bu günlüklerle çalışma da dahil olmak üzere daha fazla bilgi için bkz. Azure Depolama izleme.

Uygulama Analizler Oluşturma

uygulama Analizler, işlev uygulaması yürütmelerinizi izlemek için önerilir. Bu örnek bölümde, Uygulama Analizler kaynağı türü Microsoft.Insights/components ve türüyle webtanımlanır:

{
  "type": "Microsoft.Insights/components",
  "apiVersion": "2020-02-02",
  "name": "[variables('applicationInsightsName')]",
  "location": "[parameters('appInsightsLocation')]",
  "tags": {
    "[format('hidden-link:{0}', resourceId('Microsoft.Web/sites', parameters('functionAppName')))]": "Resource"
  },
  "properties": {
    "Application_Type": "web"
  },
  "kind": "web"
},

Daha fazla bağlam için şablonlar deposundaki azuredeploy.json dosyasının tamamına bakın.

Bağlantı, uygulama ayarı kullanılarak işlev uygulamasına APPLICATIONINSIGHTS_CONNECTION_STRING sağlanmalıdır. Daha fazla bilgi için bkz . Uygulama ayarları.

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 Premium planında 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.

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 sku için Name , EP2veya EP3 kullanarak EP1belirtebilirsiniz. İş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:

"resources": [
  {
    "type": "Microsoft.Web/serverfarms",
    "apiVersion": "2022-03-01",
    "name": "[parameters('hostingPlanName')]",
    "location": "[parameters('location')]",
    "sku": {
      "name": "EP1",
      "tier": "ElasticPremium",
      "family": "EP"
    },
    "kind": "elastic",
    "properties": {
      "maximumElasticWorkerCount": 20
    }
  }
]

Daha fazla bağlam için şablonlar deposundaki azuredeploy.json 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 az appservice plan create bakın--sku.

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:

"resources": [
  {
    "type": "Microsoft.Web/serverfarms",
    "apiVersion": "2022-03-01",
    "name": "[parameters('hostingPlanName')]",
    "location": "[parameters('location')]",
    "sku": {
      "tier": "Standard",
      "name": "S1",
      "size": "S1",
      "family": "S",
      "capacity": 1
    }
  }
]

Daha fazla bağlam için şablonlar deposundaki azuredeploy.json 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 computeModesku değerini Dynamic kullanarak belirttiğiniz özel bir kaynak türü serverfarm 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.

"resources": [
  {
    "type": "Microsoft.Web/serverfarms",
    "apiVersion": "2022-03-01",
    "name": "[parameters('hostingPlanName')]",
    "location": "[parameters('location')]",
    "sku": {
      "name": "Y1",
      "tier": "Dynamic",
      "size": "Y1",
      "family": "Y",
      "capacity": 0
    },
    "properties": {
      "computeMode": "Dynamic"
    }
  }
]

Daha fazla bağlam için şablonlar deposundaki azuredeploy.json dosyasının tamamına bakın.

Kubernetes ortamı

Azure İşlevleri dağıtılabilir Kod projesi veya kapsayıcılı işlev uygulaması olarak Azure Arc özellikli Kubernetes.

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:

"parameters": {
  "kubeEnvironmentId" : {
    "type": "string"
  },
  "customLocationId" : {
    "type": "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 ile eş kindlocationolarak öğesinin propertiesdışında durur:

{
  "type": "Microsoft.Web/serverfarms",
  ...
  {
    "extendedLocation": {
      "name": "[parameters('customLocationId')]"
    },
  }
}

Plan kaynağı için SKUkind Kubernetes (K1) değerini kullanmalıdırlinux,kubernetes. Bu, bir Linux dağıtımı olduğundan, alanı olmalıdır ve reserved özelliği trueolmalıdır. Ayrıca ve kubeEnvironmentProfile.id değerini extendedLocation sırasıyla özel konum kimliğine ve Kubernetes ortam kimliğine ayarlamanız gerekir. Bu, şu örnek bölüme benzer olabilir:

"resources": [
  {
    "type": "Microsoft.Web/serverfarms",
    "apiVersion": "2022-03-01",
    "name": "[parameters('hostingPlanName')]",
    "location": "[parameters('location')]",
    "kind": "linux,kubernetes",
    "sku": {
      "name": "K1",
      "tier": "Kubernetes"
    },
    "extendedLocation": {
      "name": "[parameters('customLocationId')]"
    },
    "properties": {
      "kubeEnvironmentProfile": {
        "id": "[parameters('kubeEnvironmentId')]"
      },
      "reserved": true
    }
  }
]

İşlev uygulaması oluşturma

İşlev uygulaması kaynağı, türündeki Microsoft.Web/sites bir kaynak tarafından tanımlanır ve kind en azından öğesini içerir functionapp.

İş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 bicep dosyası/Azure Resource Manager şablonu için bkz. Tüketim planı şablonunda Windows'ta barındırılan işlev uygulaması.

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

Not

İ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 başvuran bir dependsOn ayarı 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 başvuran bir dependsOn ayarı olduğundan emin olun.

"resources": [
  {
    "type": "Microsoft.Web/sites",
    "apiVersion": "2022-03-01",
    "name": "[parameters('functionAppName')]",
    "location": "[parameters('location')]",
    "kind": "functionapp",
    "dependsOn": [
      "[resourceId('Microsoft.Insights/components', parameters('applicationInsightsName'))]",
      "[resourceId('Microsoft.Web/serverfarms', parameters('hostingPlanName'))]",
      "[resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName'))]"
    ],
    "properties": {
      "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', parameters('hostingPlanName'))]",
      "siteConfig": {
        "appSettings": [
          {
            "name": "APPLICATIONINSIGHTS_CONNECTION_STRING",
            "value": "[reference(resourceId('Microsoft.Insights/components', parameters('applicationInsightsName')), '2020-02-02').ConnectionString]"
          },
          {
            "name": "AzureWebJobsStorage",
            "value": "[format('DefaultEndpointsProtocol=https;AccountName={0};EndpointSuffix={1};AccountKey={2}', parameters('storageAccountName'), environment().suffixes.storage, listKeys(resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName')), '2021-09-01').keys[0].value)]"
          },
          {
            "name": "WEBSITE_CONTENTAZUREFILECONNECTIONSTRING",
            "value": "[format('DefaultEndpointsProtocol=https;AccountName={0};EndpointSuffix={1};AccountKey={2}', parameters('storageAccountName'), environment().suffixes.storage, listKeys(resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName')), '2021-09-01').keys[0].value)]"
          },
          {
            "name": "WEBSITE_CONTENTSHARE",
            "value": "[toLower(parameters('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 azuredeploy.json şablonuna bakın.

"resources": [
  {
    "type": "Microsoft.Web/sites",
    "apiVersion": "2022-03-01",
    "name": "[parameters('functionAppName')]",
    "location": "[parameters('location')]",
    "kind": "functionapp",
    "dependsOn": [
      "[resourceId('Microsoft.Insights/components', parameters('applicationInsightsName'))]",
      "[resourceId('Microsoft.Web/serverfarms', parameters('hostingPlanName'))]",
      "[resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName'))]"
    ],
    "properties": {
      "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', parameters('hostingPlanName'))]",
      "siteConfig": {
        "alwaysOn": true,
        "appSettings": [
          {
            "name": "APPLICATIONINSIGHTS_CONNECTION_STRING",
            "value": "[reference(resourceId('Microsoft.Insights/components', parameters('applicationInsightsName')), '2020-02-02').ConnectionString]"
          },
          {
            "name": "AzureWebJobsStorage",
            "value": "[format('DefaultEndpointsProtocol=https;AccountName={0};EndpointSuffix={1};AccountKey={2}', parameters('storageAccountName'), environment().suffixes.storage, listKeys(resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName')), '2021-09-01').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 azuredeploy.json şablonuna bakın.

Dağıtım kaynakları

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:

Dağıtım kaynakları

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 1 ayarlayın WEBSITE_RUN_FROM_PACKAGE ve kaynak tanımını ekleyin/zipDeploy.

Linux'ta tüketim planı için, dağıtım paketinin URI'sini bu örnek şablonda WEBSITE_RUN_FROM_PACKAGEgösterildiği gibi doğrudan ayarında ayarlayın.

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

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "functionAppName": {
      "type": "string",
      "metadata": {
        "description": "The name of the Azure Function app."
      }
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]",
      "metadata": {
        "description": "The location into which the resources should be deployed."
      }
    },
    "packageUri": {
      "type": "string",
      "metadata": {
        "description": "The zip content url."
      }
    }
  },
  "resources": [
    {
      "name": "[concat(parameters('functionAppName'), '/ZipDeploy')]",
      "type": "Microsoft.Web/sites/extensions",
      "apiVersion": "2021-02-01",
      "location": "[parameters('location')]",
      "properties": {
        "packageUri": "[parameters('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ğrudan ayarında WEBSITE_RUN_FROM_PACKAGE ayarlamanız gerekir. Daha fazla bilgi için bkz . WEBSITE_RUN_FROM_PACKAGE. Örnek şablon için bkz . Tüketim planında Linux üzerinde barındırılan işlev uygulaması.
  • , 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'nizi yeniden oluştururken ayarı yeni URI değeriyle güncelleştirmeyi WEBSITE_RUN_FROM_PACKAGE unutmayın.

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

  • Ayarları eklerken veya güncelleştirirken koleksiyondaki tüm gerekli uygulama ayarlarını her zaman ayarladığınızdan appSettings emin 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 Dağıtımı'nın (msdeploy) desteklemiyor. 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 bkz. Azure İşlevleri için zip dağıtımı.

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.

Ancak, Python'da Linux'a özgü paketleri çekmeniz veya Windows bilgisayarda geliştirdiğiniz uygulamaları Node.js gibi uygulamanızı uzaktan yeniden derlemenizi gerektiren senaryolar vardı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 npm install Node.js uygulamaları gibidotnet restore) çalıştırılır.

Sürekli tümleştirme ile elde ettiğiniz derleme işlemlerini etkinleştirmek için, dağıtım kodunuzda uygulama ayarlarınıza ekleyin SCM_DO_BUILD_DURING_DEPLOYMENT=true ve tamamen kaldırın WEBSITE_RUN_FROM_PACKAGE .

Linux kapsayıcıları

Kapsayıcılı işlev uygulamasını bir Azure İşlevleri Premium veya Ayrılmış plana dağıtıyorsanız şunları uygulamanız gerekir:

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

"resources": [
  {
    "type": "Microsoft.Web/sites",
    "apiVersion": "2022-03-01",
    "name": "[parameters('functionAppName')]",
    "location": "[parameters('location')]",
    "kind": "functionapp",
    "dependsOn": [
      "[resourceId('Microsoft.Web/serverfarms', parameters('hostingPlanName'))]",
      "[resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName'))]"
    ],
    "properties": {
      "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', parameters('hostingPlanName'))]",
      "siteConfig": {
        "appSettings": [
          {
            "name": "AzureWebJobsStorage",
            "value": "[format('DefaultEndpointsProtocol=https;AccountName={0};AccountKey={1}', parameters('storageAccountName'), listKeys(resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName')), '2021-09-01').keys[0].value)]"
          },
          {
            "name": "FUNCTIONS_WORKER_RUNTIME",
            "value": "node"
          },
          {
            "name": "WEBSITE_NODE_DEFAULT_VERSION",
            "value": "~14"
          },
          {
            "name": "FUNCTIONS_EXTENSION_VERSION",
            "value": "~4"
          },
          {
            "name": "DOCKER_REGISTRY_SERVER_URL",
            "value": "[parameters('dockerRegistryUrl')]"
          },
          {
            "name": "DOCKER_REGISTRY_SERVER_USERNAME",
            "value": "[parameters('dockerRegistryUsername')]"
          },
          {
            "name": "DOCKER_REGISTRY_SERVER_PASSWORD",
            "value": "[parameters('dockerRegistryPassword')]"
          },
          {
            "name": "WEBSITES_ENABLE_APP_SERVICE_STORAGE",
            "value": "false"
          }
        ],
        "linuxFxVersion": "DOCKER|myacr.azurecr.io/myimage:mytag"
      }
    }
  }
]

Kapsayıcılı işlevleri Azure Container Apps'e 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 URI'sine ayarlayın.
  • Siteyle aynı anda kaynak oluştururken sitenin dependsOn koleksiyonuna bir Microsoft.App/managedEnvironments 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:

"resources": [
  {
    "type": "Microsoft.Web/sites",
    "apiVersion": "2022-03-01",
    "name": "[parameters('functionAppName')]",
    "kind": "functionapp,linux,container,azurecontainerapps",
    "location": "[parameters('location')]",
    "dependsOn": [
      "[resourceId('Microsoft.Insights/components', parameters('applicationInsightsName'))]",
      "[resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName'))]"
    ],
    "properties": {
      "serverFarmId": "[parameters('hostingPlanName')]",
      "siteConfig": {
        "linuxFxVersion": "DOCKER|myacr.azurecr.io/myimage:mytag",
        "appSettings": [
          {
            "name": "FUNCTIONS_EXTENSION_VERSION",
            "value": "~4"
          },
          {
            "name": "AzureWebJobsStorage",
            "value": "[format('DefaultEndpointsProtocol=https;AccountName={0};AccountKey={1}', parameters('storageAccountName'), listKeys(resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName')), '2021-09-01').keys[0].value)]"
          },
          {
            "name": "APPLICATIONINSIGHTS_CONNECTION_STRING",
            "value": "[reference(resourceId('Microsoft.Insights/components', parameters('applicationInsightsName')), '2020-02-02').ConnectionString]"
          }
        ],
      },
      "managedEnvironmentId": "[parameters('managedEnvironmentId')]"
    }
  }
]

İş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
Kapsayıcı dağıtımı functionapp,linux,kubernetes,container

Barındırma planı kaynağı için yaptığınız gibi öğesini de ayarlamanız customLocationId 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:

"resources": [
  {
    "type": "Microsoft.Web/sites",
    "apiVersion": "2022-03-01",
    "name": "[parameters('functionAppName')]",
    "kind": "kubernetes,functionapp,linux,container",
    "location": "[parameters('location')]",
    "extendedLocation": {
      "name": "[parameters('customLocationId')]"
    },
    "dependsOn": [
      "[resourceId('Microsoft.Insights/components', parameters('applicationInsightsName'))]",
      "[resourceId('Microsoft.Web/serverfarms', parameters('hostingPlanName'))]",
      "[resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName'))]"
    ],
    "properties": {
      "serverFarmId": "[parameters('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": "[format('DefaultEndpointsProtocol=https;AccountName={0};AccountKey={1}', parameters('storageAccountName'), listKeys(resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName')), '2021-09-01').keys[0].value)]"
          },
          {
            "name": "APPLICATIONINSIGHTS_CONNECTION_STRING",
            "value": "[reference(resourceId('Microsoft.Insights/components', parameters('applicationInsightsName')), '2020-02-02').ConnectionString]"
          }
        ],
        "alwaysOn": true
      }
    }
  }
]

Uygulama yapılandırması

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

Yapılandırma Microsoft.Web/sites Özellik
Site ayarları siteConfig
Uygulama ayarları siteConfig.appSettings Koleksiyon

Özelliğinde siteConfig aşağıdaki site ayarları 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:

  • Otomatik dağıtımda ne zaman ayarlamanız WEBSITE_CONTENTSHARE gerektiği konusunda önemli noktalar vardır. Ayrıntılı yönergeler için başvuruya WEBSITE_CONTENTSHARE bakın.
  • Uygulama ayarlarınızı her zaman, bu makaledeki Microsoft.Web/sites örneklerde olduğu gibi oluşturulan kaynağın koleksiyonu siteConfig/appSettings olarak tanımlamanız gerekir. Bu, işlev uygulamanızın çalışması için gereken ayarların ilk başlangıçta kullanılabilir olmasını sağlar.

  • Şablonları kullanarak uygulama ayarlarını eklerken veya güncelleştirirken güncelleştirmeye tüm mevcut ayarları eklediğinizden emin olun. Temel alınan güncelleştirme REST API çağrıları kaynağın tamamını /config/appsettings 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.

Yuva dağıtımları

İşlevler, kodunuzun farklı sürümlerini işlev uygulamanızdaki benzersiz uç noktalara dağıtmanıza olanak tanır. Bu, ü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. Kullanılabilir yuva sayısı barındırma planınıza bağlıdır. Daha fazla bilgi için bkz. Azure İşlevleri dağıtım yuvaları işlevleri.

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ı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 değiştirme işlemini gerçekleştirme hakkında bilgi edinmek için bkz . Resource Manager şablonlarıyla otomatikleştirme.

Yuva 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. Bu ayar, uygulama dağıtım yuvasında oluşturulduğunda sizin için oluşturulur.

  • Yuvaları değiştirdiğinizde, bazı uygulama ayarları değiştirilmekte olan kodla değil yuvada 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ş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.

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

Not

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 Açıklama
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:

Ayar Value Açıklama
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.

Ş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.

    Azure portalındaki Azure İşlevleri oluşturma işleminden şablon bağlantısını 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 olsa da ARM şablonunuzun nasıl görünebileceğine yönelik 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 , deploymentMode: 'Validation' Azure Pipelines'a şablonu doğrulamasını belirtir.

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

Bicep dosyanızı ve şablonunuzu dağıtmak için aşağıdaki yollardan herhangi birini kullanabilirsiniz:

Azure'a Dağıt düğmesi

Not

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

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

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ı/ARM şablonu dağıtır. Yerel olarak çalıştırmak için Azure PowerShell'in yüklü olması gerekir. Oturum açmak için 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 azuredeploy.json  -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.