SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

Azure Data Factory から Azure Functions (PowerShell) を実行する

leave a comment

Azure Functions で関数を作成する際、作業用の環境で作成しやすいので、PowerShell で書いています。

Azure Data Factory から Azure Functions を呼び出す際には Functions 側はどのように書けばよいのかをメモとして。

Data Factory から Azure Functions を呼び出す方法については Azure Data Factory の Azure 関数アクティビティ に記載されています。

Linked Service として、Azure Functions を追加することで、パイプライン内で呼び出すことができます。

image

今回は 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 である必要があります。 (JArrayJObject では "ない" ことに留意してください。)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 の情報が含まれるようになります。

image

 

アウトプットの情報を取得することで、後続のアクティビティで、Functions のレスポンスを使用することができます。

image

Azure Functions のアクティビティは 230 秒後のタイムアウトという制限があるため、長時間の実行については Durable Functions を使用する必要が出てきますが、シンプルな処理でしたら PowerShell でも簡単に実装できるかと。

現時点では、プレビューの機能ではありますが、PowerShell でも Durable Functions を実装できる計画はあるようです。

Share

Written by Masayuki.Ozawa

6月 17th, 2020 at 8:38 pm

Posted in Azure Data Factory

Tagged with

Leave a Reply