Megosztás a következőn keresztül:


Az Azure Functions kötési kifejezési mintái

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 HelloWorldaktiválja, létrejön egy blob neve HelloWorld .

Kötéskifejezések típusai

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, Developmenta 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 filenamehoz 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.FileNamehivatkozhat: . 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.