Azure İşlevleri için Azure Blob depolama tetikleyicisi
Blob depolama tetikleyicisi, yeni veya güncelleştirilmiş bir blob algılandığında bir işlev başlatır. Blob içeriği işlevine giriş olarak sağlanır.
İpucu
Depolama kapsayıcısında bloblarda yapılan değişikliklere göre işlev kodunuzu yürütmenin çeşitli yolları vardır. Blob depolama tetikleyicisini kullanmayı seçerseniz iki uygulama sunulduğuna dikkat edin: yoklama tabanlı bir uygulama (bu makalede başvurulmaktadır) ve olay tabanlı bir uygulama. Diğerinden daha düşük gecikme süresine sahip olduğundan olay tabanlı uygulamayı kullanmanız önerilir. Ayrıca Flex Consumption planı yalnızca olay tabanlı Blob depolama tetikleyicisini destekler.
Blob depolama tetikleyicisinin iki uygulaması ve diğer tetikleyici seçenekleri arasındaki farklar hakkında ayrıntılı bilgi için bkz . Bloblarla çalışma.
Kurulum ve yapılandırma ayrıntıları hakkında bilgi için genel bakışa bakın.
Önemli
Bu makalede, Node.js programlama modelinin birden çok sürümünü desteklemek için sekmeler kullanılır. Genel kullanıma sunulan v4 modeli, JavaScript ve TypeScript geliştiricileri için daha esnek ve sezgisel bir deneyime sahip olacak şekilde tasarlanmıştır. v4 modelinin nasıl çalıştığı hakkında daha fazla bilgi için Azure İşlevleri Node.js geliştirici kılavuzuna bakın. v3 ile v4 arasındaki farklar hakkında daha fazla bilgi edinmek için geçiş kılavuzuna bakın.
Azure İşlevleri, Python için iki programlama modelini destekler. Bağlamalarınızı tanımlama şekliniz seçtiğiniz programlama modeline bağlıdır.
Python v2 programlama modeli, doğrudan Python işlev kodunuzda dekoratörleri kullanarak bağlamaları tanımlamanıza olanak tanır. Daha fazla bilgi için bkz . Python geliştirici kılavuzu.
Bu makale her iki programlama modelini de destekler.
Örnek
C# işlevi aşağıdaki C# modlarından biri kullanılarak oluşturulabilir:
- Yalıtılmış çalışan modeli: Çalışma zamanından yalıtılmış bir çalışan işleminde çalışan derlenmiş C# işlevi. LTS ve .NET ve .NET Framework dışındaki sürümlerde çalışan C# işlevlerini desteklemek için yalıtılmış çalışan işlemi gereklidir. Yalıtılmış çalışan işlemi işlevleri için uzantılar ad alanlarını kullanır
Microsoft.Azure.Functions.Worker.Extensions.*
. - İşlem içi model: İşlevler çalışma zamanıyla aynı işlemde çalışan derlenmiş C# işlevi. Bu modelin bir varyasyonunda, İşlevler öncelikle C# portalı düzenleme için desteklenen C# betiği kullanılarak çalıştırılabilir. İşlem içi işlevlerin uzantıları ad alanlarını kullanır
Microsoft.Azure.WebJobs.Extensions.*
.
Önemli
İşlem içi model desteği 10 Kasım 2026'da sona erecektir. Tam destek için uygulamalarınızı yalıtılmış çalışan modeline geçirmenizi kesinlikle öneririz.
Aşağıdaki örnek, yalıtılmış bir çalışan işleminde çalışan ve hem blob girişi hem de blob çıkış blob bağlamaları ile blob tetikleyicisi kullanan bir C# işlevidir . İşlev, test-samples-trigger kapsayıcısında bir blob oluşturularak tetikleniyor. Test-samples-input kapsayıcısından bir metin dosyası okur ve tetiklenen dosyanın adına göre çıkış kapsayıcısında yeni bir metin dosyası oluşturur.
public static class BlobFunction
{
[Function(nameof(BlobFunction))]
[BlobOutput("test-samples-output/{name}-output.txt")]
public static string Run(
[BlobTrigger("test-samples-trigger/{name}")] string myTriggerItem,
[BlobInput("test-samples-input/sample1.txt")] string myBlob,
FunctionContext context)
{
var logger = context.GetLogger("BlobFunction");
logger.LogInformation("Triggered Item = {myTriggerItem}", myTriggerItem);
logger.LogInformation("Input Item = {myBlob}", myBlob);
// Blob Output
return "blob-output content";
}
}
Bu işlev, kapsayıcıya bir blob eklendiğinde veya güncelleştirildiğinde myblob
bir günlük yazar.
@FunctionName("blobprocessor")
public void run(
@BlobTrigger(name = "file",
dataType = "binary",
path = "myblob/{name}",
connection = "MyStorageAccountAppSetting") byte[] content,
@BindingName("name") String filename,
final ExecutionContext context
) {
context.getLogger().info("Name: " + filename + " Size: " + content.length + " bytes");
}
Aşağıdaki örnekte bir blob tetikleyici TypeScript kodu gösterilmektedir. İşlev, kapsayıcıya bir blob eklendiğinde veya güncelleştirildiğinde samples-workitems
bir günlük yazar.
Blob tetikleyici yolundaki samples-workitems/{name}
dize{name}
, tetikleyici blobun dosya adına erişmek için işlev kodunda kullanabileceğiniz bir bağlama ifadesi oluşturur. Daha fazla bilgi için bu makalenin devamında yer alan Blob adı desenleri bölümüne bakın.
import { app, InvocationContext } from '@azure/functions';
export async function storageBlobTrigger1(blob: Buffer, context: InvocationContext): Promise<void> {
context.log(
`Storage blob function processed blob "${context.triggerMetadata.name}" with size ${blob.length} bytes`
);
}
app.storageBlob('storageBlobTrigger1', {
path: 'samples-workitems/{name}',
connection: 'MyStorageAccountAppSetting',
handler: storageBlobTrigger1,
});
Aşağıdaki örnekte bir blob tetikleyicisi JavaScript kodu gösterilmektedir. İşlev, kapsayıcıya bir blob eklendiğinde veya güncelleştirildiğinde samples-workitems
bir günlük yazar.
Blob tetikleyici yolundaki samples-workitems/{name}
dize{name}
, tetikleyici blobun dosya adına erişmek için işlev kodunda kullanabileceğiniz bir bağlama ifadesi oluşturur. Daha fazla bilgi için bu makalenin devamında yer alan Blob adı desenleri bölümüne bakın.
const { app } = require('@azure/functions');
app.storageBlob('storageBlobTrigger1', {
path: 'samples-workitems/{name}',
connection: 'MyStorageAccountAppSetting',
handler: (blob, context) => {
context.log(
`Storage blob function processed blob "${context.triggerMetadata.name}" with size ${blob.length} bytes`
);
},
});
Aşağıdaki örnekte, blob depolama kapsayıcısına dosya eklendiğinde source
çalışan bir işlevin nasıl oluşturulacağı gösterilmektedir.
İşlev yapılandırma dosyası (function.json) ile bir blobTrigger
type
bağlama içerir ve direction
olarak in
ayarlanır.
{
"bindings": [
{
"name": "InputBlob",
"type": "blobTrigger",
"direction": "in",
"path": "source/{name}",
"connection": "MyStorageAccountConnectionString"
}
]
}
Run.ps1 dosyasının ilişkili kodu aşağıdadır.
param([byte[]] $InputBlob, $TriggerMetadata)
Write-Host "PowerShell Blob trigger: Name: $($TriggerMetadata.Name) Size: $($InputBlob.Length) bytes"
Bu örnek, Blob depolama tetikleyicisi tarafından sağlanan temel alınan BlobClient
nesneye doğrudan erişmek için SDK türlerini kullanır:
import logging
import azure.functions as func
import azurefunctions.extensions.bindings.blob as blob
app = func.FunctionApp(http_auth_level=func.AuthLevel.ANONYMOUS)
@app.blob_trigger(
arg_name="client", path="PATH/TO/BLOB", connection="AzureWebJobsStorage"
)
def blob_trigger(client: blob.BlobClient):
logging.info(
f"Python blob trigger function processed blob \n"
f"Properties: {client.get_blob_properties()}\n"
f"Blob content head: {client.download_blob().read(size=1)}"
)
Diğer SDK türlerini kullanma örnekleri için ve StorageStreamDownloader
örneklerine ContainerClient
bakın.
Projenizde SDK türü bağlamalarını etkinleştirme de dahil olmak üzere daha fazla bilgi edinmek için bkz . SDK türü bağlamaları.
Bu örnek, gelen blob meta verilerindeki bilgileri günlüğe kaydeder.
import logging
import azure.functions as func
app = func.FunctionApp()
@app.function_name(name="BlobTrigger1")
@app.blob_trigger(arg_name="myblob",
path="PATH/TO/BLOB",
connection="CONNECTION_SETTING")
def test_function(myblob: func.InputStream):
logging.info(f"Python blob trigger function processed blob \n"
f"Name: {myblob.name}\n"
f"Blob Size: {myblob.length} bytes")
Özellikler
hem işlem içi hem de yalıtılmış çalışan işlemi C# kitaplıkları, işlevi tanımlamak için BlobAttribute özniteliğini kullanır. Bunun yerine C# betiği, C# betik kılavuzunda açıklandığı gibi bir function.json yapılandırma dosyası kullanır.
Özniteliğin oluşturucu aşağıdaki parametreleri alır:
Parametre | Açıklama |
---|---|
BlobPath | Blob yolu. |
Bağlantı | Azure Bloblarına nasıl bağlanıldığını belirten bir uygulama ayarının veya ayar koleksiyonunun adı. Bkz. Bağlantılar. |
Erişim | Okuyup okumayacağınızı veya yazıp yazmayacağınızı gösterir. |
Kaynak | Tetikleme olayının kaynağını ayarlar. Çok daha düşük gecikme süresi sağlayan Event Grid tabanlı blob tetikleyicisi için kullanınBlobTriggerSource.EventGrid . Varsayılan değer, kapsayıcıdaki değişiklikleri algılamak için standart yoklama mekanizmasını kullanan değeridir BlobTriggerSource.LogsAndContainerScan . |
Yöntem BlobTrigger
imzasında bir öznitelik aşağıdadır:
[Function(nameof(BlobFunction))]
[BlobOutput("test-samples-output/{name}-output.txt")]
public static string Run(
[BlobTrigger("test-samples-trigger/{name}")] string myTriggerItem,
[BlobInput("test-samples-input/sample1.txt")] string myBlob,
FunctionContext context)
Yerel olarak geliştirme yaparken uygulama ayarlarınızı koleksiyondaki local.settings.json dosyasına Values
ekleyin.
Dekoratörler
Yalnızca Python v2 programlama modeli için geçerlidir.
Dekoratörler kullanılarak tanımlanan Python v2 işlevleri için, dekoratördeki blob_trigger
aşağıdaki özellikler Blob Depolama tetikleyicisini tanımlar:
Özellik | Açıklama |
---|---|
arg_name |
İşlev imzasında parametre adını bildirir. İşlev tetiklendiğinde, bu parametrenin değeri kuyruk iletisinin içeriğine sahiptir. |
path |
İzlenecek kapsayıcı . Blob adı deseni olabilir. |
connection |
Depolama hesabı bağlantı dizesi. |
source |
Tetikleme olayının kaynağını ayarlar. Çok daha düşük gecikme süresi sağlayan Event Grid tabanlı blob tetikleyicisi için kullanınEventGrid . Varsayılan değer, kapsayıcıdaki değişiklikleri algılamak için standart yoklama mekanizmasını kullanan değeridir LogsAndContainerScan . |
function.json kullanılarak tanımlanan Python işlevleri için Yapılandırma bölümüne bakın.
Ek Açıklamalar
@BlobTrigger
özniteliği, işlevi tetikleyen bloba erişmenizi sağlamak için kullanılır. Ayrıntılar için tetikleyici örneğine bakın. source
Tetikleyici olayının kaynağını ayarlamak için özelliğini kullanın. Çok daha düşük gecikme süresi sağlayan Event Grid tabanlı blob tetikleyicisi için kullanınEventGrid
. Varsayılan değer, kapsayıcıdaki değişiklikleri algılamak için standart yoklama mekanizmasını kullanan değeridir LogsAndContainerScan
. |
Yapılandırma
Yalnızca Python v1 programlama modeli için geçerlidir.
Aşağıdaki tabloda, yöntemine geçirilen app.storageBlob()
nesnede options
ayarlayabileceğiniz özellikler açıklanmaktadır.
Özellik | Açıklama |
---|---|
yol | İzlenecek kapsayıcı . Blob adı deseni olabilir. |
bağlantı | Azure Bloblarına nasıl bağlanıldığını belirten bir uygulama ayarının veya ayar koleksiyonunun adı. Bkz. Bağlantılar. |
source | Tetikleme olayının kaynağını ayarlar. Çok daha düşük gecikme süresi sağlayan Event Grid tabanlı blob tetikleyicisi için kullanınEventGrid . Varsayılan değer, kapsayıcıdaki değişiklikleri algılamak için standart yoklama mekanizmasını kullanan değeridir LogsAndContainerScan . |
Aşağıdaki tabloda, function.json dosyasında ayarladığınız bağlama yapılandırma özellikleri açıklanmaktadır.
function.json özelliği | Açıklama |
---|---|
type | olarak ayarlanmalıdır blobTrigger . Bu özellik, Tetikleyiciyi Azure portalında oluşturduğunuzda otomatik olarak ayarlanır. |
direction | olarak ayarlanmalıdır in . Bu özellik, Tetikleyiciyi Azure portalında oluşturduğunuzda otomatik olarak ayarlanır. Kullanım bölümünde özel durumlar not edilir. |
ad | İşlev kodundaki blobu temsil eden değişkenin adı. |
yol | İzlenecek kapsayıcı . Blob adı deseni olabilir. |
bağlantı | Azure Bloblarına nasıl bağlanıldığını belirten bir uygulama ayarının veya ayar koleksiyonunun adı. Bkz. Bağlantılar. |
source | Tetikleme olayının kaynağını ayarlar. Çok daha düşük gecikme süresi sağlayan Event Grid tabanlı blob tetikleyicisi için kullanınEventGrid . Varsayılan değer, kapsayıcıdaki değişiklikleri algılamak için standart yoklama mekanizmasını kullanan değeridir LogsAndContainerScan . |
Tam örnekler için Örnek bölümüne bakın.
Meta veri
Blob tetikleyicisi çeşitli meta veri özellikleri sağlar. Bu özellikler, diğer bağlamalardaki bağlama ifadelerinin bir parçası olarak veya kodunuzdaki parametreler olarak kullanılabilir. Bu değerler CloudBlob türüyle aynı semantiklere sahiptir.
Özellik | Türü | Açıklama |
---|---|---|
BlobTrigger |
string |
Tetikleyen blob yolu. |
Uri |
System.Uri |
Birincil konum için blob URI'sini. |
Properties |
BlobProperties | Blob'un sistem özellikleri. |
Metadata |
IDictionary<string,string> |
Blob için kullanıcı tanımlı meta veriler. |
Aşağıdaki örnek, kapsayıcı dahil olmak üzere tetikleyen blob yolunu günlüğe kaydeder:
public static void Run(string myBlob, string blobTrigger, ILogger log)
{
log.LogInformation($"Full blob path: {blobTrigger}");
}
Meta veri
Blob tetikleyicisi çeşitli meta veri özellikleri sağlar. Bu özellikler, diğer bağlamalardaki bağlama ifadelerinin bir parçası olarak veya kodunuzdaki parametreler olarak kullanılabilir.
Özellik | Açıklama |
---|---|
blobTrigger |
Tetikleyen blob yolu. |
uri |
Birincil konum için blob URI'sini. |
properties |
Blob'un sistem özellikleri. |
metadata |
Blob için kullanıcı tanımlı meta veriler. |
Meta veri
Meta veriler parametresi aracılığıyla $TriggerMetadata
kullanılabilir.
Kullanım
Blob tetikleyicisi tarafından desteklenen bağlama türleri, uzantı paketi sürümüne ve işlev uygulamanızda kullanılan C# modalitesine bağlıdır.
Blob tetikleyicisi aşağıdaki türlere bağlanabilir:
Type | Açıklama |
---|---|
string |
Dize olarak blob içeriği. Blob içeriği basit metin olduğunda kullanın. |
byte[] |
Blob içeriğinin baytları. |
JSON serileştirilebilir türler | Bir blob JSON verileri içerdiğinde İşlevler, JSON verilerini seri durumdan çıkararak düz eski bir CLR nesnesi (POCO) türüne dönüştürmeye çalışır. |
Akış1 | Blob içeriğinin giriş akışı. |
BlobClient1, BlockBlobClient1, PageBlobClient1, AppendBlobClient1, BlobBaseClient1 |
Bloba bağlı bir istemci. Bu tür kümesi blobu işlemek için en fazla denetimi sunar ve bağlantı yeterli izne sahipse bloba geri yazmak için kullanılabilir. |
1 Bu türleri kullanmak için Microsoft.Azure.Functions.Worker.Extensions.Storage.Blobs 6.0.0 veya sonraki sürümlerine ve SDK türü bağlamaları için ortak bağımlılıklara başvurmanız gerekir.
string
öğesine bağlama veya Byte[]
yalnızca blob boyutu küçük olduğunda önerilir. Blob içeriğinin tamamı belleğe yüklendiğinden bu önerilir. Çoğu blob için veya Stream
BlobClient
türünü kullanın. Daha fazla bilgi için bkz . Eşzamanlılık ve bellek kullanımı.
Depolama SDK'sı türlerinden birine bağlanmaya çalışırken bir hata iletisi alırsanız doğru Depolama SDK'sı sürümüne başvuru aldığınızdan emin olun.
Kullanılacak depolama hesabını belirtmek için StorageAccountAttribute'u da kullanabilirsiniz. Kitaplıktaki diğer işlevlerden farklı bir depolama hesabı kullanmanız gerektiğinde bunu yapabilirsiniz. Oluşturucu, depolama bağlantı dizesi içeren bir uygulama ayarının adını alır. Özniteliği parametre, yöntem veya sınıf düzeyinde uygulanabilir. Aşağıdaki örnekte sınıf düzeyi ve yöntem düzeyi gösterilmektedir:
[StorageAccount("ClassLevelStorageAppSetting")]
public static class AzureFunctions
{
[FunctionName("BlobTrigger")]
[StorageAccount("FunctionLevelStorageAppSetting")]
public static void Run( //...
{
....
}
Kullanılacak depolama hesabı aşağıdaki sırayla belirlenir:
- Özniteliğin
BlobTrigger
Connection
özelliği. - özniteliğiyle
StorageAccount
aynı parametreye uygulandıBlobTrigger
. StorageAccount
İşleve uygulanan öznitelik.StorageAccount
sınıfına uygulanan öznitelik.- uygulama ayarında
AzureWebJobsStorage
tanımlanan işlev uygulaması için varsayılan depolama hesabı.
@BlobTrigger
özniteliği, işlevi tetikleyen bloba erişmenizi sağlamak için kullanılır. Ayrıntılar için tetikleyici örneğine bakın.
Blob verilerine, function.json dosyasında bağlamanın ad parametresi tarafından belirlenen adla eşleşen bir parametre aracılığıyla erişin.
InputStream olarak yazılan parametre aracılığıyla blob verilerine erişin. Ayrıntılar için tetikleyici örneğine bakın.
İşlevler, Azure Blob depolama için Python SDK türü bağlamalarını da destekler ve bu da aşağıdaki temel SDK türlerini kullanarak blob verileriyle çalışmanıza olanak tanır:
Önemli
Python için SDK türleri desteği şu anda önizleme aşamasındadır ve yalnızca Python v2 programlama modeli için desteklenir. Daha fazla bilgi için bkz . Python'da SDK türleri.
Bağlantılar
connection
özelliği, uygulamanın Azure Bloblarına nasıl bağlanması gerektiğini belirten bir ortam yapılandırması başvurusudur. Şunları belirtebilir:
- bağlantı dizesi içeren bir uygulama ayarının adı
- Birden çok uygulama ayarı için paylaşılan ön ekin adı ve birlikte kimlik tabanlı bağlantı tanımlama.
Yapılandırılan değer hem tek bir ayar için tam eşleşme hem de diğer ayarlar için bir ön ek eşleşmesiyse, tam eşleşme kullanılır.
Connection string
bağlantı dizesi almak için Depolama hesabı erişim anahtarlarını yönetme bölümünde gösterilen adımları izleyin. bağlantı dizesi, Blob depolama hesabı için değil genel amaçlı bir depolama hesabı için olmalıdır.
Bu bağlantı dizesi, bağlama yapılandırmasının özelliği tarafından connection
belirtilen değerle eşleşen bir adla bir uygulama ayarında depolanmalıdır.
Uygulama ayarı adı "AzureWebJobs" ile başlıyorsa, adın yalnızca kalanını burada belirtebilirsiniz. Örneğin, "MyStorage" olarak ayarlarsanız connection
, İşlevler çalışma zamanı "AzureWebJobsMyStorage" adlı bir uygulama ayarı arar. Boş bırakırsanızconnection
, İşlevler çalışma zamanı adlı AzureWebJobsStorage
uygulama ayarında varsayılan Depolama bağlantı dizesi kullanır.
Kimlik tabanlı bağlantılar
Uzantının 5.x veya üzeri bir sürümünü (non-.NET dil yığınları için paket 3.x veya üzeri) kullanıyorsanız, gizli dizi içeren bir bağlantı dizesi kullanmak yerine uygulamanın bir Microsoft Entra kimliği kullanmasını sağlayabilirsiniz. Kimlik kullanmak için, tetikleyici ve bağlama yapılandırmasındaki özelliğiyle connection
eşleyen ortak bir ön ek altında ayarları tanımlarsınız.
"AzureWebJobsStorage" olarak ayarlanıyorsanız connection
bkz . Kimlikle konak depolamaya bağlanma. Diğer tüm bağlantılar için uzantı aşağıdaki özellikleri gerektirir:
Özellik | Ortam değişkeni şablonu | Açıklama | Örnek değer |
---|---|---|---|
Blob Hizmeti URI'si | <CONNECTION_NAME_PREFIX>__serviceUri 1 |
HTTPS şemasını kullanarak bağlandığınız blob hizmetinin veri düzlemi URI'si. | <https:// storage_account_name.blob.core.windows.net> |
1 <CONNECTION_NAME_PREFIX>__blobServiceUri
diğer ad olarak kullanılabilir. Bağlantı yapılandırması bir blob tetikleyicisi tarafından kullanılacaksa, blobServiceUri
öğesinin de eşlik queueServiceUri
etmesi gerekir. Aşağıya bakın.
Genel serviceUri
bağlantı yapılandırması bloblar, kuyruklar ve/veya tablolar arasında kullanılacaksa form kullanılamaz. URI yalnızca blob hizmetini belirleyebilir. Alternatif olarak, her hizmet için özel olarak bir URI sağlayarak tek bir bağlantının kullanılmasını sağlayabilirsiniz. Her iki sürüm de sağlanırsa, çok hizmetli form kullanılır. Bağlantıyı birden çok hizmet için yapılandırmak için yerine <CONNECTION_NAME_PREFIX>__serviceUri
şunu ayarlayın:
Özellik | Ortam değişkeni şablonu | Açıklama | Örnek değer |
---|---|---|---|
Blob Hizmeti URI'si | <CONNECTION_NAME_PREFIX>__blobServiceUri |
HTTPS şemasını kullanarak bağlandığınız blob hizmetinin veri düzlemi URI'si. | <https:// storage_account_name.blob.core.windows.net> |
Kuyruk Hizmeti URI'si (blob tetikleyicileriiçin gereklidir 2) | <CONNECTION_NAME_PREFIX>__queueServiceUri |
HTTPS şemasını kullanarak bir kuyruk hizmetinin veri düzlemi URI'si. Bu değer yalnızca blob tetikleyicileri için gereklidir. | <https:// storage_account_name.queue.core.windows.net> |
2 Blob tetikleyicisi, bir kuyruğa zehirli bloblar yazarak birden çok yeniden denemede başarısızlığı işler. Formda serviceUri
bağlantı AzureWebJobsStorage
kullanılır. Ancak, belirtilirken blobServiceUri
ile bir kuyruk hizmeti URI'si de sağlanmalıdır queueServiceUri
. Blob hizmetiyle aynı depolama hesabından hizmeti kullanmanız önerilir. Ayrıca, Depolama Kuyruğu Veri Katkıda Bulunanı gibi bir rol atayarak tetikleyicinin yapılandırılan kuyruk hizmetinde iletileri okuyabildiğinden ve yazadığından da emin olmanız gerekir.
Bağlantıyı özelleştirmek için diğer özellikler ayarlanabilir. Bkz. Kimlik tabanlı bağlantılar için ortak özellikler.
Azure İşlevleri hizmetinde barındırıldığında, kimlik tabanlı bağlantılar yönetilen kimlik kullanır. Ve özellikleriyle credential
clientID
kullanıcı tarafından atanan bir kimlik belirtilse de, sistem tarafından atanan kimlik varsayılan olarak kullanılır. Kullanıcı tarafından atanan kimliği kaynak kimliğiyle yapılandırmanın desteklenmediğini unutmayın. Yerel geliştirme gibi diğer bağlamlarda çalıştırıldığında, bunun yerine geliştirici kimliğiniz kullanılır, ancak bu özelleştirilebilir. Bkz. Kimlik tabanlı bağlantılarla yerel geliştirme.
Kimliğe izin verme
Hangi kimlik kullanılıyorsa, hedeflenen eylemleri gerçekleştirmek için izinlere sahip olmalıdır. Çoğu Azure hizmeti için bu, bu izinleri sağlayan yerleşik veya özel rolleri kullanarak Azure RBAC'de bir rol atamanız gerektiği anlamına gelir.
Önemli
Bazı izinler, tüm bağlamlar için gerekli olmayan hedef hizmet tarafından gösterilebilir. Mümkün olduğunda, kimliğe yalnızca gerekli ayrıcalıkları sağlayarak en az ayrıcalık ilkesine uyun. Örneğin, uygulamanın yalnızca bir veri kaynağından okuyabilmesi gerekiyorsa, yalnızca okuma izni olan bir rol kullanın. Okuma işlemi için aşırı izin olduğundan, bu hizmete yazmaya da izin veren bir rol atamak uygun olmaz. Benzer şekilde, rol atamasının kapsamının yalnızca okunması gereken kaynaklara göre ayarlandığından emin olmak istersiniz.
Ç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, normal işlemde Blob Depolama uzantısı kullanılırken önerilen yerleşik roller gösterilmektedir. Uygulamanız, yazdığınız koda göre daha fazla izin gerektirebilir.
Bağlama türü | Örnek yerleşik roller |
---|---|
Tetikleyici | Depolama Blobu Veri Sahibi ve Depolama Kuyruğu Veri Katkıda Bulunanı1 AzureWebJobsStorage bağlantısına ek izinler de verilmelidir.2 |
Giriş bağlaması | Depolama Blob Verileri Okuyucusu |
Çıkış bağlaması | Depolama Blob Verileri Sahibi |
1 Blob tetikleyicisi, bağlantı tarafından belirtilen depolama hesabındaki bir kuyruğa zehirli bloblar yazarak birden çok yeniden denemede başarısızlığı işler.
2 AzureWebJobsStorage bağlantısı, tetikleyiciyi etkinleştiren bloblar ve kuyruklar için dahili olarak kullanılır. Kimlik tabanlı bir bağlantı kullanacak şekilde yapılandırılmışsa, varsayılan gereksinimin ötesinde ek izinlere ihtiyacı vardır. Gerekli izinler Depolama Blobu Veri Sahibi, Depolama Kuyruğu Veri Katkıda Bulunanı ve Depolama Hesabı Katkıda Bulunanı rolleri kapsamındadır. Daha fazla bilgi edinmek için bkz . Kimlikle konak depolamaya bağlanma.
Blob adı desenleri
function.json veya öznitelik oluşturucusunda özelliğinde bir blob adı deseni path
BlobTrigger
belirtebilirsiniz. Ad düzeni bir filtre veya bağlama ifadesi olabilir. Aşağıdaki bölümlerde örnekler verilmiştir.
İpucu
Kapsayıcı adı, ad deseninde çözümleyici içeremez.
Dosya adını ve uzantısını alma
Aşağıdaki örnekte blob dosya adı ve uzantısına ayrı olarak nasıl bağlanacağınız gösterilmektedir:
"path": "input/{blobname}.{blobextension}",
Blob original-Blob1.txt olarak adlandırılırsa, işlev kodundaki ve blobextension
değişkenlerinin değerleri blobname
original-Blob1 ve txt'dir.
Blob adına göre filtreleme
Aşağıdaki örnek yalnızca kapsayıcıdaki input
"original-" dizesiyle başlayan bloblarda tetikler:
"path": "input/original-{name}",
Blob adı original-Blob1.txt ise, işlev kodundaki değişkeninin name
değeri olurBlob1.txt
.
Dosya türüne göre filtreleme
Aşağıdaki örnek yalnızca .png dosyalarında tetikler:
"path": "samples/{name}.png",
Dosya adlarındaki küme ayraçlarına filtre uygulama
Dosya adlarında küme ayracı aramak için iki küme ayracı kullanarak küme ayraçlarından kurtulabilirsiniz. Aşağıdaki örnek, adında küme ayraçları bulunan bloblar için filtreler:
"path": "images/{{20140101}}-{name}",
Blob -soundfile.mp3 olarak adlandırılırsa {20140101}işlev kodundaki name
değişken değeri soundfile.mp3.
Yoklama ve gecikme süresi
Yoklama, günlükleri inceleme ve düzenli kapsayıcı taramaları çalıştırma arasında karma olarak çalışır. Bloblar aralıklar arasında kullanılan bir devamlılık belirteci ile aynı anda 10.000'lik gruplar halinde taranır. İşlev uygulamanız Tüketim planındaysa, işlev uygulaması boşta kalırsa yeni blobların işlenmesinde 10 dakikaya kadar gecikme olabilir.
Uyarı
Depolama günlükleri "en iyi çaba" temelinde oluşturulur. Tüm olayların yakalandığının garantisi yoktur. Bazı koşullar altında günlükler kaçırılabilir.
Daha hızlı veya daha güvenilir blob işlemeye ihtiyacınız varsa, barındırma alanınızı Always On etkin bir App Service planı kullanacak şekilde değiştirmeyi düşünmelisiniz; bu da maliyetlerin artmasına neden olabilir. Ayrıca klasik yoklama blobu tetikleyicisi dışında bir tetikleyici kullanmayı da düşünebilirsiniz. Blob depolama kapsayıcıları için çeşitli tetikleyici seçeneklerinin karşılaştırması ve daha fazla bilgi için bkz . Blob kapsayıcısı üzerinde tetikleme.
Blob alındı bilgileri
Azure İşlevleri çalışma zamanı, aynı yeni veya güncelleştirilmiş blob için birden çok kez çağrılmamasını sağlar. Belirli bir blob sürümünün işlenip işlenmediğini belirlemek için blob alındı bilgilerini korur.
Azure İşlevleri blob alındı bilgilerini işlev uygulamanızın Azure depolama hesabında azure-webjobs-hosts adlı bir kapsayıcıda depolar (uygulama ayarı AzureWebJobsStorage
tarafından tanımlanır). Blob alındı bilgisi aşağıdaki bilgilere sahiptir:
- Tetiklenen işlev (
<FUNCTION_APP_NAME>.Functions.<FUNCTION_NAME>
örneğin:MyFunctionApp.Functions.CopyBlob
) - Kapsayıcı adı
- Blob türü (
BlockBlob
veyaPageBlob
) - Blob adı
- ETag (blob sürümü tanımlayıcısı, örneğin:
0x8D1DC6E70A277EF
)
Bir blobun yeniden işlenmesini zorlamak için azure-webjobs-hosts kapsayıcısından bu blobun blob alındı bilgisini el ile silin. Yeniden işleme hemen gerçekleşmeyebilir ancak daha sonraki bir noktada gerçekleşebileceği garanti edilir. Hemen yeniden işlemek için azure-webjobs-hosts/blobscaninfo içindeki scaninfo blobu güncelleştirilebilir. Özellik sonrasında son değiştirilen zaman damgasına LatestScan
sahip tüm bloblar yeniden taranır.
Zehirli bloblar
Bir blob tetikleyici işlevi belirli bir blob için başarısız olduğunda, varsayılan olarak toplam beş kez işlev gösteren yeniden denemeler Azure İşlevleri.
5 denemenin tümü başarısız olursa Azure İşlevleri webjobs-blobtrigger-poison adlı bir Depolama kuyruğuna bir ileti ekler. Yeniden deneme sayısı üst sınırı yapılandırılabilir. Zehirli blob işleme ve zehirli kuyruk ileti işleme için aynı MaxDequeueCount ayarı kullanılır. Zehirli bloblar için kuyruk iletisi, aşağıdaki özellikleri içeren bir JSON nesnesidir:
- FunctionId (biçiminde
<FUNCTION_APP_NAME>.Functions.<FUNCTION_NAME>
) - BlobType (
BlockBlob
veyaPageBlob
) - ContainerName
- BlobName
- ETag (blob sürümü tanımlayıcısı, örneğin:
0x8D1DC6E70A277EF
)
Bellek kullanımı ve eşzamanlılık
gibi akışı desteklemeyen bir çıkış türüne bağlandığınızda, string
Byte[]
çalışma zamanı işleme sırasında blob'un tamamını birden çok kez belleğe yüklemelidir. Bu, blobları işlerken beklenenden daha yüksek bellek kullanımına neden olabilir. Mümkün olduğunda bir akış destekleyici türü kullanın. Tür desteği C# moduna ve uzantı sürümüne bağlıdır. Daha fazla bilgi için bkz . Bağlama türleri.
Şu anda, çalışma zamanı işleme sırasında blob'un tamamını birden çok kez belleğe yüklemelidir. Bu, blobları işlerken beklenenden daha yüksek bellek kullanımına neden olabilir.
Birden çok işlev örneği blob verilerini eşzamanlı olarak işlerken bellek kullanımı daha fazla etkilenebilir. Blob tetikleyicisi kullanırken bellek sorunları yaşıyorsanız izin verilen eşzamanlı yürütme sayısını azaltmayı göz önünde bulundurun. Tabii ki eşzamanlılığı azaltmak, işlenmeyi bekleyen blobların kapsamlarını artırmanın yan etkisi olabilir. İşlev uygulamanızın bellek sınırları plana bağlıdır. Daha fazla bilgi için bkz . Hizmet sınırları.
Eşzamanlı yürütme sayısını denetleme yöntemi, kullandığınız Depolama uzantısının sürümüne bağlıdır.
Depolama uzantısının 5.0.0 veya sonraki bir sürümünü kullanırken, host.json blob yapılandırmasındaki ayarı kullanarak maxDegreeOfParallelism
tetikleyici eşzamanlılığını denetleyebilirsiniz.
Sınırlar, blob tetikleyicisi kullanan her işleve ayrı olarak uygulanır.
host.json özellikleri
host.json dosyası blob tetikleyici davranışını denetleen ayarlar içerir. Kullanılabilir ayarlarla ilgili ayrıntılar için host.json ayarları bölümüne bakın.