Vytváření triggerů a vazeb

Dokončeno

Triggery způsobují spuštění funkce. Trigger definuje způsob volání funkce a každá funkce musí mít právě jeden trigger. Aktivační události obsahují související data, která se často poskytují jako datová část funkce.

Vazba na funkci je způsob deklarativního připojení jiného prostředku k funkci; vazby mohou být připojeny jako vstupní vazby, výstupní vazby nebo obojí. Data z vazeb má funkce k dispozici jako parametry.

Můžete kombinovat a párovat různé vazby tak, aby odpovídaly vašim potřebám. Vazby jsou volitelné a funkce může mít jednu nebo více vstupních nebo výstupních vazeb.

Triggery a vazby umožňují vyhnout se pevnému kódování přístupu k jiným službám. Vaše funkce přijímá data (například obsah zprávy fronty) v parametrech funkce. Vy posíláte data (například k vytvoření zprávy fronty) pomocí návratové hodnoty funkce.

Definice triggerů a vazeb

Triggery a vazby se definují odlišně v závislosti na vývojovém jazyce.

Jazyk Triggery a vazby se konfigurují pomocí...
Knihovna tříd jazyka C# dekódování metod a parametrů pomocí atributů jazyka C#
Java dekódování metod a parametrů pomocí poznámek Java
JavaScript,PowerShell/Python/TypeScript aktualizace schématu function.json

Pro jazyky, které spoléhají na function.json, portál poskytuje uživatelské rozhraní pro přidání vazeb na kartě Integrace . Soubor můžete také upravit přímo na portálu na kartě Kód + test funkce.

V .NET a Javě definuje typ parametru datový typ pro vstupní data. Můžete například vytvořit string vazbu na text triggeru fronty, bajtové pole, které se má číst jako binární, a vlastní typ pro de-serializaci objektu. Vzhledem k tomu, že funkce knihovny tříd .NET a funkce Jazyka Java nespoléhají na definicích vazeb function.json, není možné je vytvářet a upravovat na portálu. Úpravy portálu C# jsou založené na skriptu jazyka C#, který místo atributů používá function.json .

Pro jazyky, které se dynamicky zapisují, jako je JavaScript, použijte dataType vlastnost v souboru function.json . Pokud chcete například přečíst obsah požadavku HTTP v binárním formátu, nastavte dataType na binary:

{
    "dataType": "binary",
    "type": "httpTrigger",
    "name": "req",
    "direction": "in"
}

Další možnosti jsou dataTypestream a string.

Směr vazby

Všechny triggery a vazby mají vlastnost směru v souboru function.json :

  • U aktivačních událostí je směr vždy in
  • Vstupní a výstupní vazby se používají in a out
  • Některé vazby podporují zvláštní směr inout. Pokud používáte inout, je na portálu k dispozici pouze rozšířený editor prostřednictvím karty Integrace .

Pokud používáte atributy v knihovně tříd ke konfiguraci triggerů a vazeb, směr je poskytován v konstruktoru atributů nebo odvozen z typu parametru.

Příklad triggerů a vazeb Azure Functions.

Předpokládejme, že chcete do služby Azure Table Storage napsat nový řádek pokaždé, když se ve službě Azure Queue Storage zobrazí nová zpráva. Tento scénář je možné implementovat pomocí aktivační události Azure Queue Storage a výstupní vazby Azure Table Storage.

Tady je soubor function.json pro tento scénář.

{
  "bindings": [
    {
      "type": "queueTrigger",
      "direction": "in",
      "name": "order",
      "queueName": "myqueue-items",
      "connection": "MY_STORAGE_ACCT_APP_SETTING"
    },
    {
      "type": "table",
      "direction": "out",
      "name": "$return",
      "tableName": "outTable",
      "connection": "MY_TABLE_STORAGE_ACCT_APP_SETTING"
    }
  ]
}

Prvním prvkem bindings v poli je trigger Queue Storage. Aktivační type událost a direction vlastnosti identifikují. Vlastnost name identifikuje parametr funkce, který přijímá obsah zprávy fronty. Název fronty pro monitorování je v queueNamea připojovací řetězec je v nastavení aplikace identifikované .connection

Druhým prvkem bindings v poli je výstupní vazba Azure Table Storage. Vazby type identifikují a direction vlastnosti. Vlastnost name určuje, jak funkce poskytuje nový řádek tabulky, v tomto případě pomocí návratové hodnoty funkce. Název tabulky je v tableNamea připojovací řetězec je v nastavení aplikace identifikované .connection

Příklad skriptu jazyka C#

Tady je kód skriptu jazyka C#, který funguje s touto aktivační událostí a vazbou. Všimněte si, že název parametru, který poskytuje obsah zprávy fronty, je order; tento název je povinný, protože name hodnota vlastnosti ve function.json je order.

#r "Newtonsoft.Json"

using Microsoft.Extensions.Logging;
using Newtonsoft.Json.Linq;

// From an incoming queue message that is a JSON object, add fields and write to Table storage
// The method return value creates a new row in Table Storage
public static Person Run(JObject order, ILogger log)
{
    return new Person() { 
            PartitionKey = "Orders", 
            RowKey = Guid.NewGuid().ToString(),  
            Name = order["Name"].ToString(),
            MobileNumber = order["MobileNumber"].ToString() };  
}

public class Person
{
    public string PartitionKey { get; set; }
    public string RowKey { get; set; }
    public string Name { get; set; }
    public string MobileNumber { get; set; }
}

Příklad JavaScriptu

Stejný soubor function.json lze použít s funkcí JavaScriptu:

// From an incoming queue message that is a JSON object, add fields and write to Table Storage
module.exports = async function (context, order) {
    order.PartitionKey = "Orders";
    order.RowKey = generateRandomId(); 

    context.bindings.order = order;
};

function generateRandomId() {
    return Math.random().toString(36).substring(2, 15) +
        Math.random().toString(36).substring(2, 15);
}

Příklad knihovny tříd

V knihovně tříd poskytuje stejný trigger a informace o vazbě – názvy front a tabulek, účty úložiště, parametry funkce pro vstup a výstup – atributy místo souboru function.json . Tady je příklad:

public static class QueueTriggerTableOutput
{
    [FunctionName("QueueTriggerTableOutput")]
    [return: Table("outTable", Connection = "MY_TABLE_STORAGE_ACCT_APP_SETTING")]
    public static Person Run(
        [QueueTrigger("myqueue-items", Connection = "MY_STORAGE_ACCT_APP_SETTING")]JObject order,
        ILogger log)
    {
        return new Person() {
                PartitionKey = "Orders",
                RowKey = Guid.NewGuid().ToString(),
                Name = order["Name"].ToString(),
                MobileNumber = order["MobileNumber"].ToString() };
    }
}

public class Person
{
    public string PartitionKey { get; set; }
    public string RowKey { get; set; }
    public string Name { get; set; }
    public string MobileNumber { get; set; }
}

Další prostředek

Podrobnější příklady triggerů a vazeb najdete tady: