前言

[Azure 筆記] 前言


原文

Create triggers and bindings


What is trigger and binding

「Trigger」定義了 function 會怎樣及在何時參與到整個工作流程
每個 function 都會有且只有一個 trigger
Trigger 通常都會附帶一些相關資料並作為 function 的 payload (承載)

「Binding」定義了 function 會怎樣連接到其他資源(resources)

Binding 共分為 input binding 和 output binding 兩種
對於 function 來說,binding 是 optional 的
而且一個 function 也可以有一個或多個不同的 binding
來自 binding 的數據會成為 function 的 parameter

 

Trigger and binding definitions

不同的 deployment language 會有着不同的定義 trigger 和 binding 的方式

Language設置 trigger 和 binding 的方式
C# class librarydecorating methods and parameters with C# attributes
Javadecorating methods and parameters with Java annotations
JavaScript/PowerShell/Python/TypeScriptupdating function.json schema

如果你用的是使用 function.json 的 language
你可以在 Azure Portal 的 “Integration tab” 設置 binding
也可以在 “Code + test tab” 修改你的 function 的 檔案

如果你的是 .Net 或 Java
Parameter type 決定了 input data type
例如你可以用string綁定來自 queue trigger 的字串
你可以 byte array 去讀取 binary

如果用 azure portal 修改 C# script
那就會是使用 function.json 而不是 attributes
((上表不是說 C# 是用 attribute 的嗎,難道C#有兩種處理方式?

在動態類型(dynamically typed)的語言中,如 JavaScript,綁定的數據類型需要在 function.json 文件中指定。這是因為這些語言不會在編譯時確定變量的類型,因此需要明確告訴 Azure Functions 如何處理輸入數據。

例如,當你想以二進制格式讀取 HTTP 請求的內容時,可以在 function.json 文件中設置 dataType 屬性為 binary。這樣,Azure Functions 就能夠正確解析和處理該請求的內容。下面是一個設置的例子。

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

dataType 還可以是stream 和 string

 

Binding direction

在function.json中設置的 trigger 和 binding 都需要有 direction

  • trigger 的 direction 只能是 in
  • input binding 的 direction 是 in
  • output binding 的 direction 是 out
  • 某些 binding 的 direction 可以設置為 inout
    只有 Azure Portal 的 “Integration tab” 可以設置 inout

當你使用 class library 來設置 trigger 和 binding
你可以使用 “attribute constructor” 來設置 direction
或者 Azure 會根據 parameter type 來判斷 direction

 

Azure Functions trigger and binding example

為了能更好的了解 trigger 和 binding
接下來我們就一起來看看下面這個例子吧

這個例子的情景是
每當 Azure Queue storage 有新 message 的時候
就在 Azure Table storage 寫入一個新的 row
這可以經由設置 Azure Queue storage trigger 和 Azure Table storage binding 完成

function.json

{
  "disabled": false,
    "bindings": [
        {
            "type": "queueTrigger",
            "direction": "in",
            "name": "myQueueItem",
            "queueName": "myqueue-items",
            "connection":"MyStorageConnectionAppSetting"
        },
        {
          "tableName": "Person",
          "connection": "MyStorageConnectionAppSetting",
          "name": "tableBinding",
          "type": "table",
          "direction": "out"
        }
  ]
}

在這個例子中
bindings這個 array 設置了所需的 trigger 和 binding

這個 array 的第一個 element 就設置了 trigger
type 和 direction 就把它定義為 trigger
name 定義了你的 function 可以通過那一個 parameter 來取得 queue message
queueName 定義了要監察那一個 queue
connection 則是放置了 connection string

這個 array 的第二個 element 就設置了 output binding
type 和 direction 就把它定義為 output binding
name 定義了你的 function 會如何提供數據
在這個例子中就是把 function return value 加插為 new table row
tableName 指明了要把 value 輸出到那個 table
connection 是儲存了連接到該 table 的 connection string

 

C# function example

C# 和 Java 都不是用 function.json 來定義 trigger 和 binding 的
而是用程式碼來定義
下面就是一個 C# 用 attribute 來定義 trigger 和 binding 的例子
(queue and table names, storage accounts, and function parameters for input and output)

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

廣告欄位
本站致力於為大家提供乾淨舒服的獲取資訊途徑
並盡量把廣告對閱讀體驗的影響降至最低
若想支持本站營運
可點擊此處打開廣告
廣告的內容並非由本站控制
請小心驗證廣告內容
感謝各位看客的支持 ( •̀ ω •́ )y


發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *


Trending