Sdílet prostřednictvím


Vzory vazeb výrazů azure Functions

Jednou z nejvýkonnějších funkcí triggerů a vazeb je vazbové výrazy. V souboru function.json a v parametrech funkce a kódu můžete použít výrazy, které se přeloží na hodnoty z různých zdrojů.

Většina výrazů je označena a tím, že je zabalena ve složených závorkách. Například ve funkci {queueTrigger} triggeru fronty se přeloží na text zprávy fronty. path Pokud je container/{queueTrigger} vlastnost výstupní vazby objektu blob a funkce je aktivována zprávou HelloWorldfronty , vytvoří se objekt blob s názvemHelloWorld.

Typy vazbových výrazů

Vazbové výrazy – nastavení aplikace

Jako osvědčený postup by se tajné kódy a připojovací řetězec měly spravovat pomocí nastavení aplikace místo konfiguračních souborů. Tím omezíte přístup k těmto tajným kódům a zajistíte bezpečnost ukládání souborů, jako jsou function.json v úložištích veřejné správy zdrojového kódu.

Nastavení aplikace je také užitečné při každé změně konfigurace na základě prostředí. Například v testovacím prostředí můžete chtít monitorovat jinou frontu nebo kontejner úložiště objektů blob.

Výrazy vazby nastavení aplikace se identifikují odlišně od jiných výrazů vazby: jsou zabalené ve znaménka procent, nikoli ve složených závorkách. Pokud je %Environment%/newblob.txt například cesta výstupní vazby objektu blob a Environment hodnota nastavení aplikace, Developmentvytvoří se v kontejneru Development objekt blob.

Když je funkce spuštěná místně, hodnoty nastavení aplikace pocházejí ze souboru local.settings.json .

Poznámka:

Vlastnost connection triggerů a vazeb je zvláštní případ a automaticky překládá hodnoty jako nastavení aplikace bez znaménka procent.

Následující příklad je trigger azure Queue Storage, který používá nastavení %input_queue_name% aplikace k definování fronty, ve které se má aktivovat.

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

Stejný přístup můžete použít v knihovnách tříd:

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

Název souboru aktivační události

Trigger path objektu blob může být vzor, který umožňuje odkazovat na název aktivačního objektu blob v jiných vazbách a kódu funkce. Vzor může také zahrnovat kritéria filtrování, která určují, které objekty blob mohou aktivovat vyvolání funkce.

Například v následující vazbě path triggeru objektu blob je sample-images/{filename}vzor , který vytvoří výraz vazby s názvem filename:

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

Výraz filename se pak dá použít ve výstupní vazbě k zadání názvu vytvářeného objektu blob:

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

Kód funkce má přístup ke stejné hodnotě pomocí filename názvu parametru:

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

Stejná možnost používat vazbové výrazy a vzory platí pro atributy v knihovnách tříd. V následujícím příkladu jsou parametry konstruktoru atributů stejné path hodnoty jako předchozí function.json příklady:

[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}");
    // ...
}

Můžete také vytvořit výrazy pro části názvu souboru. V následujícím příkladu se funkce aktivuje jenom u názvů souborů, které odpovídají vzoru: anyname-anyfile.csv

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

Další informace o použití výrazů a vzorů v řetězci cesty k objektu blob najdete v referenčních informacích k vazbám objektů blob služby Storage.

Metadata aktivační události

Kromě datové části poskytované triggerem (například obsah zprávy fronty, která aktivovala funkci), mnoho triggerů poskytuje další hodnoty metadat. Tyto hodnoty lze použít jako vstupní parametry v jazyce C# a F# nebo vlastnosti objektu v JavaScriptu context.bindings .

Trigger azure Queue Storage například podporuje následující vlastnosti:

  • QueueTrigger – aktivace obsahu zprávy, pokud je platný řetězec
  • DequeueCount
  • Čas vypršení platnosti
  • ID
  • Čas vložení
  • NextVisibleTime
  • PopReceipt

Tyto hodnoty metadat jsou přístupné ve vlastnostech souboru function.json . Předpokládejme například, že používáte trigger fronty a zpráva fronty obsahuje název objektu blob, který chcete přečíst. V souboru function.json můžete použít queueTrigger vlastnost metadat ve vlastnosti objektu blobpath, jak je znázorněno v následujícím příkladu:

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

Podrobnosti o vlastnostech metadat pro jednotlivé triggery jsou popsány v odpovídajícím referenčním článku. Příklad najdete v metadatech triggeru fronty. Dokumentace je také k dispozici na kartě Integrace portálu v části Dokumentace pod oblastí konfigurace vazby.

Datové části JSON

V některých scénářích můžete odkazovat na vlastnosti datové části triggeru v konfiguraci pro jiné vazby ve stejné funkci a v kódu funkce. To vyžaduje, aby datová část triggeru byla JSON a je menší než prahová hodnota specifická pro jednotlivé triggery. Velikost datové části obvykle musí být menší než 100 MB, ale pro každou aktivační událost byste měli zkontrolovat referenční obsah. Použití vlastností datové části triggeru může mít vliv na výkon vaší aplikace a vynutí, aby typ parametru triggeru byl jednoduchými typy, jako jsou řetězce nebo vlastní typ objektu představující data JSON. Nedá se použít s datovými proudy, klienty ani jinými typy sad SDK.

Následující příklad ukazuje soubor function.json pro funkci webhooku, která přijímá název objektu blob ve formátu JSON: {"BlobName":"HelloWorld.txt"}. Vstupní vazba objektu blob načte objekt blob a výstupní vazba HTTP vrátí obsah objektu blob v odpovědi HTTP. Všimněte si, že vstupní vazba objektu blob získá název objektu BlobName blob odkazem přímo na vlastnost ("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"
    }
  ]
}

Aby to fungovalo v jazyce C# a F#, potřebujete třídu, která definuje pole, která mají být deserializována, jako v následujícím příkladu:

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}"
    });
}

V JavaScriptu se deserializace JSON provádí automaticky.

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

Zápis tečky

Pokud jsou některé vlastnosti v datové části JSON objekty s vlastnostmi, můžete je přímo odkazovat pomocí tečky (.) notace. Tento zápis nefunguje pro vazby Azure Cosmos DB nebo Table Storage .

Předpokládejme například, že váš JSON vypadá takto:

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

Můžete odkazovat přímo na FileName .BlobName.FileName V tomto formátu path JSON by tato vlastnost v předchozím příkladu vypadala takto:

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

V jazyce C# byste potřebovali dvě třídy:

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

Vytvoření identifikátorů GUID

Výraz vazby {rand-guid} vytvoří identifikátor GUID. Následující cesta k objektu function.json blob v souboru vytvoří objekt blob s názvem, jako je 50710cb5-84b9-4d87-9d83-a03d6976a682.txt.

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

Aktuální čas

Výraz vazby DateTime se přeloží na DateTime.UtcNow. Následující cesta k objektu function.json blob v souboru vytvoří objekt blob s názvem, jako je 2018-02-16T17-59-55Z.txt.

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

Vazba za běhu

V jazyce C# a dalších jazycích .NET můžete na rozdíl od deklarativních vazeb v function.json a atributech použít imperativní vzor vazby. Imperativní vazba je užitečná v případě, že parametry vazby je potřeba vypočítat za běhu místo doby návrhu. Další informace najdete v referenčních informacích pro vývojáře jazyka C# nebo v referenčních informacích pro vývojáře skriptů jazyka C#.