Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Az eseményindítók és kötések egyik leghatékonyabb funkciója a kötési kifejezések. A function.json fájlban, valamint a függvényparaméterekben és a kódban különböző forrásokból származó értékekre feloldó kifejezéseket használhat.
A legtöbb ilyen kifejezés könnyen azonosítható, mivel kapcsos zárójelek között vannak. Egy üzenetsor-eseményindító függvényben {queueTrigger}
például az üzenetsor üzenetének szövege lesz feloldva. Ha a path
blob kimeneti kötésének tulajdonsága és container/{queueTrigger}
a függvényt üzenetsor HelloWorld
aktiválja, létrejön egy blob neve HelloWorld
.
Kötéskifejezések típusai
- Alkalmazásbeállítások
- Triggerfájl neve
- Metaadatok aktiválása
- JSON hasznos adatok
- Új GUID
- Aktuális dátum és idő
Kötési kifejezések – alkalmazásbeállítások
Ajánlott eljárásként a titkos kulcsokat és kapcsolati sztring az alkalmazásbeállítások használatával kell kezelni a konfigurációs fájlok helyett. Ez korlátozza a titkos kódokhoz való hozzáférést, és biztonságossá teszi az olyan fájlok tárolását, mint a function.json a nyilvános forráskódtárakban.
Az alkalmazásbeállítások akkor is hasznosak, ha a környezet alapján módosítani szeretné a konfigurációt. Tesztkörnyezetben például érdemes lehet egy másik üzenetsort vagy blobtárolót figyelni.
Az alkalmazásbeállítási kötési kifejezések másként vannak azonosítva, mint a többi kötési kifejezés: a kapcsos zárójelek helyett százalékjelekbe vannak csomagolva. Ha például a blob kimeneti kötési elérési útja és %Environment%/newblob.txt
az Environment
alkalmazásbeállítás értéke, Development
a tárolóban Development
létrejön egy blob.
Ha egy függvény helyileg fut, az alkalmazásbeállítási értékek a local.settings.json fájlból származnak.
Feljegyzés
Az connection
eseményindítók és kötések tulajdonsága egy speciális eset, és automatikusan feloldja az értékeket alkalmazásbeállításokként, százalékjelek nélkül.
Az alábbi példa egy Azure Queue Storage-eseményindító, amely egy alkalmazásbeállítással %input_queue_name%
határozza meg az eseményindító üzenetsort.
{
"bindings": [
{
"name": "order",
"type": "queueTrigger",
"direction": "in",
"queueName": "%input_queue_name%",
"connection": "MY_STORAGE_ACCT_APP_SETTING"
}
]
}
Ugyanezt a megközelítést használhatja az osztálykódtárakban is:
[FunctionName("QueueTrigger")]
public static void Run(
[QueueTrigger("%input_queue_name%")]string myQueueItem,
ILogger log)
{
log.LogInformation($"C# Queue trigger function processed: {myQueueItem}");
}
Eseményindító fájl neve
A path
Blob-eseményindító olyan minta lehet, amely lehetővé teszi, hogy hivatkozzon az eseményindító blob nevére más kötésekben és függvénykódokban. A minta olyan szűrési feltételeket is tartalmazhat, amelyek meghatározzák, hogy mely blobok indíthatnak el függvényhívást.
A következő Blob-trigger kötésében például a path
minta sample-images/{filename}
egy kötési kifejezést filename
hoz létre:
{
"bindings": [
{
"name": "image",
"type": "blobTrigger",
"path": "sample-images/{filename}",
"direction": "in",
"connection": "MyStorageConnection"
},
...
A kifejezés filename
ezután egy kimeneti kötésben használható a létrehozandó blob nevének megadásához:
...
{
"name": "imageSmall",
"type": "blob",
"path": "sample-images-sm/{filename}",
"direction": "out",
"connection": "MyStorageConnection"
}
],
}
A függvénykód egy paraméternév használatával filename
rendelkezik hozzáféréssel ehhez az értékhez:
// C# example of binding to {filename}
public static void Run(Stream image, string filename, Stream imageSmall, ILogger log)
{
log.LogInformation($"Blob trigger processing: {filename}");
// ...
}
A kötési kifejezések és minták használatának képessége az osztálykódtárak attribútumaira is érvényes. Az alábbi példában az attribútumkonstruktor paraméterei ugyanazok path
az értékek, mint az előző function.json példák:
[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}");
// ...
}
A fájlnév egyes részeihez is létrehozhat kifejezéseket. Az alábbi példában a függvény csak a mintának megfelelő fájlneveken aktiválódik: anyname-anyfile.csv
{
"name": "myBlob",
"type": "blobTrigger",
"direction": "in",
"path": "testContainerName/{date}-{filetype}.csv",
"connection": "OrderStorageConnection"
}
A blobútvonal-sztring kifejezéseinek és mintáinak használatáról a Storage blobkötési referenciájában talál további információt.
Eseményindító metaadatok
Az eseményindító által biztosított adat hasznos adatokon (például a függvényt aktiváló üzenet tartalmán) kívül számos eseményindító további metaadat-értékeket is biztosít. Ezek az értékek használhatók bemeneti paraméterként c# és F# nyelven, illetve tulajdonságokként a JavaScriptben lévő context.bindings
objektumon.
Egy Azure Queue Storage-eseményindító például a következő tulajdonságokat támogatja:
- QueueTrigger – üzenettartalom aktiválása érvényes sztring esetén
- DequeueCount
- Lejárati idő
- Azonosító
- InsertionTime
- NextVisibleTime
- PopReceipt
Ezek a metaadat-értékek function.json fájltulajdonságokban érhetők el. Tegyük fel például, hogy egy üzenetsor-eseményindítót használ, és az üzenetsor-üzenet tartalmazza az elolvasni kívánt blob nevét. A function.json fájlban metaadat-tulajdonságot használhat queueTrigger
a blobtulajdonságbanpath
, ahogyan az a következő példában látható:
{
"bindings": [
{
"name": "myQueueItem",
"type": "queueTrigger",
"queueName": "myqueue-items",
"connection": "MyStorageConnection",
},
{
"name": "myInputBlob",
"type": "blob",
"path": "samples-workitems/{queueTrigger}",
"direction": "in",
"connection": "MyStorageConnection"
}
]
}
Az egyes eseményindítók metaadat-tulajdonságainak részleteit a megfelelő referenciacikk ismerteti. Példa: üzenetsor-eseményindító metaadatai. A dokumentáció a portál Integrálás lapján, a kötéskonfigurációs terület alatti Dokumentáció szakaszban is elérhető.
JSON-adattartalmak
Bizonyos esetekben az eseményindító hasznos adatainak tulajdonságaira hivatkozhat az ugyanazon függvényben és a függvénykódban található más kötések konfigurációjában. Ez megköveteli, hogy az eseményindító hasznos adatai JSON-alapúak, és kisebbek, mint az egyes triggerekre vonatkozó küszöbértékek. A hasznos adatok méretének általában 100 MB-nál kisebbnek kell lennie, de minden eseményindító esetében ellenőriznie kell a referenciatartalmat. Az eseményindító hasznos adattulajdonságainak használata hatással lehet az alkalmazás teljesítményére, és arra kényszeríti a triggerparaméter típusát, hogy egyszerű típusok legyenek, például sztringek vagy JSON-adatokat képviselő egyéni objektumtípus. Streamekhez, ügyfelekhez vagy más SDK-típusokhoz nem használható.
Az alábbi példa egy olyan webhookfüggvény function.json fájlját mutatja be, amely blobnevet kap a JSON-ban: {"BlobName":"HelloWorld.txt"}
. A Blob bemeneti kötés beolvassa a blobot, a HTTP kimeneti kötés pedig a BLOB tartalmát adja vissza a HTTP-válaszban. Figyelje meg, hogy a Blob bemeneti kötése közvetlenül a tulajdonságra () hivatkozva kapja meg a BlobName
blob nevét."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"
}
]
}
Ahhoz, hogy ez működjön C# és F# nyelven, szüksége van egy osztályra, amely meghatározza a deszerializálandó mezőket, ahogyan az alábbi példában is látható:
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}"
});
}
A JavaScriptben a JSON deszerializálása automatikusan megtörténik.
module.exports = async function (context, info) {
if ('BlobName' in info) {
context.res = {
body: { 'data': context.bindings.blobContents }
}
}
else {
context.res = {
status: 404
};
}
}
Pont jelölése
Ha a JSON hasznos adatainak egyes tulajdonságai tulajdonságokat tartalmazó objektumok, ezekre közvetlenül pont (.
) jelöléssel hivatkozhat. Ez a jelölés nem működik az Azure Cosmos DB-hez vagy a Table Storage-kötésekhez.
Tegyük fel például, hogy a JSON a következőképpen néz ki:
{
"BlobName": {
"FileName":"HelloWorld",
"Extension":"txt"
}
}
Közvetlenül a következőre FileName
BlobName.FileName
hivatkozhat: . Ezzel a JSON-formátummal az alábbi módon nézne ki az path
előző példában szereplő tulajdonság:
"path": "strings/{BlobName.FileName}.{BlobName.Extension}",
A C#-ban két osztályra van szükség:
public class BlobInfo
{
public BlobName BlobName { get; set; }
}
public class BlobName
{
public string FileName { get; set; }
public string Extension { get; set; }
}
GRAFIKUS GUID-k létrehozása
A {rand-guid}
kötési kifejezés létrehoz egy GUID azonosítót. A fájl alábbi blobútvonala function.json
létrehoz egy 50710cb5-84b9-4d87-9d83-a03d6976a682.txt nevű blobot.
{
"type": "blob",
"name": "blobOutput",
"direction": "out",
"path": "my-output-container/{rand-guid}.txt"
}
Aktuális idő
A kötési kifejezés DateTime
feloldja a következőt DateTime.UtcNow
: . A fájl alábbi blobútvonala function.json
létrehoz egy 2018-02-16T17-59-55Z.txt nevű blobot.
{
"type": "blob",
"name": "blobOutput",
"direction": "out",
"path": "my-output-container/{DateTime}.txt"
}
Kötés futásidőben
C# és más .NET-nyelvekben imperatív kötési mintát használhat, szemben a function.json és attribútumok deklaratív kötésével. Az imperatív kötés akkor hasznos, ha a kötési paramétereket futásidőben kell kiszámítani a tervezési idő helyett. További információkért tekintse meg a C# fejlesztői referenciát vagy a C# szkript fejlesztői referenciát.