Azure Stream Analyticsの出力をAzure Functionsに指定してみたらSend Events: Azure Function Output Adapter failed to write events

Azure Stream AnalyticsからAzure Functionへのデータの流れを構築してる途中、主題のエラーを食らって解決するまでの記録です。

公式ドキュメント

functionの準備

functionの入力トリガーにStream Analyticsというものがあるわけではない。
httpトリガーのfunctionとして作成しておけばよくて、Atream Analytics側の出力にAzure Functionを指定するとfunctionのURLを叩いてトリガーしてくれるという仕組みらしい。

Atream Analyticsの「出力」を追加

入力側はEventHubなりで適当な設定が済んでいるものとして、出力先を追加する。
Stream AnalyticsのOutputs設定画面で「+Add」を選択。
出力に指定できるものがドロップダウンリストに出てくるのでAzure Functionを選択する。
ここではクエリでoutput-functionという名前で認識できるように設定した。

Stream Analyticsの「クエリ」を設定

こんな感じで出力項目をselectする。

select
hoge as Data
, processTime as TimeStamp
into
[output-function]
from
[input]

クエリを保存したらstream analytics ジョブを開始する。

エラーを食らう

ほどなくしてstream analyticsの画面に「Failed」と出てうまくいかなかったことがわかる。
アクティビティログを見ると
「Send Events: Azure Function Output Adapter failed to write events」
というエラーが出ている。

行を選択して返却されたJSONを確認すると詳細な情報が確認できた。
"properties"の中にあるmessageのところに以下の情報があった。

"Failed to write events. Error encountered after writing [0] batches., - An error occurred while sending the request.\r\n- The underlying connection was closed: An unexpected error occurred on a send.\r\n- Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host.\r\n- An existing connection was forcibly closed by the remote host\r\n, : OutputSourceAlias:output-function;AdapterType:AzureFunction;ShardId:0;",

この情報からいろいろ調べたところ、Azure FunctionのTLS設定によってStream Analyticsからの接続がうまくできてないとあたりがついた。

Azure FunctionのTLS設定を変更

Azure Functionのプラットフォーム機能>ネットワークの中にある「SSL」を押下する。
ここでTLSの最小バージョンの指定を1.0にする。(デフォルトは1.2になっていた)

エラー解消

この状態で再度Stream Analyticsジョブを開始すると、今度はうまくデータがFunctionに出力された。