関数コードや依存関係、バイナリは、S3オブジェクトバケットやGitリポジトリなどの外部リポジトリに存在することも、ユーザーが直接提供することもできます。 コードが外部リポジトリにある場合、ユーザーはパスと認証情報を指定する必要があります。
サーバレスフレームワークはまた、ユーザーが(例えば、Web hookを使用して)コードリポジトリにおける変更を見て、コミット時に自動で関数イメージ/バイナリを構築できるようにすることも可能です。
関数は外部のライブラリやバイナリと依存関係にある場合があります。こうした依存関係については、ビルドプロセスを記述する方法(Dockerfile、Zipなど)を含め、ユーザーが提供する必要があります。
さらに、関数はOCIイメージのようなバイナリパッケージを介して、フレームワークに提供することもできます。
サーバレス関数の定義には、次の仕様とメタデータが含まれている場合があります。関数の定義はバージョン固有です。
メタデータの詳細
関数フレームワークは、関数のために以下のメタデータを扱うことができます。
データバインディング
幾つかのサーバレスフレームワークでは、関数が使用する入出力データリソースをユーザーが指定できるため、開発者にとってのシンプルさ、パフォーマンス(実行間のデータ接続が保持される、データをプリフェッチできるなど)、セキュリティ(データソースの資格情報はコードではなくコンテキストの一部となる)が向上します。
バインドされたデータは、ファイル、オブジェクト、レコード、メッセージなどの形をとることができます。関数の仕様はデータバインディング定義の配列を含むことがあり、それぞれがデータリソース、クレデンシャルおよび使用パラメータを指定します。データバインディングはイベントデータを参照することができます(例:DBキーはイベント「ユーザー名」フィールドから取得します)。詳しくはhttps://docs.microsoft.com/azure/azure-functions/functions-triggers-bindingsをご覧ください。
関数への入力は、イベントデータおよびメタデータを含み、コンテキストオブジェクトを含むことができる。
イベントデータとメタデータ
イベントの詳細を関数ハンドラに渡す必要があります。イベントによってさまざまなメタデータを持っている可能性があります。従って、関数がイベントのタイプを判別し、全イベント共通、およびイベント固有のメタデータを簡単にパースできるようにすることが望まれます。
イベントクラスを実装から切り離すことが望ましい場合があります。例えば、ストリーミングストレージがKafkaまたはKinesisであるかどうかに関わらず、メッセージストリームを処理する関数が同じように動作できるようになります。どちらの場合も、メッセージボディとイベントメタデータを受信し、メッセージは異なるフレームワーク間でルーティングされます。
イベントには単一のレコード(例えばリクエスト/レスポンスモデル)が含まれている場合と、複数のレコードまたはマイクロバッチ(ストリーミングモードなど)を受け入れる場合があります。
FaaSソリューションで使用される一般的なイベントデータとメタデータの例は、次の通りです。
イベントやレコードに固有のメタデータの例:
イベントソース構造の例:
いくつかの実装では、イベント情報を関数に渡すためのメカニズムとしてJSONに焦点を当てています。これは、高速処理を行う関数(例えば、ストリーム処理)や低消費電力デバイス(IoT)において、シリアル化/非シリアル化の大きな負荷につながる可能性があります。こうした場合には、ネイティブな開発言語の構造や、追加のシリアル化メカニズムを考慮することに価値があるかもしれません。
Copyright © ITmedia, Inc. All Rights Reserved.