最近のアクセス:
Azure 関数または 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 は Char パラメーター

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)
    //メッセージのプロパティを処理する。
    //これは、メッセージおよびプロバイダーのタイプに依存する動的な構造 (プロパティ値)。
    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

Azure のエラー処理の留意点

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

参考情報

Azure Functions を監視する方法


サブページ
Created: 22/03/14 00:48 by Admin Last update: 24/03/25 23:57 by Admin
カテゴリ
Powered by GXwiki 3.0