Aracılığıyla paylaş


Azure İşlevleri bağlama ifadesi desenleri

Tetikleyicilerin ve bağlamaların en güçlü özelliklerinden biri bağlama ifadeleridir. function.json dosyasında ve işlev parametrelerinde ve kodunda, çeşitli kaynaklardan gelen değerlere çözümleyen ifadeler kullanabilirsiniz.

Çoğu ifade küme ayracı içinde tanımlanır. Örneğin, bir kuyruk tetikleyici işlevinde, {queueTrigger} kuyruk iletisi metnine çözümler. Blob çıkış bağlamasının path özelliği ise container/{queueTrigger} ve işlev bir kuyruk iletisi HelloWorldtarafından tetikleniyorsa adlı HelloWorld bir blob oluşturulur.

Bağlama ifadesi türleri

Bağlama ifadeleri - uygulama ayarları

En iyi uygulama olarak, gizli diziler ve bağlantı dizesi yapılandırma dosyaları yerine uygulama ayarları kullanılarak yönetilmelidir. Bu, bu gizli dizilere erişimi sınırlar ve function.json gibi dosyaların ortak kaynak denetimi depolarında depolanmasını güvenli hale getirir.

Uygulama ayarları, ortamı temel alan yapılandırmayı değiştirmek istediğinizde de kullanışlıdır. Örneğin, bir test ortamında farklı bir kuyruk veya blob depolama kapsayıcısını izlemek isteyebilirsiniz.

Uygulama ayarı bağlama ifadeleri diğer bağlama ifadelerinden farklı şekilde tanımlanır: küme ayraçları yerine yüzde işaretlerine sarmalanmıştır. Örneğin blob çıkış bağlama yolu %Environment%/newblob.txt ve Environment uygulama ayarı değeri ise Developmentkapsayıcıda Development bir blob oluşturulur.

bir işlev yerel olarak çalışırken, uygulama ayarı değerleri local.settings.json dosyasından gelir.

Not

connection Tetikleyicilerin ve bağlamaların özelliği özel bir durumdur ve değerleri uygulama ayarları olarak yüzde işaretleri olmadan otomatik olarak çözümler.

Aşağıdaki örnek, tetikleme sırası tanımlamak için bir uygulama ayarı %input_queue_name% kullanan bir Azure Kuyruk Depolama tetikleyicisidir.

{
  "bindings": [
    {
      "name": "order",
      "type": "queueTrigger",
      "direction": "in",
      "queueName": "%input_queue_name%",
      "connection": "MY_STORAGE_ACCT_APP_SETTING"
    }
  ]
}

Sınıf kitaplıklarında aynı yaklaşımı kullanabilirsiniz:

[FunctionName("QueueTrigger")]
public static void Run(
    [QueueTrigger("%input_queue_name%")]string myQueueItem, 
    ILogger log)
{
    log.LogInformation($"C# Queue trigger function processed: {myQueueItem}");
}

Tetikleyici dosya adı

Blob tetikleyicisi path , diğer bağlamalarda ve işlev kodunda tetikleyen blobun adına başvurmanızı sağlayan bir desen olabilir. Desen, hangi blobların işlev çağrısını tetikleyebileceğini belirten filtreleme ölçütlerini de içerebilir.

Örneğin, aşağıdaki Blob tetikleyicisi bağlamasında path desen, adlı filenamebir bağlama ifadesi oluşturan şeklindedirsample-images/{filename}:

{
  "bindings": [
    {
      "name": "image",
      "type": "blobTrigger",
      "path": "sample-images/{filename}",
      "direction": "in",
      "connection": "MyStorageConnection"
    },
    ...

filename İfade daha sonra oluşturulan blobun adını belirtmek için bir çıkış bağlamasında kullanılabilir:

    ...
    {
      "name": "imageSmall",
      "type": "blob",
      "path": "sample-images-sm/{filename}",
      "direction": "out",
      "connection": "MyStorageConnection"
    }
  ],
}

İşlev kodu, parametre adı olarak kullanarak filename bu değere erişebilir:

// C# example of binding to {filename}
public static void Run(Stream image, string filename, Stream imageSmall, ILogger log)  
{
    log.LogInformation($"Blob trigger processing: {filename}");
    // ...
} 

Bağlama ifadelerini ve desenlerini kullanma özelliği, sınıf kitaplıklarındaki öznitelikler için de geçerlidir. Aşağıdaki örnekte öznitelik oluşturucu parametreleri, önceki function.json örnekleriyle aynı path değerlerdir:

[FunctionName("ResizeImage")]
public static void Run(
    [BlobTrigger("sample-images/{filename}")] Stream image,
    [Blob("sample-images-sm/{filename}", FileAccess.Write)] Stream imageSmall,
    string filename,
    ILogger log)
{
    log.LogInformation($"Blob trigger processing: {filename}");
    // ...
}

Dosya adının bölümleri için de ifadeler oluşturabilirsiniz. Aşağıdaki örnekte işlev yalnızca bir desenle eşleşen dosya adlarında tetikleniyor: anyname-anyfile.csv

{
    "name": "myBlob",
    "type": "blobTrigger",
    "direction": "in",
    "path": "testContainerName/{date}-{filetype}.csv",
    "connection": "OrderStorageConnection"
}

Blob yol dizesinde ifadeleri ve desenleri kullanma hakkında daha fazla bilgi için bkz . Depolama blob bağlama başvurusu.

Tetikleyici meta verileri

Tetikleyici tarafından sağlanan veri yüküne ek olarak (bir işlevi tetikleyen kuyruk iletisinin içeriği gibi), birçok tetikleyici ek meta veri değerleri sağlar. Bu değerler C# ve F# giriş parametreleri olarak veya JavaScript'teki nesnede context.bindings özellikler olarak kullanılabilir.

Örneğin, azure kuyruk depolama tetikleyicisi aşağıdaki özellikleri destekler:

  • QueueTrigger - geçerli bir dizeyse ileti içeriğini tetikleme
  • DequeueCount
  • ExpirationTime
  • Id
  • InsertTime
  • NextVisibleTime
  • PopReceipt

Bu meta veri değerlerine function.json dosya özelliklerinde erişilebilir. Örneğin, bir kuyruk tetikleyicisi kullandığınızı ve kuyruk iletisinin okumak istediğiniz blobun adını içerdiğini varsayalım. function.json dosyasında, aşağıdaki örnekte gösterildiği gibi blob path özelliğinde meta veri özelliğini kullanabilirsinizqueueTrigger:

{
  "bindings": [
    {
      "name": "myQueueItem",
      "type": "queueTrigger",
      "queueName": "myqueue-items",
      "connection": "MyStorageConnection",
    },
    {
      "name": "myInputBlob",
      "type": "blob",
      "path": "samples-workitems/{queueTrigger}",
      "direction": "in",
      "connection": "MyStorageConnection"
    }
  ]
}

Her tetikleyicinin meta veri özelliklerinin ayrıntıları ilgili başvuru makalesinde açıklanmıştır. Örnek için bkz . kuyruk tetikleyicisi meta verileri. Belgelere portalın Tümleştir sekmesinde, bağlama yapılandırma alanının altındaki Belgeler bölümünden de ulaşabilirsiniz.

JSON yükleri

Bazı senaryolarda, aynı işlevdeki ve işlev kodundaki diğer bağlamalar için yapılandırmada tetikleyici yükünün özelliklerine başvurabilirsiniz. Bunun için tetikleyici yükünün JSON olması ve her tetikleyiciye özgü bir eşikten küçük olması gerekir. Genellikle yük boyutunun 100 MB'tan az olması gerekir, ancak her tetikleyici için başvuru içeriğini denetlemeniz gerekir. Tetikleyici yükü özelliklerinin kullanılması uygulamanızın performansını etkileyebilir ve tetikleyici parametre türünü dizeler veya JSON verilerini temsil eden özel bir nesne türü gibi basit türler olmaya zorlar. Akışlar, istemciler veya diğer SDK türleriyle kullanılamaz.

Aşağıdaki örnekte, JSON'da blob adı alan bir web kancası işlevinin function.json dosyası gösterilmektedir: {"BlobName":"HelloWorld.txt"}. Blob giriş bağlaması blobu okur ve HTTP çıkış bağlaması HTTP yanıtında blob içeriğini döndürür. Blob giriş bağlamasının doğrudan özelliğine başvurarak blob adını aldığına BlobName dikkat edin ("path": "strings/{BlobName}")

{
  "bindings": [
    {
      "name": "info",
      "type": "httpTrigger",
      "direction": "in",
      "webHookType": "genericJson"
    },
    {
      "name": "blobContents",
      "type": "blob",
      "direction": "in",
      "path": "strings/{BlobName}",
      "connection": "AzureWebJobsStorage"
    },
    {
      "name": "res",
      "type": "http",
      "direction": "out"
    }
  ]
}

Bunun C# ve F# dilinde çalışması için, aşağıdaki örnekte olduğu gibi seri durumdan çıkarılacak alanları tanımlayan bir sınıfa ihtiyacınız vardır:

using System.Net;
using Microsoft.Extensions.Logging;

public class BlobInfo
{
    public string BlobName { get; set; }
}
  
public static HttpResponseMessage Run(HttpRequestMessage req, BlobInfo info, string blobContents, ILogger log)
{
    if (blobContents == null) {
        return req.CreateResponse(HttpStatusCode.NotFound);
    } 

    log.LogInformation($"Processing: {info.BlobName}");

    return req.CreateResponse(HttpStatusCode.OK, new {
        data = $"{blobContents}"
    });
}

JavaScript'te JSON seri durumdan çıkarma otomatik olarak gerçekleştirilir.

module.exports = async function (context, info) {
    if ('BlobName' in info) {
        context.res = {
            body: { 'data': context.bindings.blobContents }
        }
    }
    else {
        context.res = {
            status: 404
        };
    }
}

Noktalı gösterimi

JSON yükünüzdeki özelliklerden bazıları özelliklere sahip nesnelerse, nokta (.) gösterimini kullanarak bu özelliklere doğrudan başvurabilirsiniz. Bu gösterimi Azure Cosmos DB veya Tablo depolama bağlamaları için çalışmaz.

Örneğin, JSON'unuzun şu şekilde göründüğünü varsayalım:

{
  "BlobName": {
    "FileName":"HelloWorld",
    "Extension":"txt"
  }
}

doğrudan FileName olarak BlobName.FileNamebaşvurabilirsiniz. Bu JSON biçimiyle, path önceki örnekteki özelliğin nasıl görüneceği aşağıda verilmiştir:

"path": "strings/{BlobName.FileName}.{BlobName.Extension}",

C# dilinde iki sınıf gerekir:

public class BlobInfo
{
    public BlobName BlobName { get; set; }
}
public class BlobName
{
    public string FileName { get; set; }
    public string Extension { get; set; }
}

GUID oluşturma

Bağlama {rand-guid} ifadesi bir GUID oluşturur. Bir dosyadaki function.json aşağıdaki blob yolu, 50710cb5-84b9-4d87-9d83-a03d6976a682.txt gibi bir ada sahip bir blob oluşturur.

{
  "type": "blob",
  "name": "blobOutput",
  "direction": "out",
  "path": "my-output-container/{rand-guid}.txt"
}

Geçerli zaman

Bağlama ifadesi DateTime olarak DateTime.UtcNowçözülür. Bir dosyadaki function.json aşağıdaki blob yolu, 2018-02-16T17-59-55Z.txt gibi bir ada sahip bir blob oluşturur.

{
  "type": "blob",
  "name": "blobOutput",
  "direction": "out",
  "path": "my-output-container/{DateTime}.txt"
}

Çalışma zamanında bağlama

C# ve diğer .NET dillerinde, function.json ve özniteliklerdeki bildirim temelli bağlamaların aksine kesinlik temelli bağlama deseni kullanabilirsiniz. Kesinlik temelli bağlama, bağlama parametrelerinin tasarım zamanından ziyade çalışma zamanında hesaplanması gerektiğinde yararlıdır. Daha fazla bilgi edinmek için C# geliştirici başvurusuna veya C# betik geliştirici başvurusuna bakın.