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 HelloWorld
tetikleniyorsa adlı HelloWorld
bir blob oluşturulur.
Bağlama ifadesi türleri
- Uygulama ayarları
- Tetikleyici dosya adı
- Tetikleyici meta verileri
- JSON yükleri
- Yeni GUID
- Geçerli tarih ve saat
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 Development
kapsayı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ı filename
bir 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.FileName
baş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.