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 iletisiyle HelloWorldtetikleniyorsa 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ı dizeleri 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ıştırıldığında, 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 , tetikleyen blobun adına diğer bağlamalarda ve işlev kodunda 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 tetikleyici 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"
    },
    ...

Daha sonra ifade filename , 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 tetiklenmiştir: 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 blobu 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# dilinde giriş parametreleri veya JavaScript'teki nesnede context.bindings özellikler olarak kullanılabilir.

Örneğin, bir 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 metadata ö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. Belgeler, portalın Tümleştir sekmesinde, bağlama yapılandırma alanının altındaki Belgeler bölümünde de sağlanır.

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 daha 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 olarak 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
        };
    }
}

Nokta gösterimi

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

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

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

doğrudan FileName olarak BlobName.FileNamebaşvurabilirsiniz. Bu JSON biçimiyle, önceki örnekteki özelliğin path 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 dosyada function.json aşağıdaki blob yolu ,50710cb5-84b9-4d87-9d83-a03d6976a682.txtgibi bir ada sahip bir blob oluşturur.

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

Geçerli saat

Bağlama ifadesi DateTime olarak DateTime.UtcNowçözülür. Bir dosyada function.json aşağıdaki blob yolu ,2018-02-16T17-59-55Z.txtgibi 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 özniteliklerindeki bildirim temelli bağlamaların aksine kesinlik temelli bir bağlama deseni kullanabilirsiniz. Kesinlik temelli bağlama, bağlama parametrelerinin tasarım zamanından çok çalışma zamanında hesaplanması gerektiğinde yararlıdır. Daha fazla bilgi edinmek için bkz. C# geliştirici başvurusu veya C# betiği geliştirici başvurusu.

Sonraki adımlar