Vytváření triggerů a vazeb
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 dataType
stream
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
aout
- Některé vazby podporují zvláštní směr
inout
. Pokud používáteinout
, 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 queueName
a 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 tableName
a 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: