そもそもAZURE Functionsとはなんぞや
最近、よく聞くサーバレスアーキテクチャの思想を元にMicrosoftが提供しているフレームワーク。
サーバレスアーキテクチャとは、まるでサーバーが無いかのような振る舞いをするサーバーアプリのこと
詳しくは先人様か公式ドキュメントを参考に。
※Microsoftの公式ドキュメントって、読みづらいよね…
運用して気づいた(ハマった)こと
[1. たまに403でエラーが返却される](### 1. たまに403でエラーが返却される)
[2. Web.Configとかがない](### 2. Web.Configとかがない)
[3. たまにTCPが繋がらず、タイムアウトになる](### 3. たまにTCPが繋がらず、タイムアウトになる)
[4. 稀に勝手に再起動する](### 4. 稀に勝手に再起動する)
[5. Kuduは利用可能](### 5. Kuduは利用可能)
[6. サーバの監視はApplication Insight](### 6. サーバの監視はApplication Insight)
運用して気づいたことの詳細
完全な対策と理由は未だに理解できてません。。。
ご存知の方がいらっしゃったら、教えて頂きたく。
1. たまに403でエラーが返却される
Functionsが20分以上稼働していない状態でAPIが叩かれるとたまに発生する。
原因は、サーバーが立ち上がりきっていないため。
IPアドレスの制限をかけている場合に、許可していないIPから飛んできたときにも403で返す。
「指定範囲の対象外だから、権限ないよ!」
って感じで403になるらしい。
2. Web.Configとかがない
代わりにアプリケーション設定が複数に分かれている。
環境変数とDB接続文字列で一つ。
Functions自身の設定で1つ。
→Functionsのバージョン指定やタイムアウト時間などの設定。
3. たまにTCPが繋がらず、タイムアウトになる
これに関してはNode.jsを使って夜間にバッチ処理をしているとたまに出る。
20秒以上、接続出来ないとエラーとなる。
原因は不明。
POSTMANやRestletで送ると発生しない。
RESTの発行数は2000件/1時間なので、問題ないはず。。。
4. 稀に勝手に再起動する
以下の状況下で発生した。
========================= やってること =========================
- Functionsの自作APIをコール
- 自作API内で別スレッドを起動
- 別スレッドは起動したままで、クライアントにレスポンスを返す
============================================================
別スレッドが起動している状態にも関わらず、Initialize Host.
とかふざけたログが出力される。
※これに関しては、Durable-Functionsを入れていることによる弊害かもしれない。
それにしても、強制終了されるのは辛み。。。
5. Kuduは利用可能
Azure Functionsの概要
タブの横にあるプラットフォーム機能
タブを開くと左下のほうにKuduがある
これは今まで通りの使い方ができる。
※ただし、Kuduで表示されているファイル等はストレージアカウント
に登録されているので、容量によって料金が変動する点に要注意。
6. サーバの監視はApplication Insight
AZURE Functionsのサーバ状態を監視するのには、Application Insight
を利用しましょう。
これが無いとエラーが起きた時に「サーバが再起動した!」とかのログを取得できないので、めちゃくちゃ不便です。
※ただし、初期設定のままだと、クライアントIPが「0.0.0.0」で来るので注意です!
理由はData protection in the EU
、日本語名:EU一般データ保護規則
が原因です。
Functions V2 での設定方法についてはこちらの記事を参考にしてください。