Azure Functions で関数を作成する際、作業用の環境で作成しやすいので、PowerShell で書いています。
Azure Data Factory から Azure Functions を呼び出す際には Functions 側はどのように書けばよいのかをメモとして。
Data Factory から Azure Functions を呼び出す方法については Azure Data Factory の Azure 関数アクティビティ に記載されています。
Linked Service として、Azure Functions を追加することで、パイプライン内で呼び出すことができます。
今回は GET で呼び出し、ヘッダーには [val="TEST"] を渡すようにしています。
このような呼び出しをしている場合、Azure Functions 側では次のような HTTP トリガーで処理を行うことができます。
using namespace System.Net param($Request, $TriggerMetadata) $ErrorActionPreference = "Stop" try{ Write-Host "Requests." foreach($header in $Request.Headers){ Write-Output $header } $body = @{"Return"= "Function Return : " + $Request.Headers.val} | ConvertTo-Json Write-Host $body Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{ StatusCode = [HttpStatusCode]::OK Body = $body }) }catch{ Write-Host $_ Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{ StatusCode = [HttpStatusCode]::InternalServerError }) }
ヘッダーの情報については、[$Request.Headers.<ヘッダー名>] で取得を行うことができます。
レスポンスについてですが、ドキュメントには次のように記載されています。
Azure 関数の戻り値の型は、有効な
JObject
である必要があります。 (JArray はJObject
では "ない" ことに留意してください。)JObject
以外の戻り値の型が失敗し、ユーザー エラー応答コンテンツは有効な JObject ではないが発生します。
レスポンスが、JObject 出ない場合は、Data Factory でアクティビティが実行された際に、次のようなエラーが発生します。
{ "errorCode": "3603", "message": "Response Content is not a valid JObject.", "failureType": "UserError", "target": "Azure Function1", "details": [] }
PowerShell の関数から JObject を返したい場合は、Body として、JSON を返しておけば良いようです
先ほどのコードであれば
$body = @{"Return"= "Function Return : " + $Request.Headers.val} | ConvertTo-Json
で、JSON をレスポンスに設定するようにしています。
JSON を返すようにしておくと、Azure Functsion のアクティビティとして、JSON の情報が含まれるようになります。
アウトプットの情報を取得することで、後続のアクティビティで、Functions のレスポンスを使用することができます。
Azure Functions のアクティビティは 230 秒後のタイムアウトという制限があるため、長時間の実行については Durable Functions を使用する必要が出てきますが、シンプルな処理でしたら PowerShell でも簡単に実装できるかと。
現時点では、プレビューの機能ではありますが、PowerShell でも Durable Functions を実装できる計画はあるようです。