サーバーレス、流行ってますね。

なんかインフラ系のひとから「ぜひ使って。パッチ充てもういや」って言われたので、きっとすごい便利なんだと思われます。

とはいえ、クラウドアカウント持ってないんでローカルで雰囲気だけでも感じてみます。

Azure Functionsです。

開発環境

Visual Studio 2017 + 「Azureの開発」

Azure Functions Core (CLI) ツール

.NET Framework 4.7.1

Azure Storage Explorer

「Azureの開発」はVS2017のメニューで「ツール」→「ツールと機能を取得」→「Azureの開発」

「Azure Functions Core (CLI) ツール」は初回デバッグ時にVSからインストールを要求されるので、指示に従ってインストール。

動かしてみる

プロジェクトの作成

VSで「ファイル」→「新規作成」→「プロジェクト」→「VisualC#」→「Cloud」→「Azure Functions」

名前は「FunctionApp1」にしました。

接続先設定

local.settings.jsonを以下のように書き換え。こうするとAzure Functions Core (CLI) ツールが提供するローカルのFunction環境に接続するらしい。

OreOreQueueStorageはあとで使います。

Function追加

Queueになにか入ったら実行されるFunctionを作ってみます。

「ソリューションエクスプローラー」のプロジェクトを右クリックで「追加」→「新しい項目」→「Azure関数」

名前は「Function1.cs」にしました。

「Queue trigger」を選んで、Connectionをlocal.settings.jsonに設定した変数名”OreOreQueueStorage”に、Pathは任意の名前にします。ここでは”watashino-items”にしました。

OKでFunction1.csが作成されます。

Queueの作成

Azure Storage Explorerを起動して、

(Local and Attached)-Storage Accounts-(Development)-Queue-右クリック-Create Queue

“watashino-items”でQueueを作成します。

実行

ここで実行(F5)してみます。Azure Functions Core (CLI) ツールが無い場合はのインストールを要求されます。

Functionsのエミュ環境が立ち上がってきます。

先ほど作ったキューに適当な値を入れると

若干タイムラグがありつつ、エミュ環境でFunctionが実行されます。

実際のアプリに適用するには(理解度的に)まだまだですが、なんとなく使えるような気がします。

追記

HTTPトリガーを別サーバ(別ポート)で作って実行とすると

1
Failed to load http://localhost:7071/api/Function2: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:5500' is therefore not allowed access. The response had HTTP status code 404.

みたいなエラーが出たりします。CORSの設定が必要です。

1
2
3
"Host": {
    "CORS": "*"
  }

をlocal.settings.jsonに追加して解決