Azure İşlevleri geliştirici kılavuzu

Azure Işlevlerinde belirli işlevler, kullandığınız dil veya bağlama ne olursa olsun, birkaç temel teknik kavram ve bileşeni paylaşır. Belirli bir dile veya bağlamaya özgü öğrenme ayrıntılarına geçmeden önce, tüm bunlar için geçerli olan bu genel bakışı okuduğunuzdan emin olun.

Bu makalede, Azure işlevlerine genel bakış ' ıokuduğunuzu varsaymış olursunuz.

İşlev kodu

Bir işlev , Azure işlevlerinde birincil kavramdır. Bir işlev, çeşitli dillerde yazılmış ve bazı config, function. JSON dosyası olmak üzere iki önemli parça içerir. Derlenen diller için, bu yapılandırma dosyası kodunuzdaki ek açıklamalardan otomatik olarak oluşturulur. Komut dosyası dilleri için yapılandırma dosyasını kendiniz sağlamanız gerekir.

Function. JSON dosyası işlevin tetikleyicisini, bağlamalarını ve diğer yapılandırma ayarlarını tanımlar. Her işlevde tek bir tane tetikleyici olması gerekir. Çalışma zamanı, izlenecek olayları ve bir işlev yürütmesindeki verilerin içine nasıl geçirileceğini ve geri döneceğini öğrenmek için bu yapılandırma dosyasını kullanır. Aşağıda örnek bir Function. JSON dosyası verilmiştir.

{
    "disabled":false,
    "bindings":[
        // ... bindings here
        {
            "type": "bindingType",
            "direction": "in",
            "name": "myParamName",
            // ... more depending on binding
        }
    ]
}

Daha fazla bilgi için bkz. Azure işlevleri Tetikleyicileri ve bağlamaları kavramları.

bindingsÖzelliği, hem Tetikleyicileri hem de bağlamaları yapılandırdığınız yerdir. Her bağlama birkaç ortak ayarı ve belirli bir bağlama türüne özgü bazı ayarları paylaşır. Her bağlama için aşağıdaki ayarlar gereklidir:

Özellik Değerler Tür Yorumlar
tür Bağlamanın adı.

Örneğin, queueTrigger.
string
yön in, out string Bağlamanın işleve veri almak veya işlevden veri göndermek için olup olmadığını gösterir.
name İşlev tanımlayıcısı.

Örneğin, myQueue.
string İşlevdeki bağlantılı veriler için kullanılan ad. C# için bu bir bağımsız değişken adıdır; JavaScript için anahtar/değer listesindeki anahtardır.

İşlev uygulaması

Bir işlev uygulaması, Azure 'da işlevlerinizin çalıştırıldığı bir yürütme bağlamı sağlar. Bu nedenle, işlevleriniz için dağıtım ve yönetim birimidir. İşlev uygulaması, yönetilen, dağıtılan ve birlikte ölçeklenen bir veya daha fazla bağımsız işlevden oluşur. Bir işlev uygulamasındaki tüm işlevler aynı fiyatlandırma planı, dağıtım yöntemi ve çalışma zamanı sürümünü paylaşır. İşlev uygulamasını, işlevlerinizi düzenlemek ve topluca yönetmek için bir yol olarak düşünün. Daha fazla bilgi için bkz. bir işlev uygulamasını yönetme.

Not

Bir işlev uygulamasındaki tüm işlevlerin aynı dilde yazılması gerekir. Azure Işlevleri çalışma zamanının önceki sürümlerinde bu gerekli değildir.

Klasör yapısı

Belirli bir işlev uygulamasındaki tüm işlevlerin kodu, konak yapılandırma dosyası içeren bir kök proje klasöründe bulunur. Dosya host.jsçalışma zamanının yapılandırmalarını içerir ve işlev uygulamasının kök klasöründedir. Bir bin klasörü, işlev uygulamasının gerektirdiği paketleri ve diğer kitaplık dosyalarını içerir. İşlev uygulaması için gereken belirli klasör yapıları dile bağlıdır:

İşlevler çalışma zamanının 2.x ve üst sürümünde, işlev uygulamasındaki tüm işlevlerin aynı dil yığınını paylaşması gerekir.

Yukarıdaki, bir Işlev uygulaması için varsayılan (ve önerilen) klasör yapısıdır. Bir işlevin kodunun dosya konumunu değiştirmek istiyorsanız, scriptFile function. JSON dosyasının bölümünü değiştirin. Ayrıca, Azure 'daki işlev uygulamanıza projenizi dağıtmak için paket dağıtımı kullanmanızı öneririz. Ayrıca, sürekli tümleştirme ve dağıtım ve Azure DevOps gibi mevcut araçları da kullanabilirsiniz.

Not

Bir paketi el ile dağıtıyorsanız, Host. JSON dosyanızı ve işlev klasörlerinizi doğrudan klasörüne dağıttığınızdan emin olun wwwroot . wwwrootDağıtımlarınıza klasörü eklemeyin. Aksi takdirde, klasörler ile biter wwwroot\wwwroot .

Yerel araçları ve yayımlamayı kullanma

işlev uygulamaları Visual Studio, Visual Studio Code, ıntellij, tutulmave Azure Functions Core Toolsgibi çeşitli araçlar kullanılarak yazılabilir ve yayımlanabilir. Daha fazla bilgi için bkz. Azure işlevlerini yerel olarak kod ve testetme.

Azure portal işlevleri düzenleme

Azure portal yerleşik Işlevler Düzenleyicisi kodunuzu ve function. JSON dosyanızı doğrudan satır içinde güncelleştirmenize olanak tanır. Bu yalnızca küçük değişiklikler veya kavram provaları için önerilir-en iyi yöntem, VS Code gibi bir yerel geliştirme aracı kullanmaktır.

Paralel yürütme

Çoklu iş parçacıklı bir işlev çalışma zamanının daha hızlı bir şekilde tetiklenmesi durumunda, çalışma zamanı işlevi paralel olarak birden çok kez çağırabilir. Bir işlev uygulaması Tüketim barındırma planınıkullanıyorsa, işlev uygulaması otomatik olarak ölçeklendirebilir. İşlev uygulamasının her örneği, uygulamanın tüketim barındırma planı üzerinde mi yoksa düzenli bir App Service barındırma planıüzerinde mi çalıştığı, birden çok iş parçacığı kullanarak eşzamanlı işlev çağrılarını paralel olarak işleyebilir. Her işlev uygulama örneğindeki maksimum eşzamanlı işlev çağırma sayısı, kullanılan tetikleyici türüne ve işlev uygulamasındaki diğer işlevler tarafından kullanılan kaynaklara göre değişir.

İşlevler çalışma zamanı sürümü oluşturma

Uygulama ayarını kullanarak Işlevler çalışma zamanının sürümünü yapılandırabilirsiniz FUNCTIONS_EXTENSION_VERSION . Örneğin, "~ 3" değeri, işlev uygulamanızın ana sürümü olarak 3. x kullanacağını gösterir. İşlev uygulamaları, yayımlandıklarında her yeni küçük sürüme yükseltilir. İşlev uygulamanızın tam sürümünün nasıl görüntüleneceği dahil olmak üzere daha fazla bilgi için bkz. Azure işlevleri çalışma zamanı sürümlerini hedefleme.

Depolar

Azure işlevleri için kod açık kaynaktır ve GitHub depolarda depolanır:

Bağlamalar

Desteklenen tüm bağlamaların bir tablosu aşağıda verilmiştir.

Bu tabloda, çalışma zamanının ana sürümlerinde desteklenen bağlamalar Azure İşlevleri gösterir:

Tür 1.x 2.x ve daha yüksek1 Tetikleyici Girdi Çıktı
Blob depolama
Azure Cosmos DB
Azure SQL (önizleme)
Dapr3
Event Grid
Event Hubs
HTTP & web kancaları
IoT Hub’ı
Kafka2
Mobile Apps
Notification Hubs
Kuyruk depolama
RabbitMQ2
SendGrid
Service Bus
SignalR
Tablo depolama
Zamanlayıcı
Twilio

1 Sürüm 2.x çalışma zamanından başlayarak HTTP ve Zamanlayıcı dışındaki tüm bağlamaların kayıtlı olması gerekir. Bkz. Bağlama uzantılarını kaydetme.

2 Tetikleyiciler Tüketim planında desteklenmiyor. Çalışma zamanı odaklı tetikleyiciler gerektirir.

3 Yalnızca Kubernetes, IoT Edge ve diğer kendi kendine barındırılan modlarda destekler.

Bağlamalardan gelen hatalarla ilgili sorun mu yaşıyorsunuz? Azure Işlevleri bağlama hata kodları belgelerini gözden geçirin.

Bağlantılar

İşlev projeniz, bağlantı bilgilerine yapılandırma sağlayıcısından ada göre başvurur. Bağlantı ayrıntılarını doğrudan kabul etmez ve bunların ortamlar genelinde değiştirilmesine izin verir. Örneğin, bir tetikleyici tanımı bir connection özelliği içerebilir. Bu bir bağlantı dizesine başvurabilir, ancak bağlantı dizesini doğrudan bir içinde ayarlayamazsınız function.json . Bunun yerine, connection bağlantı dizesini içeren bir ortam değişkeninin adına ayarlanır.

Varsayılan yapılandırma sağlayıcısı ortam değişkenlerini kullanır. bunlar, Azure işlevleri hizmetinde çalışırken veya yerel olarak geliştirilirken yerel ayarlar dosyasından uygulama Ayarlar göre ayarlanabilir.

Bağlantı değerleri

Bağlantı adı tek bir tam değere çözümlenirse, çalışma zamanı, genellikle bir gizli dizi içeren bağlantı dizesi olarak değeri tanımlar. Bağlantı dizesinin ayrıntıları, bağlanmak istediğiniz hizmet tarafından tanımlanır.

Ancak, bir bağlantı adı aynı zamanda birden fazla yapılandırma öğesi koleksiyonuna başvurabilir, kimlik tabanlı bağlantılarıyapılandırmaya yarar vardır. Ortam değişkenleri, Çift alt çizgi ile biten paylaşılan bir ön ek kullanılarak bir koleksiyon olarak değerlendirilir __ . Bu gruba, bu önek için bağlantı adı ayarlanarak izin verebilirsiniz.

Örneğin, connection bir Azure Blob tetikleyici tanımının özelliği "Storage1" olabilir. "Storage1" adlı bir ortam değişkeni tarafından yapılandırılan tek bir dize değeri olmadığı sürece, Storage1__blobServiceUri bağlantı özelliğini bilgilendirmek için adlı bir ortam değişkeni kullanılabilir blobServiceUri . Bağlantı özellikleri her hizmet için farklıdır. Bağlantıyı kullanan bileşen için belgelere bakın.

Kimlik tabanlı bağlantı yapılandırma

Bir Azure İşlevleri gizli bilgi yerine kimlik kullanmak üzere yalıtabilirsiniz. Destek, bağlantıyı kullanan uzantıya bağlıdır. Bazı durumlarda, bağlanmakta olduğu hizmet kimlik tabanlı bağlantıları desteklese de İşlevler'de bağlantı dizesi hala gerekli olabilir. İşlev uygulamalarınızı yönetilen kimliklerle yapılandırma öğreticisi için kimlik tabanlı bağlantılar ile işlev uygulaması oluşturma öğreticisi'ne bakın.

Kimlik tabanlı bağlantılar aşağıdaki bileşenler tarafından de desteklemektedir:

Bağlantı kaynağı Desteklenen planlar Daha fazla bilgi edinin
Azure Blob tetikleyicileri ve bağlamaları Tümü Uzantı sürümü 5.0.0 veya sonraki sürümler
Azure Kuyruğu tetikleyicileri ve bağlamaları Tümü Uzantı sürümü 5.0.0 veya sonraki sürümler
Azure Event Hubs tetikleyicileri ve bağlamaları Tümü Uzantı sürümü 5.0.0 veya sonraki sürümler
Azure Service Bus tetikleyicileri ve bağlamaları Tümü Uzantı sürümü 5.0.0 veya sonraki sürümler
Azure Cosmos DB tetikleyicileri ve bağlamaları - Önizleme Elastik Premium Uzantı sürümü 4.0.0-preview1 veya sonraki sürümler
Konak için gerekli depolama ("AzureWebJobsStorage") - Önizleme Tümü Kimlikle konak depolamaya bağlanma

Not

Kimlik tabanlı bağlantılar, kimlik tabanlı Dayanıklı İşlevler.

Azure Işlevleri hizmetinde barındırıldığında, kimlik tabanlı bağlantılar yönetilen bir kimlikkullanır. Sistem tarafından atanan kimlik, ve özellikleriyle kullanıcı tarafından atanan bir kimlik belirtibilse de varsayılan olarak kullanılır credential clientID . Yerel geliştirme gibi diğer bağlamlarda çalıştırıldığında geliştirici kimliğiniz bunun yerine özelleştirilebilir. Bkz. kimlik tabanlı bağlantılarla yerel geliştirme.

Kimliğe izin ver

Kullanılan kimliğin istenen eylemleri gerçekleştirmek için izinleri olması gerekir. Azure RBAC 'de, bu izinleri sağlayan yerleşik veya özel roller kullanarak bir rol atamanızgerekir.

Önemli

Bazı izinler, tüm bağlamlarda gerekli olmayan hedef hizmet tarafından açığa çıkabilir. Mümkün olduğunda, en az ayrıcalık ilkesine bağlı olarak yalnızca kimlik gerekli ayrıcalıkları veriliyor. Örneğin, uygulamanın yalnızca bir veri kaynağından okuyabilmesi gerekiyorsa, yalnızca okuma iznine sahip olan bir rol kullanın. Bu hizmetin yazılmasına izin veren bir rol atamak uygun değildir, çünkü bu, okuma işlemi için aşırı izindir. Benzer şekilde, rol atamasının yalnızca okunması gereken kaynaklar üzerinde kapsam olmasını sağlamak isteyeceksiniz.

Her bileşenin izinleri hakkında bilgi edinmek için aşağıdaki sekmeyi seçin:

Çalışma zamanında blob kapsayıcınıza erişim sağlayan bir rol ataması oluşturmanız gerekir. Sahip gibi yönetim rolleri yeterli değildir. Aşağıdaki tabloda blob depolama uzantısı normal çalışma sırasında kullanırken önerilen Depolama rolleri gösterir. Uygulamanıza, yazmakta olduğu koda göre ek izinler gerekli olabilir.

Bağlama türü Örnek yerleşik roller
Tetikleyici [Depolama Blob Verileri Sahibi ve] Depolama [Kuyruk Verileri Katkıda Bulunanı]1
Giriş bağlaması Depolama Blob Verileri Okuyucusu
Çıkış bağlaması Depolama Blob Verileri Sahibi

1 Blob tetikleyicisi varsayılan olarak azure kuyruklarını dahili olarak kullanır. Bu nedenle, iletileri [Depolama almak için Kuyruk Verileri Katkıda Bulunanı] izinlerini de gerektirir.

Kimlik tabanlı bağlantılar için ortak özellikler

Azure hizmeti için kimlik tabanlı bağlantı aşağıdaki ortak özellikleri kabul eder; burada tetikleyici veya bağlama tanımında <CONNECTION_NAME_PREFIX> connection özelliğinizin değeridir:

Özellik Ortam değişkeni şablonu Description
Belirteç Kimlik Bilgisi <CONNECTION_NAME_PREFIX>__credential Bağlantı için bir belirteci nasıl elde etmek gerektiğini tanımlar. Yalnızca kullanıcı tarafından atanan bir kimlik belirtirken, kimliğin "managedidentity" olarak ayarlanmış olması gerekir. Bu yalnızca hizmette barındırılan Azure İşlevleri geçerlidir.
İstemci Kimliği <CONNECTION_NAME_PREFIX>__clientId "Managedidentity" olarak ayarlanırsa, bu özellik belirteç elde edilirken credential kullanılacak kullanıcı tarafından atanan kimliği belirtir. özelliği, uygulamaya atanan kullanıcı tarafından atanan kimliğe karşılık gelen bir istemci kimliğini kabul eder. Belirtilmezse, sistem tarafından atanan kimlik kullanılır. Bu özellik, ayarlanmazken yerel geliştirme senaryolarında credential farklı şekilde kullanılır.

Verilen bağlantı türü için ek seçenekler destek olabilir. Lütfen bağlantıyı yapan bileşene ilişkin belgelere bakın.

Kimlik tabanlı bağlantılar ile yerel geliştirme

Not

Kimlik tabanlı bağlantılarla yerel geliştirme, uygulamanın güncelleştirilmiş Azure Functions Core Tools. şu anda yüklü olan sürümü çalıştırarak kontrol func -v edin. İşlevler v3 için sürümü veya 3.0.3904 sonraki bir sürümü kullanın. İşlevler v4 için sürümü veya 4.0.3904 sonraki bir sürümü kullanın.

Yukarıdaki yapılandırma, yerel olarak çalıştırarak çalışma zamanının yerel geliştirici kimliğinizi kullanmalarını söyler. Bağlantı, sırasıyla aşağıdaki konumlardan bir belirteç almaya çalışacak:

  • Microsoft uygulamaları arasında paylaşılan yerel önbellek
  • Visual Studio'de geçerli kullanıcı bağlamı
  • Visual Studio Code'daki geçerli kullanıcı bağlamı
  • Azure CLI'daki geçerli kullanıcı bağlamı

Bu seçeneklerden hiçbiri başarılı olursa bir hata oluşur.

Bu, geliştirici kimliğinizi kullanıyor olduğundan, geliştirme kaynaklarına karşı zaten bazı rolleriniz olabilir, ancak bunlar veri erişimi sağlamayabilirsiniz. Sahip gibi yönetim rolleri yeterli değildir. Her bileşen için bağlantılar için hangi izinlerin gerekli olduğunu bir kez daha denetleyin ve bunları kendinize atayın.

Bazı durumlarda, farklı bir kimliğin kullanımını belirtmek istediğiniz durumlar olabilir. Bir hizmet sorumlusu için istemci kimliğine ve gizli anahtarına göre alternatif kimliğe işaret Azure Active Directory yapılandırma özellikleri ebilirsiniz. Bu yapılandırma seçeneği, hizmette barındırılan Azure İşlevleri desteklanmaz. Yerel makineniz üzerinde bir kimlik ve gizli kod kullanmak için bağlantıyı aşağıdaki ek özelliklerle tanımlayın:

Özellik Ortam değişkeni şablonu Description
Kiracı Kimliği <CONNECTION_NAME_PREFIX>__tenantId Kiracı Azure Active Directory (dizin) kimliği.
İstemci Kimliği <CONNECTION_NAME_PREFIX>__clientId Kiracıda uygulama kaydının istemci (uygulama) kimliği.
Gizli anahtar <CONNECTION_NAME_PREFIX>__clientSecret Uygulama kaydı için oluşturulan bir istemci gizli kodu.

Azure Bloblarına kimlik local.settings.json tabanlı bağlantı için gereken özelliklere bir örnek:

{
  "IsEncrypted": false,
  "Values": {
    "<CONNECTION_NAME_PREFIX>__blobServiceUri": "<blobServiceUri>",
    "<CONNECTION_NAME_PREFIX>__queueServiceUri": "<queueServiceUri>",
    "<CONNECTION_NAME_PREFIX>__tenantId": "<tenantId>",
    "<CONNECTION_NAME_PREFIX>__clientId": "<clientId>",
    "<CONNECTION_NAME_PREFIX>__clientSecret": "<clientSecret>"
  }
}

Kimlikle konak depolamaya bağlanma (Önizleme)

Azure İşlevleri, zamanlayıcı tetikleyicilerinin tekil olarak yürütülmesi ve varsayılan uygulama anahtarı depolaması gibi temel davranışlar için varsayılan olarak "AzureWebJobsStorage" bağlantısını kullanır. Bu, kimliklerden de yararlanan bir şekilde yalıtıldığında.

Dikkat

İşlevler'in diğer bileşenleri varsayılan davranışlar için "AzureWebJobsStorage" kullanır. Azure Blobları ve azure blobları için tetikleyiciler ve bağlamalar da dahil olmak üzere bu tür bağlantıları desteklemeen eski uzantı sürümlerini kullanıyorsanız bu bağlantıyı kimlik tabanlı bir Event Hubs. Benzer şekilde, Linux Tüketimi'de sunucu tarafı derlemesi kullanılırken dağıtım yapıtları için kullanılır ve bunu etkinleştirirsanız, bir dış dağıtım paketi AzureWebJobsStorage aracılığıyla dağıtmanız gerekir.

Ayrıca, bazı uygulamalar tetikleyicileri, bağlamaları ve/veya işlev kodundaki diğer depolama bağlantıları için "AzureWebJobsStorage" işlevini yeniden kullanır. "AzureWebJobsStorage" ifadesinin tüm kullanımlarının bu bağlantıyı bir bağlantı dizesinden değiştirmeden önce kimlik tabanlı bağlantı biçimini kullana olduğundan emin olun.

"AzureWebJobsStorage" için kimlik tabanlı bir bağlantı kullanmak üzere aşağıdaki uygulama ayarlarını yapılandırabilirsiniz:

Ayar Açıklama Örnek değer
AzureWebJobsStorage__blobServiceUri HTTPS şemasını kullanarak depolama hesabının blob hizmetinin veri düzlemi URI'si. https://<storage_account_name>.blob.core.windows.net
AzureWebJobsStorage__queueServiceUri HTTPS şemasını kullanarak depolama hesabının kuyruk hizmetinin veri düzlemi URI'si. https://<storage_account_name>.queue.core.windows.net

Kimlik tabanlı bağlantıların ortak özellikleri de ayarlanmış olabilir.

Genel Azure için varsayılan DNS soneki ve hizmet adını kullanan bir depolama hesabı kullanıyorsanız, biçimi takip ediyorsanız, bunun yerine depolama hesabınıza https://<accountName>.blob/queue/file/table.core.windows.net AzureWebJobsStorage__accountName göre ayarlayın. Bu hesap için blob ve kuyruk uç noktaları gönderilir. Depolama hesabı bağımsız bir bulutta veya özel bir DNS'ye sahipse bu işlem çalışmaz.

Ayar Açıklama Örnek değer
AzureWebJobsStorage__accountName Bir depolama hesabının hesap adı, yalnızca hesap bir sogeign bulutu içinde değilse ve özel bir DNS 'e sahip değilse geçerlidir. <storage_account_name>

Çalışma zamanında "AzureWebJobsStorage" için depolama hesabına erişim sağlayan bir rol ataması oluşturmanız gerekecektir. Sahip gibi yönetim rolleri yeterli değildir. [Depolama Blob veri sahibi] rolü, işlevlerin temel gereksinimlerini içerir konak depolama-çalışma zamanı, bloblara hem okuma hem de yazma erişimi ve kapsayıcı oluşturma yeteneği gerektirir. blob tetikleyicisi 'nin kullanımıyla ilgili olarak bazı durumlar vardır; burada [Depolama kuyruğu verilerinin katkıda] bulunanı de gereklidir. Başka amaçlar için "AzureWebJobsStorage" kullanırsanız ek izinlere ihtiyacınız olabilir.

Raporlama sorunları

Öğe Açıklama Bağlantı
Çalışma Zamanı Betik Konağı, Tetikleyiciler & bağlamaları, dil desteği Sorun dosya
Şablonlar Oluşturma şablonuyla Ilgili kod sorunları Sorun dosya
Portal Kullanıcı arabirimi veya deneyim sorunu Sorun dosya

Sonraki adımlar

Daha fazla bilgi için aşağıdaki kaynaklara bakın: