Azure İşlevleri için depolama hakkında dikkat edilmesi gerekenler

İşlev uygulaması örneği oluştururken, Azure İşlevleri bir Azure Depolama hesabı gerektirir. aşağıdaki depolama hizmetleri işlev uygulamanız tarafından kullanılabilir:

Depolama birimi hizmeti İşlev kullanımı
Azure Blob Depolama Bağlamaların durumunu ve işlev anahtarlarını1 koruyun.
Dayanıklı İşlevler görev hub'ları için varsayılan olarak kullanılır.
Linux Tüketimi uzak derlemesi için işlev uygulama kodunu depolamak veya dış paket URL dağıtımlarının bir parçası olarak kullanılabilir.
Azure Dosyalar 2 İşlev uygulama kodunuzu Tüketim Planı ve Premium Plan'da depolamak ve çalıştırmak için kullanılan dosya paylaşımı.
Azure Kuyruk depolama Dayanıklı İşlevler görev hub'ları için varsayılan olarak kullanılır. Belirli Azure İşlevleri tetikleyicilerinde hata ve yeniden işleme için kullanılır. Blob depolama tetikleyicisi tarafından nesne izleme için kullanılır.
Azure Tablo Depolama Dayanıklı İşlevler görev hub'ları için varsayılan olarak kullanılır.

1 Blob depolama, işlev anahtarları için varsayılan depodur, ancak alternatif bir depo yapılandırabilirsiniz.

2 Azure Dosyalar varsayılan olarak ayarlanır, ancak belirli koşullar altında Azure Dosyalar olmadan bir uygulama oluşturabilirsiniz.

Dikkat edilmesi gereken önemli hususlar

İşlev uygulamalarınız tarafından kullanılan depolama hesaplarıyla ilgili olarak aşağıdaki olguları dikkate almanız gerekir:

  • İşlev uygulamanız Tüketim planında veya Premium planda barındırıldığında, işlev kodunuz ve yapılandırma dosyalarınız bağlı depolama hesabında Azure Dosyalar depolanır. Bu depolama hesabını sildiğinizde içerik silinir ve kurtarılamaz. Daha fazla bilgi için bkz. Depolama hesabı silindi

  • İşlev kodu, erişim anahtarları ve hizmetle ilgili diğer önemli veriler gibi önemli veriler depolama hesabında kalıcı hale gelebilir. İşlev uygulamaları tarafından kullanılan depolama hesaplarına erişimi aşağıdaki yollarla dikkatle yönetmeniz gerekir:

    • Uygulamaların ve kullanıcıların depolama hesabına erişimini en düşük ayrıcalıklı modele göre denetle ve sınırla. Depolama hesabına yönelik izinler, atanan roldeki veri eylemlerinden veya listKeys işlemini gerçekleştirme izni aracılığıyla gelebilir.

    • Depolama hesabınızda hem denetim düzlemi etkinliğini (anahtar alma gibi) hem de veri düzlemi işlemlerini (bloba yazma gibi) izleyin. Depolama günlüklerini Azure Depolama dışında bir konumda tutabilirsiniz. Daha fazla bilgi için bkz. Depolama günlükleri.

Depolama hesabı gereksinimleri

azure portalında işlev uygulaması oluşturma akışının bir parçası olarak oluşturulan Depolama hesapların yeni işlev uygulamasıyla çalışması garanti edilir. Mevcut bir depolama hesabını kullanmayı seçtiğinizde, sağlanan liste desteklenmeyen bazı depolama hesaplarını içermez. aşağıdaki kısıtlamalar işlev uygulamanız tarafından kullanılan depolama hesapları için geçerlidir, bu nedenle mevcut bir depolama hesabının bu gereksinimleri karşıladığından emin olmanız gerekir:

  • Hesap türünün Blob, Kuyruk ve Tablo depolamayı desteklemesi gerekir. Bazı depolama hesapları kuyruk ve tabloları desteklemez. Bu hesaplar yalnızca blob depolama hesapları ve Azure Premium Depolama'dır. Depolama hesabı türleri hakkında daha fazla bilgi edinmek için bkz. Depolama hesaba genel bakış.

  • Azure portalda işlev uygulamanızı oluştururken güvenlik duvarı veya sanal özel ağ kullanarak güvenli hale gelmiş bir depolama hesabını kullanamazsınız. Ancak portal şu anda bu güvenli depolama hesaplarını filtrelemez. İşlev uygulamanızla güvenli depolama hesabı kullanmayı öğrenmek için bkz. Azure İşlevleri ile güvenli depolama hesabı kullanma.

  • Tüketim planında barındırılan işlev uygulamalarıyla güvenli depolama hesaplarını kullanamazsınız.

  • Portalda işlev uygulamanızı oluştururken, yalnızca oluşturduğunuz işlev uygulamasıyla aynı bölgede bulunan mevcut bir depolama hesabını seçmenize izin verilir. Bu bir performans iyileştirmesidir ve katı bir sınırlama değildir. Daha fazla bilgi için bkz. hesap konumunu Depolama.

  • İşlev uygulamanızı kullanılabilirlik alanı desteği etkinleştirilmiş bir planda oluştururken yalnızca alanlar arası yedekli depolama hesapları desteklenir.

Dağıtım otomasyonunu kullanarak Elastik Premium veya Ayrılmış (App Service) planında işlev uygulamaları oluşturabilirsiniz. Ancak ARM şablonunuz veya Bicep dosyanıza belirli ağ yapılandırmaları eklemeniz gerekir. Bu ayarları ve kaynakları eklemediğinizde otomatik dağıtımınız doğrulamada başarısız olabilir. Daha fazla bilgi için bkz . Güvenli dağıtımlar.

Depolama hesabı kılavuzu

Her işlev uygulamasının çalışması için bir depolama hesabı gerekir. Bu hesap silindiğinde işlev uygulamanız çalışmaz. Depolamayla ilgili sorunları gidermek için bkz . Depolamayla ilgili sorunları giderme. Aşağıdaki diğer önemli noktalar işlev uygulamaları tarafından kullanılan Depolama hesabı için geçerlidir.

Depolama hesabı konumu

En iyi performans için işlev uygulamanızın aynı bölgede bir depolama hesabı kullanması gerekir ve bu da gecikme süresini azaltır. Azure portalı bu en iyi yöntemi uygular. Bazı nedenlerden dolayı işlev uygulamanızdan farklı bir bölgede depolama hesabı kullanmanız gerekiyorsa, işlev uygulamanızı portalın dışında oluşturmanız gerekir.

Depolama hesabının işlev uygulaması tarafından erişilebilir olması gerekir. Güvenli bir depolama hesabı kullanmanız gerekiyorsa, depolama hesabınızı bir sanal ağ ile kısıtlamayı göz önünde bulundurun.

hesap bağlantısı ayarını Depolama

İşlev uygulamaları varsayılan olarak, bağlantıyı AzureWebJobs Depolama uygulama ayarında depolanan bir bağlantı dizesi olarak yapılandırabilirAzureWebJobsStorage, ancak AzureWebJobs Depolama'ı gizli dizi olmadan kimlik tabanlı bir bağlantı kullanacak şekilde de yapılandırabilirsiniz.

Tüketim planında (yalnızca Windows) veya Elastik Premium planında (Windows veya Linux) çalışan işlev uygulamaları, dinamik ölçeklendirmeyi etkinleştirmek için gereken görüntüleri depolamak için Azure Dosyalar kullanabilir. Bu planlar için WEBSITE_CONTENTAZUREFILECONNECTIONSTRING ayarında depolama hesabının bağlantı dizesi ve WEBSITE_CONTENTSHARE ayarında dosya paylaşımının adını ayarlayın. Bu genellikle için AzureWebJobsStoragekullanılan hesaptır. Azure Dosyalar kullanmayan bir işlev uygulaması da oluşturabilirsiniz, ancak ölçeklendirme sınırlı olabilir.

Not

Depolama anahtarlarını yeniden oluştururken depolama hesabı bağlantı dizesi güncelleştirilmelidir. Depolama anahtarı yönetimi hakkında daha fazla bilgiyi burada bulabilirsiniz.

Paylaşılan depolama hesapları

Birden çok işlev uygulamasının aynı depolama hesabını sorunsuz bir şekilde paylaşması mümkündür. Örneğin, Visual Studio'da Azurite depolama öykünücüsü kullanarak birden çok uygulama geliştirebilirsiniz. Bu durumda öykünücü tek bir depolama hesabı gibi davranır. İşlev uygulamanız tarafından kullanılan depolama hesabı, uygulama verilerinizi depolamak için de kullanılabilir. Ancak bu yaklaşım üretim ortamında her zaman iyi bir fikir değildir.

Konak kimliği çakışmalarını önlemek için ayrı depolama hesapları kullanmanız gerekebilir.

Yaşam döngüsü yönetimi ilkesiyle ilgili dikkat edilmesi gerekenler

İşlev uygulamanız tarafından kullanılan Blob Depolama hesabınıza yaşam döngüsü yönetimi ilkeleri uygulamamalısınız. İşlevler, işlev erişim anahtarları gibi önemli bilgileri kalıcı hale getirmek için Blob depolamayı kullanır ve ilkeler İşlevler konağı için gereken blobları (anahtarlar gibi) kaldırabilir. İlkeleri kullanmanız gerekiyorsa, veya scmön ekli azure-webjobs İşlevler tarafından kullanılan kapsayıcıları hariç tutun.

günlükleri Depolama

depolama hesabında işlev kodu ve anahtarlar kalıcı olabileceğinden, etkinliğin depolama hesabında günlüğe kaydedilmesi yetkisiz erişimi izlemek için iyi bir yoldur. Azure İzleyici kaynak günlükleri, depolama veri düzleminde olayları izlemek için kullanılabilir. Bu günlükleri yapılandırma ve inceleme hakkında ayrıntılı bilgi için bkz. Azure Depolama izleme.

Azure İzleyici etkinlik günlüğü, listKeys işlemi de dahil olmak üzere denetim düzlemi olaylarını gösterir. Ancak, anahtarların veya diğer kimlik tabanlı veri düzlemi işlemlerinin sonraki kullanımını izlemek için depolama hesabı için kaynak günlüklerini de yapılandırmanız gerekir. Normal İşlevler işlemlerinin dışındaki verilerde yapılan değişiklikleri belirleyebilmek için en azından Depolama Write günlük kategorisi etkinleştirilmelidir.

Geniş kapsamlı depolama izinlerinin olası etkisini sınırlamak için bu günlükler için Log Analytics gibi bir tarihsiz hedef kullanmayı göz önünde bulundurun. Daha fazla bilgi için bkz. İzleme Azure Blob Depolama.

Depolama performansını iyileştirme

Performansı en üst düzeye çıkarmak için her işlev uygulaması için ayrı bir depolama hesabı kullanın. Hem yüksek hacimli depolama işlemleri oluşturan Dayanıklı İşlevler veya Olay Hub'ı ile tetiklenen işlevleriniz olduğunda bu özellikle önemlidir. Uygulama mantığınız Azure Depolama ile doğrudan (Depolama SDK kullanarak) veya depolama bağlamalarından biri aracılığıyla etkileşime geçtiğinde, ayrılmış bir depolama hesabı kullanmanız gerekir. Örneğin, blob depolamaya veri yazan Olay Hub'ı ile tetiklenen bir işleviniz varsa biri işlev uygulaması, diğeri de işlev tarafından depolanan bloblar için olmak üzere iki depolama hesabı kullanın.

Bloblarla çalışma

İşlevler için önemli bir senaryo, görüntü işleme veya yaklaşım analizi gibi blob kapsayıcılarındaki dosyaların dosya işlenmesidir. Daha fazla bilgi edinmek için bkz . Dosya yüklemelerini işleme.

Blob kapsayıcısı üzerinde tetikleme

Depolama kapsayıcısında bloblarda yapılan değişikliklere göre işlev kodunuzu yürütmenin çeşitli yolları vardır. Gereksinimlerinize en uygun işlev tetikleyicisini belirlemek için aşağıdaki tabloyu kullanın:

Dikkat edilmesi gereken noktalar Blob depolama (yoklama) Blob depolama (olay tabanlı) Kuyruk depolama Event Grid
Gecikme süresi Yüksek (10 dk'ya kadar) Düşük Orta Düşük
hesap sınırlamalarını Depolama Yalnızca blob hesapları desteklenmiyor¹ genel amaçlı v1 desteklenmiyor yok genel amaçlı v1 desteklenmiyor
Uzantı sürümü Tümü v5.x+ Depolama Herhangi biri Herhangi biri
Mevcut blobları işler Yes Hayı Hayı Hayır
Filtreler Blob adı deseni Olay filtreleri yok Olay filtreleri
Olay aboneliği gerektirir Hayır Evet Hayı Evet
Yüksek ölçekli²'i destekler Hayır Evet Evet Yes
Açıklama Varsayılan tetikleyici davranışı, kapsayıcıyı güncelleştirmeler için yoklamayı kullanır. Daha fazla bilgi için Blob depolama tetikleyicisi başvurusundaki örneklere bakın. Bir olay aboneliğinden blob depolama olaylarını tüketir. Source parametresinin değerini EventGridgerektirir. Daha fazla bilgi için bkz. Öğretici: Olay aboneliği kullanarak blob kapsayıcılarında Azure İşlevleri tetikleme. Blob adı dizesi, kapsayıcıya bir blob eklendiğinde depolama kuyruğuna el ile eklenir. Bu değer doğrudan bir Kuyruk depolama tetikleyicisi tarafından aynı işlevdeki blob depolama giriş bağlamasına geçirilir. Depolama kapsayıcısından gelenlerin yanı sıra olaylar üzerinde tetikleme esnekliği sağlar. Ayrıca, işlev tetikleyen nonstorage olayları olması gerektiğinde kullanın. Daha fazla bilgi için bkz. Azure İşlevleri'da Event Grid tetikleyicileri ve bağlamalarıyla çalışma.

1 Blob depolama girişi ve çıkış bağlamaları yalnızca blob hesaplarını destekler.
2 Yüksek ölçek, içinde 100.000'den fazla blob bulunan kapsayıcılar veya saniyede 100'den fazla blob güncelleştirmesi olan depolama hesapları olarak gevşek bir şekilde tanımlanabilir.

Veri şifrelemeyi Depolama

Azure Depolama bekleyen bir depolama hesabındaki tüm verileri şifreler. Daha fazla bilgi için Bekleyen veriler için Azure Depolama şifrelemesi başlıklı makaleye bakın.

Varsayılan olarak, veriler Microsoft tarafından yönetilen anahtarlarla şifrelenir. Şifreleme anahtarları üzerinde ek denetim için blob ve dosya verilerinin şifrelenmesini sağlamak için müşteri tarafından yönetilen anahtarlar sağlayabilirsiniz. Depolama hesabına erişebilmek için bu anahtarların İşlevler için Azure Key Vault'ta bulunması gerekir. Daha fazla bilgi edinmek için bkz . Müşteri tarafından yönetilen anahtarları kullanarak bekleyenleri şifreleme.

Bölge içi veri yerleşimi

Tüm müşteri verilerinin tek bir bölgede kalması gerektiğinde, işlev uygulamasıyla ilişkili depolama hesabı, bölge içi yedekliliğe sahip bir hesap olmalıdır. Azure Dayanıklı İşlevler ile bölge içi yedekli depolama hesabı da kullanılmalıdır.

Platform tarafından yönetilen diğer müşteri verileri yalnızca şirket içinde yük dengeli bir App Service Ortamı (ASE) barındırılırken bölgede depolanır. Daha fazla bilgi edinmek için bkz . ASE bölge yedekliliği.

Konak Kimliği ile ilgili dikkat edilmesi gerekenler

İşlevler, depolanan yapıtlarda belirli bir işlev uygulamasını benzersiz olarak tanımlamak için bir konak kimliği değeri kullanır. Varsayılan olarak, bu kimlik işlev uygulamasının adından otomatik olarak oluşturulur ve ilk 32 karaktere yuvarlanır. Bu kimlik daha sonra bağlı depolama hesabında uygulama başına bağıntı ve izleme bilgileri depolanırken kullanılır. Adları 32 karakterden uzun olan işlev uygulamalarınız varsa ve ilk 32 karakter aynı olduğunda, bu kesme işlemi konak kimliği değerlerinin yinelenmesine neden olabilir. Aynı konak kimliklerine sahip iki işlev uygulaması aynı depolama hesabını kullandığında, depolanan veriler doğru işlev uygulamasına benzersiz olarak bağlanamadığından konak kimliği çakışması elde edersiniz.

Not

Bu tür bir konak kimliği harmanlaması, her iki yuva da aynı depolama hesabını kullandığında üretim yuvasındaki bir işlev uygulaması ile hazırlama yuvasındaki aynı işlev uygulaması arasında oluşabilir.

İşlevler çalışma zamanının 3.x sürümünden itibaren konak kimliği çakışması algılanır ve bir uyarı günlüğe kaydedilir. 4.x sürümünde bir hata günlüğe kaydedilir ve konak durdurulur ve sabit bir hatayla sonuçlanır. Konak kimliği çakışması hakkında daha fazla ayrıntı bu sorunda bulunabilir.

Konak kimliği çakışmalarını önleme

Konak kimliği çakışmalarını önlemek için aşağıdaki stratejileri kullanabilirsiniz:

  • Çakışmaya dahil olan her işlev uygulaması veya yuvası için ayrı bir depolama hesabı kullanın.
  • İşlev uygulamalarınızdan birini 32 karakterden daha az bir değerle yeniden adlandırın. Bu değer uygulamanın hesaplanan ana bilgisayar kimliğini değiştirir ve çakışmayı kaldırır.
  • Bir veya daha fazla çakışan uygulama için açık bir konak kimliği ayarlayın. Daha fazla bilgi edinmek için bkz . Konak Kimliğini geçersiz kılma.

Önemli

Mevcut bir işlev uygulamasıyla ilişkili depolama hesabını değiştirmek veya uygulamanın ana bilgisayar kimliğini değiştirmek, mevcut işlevlerin davranışını etkileyebilir. Örneğin Blob depolama tetikleyicisi, depolama alanındaki belirli bir konak kimliği yoluna makbuzlar yazarak blobların tek tek işlenip işlenmediğini izler. Konak kimliği değiştiğinde veya yeni bir depolama hesabına işaret ettiğinizde, önceden işlenen bloblar yeniden işlenebilir.

Konak kimliğini geçersiz kılma

bu ayarı kullanarak AzureFunctionsWebHost__hostid uygulama ayarlarında işlev uygulamanız için belirli bir konak kimliğini açıkça ayarlayabilirsiniz. Daha fazla bilgi için bkz . AzureFunctionsWebHost__hostid.

Yuvalar arasında çakışma oluştuğunda, üretim yuvası dahil olmak üzere her yuva için belirli bir konak kimliği ayarlamanız gerekir. Ayrıca, değiştirilmemeleri için bu ayarları dağıtım ayarları olarak işaretlemeniz gerekir. Uygulama ayarları oluşturmayı öğrenmek için bkz . Uygulama ayarlarıyla çalışma.

Azure Arc özellikli kümeler

İşlev uygulamanız Azure Arc özellikli bir Kubernetes kümesine dağıtıldığında, işlev uygulamanız için bir depolama hesabı gerekli olmayabilir. Bu durumda, bir depolama hesabı yalnızca işlev uygulamanız depolama gerektiren bir tetikleyici kullandığında İşlevler tarafından gereklidir. Aşağıdaki tablo, hangi tetikleyicilerin depolama hesabı gerektirebileceğini ve hangilerinin gerektirmediğini gösterir.

Gerekli değil depolama gerektirebilir
Azure Cosmos DB
HTTP
Kafka
RabbitMQ
Service Bus
Azure SQL
Blob depolama
Event Grid
Event Hubs
IoT Hub
Kuyruk depolama
SendGrid
Sinyal
Tablo depolama
Süreölçer
Twilio

Depolama alanı olmadan Azure Arc özellikli kubernetes kümesinde işlev uygulaması oluşturmak için az functionapp create Azure CLI komutunu kullanmanız gerekir. Azure CLI sürümü, appservice-kube uzantısının 0.1.7 veya sonraki bir sürümünü içermelidir. Uzantının az --version yüklü olduğunu ve doğru sürüm olduğunu doğrulamak için komutunu kullanın.

İşlev uygulaması kaynaklarınızı Azure CLI dışındaki yöntemleri kullanarak oluşturmak için mevcut bir depolama hesabı gerekir. Depolama hesabı gerektiren tetikleyicileri kullanmayı planlıyorsanız, işlev uygulamasını oluşturmadan önce hesabı oluşturmanız gerekir.

Azure Dosyalar olmadan uygulama oluşturma

Azure Dosyalar, Elastik Premium ve Linux dışı Tüketim planlarının yüksek ölçekli senaryolarda paylaşılan dosya sistemi olarak hizmet vermek için varsayılan olarak ayarlanır. Dosya sistemi platform tarafından günlük akışı gibi bazı özellikler için kullanılır, ancak öncelikle dağıtılan işlev yükünün tutarlılığını sağlar. Bir uygulama dış paket URL'si kullanılarak dağıtıldığında, uygulama içeriği ayrı bir salt okunur dosya sisteminden sunulur. Bu, işlev uygulamanızı Azure Dosyalar olmadan oluşturabileceğiniz anlamına gelir. İşlev uygulamanızı Azure Dosyalar ile oluşturursanız, yine de yazılabilir bir dosya sistemi sağlanır. Ancak, bu dosya sistemi tüm işlev uygulaması örnekleri için kullanılamayabilir.

Azure Dosyalar kullanılmadığında aşağıdaki gereksinimleri karşılamanız gerekir:

  • Dış paket URL'sinden dağıtmanız gerekir.
  • Uygulamanız paylaşılan bir yazılabilir dosya sistemine güvenemez.
  • Uygulama İşlevler çalışma zamanının 1.x sürümünü kullanamaz.
  • Azure portalı varsayılan olarak dosya sistemi günlükleri gibi istemcilerde günlük akışı deneyimleri. Bunun yerine Uygulama Analizler günlüklerine güvenmeniz gerekir.

Yukarıdakiler doğru şekilde hesaba eklenirse, uygulamayı Azure Dosyalar olmadan oluşturabilirsiniz. ve WEBSITE_CONTENTSHARE uygulama ayarlarını belirtmeden WEBSITE_CONTENTAZUREFILECONNECTIONSTRING işlev uygulamasını oluşturun. Standart dağıtım için bir ARM şablonu oluşturup iki ayarı kaldırıp şablonu dağıtarak bu ayarları önleyebilirsiniz.

İşlevler dinamik ölçeği genişletme işleminin bazı bölümlerinde Azure Dosyalar kullandığından, Tüketim ve Elastik Premium planlarında Azure Dosyalar olmadan çalışırken ölçeklendirme sınırlı olabilir.

Dosya paylaşımlarını bağlama

Bu işlev yalnızca Linux üzerinde çalışırken kullanılabilir.

Mevcut Azure Dosyalar paylaşımlarını Linux işlev uygulamalarınıza bağlayabilirsiniz. Linux işlev uygulamanıza bir paylaşım takarak mevcut makine öğrenmesi modellerini veya işlevlerinizdeki diğer verileri kullanabilirsiniz. Mevcut bir paylaşımı Linux işlev uygulamanıza bağlamak için aşağıdaki komutu kullanabilirsiniz.

az webapp config storage-account add

Bu komutta, share-name mevcut Azure Dosyalar paylaşımının adıdır ve custom-id işlev uygulamasına bağlandığında paylaşımı benzersiz olarak tanımlayan herhangi bir dize olabilir. Ayrıca, mount-path işlev uygulamanızda paylaşıma erişilen yoldur. mount-path biçiminde /dir-nameolmalıdır ve ile /homebaşlayamaz.

Tam bir örnek için Python işlev uygulaması oluşturma ve Azure Dosyalar paylaşımı bağlama içindeki betiklere bakın.

Şu anda yalnızca bir storage-type tane AzureFiles desteklenir. Belirli bir işlev uygulamasına yalnızca beş paylaşım bağlayabilirsiniz. Dosya paylaşımını bağlamak, depolama hesabı farklı bir bölgede olduğunda soğuk başlangıç süresini en az 200-300 ms veya daha fazla artırabilir.

Bağlı paylaşım, belirtilen konumdaki mount-path işlev kodunuz tarafından kullanılabilir. Örneğin, olduğunda mount-path/path/to/mount, aşağıdaki Python örneğinde olduğu gibi dosya sistemi API'lerine göre hedef dizine erişebilirsiniz:

import os
...

files_in_share = os.listdir("/path/to/mount")

Sonraki adımlar

Azure İşlevleri barındırma seçenekleri hakkında daha fazla bilgi edinin.