御成門プログラマーの日記

Microsoft AzureやAngularなどの技術情報を発信します

【Azure Functions 2.0】AzureBlobストレージへのファイルアップロードを捕捉し、ファイル情報をログ出力する

前回のAzure Functions 2.0基礎編に引き続き、 今回も基礎的な内容を試してみようと思います。

初めに

前回作成したFunctions Appをそのまま使い回しています。
Function Appの作成は下記を参照してください。 onarimonstudio.hatenablog.com

今回やりたいこと

Blobストレージ内でファイルがアップロードされたことをトリガーにして、
ファイルの名前と容量を取得し、ログに出力する。
※Azureポータルからの簡単な作成。

作成手順

監視するBlobストレージを作成します

Functionsで認識できるようにするため、
ストレージの種類を"汎用アカウント"で作成してください。 f:id:tt-suzukiit:20181127185351p:plain

作成したBlobストレージにコンテナーを追加します。

f:id:tt-suzukiit:20181127191642p:plain

項目名 入力値
名前 今回はsamples-workitemsと入力
パブリックアクセスレベル プライベート

Azure Blob Storage Triggerを使用した関数を作成します

まず、前回作成したFunctions Appを開き、関数の右にある"+"ボタンをクリックします。
そうすると下記の画面が表示されるため、"Azure Blob Trigger"を選択します。
f:id:tt-suzukiit:20181127185738p:plain 下記のように拡張機能がインストールされていません」とメッセージが表示されたときは、インストールをクリックします。
f:id:tt-suzukiit:20181127185956p:plain

関数の設定画面を入力します

f:id:tt-suzukiit:20181127190211p:plain

項目名 入力値
名前 関数の名前を各自設定してください
パス <管理するコンテナー名>/{name}
今回はsamples-workitems/{name}と入力します。
このように設定するとBlob のファイル名は、name パラメーターとしてバインディングで渡されます。
ストレージアカウント接続 今までFunction Appに接続したストレージのリストが表示されます。
今回監視を行うストレージアカウントを選択しましょう。
リストにない場合は"新規"ボタンをクリックしてストレージを追加します。
汎用ストレージ以外は表示されないようなので注意です。

作成を押すと、関数が自動的に作成されます。 コードも下記のようなコードが自動的に作成されていると思います。

public static void Run(Stream myBlob, string name, ILogger log)
{
    log.LogInformation($"C# Blob trigger function Processed blob\n Name:{name} \n Size: {myBlob.Length} Bytes");
}

ログ監視ウィンドウを開く

作成した関数画面の一番下にログボタンがあるのでクリックするとログを表示する画面が表示されます。
現在はストレージに何もアップロードしていないのでログは表示されていません。
何かトリガーが動いた場合、こちらに情報が出力されます。
f:id:tt-suzukiit:20181127192051p:plain

Blobストレージにファイルをアップロードする

今回はパソコンに入ってた"salmon.PNG"をアップロードします。
f:id:tt-suzukiit:20181127192327p:plain
作成したストレージアカウント→コンテナ→アップロード
サーモン?の画像をアップロードします。
f:id:tt-suzukiit:20181127192352p:plain

そうすると先ほどのログ画面にアップロードしたファイルの名前と容量が下記の通り出力されました。

2018-11-27T09:31:16  Welcome, you are now connected to log-streaming service.
2018-11-27T09:32:16  No new trace in the past 1 min(s).
2018-11-27T09:33:16  No new trace in the past 2 min(s).
2018-11-27T09:34:07.830 [Information] Executing 'Functions.BlobTriggerTest1' (Reason='New blob detected: samples-workitems/salmon.PNG', Id=c040abbf-4c8c-41bc-8340-65a79d34d710)
2018-11-27T09:34:07.860 [Information] C# Blob trigger function Processed blob
 Name:salmon.PNG 
 Size: 39635 Bytes
2018-11-27T09:34:08.116 [Information] Executed 'Functions.BlobTriggerTest1' (Succeeded, Id=c040abbf-4c8c-41bc-8340-65a79d34d710)

完成!!

functions2.0「Blob Storage Trigger」の使い道

以前、Tech Summit 2018で参加した服部さんのセッションでは、
モバイルアプリで取った写真をBlobにアップロードして、
自動的に写真をスケーリングするシナリオが紹介されていました。 f:id:tt-suzukiit:20181127193202p:plain

服部さんのセッションについて、詳しくはこちら onarimonstudio.hatenablog.com

blobストレージにアップロードした画像を自動的に加工したり、移動したりする用途で使われるのかなと思います。

参考ページ

docs.microsoft.com