Azure Geliştirici CLI ile Azure İşlevleri dağıtma

Azure Geliştirici CLI'sı (azd) Azure İşlevleri için kod ve kapsayıcı dağıtımlarını destekler. her iki mod için de azure.yaml ayrılmış function hostunu kullanın:

  • Kod dağıtımı, derlenmiş işlev kodunuzu zip arşivi olarak paketler ve İşlev Uygulamasına yükler.
  • Kapsayıcı dağıtımı bir kapsayıcı görüntüsünü oluşturur veya çözer, gerektiğinde Azure Container Registry 'de (ACR) yayımlar ve görüntüyü çalıştırmak için İşlev Uygulamasını güncelleştirir.

Azure İşlevleri ve Azure App Service'in her ikisi de Microsoft.Web/sites kaynak sağlayıcısını kullanır ve kapsayıcı dağıtım akışları bazı iç mekanizmaları paylaşır. Ancak, aynı azd konak değiller. İşlevler, host: function kullanır, İşlevlere özgü paketleme ve uzaktan derleme davranışına sahiptir ve App Service dağıtım yuvası iş akışını kullanmaz.

Dağıtım modu seçin

azd ile hizmet yapılandırmasından dağıtım modunu seçin:

Konfigürasyon Dağıtım modu
desteklenen, Docker olmayan bir project ve docker.path içermeyen bir kaynak language Kod dağıtımı
language: docker Konteyner dağıtımı
docker.path Kaynak dili olan bir değer Konteyner dağıtımı
Önceden oluşturulmuş bir image Konteyner dağıtımı

Sağlanan İşlev Uygulaması, hizmet yapılandırmasıyla aynı modu kullanmalıdır. İşlev Uygulaması kapsayıcılar için yapılandırılmışsa ancak azure.yaml kod dağıtımını seçerse veya tersi, azd deploy karşıya yüklemeden önce durur ve uyuşmazlığı bildirir.

İşlev kodunu yayınla

Kaynak proje, desteklenen dil ve host: function ile kod tabanlı işlev hizmetini yapılandırın:

services:
  api:
    project: ./src/api
    language: ts
    host: function

azd sırasında azd deploy projeyi derler, .funcignore dışlamalarını uygular, zip arşivi oluşturur ve paketi Azure İşlevleri dağıtım API'sini kullanarak karşıya yükler.

Bicep veya Terraform'unuz, azd-service-name içinde azure.yaml kullanarak kaynağı tanımlamadığınız sürece kod tabanlı bir İşlev Uygulaması sağlamalı ve bunu hizmet adına ayarlanmış resourceName ile etiketlemelidir. Kod olarak altyapı aracılığıyla barındırma planı, çalışma zamanı, depolama, kimlikler, ağ ve uygulama ayarlarını yapılandırın.

Kod dağıtımı için uzak derlemeleri yapılandırma

Üst düzey remoteBuild hizmet düzeyi özelliği yalnızca Flex Consumption planındaki kod tabanlı İşlev Uygulamaları için geçerlidir. Azure İşlevleri’ın karşıya yüklenen paketi oluşturmak için Oryx kullanıp kullanmayacağını denetler:

services:
  api:
    project: ./src/api
    language: python
    host: function
    remoteBuild: true

Flex Consumption'da remoteBuild belirtmediğinizde, azd dil ve paket içeriğine göre bir varsayılan seçer:

Language Varsayılan davranış
JavaScript veya TypeScript .funcignore, node_modules öğesini dışladığında veya hiçbir .funcignore dosyası mevcut olmadığında uzak derlemeyi kullanır. Aksi takdirde, yerel olarak oluşturulmuş paket kullanılır.
Python Uzak derleme kullanılıyor.
Go Yerel olarak derler. Go Function Apps uzaktan derlemeyi desteklemez.
Desteklenen diğer diller Yerel olarak derlenmiş paketi kullanır.

JavaScript ve TypeScript için, açıkça yapılandırılmış remoteBuild değerinin, bu dosya mevcut olduğunda .funcignore ile uyumlu olması gerekir. .funcignore öğesini, node_modulesremoteBuild: true öğesini hariç tuttuğunda ayarlayın. node_modules, pakette remoteBuild: false içerdiğinde .funcignore ayarlayın.

Flex olmayan planlar için en üst düzey remoteBuild özelliği ayarlamayın. Desteklenen başka bir planda bir Oryx derlemesini etkinleştirmek için ENABLE_ORYX_BUILD=true ve SCM_DO_BUILD_DURING_DEPLOYMENT=true'yi altyapınızda İşlev Uygulaması ayarları olarak yapılandırın.

Kapsayıcıya alınmış işlev dağıtma

Dockerfile içeren bir kaynak proje için language: docker öğesini ayarlayın veya kaynak dili koruyun ve docker.path belirtin.

Aşağıdaki örnekte Dockerfile içeren bir TypeScript projesi kullanılır:

services:
  api:
    project: ./src/api
    language: ts
    host: function
    docker:
      path: ./Dockerfile

Yerel proje olmadan önceden oluşturulmuş bir görüntüyü de dağıtabilirsiniz:

services:
  api:
    host: function
    image: myregistry.azurecr.io/functions/api:1.0

Önceden oluşturulmuş bir görüntü için bunu atlayın veya bunu docker olarak ayarlayın. project öğesini image ile birleştirmeyin.

Kapsayıcı dağıtımı sırasında: azd

  1. Görüntüyü yerel olarak veya uzaktan oluşturur veya yapılandırılmış önceden oluşturulmuş görüntüyü belirler.
  2. Yayımlama gerektiğinde görüntüyü proje için yapılandırılan ACR örneğinde yayımlar.
  3. İşlev Uygulaması'nı linuxFxVersion sürümünden DOCKER|<image> sürümüne güncelleştirir.
  4. Ana Function App sitesine dağıtılır.

Üst düzey hizmet remoteBuild özelliği kapsayıcılar için geçerli değildir. ACR Görevleri ile kapsayıcı görüntüsü oluşturmak için docker.remoteBuild kullanın:

services:
  api:
    project: ./src/api
    language: docker
    host: function
    docker:
      path: ./Dockerfile
      remoteBuild: true

Kapsayıcıya hazır bir İşlev Uygulaması oluşturma

azd deploy imaj başvurusunu güncelleştirir, ancak kod tabanlı bir İşlev Uygulamasını kapsayıcı tabanlı İşlev Uygulamasına dönüştürmez. Altyapınızın dağıtımdan önce uyumlu bir alan sağlaması gerekir.

Requirement Details
Linux Function App Azure İşlevleri Premium veya Ayrılmış (App Service) planında Linux İşlev Uygulaması oluşturma Flex Consumption özel kapsayıcıları desteklemez. Bu host: function iş akışı Microsoft.Web/sites hedefler, Azure Container Apps üzerinde barındırılan Azure İşlevleri'ı değil.
Konteyner sitesi yapılandırması Site türünü linux, container ve functionapp içerecek şekilde ayarlayın. DOCKER\|<image> öğesini bir linuxFxVersion değeriyle başlatın. azd deploy onun yerini aldığı için yer tutucu görüntü yeterlidir.
Konteyner kaydı Kaynak derlemeleri için bir ACR örneği sağlayın ve AZURE_CONTAINER_REGISTRY_ENDPOINT altyapı çıktısında oturum açma sunucusunu kullanıma sunun veya docker.registry öğesini hizmet için yapılandırın. Tam nitelikli, önceden oluşturulmuş image ayrı bir yayımlama kayıt deposu olmadan doğrudan kullanılabilir.
Kayıt defteri erişimi Yayımlama gerektiğinde, görüntüyü yayımlayan kimliğe hedef kayda push etme izni verin. Ayrıca, dağıtılan görüntüyü çekmek için Function App’i yapılandırın. Özel ACR görüntüleri için İşlev Uygulamasının yönetilen kimliğine çekme erişimi verin ve siteyi yönetilen kimlik kimlik bilgilerini kullanacak şekilde yapılandırın. Başka bir özel kayıt defteri için altyapınızda uygun çekme kimlik bilgilerini yapılandırın.
İşlev ayarları FUNCTIONS_WORKER_RUNTIME, AzureWebJobsStorage ve FUNCTIONS_EXTENSION_VERSION gibi gerekli ayarları Bicep veya Terraform aracılığıyla yapılandırın.
Kaynak bulma değeri azd-service-name içindeki hizmet adıyla eşleşen bir azure.yaml etiketi uygulayın veya resourceName öğesini açıkça ayarlayın.

function konağı için hizmet düzeyi env ayarları desteklenmez. Bunun yerine altyapınızda İşlev Uygulaması ayarlarını tanımlayın.

Dağıtım yuvaları hakkında bilgi edinme

azd her zaman bir function hizmeti ana Function App sitesine dağıtır. İşlev Uygulaması yuvalarını bulmaz, istemez veya bunlara dağıtım yapmaz. AZD_DEPLOY_{SERVICE}_SLOT_NAME gibi App Service yuva ayarları, bir İşlev Uygulaması dağıtımını etkilemez.

yuva tabanlı Functions sürüm sürecine ihtiyacınız varsa, yuvayı ve dağıtımı yerleşik host: function iş akışının dışında yönetin.

İşlevler ve App Service konaklarını karşılaştırma

İşlevler ve App Service, Microsoft.Web/sites kaynak türünü paylaşır, ancak iş yüküyle eşleşen ana bilgisayarı seçin:

Behavior function ana bilgisayar appservice ana bilgisayar
İş yükü Olay temelli Azure İşlevleri Web uygulamaları ve API'ler
Kod dağıtımı Azure İşlevleri zip dağıtım akışını kullanır App Service dağıtım akışını kullanır
Konteyner dağıtımı Sitenin kapsayıcı tabanlı olduğunu doğruladıktan sonra İşlev Uygulaması görüntüsünü güncelleştirir Sitenin kapsayıcıya hazır olduğunu doğruladıktan sonra Web Uygulaması görüntüsünü güncelleştirir
Uzaktan kod derleme Esnek Tüketim İşlev Uygulamaları için hizmet düzeyi remoteBuild seçeneğini destekler İşlevler remoteBuild seçeneğini kullanmıyor
Dağıtım alanları Her zaman ana siteye yayımlar azd App Service slot iş akışını destekler
Hizmet düzeyi env Desteklenmez; altyapıda İşlev Uygulaması ayarlarını kullanın Altyapıda uygulama ayarlarını yapılandırma