てくなべ (tekunabe)

ansible / network / automation / StackStorm

[Azure] Azure Functions 2.0 の Function を VS Code でローカルデバッグしてから Azure へ発行する

■ はじめに

Azure Functions は、Azure のサーバーレスサービスです。2018年9月に Azure Functions 2.0 が一般提供 (GA)されました。

azure.microsoft.com

C#JavaScriptPython(プレビュー)などの言語に対応していて、ローカルでのデバッグも可能です。 VS CodeAzure Fucntions 拡張を利用すると、ローカルのデバッグから Azure への発行までの一連の作業を VS Code 内で完結できます。

この記事では、VS Code で HTTP トリガーで起動する Function を C# で作成、ローカルでデバッグし、Azure への発行まで試したことをまとめます。

基本的には「Visual Studio Code を使用した初めての関数の作成」の流れに沿っています。

環境


■ Azure Functions 拡張機能のインストール

Azure Fucntions 拡張をインストールします。

f:id:akira6592:20181229131212p:plain
Azure Functions 拡張のインストール

このとき、VS Code から Azure へのログインをサポートする拡張 Azure Accountも同時にインストールされます。

インストールした拡張を反映させるため、VS Code を再起動します。

アクティビティーバー(左のバー)に、Azure のアイコンが表れます。

f:id:akira6592:20181229131331p:plain
アクティビティバーに Azure アイコンが表示される


■ ローカルでの Function の作成とデバッグ

ローカルでの Function の作成とデバッグまでの流れです。

Azure Functions プロジェクトの作成

Azure プロジェクト作成ボタンをクリックします。

f:id:akira6592:20181229131609p:plain
プロジェクト作成ボタン

プロジェクトディレクトリを選択します。ここでは空のディレクトリを用意して選択します。

f:id:akira6592:20181229131726p:plain
プロジェクトを選択

言語は C# を選択します。

f:id:akira6592:20181229131821p:plain
C# を選択

いくつかのファイルが生成されます。

f:id:akira6592:20181229132014p:plain
生成されるファイル

Function の作成

Function 作成ボタンをクリックします。

f:id:akira6592:20181229140158p:plain
Function の新規作成"

プロジェクトディレクトリを選択します。

f:id:akira6592:20181229132149p:plain
プロジェクトディレクトリの選択

HTTPTrigger を選択します。

f:id:akira6592:20181229132316p:plain
HttpTrigger を選択

Function 名と namespace はここではデフォルトのままにしまま、アクセス権は Anonymous を選択します。

f:id:akira6592:20181229132435p:plain
Function 名指定

f:id:akira6592:20181229132533p:plain
namespace の指定

f:id:akira6592:20181229140303p:plain
アクセス権の指定

このような C# のプログラムテンプレートが作成されます。

f:id:akira6592:20181229132610p:plain
生成されたテンプレートコード


ローカルデバッグ

Azure 上で実行する前に、ローカルで実行、デバッグしてみます。

そのまま実行

F5 キーでデバッグを開始します。

しばらくすると、統合ターミナルに HTTP トリガーとなるローカルの URL が表示されます。

f:id:akira6592:20181229132751p:plain
Function URL の表示

ひとまず、そのまま開いてみます。このようなメッセージになります。

f:id:akira6592:20181229132903p:plain
クエリストリングなしの場合

メッセージやコードを見れ分かるのではが、 name というクエリストリング が必要のようなので

http://localhost:7071/api/HttpTriggerCSharp?name=kingyo

で開き直します。

今度は正常なメッセージが表示されます。

f:id:akira6592:20181229135036p:plain
クエリストリングありの場合

ここまでで、ごく基本的なローカルでの Function 実行を確認できました。

ブレークポイントの設定と変数の書き換え

せっかく VS Code を利用しているので、今度はブレークポイントの設定や変数の書き換えを試してみます。

先程の実行状態まま、以下の行にブレークポイントを設定します。

string requestBody = await new StreamReader(req.Body).ReadToEndAsync();

f:id:akira6592:20181229133154p:plain
ブレークポイントの設定

先程 http://localhost:7071/api/HttpTriggerCSharp?name=kingyo を開いたブラウザ画面をリロードします。

ブレークポイントを設定した箇所で処理が一時停止しています。ブラウザのほうは、読み込み中のままになります。

f:id:akira6592:20181229133242p:plain
ブレークポイントで一時停止中

VS Codeデバッグペインの変数を確認する クエリストリングで指定した name の値が、コード内の namekingyo という値で入っていることが確認できます。

f:id:akira6592:20181229133403p:plain
変数 name の確認

ここでは、この変数 name の値を kingyo!!!に書き換えてみます。

f:id:akira6592:20181229133425p:plain
変数 name の値の変更

F5 キーか、以下のボタンで処理を続けます。

f:id:akira6592:20181229133508p:plain
処理の続行

ブラウザの読み込みが完了し、Hello, Kingyo!!! と表示されます。VS Code で書き換えた値が反映されていることが確認できます。

f:id:akira6592:20181229133533p:plain
変数書き換え後の表示

以下のアイコンで切断します。

f:id:akira6592:20181229133618p:plain
切断

ここまでで、VS Code によるローカルでの Function のデバッグを確認できました。

■ Azure への発行

いままではローカルでの実行でした。今度は、Azure へ発行してみます。

Azure へのログイン、発行方法はVisual Studio Code を使用した初めての関数の作成」の「Azure へのサインイン」から「Azure にプロジェクトを発行する」までの手順のとおりです。

発行が完了すると、以下のように右下に各種完了メッセージが表示されます。

f:id:akira6592:20181229134008p:plain
Function URL の表示

View Output をクリックすると「出力」画面に切り替わり、HTTP Trigger の URL が表示されています。

f:id:akira6592:20181229134146p:plain
発行の完了

このURL に、ローカルで実行したときと同じようにクエリストリング ?name=kingyoを末尾に付けて、ブラウザで開きます。

f:id:akira6592:20181229134308p:plain
Azure に発行した Function の実行

無事に、Azure に発行した Function も実行できました。


■ まとめ

VS Code を利用して、Azure Functions のローカルでデバックと Azure への発行の流れを簡単に確認できました。 使い慣れているエディタを利用できる点と、発行までできる点は便利だと思いました。