Azure Functions を試した。
簡単にメモを残します。
基本的にこのオフィシャルのガイドページの通りでできた。
Azure Portal から操作すると選択肢が多すぎて何を選べばいいわからなかった。 なお、従量課金 pay as you go にアップグレードして作業した。
説明を読んでいくとローカルテストの段階で Azure Storage の接続情報 が必要と言われるが、 それはあとで用意すればよい。
local.settings.json:
{
"Values": {
"AzureWebJobsStorage": "<Azure Storage connection information>",
"FUNCTIONS_WORKER_RUNTIME": "node"
}
}
ローカルテストの段階では次の文字列をセット:
"AzureWebJobsStorage": "UseDevelopmentStorage=true"
このあとで、Azure Storage をつくるので、そのとき本物の文字列を設定することになる。 または以前から Azure を使っていてすでにストレージが存在している人はそこを指すことになるのであろう。
ローカルでの作動が確認できたら、 az コマンドを使って Azure 側の必要な設定をしていく。 これは、クイックスタートガイドのページの通りでよい。
region は eastus を指定した。 当然、別のところでも作動すると思うが。
コマンドラインからストレージアカウントを作成したら Azure Portal にアクセスして、 ストレージへの接続文字列を調べて、local.settings.json の AzureWebJobsStorage の値に設定する。
その上で func azure functionapp publish <アプリ名> を実行する。
この Functions の js コードで authLevel が anonymous の場合、インターネット上から自由に使えることになる。
authLevel: 'anonymous'
これを function と指定して保護する。
authLevel: 'function',
これで APIキーのようなもの(名称忘れた)を使ってアクセスしないと該当 Functions は使えなくなる。 APIキー(のようなもの)の文字列は Azure Portal の該当 Functions アプリ設定のどこかに書いてあった。
クライアントから該当 Functions にアクセスするときに x-functions-key ヘッダを使う。 curl だったら次のようになる。
$ curl -X POST "https://アプリ名.azurewebsites.net/api/関数名" -d '{ "name": "Hello" }' \
-H "Content-Type: application/json" \
-H "x-functions-key: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
こちらは Functions だけ定義して使うつもりなのだが、 そのためにはストレージが必要と言われてなにそれ?ってなる。 この面倒くささになれていくしかない。