最近のアクセス:
Azure Functions または AWS 関数としてデプロイする GeneXus プロシージャーの作成方法

一部の 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)。

GeneXusServerlessAPI モジュールのインストール

1. まず、外部モジュール "GeneXusServerlessAPI" をナレッジベースにインポートします。このモジュールには、関数にパラメーターとして渡すのに必要な SDT の定義が含まれています。
イメージ:47807.png
イメージ:53930.png
Parm ルールは、次のいずれかになります:
parm(in:&EventMessages,out:&EventMessageResponse); 

parm(in:&RawData,out:&EventMessageResponse); // RawData is a char parameter

EventMessage SDT について

EventMessage のヘッダーにより、Azure Functions または AWS Lambda からイベントに関するすべての情報 (ID など) を取得できます。
アイテム EventMessageProperties はプロパティ値の構造になっており、そこでメタデータを含むメッセージの本文を取得できます。これは動的な構造であり、関数のトリガータイプにかかわらず、任意の種類のメッセージがサポートされています。
イメージ:53876.png
: JSON 文字列のメッセージを受け取るようにしたい場合は、in:&RawData 文字列のパラメーターを使用してください。

EventMessageResponse SDT について

EventMessageResponse の構造は、次のとおりです:
イメージ:54146.png
エラー処理についての詳細は、以下を参照してください。

以下は、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)
    //Process the message properties.
    //This is a dynamic structure (property-value) which depends on the type of message and the provider.
    for &EventMessageProperty in &EventMessage.EventMessageProperties
          &Data +=    format(!"%1:%2 %3 ", &EventMessageProperty.PropertyId, &EventMessageProperty.PropertyValue, "-")
     endfor
endfor    

デプロイ

プロシージャーを関数としてデプロイするには、デプロイツールを使用します。「Azure Functions としてデプロイする方法」または「AWS Lambda 関数としてデプロイする方法」を参照してください。

関数のエラー処理

イベントが実行されない状況を回避するために、エラー処理は非常に重要な考慮事項です。これは、最大再試行回数に達するまで関数を再実行する必要がある例外のためです。
既定では、システムエラーが発生した場合、関数は再試行します。

GeneXus プロシージャーでは、プログラマが制御できる何らかの理由でアプリケーションが失敗した場合、&EventMessageResponse 出力変数の [ HandleFailure ] プロパティを TRUE に設定するだけで、関数を強制的に再実行できます。
If &isError
    &EventMessageResponse.HandleFailure = TRUE
    &EventMessageResponse.ErrorMessage = "There was an error in the process."
 Endif

 

Azure のエラー処理の留意点

 
各タイプの関数は、そのインフラストラクチャ内で再試行およびエラー処理を独自に管理します。Microsoft のドキュメントによると、host.json ファイルを使用して、アプリケーション内のすべての関数に対して再試行ポリシーを定義できます。 
このファイルは、基本設定を使用してデプロイパッケージに追加されます。必要に応じて変更したり、ファイルとして含めたりします。
この場合、エラーは Azure ランタイムにスローされるため、関数は設定されている回数分、再試行できます。Queue Storage または Service Bus の場合、いずれの再試行も成功しないと、メッセージはそれぞれ Poison キューまたはデッドレターに送信されます。
この場合、Azure クラウドのモニターにアプリケーションエラーとしてエラーが表示されます: 
イメージ:47738.png

参考情報

Azure Functions を監視する方法


バックリンク
目次: アプリケーションをデプロイ目次: アプリケーションをデプロイ (GeneXus 18 Upgrade 2 以前のバージョン)AWS の EventBridge トリガー関数
AWS の Queue トリガー関数Blob Storage でトリガーされる Azure FunctionsCosmosDB でトリガーされる Azure FunctionsEvent Grid でトリガーされる Azure Functions
タイマートリガーの Azure FunctionsAzure Functions または AWS 関数としてデプロイする GeneXus プロシージャーの作成方法 (GeneXus 18 Upgrade 2)Azure Functions としてデプロイする方法AWS Lambda 関数としてデプロイする方法
HTTP トリガーの Lambda 関数Lambda の Timer トリガー関数Service Bus と Queue Storage をトリガーとする Azure Functions
サブページ
Created: 22/03/14 00:48 by Admin Last update: 25/12/10 18:03 by Admin
カテゴリ
Powered by GXwiki 3.0