ここでは、GeneXus アプリケーションを
Azure Functions にデプロイする方法について説明します。
概要
デプロイを実行するマシンに、要件となるものをインストールします。要件は
Azure CLI のみです。
Azure ポータルで、以下の手順に従います:
- Azure にリソースを作成します。「Azure Function App の作成方法」を参照してください。
- 認証を行うには、サービスプリンシパルを設定します。
GeneXus で、以下の手順に従います:
- Deployment Unit オブジェクトを作成し、デプロイするオブジェクトを選択します。
- [ アプリケーションをデプロイ ] を使用して、ターゲット「Microsoft Azure Functions」を選択します。
アプリケーションのバックエンドサービスをデプロイするには、ターゲット「Microsoft Azure serverless (backend services)」を選択します。この場合、関数は HTTP をトリガーとする関数としてデプロイされます。
- プロパティのグリッドでプロパティを設定します。
- [ デプロイ ] ボタンをクリックして Azure へデプロイします。
Azure の関数にはトリガータイプがあります (デプロイユニットの
[ Trigger type ] プロパティ)。

関数のトリガータイプに応じてデプロイ時の検討事項が異なります。
これらの検討事項については、HTTP 以外のトリガーを持つ関数と、HTTP トリガーを持つ関数を分けて考えることができます。
HTTP トリガーを持つ関数を除くすべての関数については、アプリケーションのデプロイ時に以下の点を検討します。
これはタイマーでトリガーされる関数の例です:
「
HTTP トリガーの Azure Functions」を参照してください。
このソリューションは、次の形式の環境変数を使用して、Azure Functions を表す GeneXus オブジェクトを内部的に呼び出すように構成されています:
GX_AZURE_<FUNCTION_NAME>_CLASS。FUNCTION_NAME は関数の名前です。
この環境変数は、関数と、それに関連付けられた GeneXus オブジェクト間のマッピングを認識するために使用されます。
値には常に、ナレッジベースの名前空間またはパッケージ名と、それに続くモジュール化された GeneXus オブジェクトの名前が含まれます。
GeneXus オブジェクトには「a」という接頭語が付くことに注意してください。
例:

環境変数が定義されていない場合は、同じ情報を含む gxazmappings.json というファイルが検索されます。
ファイルの例:
[
{
"FunctionName": "QueueTriggerJava",
"GXEntrypoint": "com.testazurefunctionsjava.test.testqueue"
},
{
"FunctionName": "testfunction",
"GXEntrypoint": "com.testazurefunctionsjava.test.queuetriggeredfunction"
}
]
.NET の場合は、環境変数に加えてこのファイルが生成されます。Java では、環境変数のみが定義されます。
実行時に環境変数もファイルも見つからない場合は、次のエラーが発生します:
FunctionConfigurationException: File gxazmappings.json not found. The file is attempted to be read when there is no GX_AZURE_<FUNCTIONNAME>_CLASS environment variable pointing to the GeneXus class associated with the function.
最初に、既存の Function App に関数を公開するとき、関数が更新されることを考慮します。
設定を変更する必要がある場合でも、再デプロイする必要がないという点で、デプロイの柔軟性が非常に高くなります。
関数によっては、一部の設定をクラウドで変更できるようにすることが望まれます。こうした設定はデプロイ時に設定され、指定する名前と値で
アプリケーション設定をクラウドに作成するようデプロイエンジンを設定できます。
それ以外の場合、デプロイエンジンでは設定は定義されません。(関数のインフラストラクチャのセットアップの一環として) 設定を行うのはユーザーの責任となります。
たとえば、タイマー関数の場合、cron の時刻やアプリケーション設定 (指定する名前と値でクラウドに作成) を指定できます。

最後のオプションについては、すべての変更をクラウドで行うことができるメリットがあります (変更のための再デプロイは不要です)。

キューや Service Bus など、接続データをアプリケーション設定として定義するその他の関数タイプも同様です。
アプリケーション設定とその値を指定するプロパティがない場合でも、アプリケーション設定を柔軟に使用できます。
たとえば、Service Bus またはキュートリガーの場合、キュー名などに固定値を設定する代わりに、「%」で囲んだアプリケーション設定名を設定し、Azure で値を定義できます (アプリケーション設定は Azure で定義する必要があります)。
これにより、固定値を残さずにデプロイできます。つまり、関数が別のキューや Service Bus などを使用するという理由で、再デプロイする必要はないということです。
Function App 内のすべての関数の動作をグローバルに設定できます。そのためには
host.json ファイルを使用します。たとえば、アプリケーション、健全性モニターなどのトレースレベルをこのファイルで設定できます。
Azure Functions には既定のタイムアウトがありますが、これも host.json ファイルで変更できます。
重要: このファイルは管理する必要があります。
- Java の場合は、<GeneXus のインストールフォルダ>\DeploymentTargets\Azure Functions\Templates\Java フォルダにコピーして、既存のファイルを置き換えることができます。
- .NET の場合は、<GeneXus のインストールフォルダ>\ DeploymentTargets\AzureFunctions\AzFunctionFiles\src にあるファイルを置き換えることができます。
[ アプリケーションをデプロイ ] では、基本設定のファイルがアップロードされます。別の設定を使用する場合は、ファイルを編集してデプロイユニットに追加できます (「
追加のファイルとディレクトリーのデプロイ」を参照)。
トレース情報を生成するための
host.json ファイルの例:
{
"version": "2.0",
"logging": {
"fileLoggingMode": "always",
"logLevel": {
"default": "Trace",
"Host.Results": "Trace",
"Function": "Trace",
"Host.Aggregator": "Trace"
},
"applicationInsights": {
"samplingExcludedTypes": "Request",
"samplingSettings": {
"isEnabled": true
}
}
}
}
注: [ Route Prefix ] プロパティは、このファイルで直接変更しないでください。カスタマイズするには、 [ デプロイ ] ダイアログのプロパティの [ Route Prefix ] プロパティを使用するか、Azure Functions を API Management にアップロードして、必要に応じてパスをカスタマイズします。
Function App が Image、Audio、Video、BlobFile のデータタイプを使用する場合は、
[ Storage Provider ] プロパティを設定する必要があります。マルチメディアはすべて Microsoft Azure などの外部 URL から提供する必要があります。
同じ理由で、コンテンツ提供にファイルシステムを使用すること、つまりファイルに対する読み取り/書き込みアクセスはサポートされていません (Blob データタイプ、Excel、PDF レポートなど)。
GAM を使用したソリューションについては、「
Azure サーバーレスアーキテクチャで GAM を使用する方法」を参照してください。