一部の
Azure Functions または
AWS Lambda 関数 (HTTP によってトリガーされる関数以外) では、パラメーターの実行が必要な場合があります。
Azure または AWS ランタイムが関数を呼び出すと (関数がトリガーされると)、発生したイベントに関連する情報を受け取ります (例: Queue Storage 関数または Service Bus 関数内のキューから受信したメッセージ、または Blob ストレージに格納された blob)。
この情報は、GeneXus
Procedure オブジェクト内で関数のロジックをプログラムするのに必要です。
したがって、関数としてデプロイする GeneXus プロシージャーを作成するために、この記事で説明されているプロシージャーのパラメーターに関するいくつかの側面を考慮する必要があります。
- これは、Blob、Service Bus、Queue、および Timer のトリガータイプ (HTTP 以外のすべて) の関数に対して有効です。
- GeneXus プロシージャーはメインである必要があります ([ Call protocol ] プロパティ = Internal)。
1.まず、外部モジュール "GeneXusServerlessAPI" を
ナレッジベースにインポートします。このモジュールには、関数にパラメーターとして渡すのに必要な
SDT の定義が含まれています。
Parm ルールは、次のいずれかになります:
parm(in:&EventMessages,out:&EventMessageResponse);
parm(in:&RawData,out:&EventMessageResponse); // RawData は Char パラメーター
EventMessage のヘッダーにより、Azure Functions または AWS Lambda からイベントに関するすべての情報 (ID など) を取得できます。
アイテム EventMessageProperties はプロパティ値の構造になっており、そこでメタデータを含むメッセージの本文を取得できます。これは動的な構造であり、関数のトリガータイプにかかわらず、任意の種類のメッセージがサポートされています。
注: JSON 文字列のメッセージを受け取るようにしたい場合は、in:&RawData 文字列のパラメーターを使用してください。
EventMessageResponse の構造は、次のとおりです:
エラー処理についての詳細は、以下を参照してください。
以下は、EventMessage が処理されるコードの例です。
for &EventMessage in &EventMessages.EventMessage
&MessageInfo = format(!"Id : %1, Source : %2, Version : %3, Date : %4, Data : %5"
,&EventMessage.EventMessageId
,&EventMessage.EventMessageSourceType
,&EventMessage.EventMessageVersion
,&EventMessage.EventMessageDate
,&EventMessage.EventMessageData)
//メッセージのプロパティを処理する。
//これは、メッセージおよびプロバイダーのタイプに依存する動的な構造 (プロパティ値)。
for &EventMessageProperty in &EventMessage.EventMessageProperties
&Data += format(!"%1:%2 %3 ", &EventMessageProperty.PropertyId, &EventMessageProperty.PropertyValue, "-")
endfor
endfor
プロシージャーを関数としてデプロイするには、デプロイツールを使用します。
「Azure Functions としてデプロイする方法」または「
AWS Lambda 関数としてデプロイする方法」を参照してください。
イベントが実行されない状況を回避するために、エラー処理は非常に重要な考慮事項です。これは、最大再試行回数に達するまで関数を再実行する必要がある例外のためです。
既定では、システムエラーが発生した場合、関数は再試行します。
GeneXus プロシージャーでは、プログラマが制御できる何らかの理由でアプリケーションが失敗した場合、エラーをキャッチして、ErrorMessage および
HandleFailure 要素が TRUE に設定された EventMessageResponse 出力パラメーターを割り当てることができます。
If &isError
&EventMessageResponse.HandleFailure = TRUE
&EventMessageResponse.ErrorMessage = "There was an error in the process."
Endif
各タイプの関数は、そのインフラストラクチャ内で
再試行およびエラー処理を独自に管理します。
Microsoft のドキュメントによると、
host.json ファイルを使用して、アプリケーション内のすべての関数に対して再試行ポリシーを定義できます。
このファイルは、基本設定を使用してデプロイパッケージに追加されます。必要に応じて変更したり、ファイルとして含めたりします。
この場合、エラーは Azure ランタイムにスローされるため、関数は設定されている回数分、再試行できます。Queue Storage または Service Bus の場合、いずれの再試行も成功しないと、メッセージはそれぞれ Poison キューまたはデッドレターに送信されます。
この場合、Azure クラウドのモニターにアプリケーションエラーとしてエラーが表示されます:
Azure Functions を監視する方法