0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Azure functionsのバインドとトリガー

Posted at

Azure Functionsの構成

Azure functionの各関数は、function.jsonとセットで定義されます。

 MyFunctionApp/
├── Function1/
│   ├── function.json
│   └── index.js
├── Function2/
│   ├── function.json
│   └── index.js
└── shared/
    └── utils.js

Azure functionsのfunction.json

Azure functionsは、どのタイミングで関数を発火させるかという「トリガー」の設定と、データの入力、処理、出力などをまとめた「バインド」を設定されている必要があります。これは、function.jsonに定義してあります。(JavaScript/PowerShell/Python/TypeScriptの場合)
以下はfunction.jsonの一例です。

{
  "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"
    }
  ]
}

まず、directionはデータの方向を示しています。inの場合は、関数にデータを入力する方向で、outは関数からデータを出力する方向です。つまり入力と出力の方向の情報を記しています。myqueue-itemsにキューメッセージが入力された場合に、queueTriggerという関数が発火します。そして、処理をしてoutTableというテーブルに情報を入れ込むということです。"name": "$return",という表現からも返り値がテーブルい直接書き込まれることがわかります。

処理の関数について、javascriptでは以下のような処理を行います。orderはキューのデータです。orderの情報をもとに、orderを処理していることがわかります。

Azure functionsの処理ファイル

今回はjavascriptで処理を行います。関数のロジック自体は非常にシンプルです。

関数のパラメータ
context: Azure Functions ランタイムから提供されるコンテキストオブジェクトで、関数の実行環境に関する情報や、バインディングへのアクセスなどを提供します。
order: 関数のトリガーとなったキューメッセージの内容です。この場合、order オブジェクトはキューから直接受け取ったデータを表します。

処理の流れ
PartitionKeyとRowKeyの設定: order オブジェクトに PartitionKey と RowKey を設定します。これらは、Azure Table Storageでのデータのパーティショニングと一意性の確保に使用されます。

PartitionKey は、データを分割するためのキーで、関連するデータを同じパーティションに格納することでアクセスの効率を上げることができます。ここでは "Orders" という静的な値が使用されており、すべての注文が同じパーティションに格納されることを意味します。

RowKey は、パーティション内でのデータの一意性を保証するキーです。generateRandomId 関数を呼び出して生成される一意のIDが設定されます。これにより、各注文が識別可能になります。

データのバインディングへの設定: context.bindings.order = order; により、処理された order オブジェクトが指定されたバインディング(このコードからは出力バインディングであることが推測されます)に設定されます。この操作により、order オブジェクトは自動的に指定されたストレージに保存される準備が整います。

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

そんな感じです。つまり、Azure Functionsではデータの流れと関数の発動タイミングを処理する関数とセットで定義することがミソです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?