Azure Functions で EXEを実行する

普通にできたので。

例えばFunctionのフォルダ内にBinフォルダとかを作成してEXEをUploadします。呼び出しは普通にできるので.bat(Batch)とかでFunction作ると楽ですね。
後はbinをPATH環境変数に追加もしくはフルパス指定でEXE呼べばいいです。

例: ffmpegで動画ファイルから音声だけ抜き出す

echo OFF

set PATH=bin;%PATH%

ffmpeg.exe -i %inputBlob% -ac 1 -ar 16000 -acodec pcm_s16le -f wav %outputBlob%

BindingしたBlobなどは環境変数にパスが入るので、そこに対して読み書きすればいいだけです。
フルパスの場合は D:\home\site\wwwroot\<function名>\  なので適宜どうぞ。

まぁAzure Functionsのプラットフォームが今のところWindowsなのでEXE動かせますけど。。用量・用法を守ってご使用ください。

Azure Functions でJavaを使う

というドキュメントがUpされていました。

ドキュメントはこちらです。

かいつまんで説明すると、Azure Functions上にはJavaの実行に必要なものが一通りあるのでBatch(.bat)などからjavaコマンドで.classまたは.jar指定して呼び出すだけ、となります。

続きを読む

Azure Functions のプリコンパイルサポート

.NETなFunctionsの場合、プリコンパイルがサポートされました。簡単にいうと.csxじゃなくてコンパイル済みアセンブリ(.dll)を指定することで動的コンパイル処理をスキップすることができるようになりました。

 

続きを読む

Azure Functions のローカル開発

Azure Functions をローカルで開発するためのツールが2種類出ました(1つは結構前からですけど)

細かい話は本家Blog等を参照ください。

またこちらのBlog、動画も参考にどうぞ。

続きを読む

Azure Functions で実行時のIDを取得する

Azure Functionsを使ってるときに今実行されている状態のIDを使いたい場合があるかと思います。後で追跡する場合に呼び出されたIDとか関連付けされていると便利ですよね。

というわけで、呼び出しログ(Invocation Log)とかで使われるIDをコード内で使う方法です。

C#の場合

using System;

public static void Run(string input, ExecutionContext executionContext, TraceWriter log)
{
    log.Info($"InvocationId: {executionContext.InvocationId}");
}

C#の場合はExecutionContext型の引数を受け取るようにすればOKです。ExecutionContext型にはInvocationIdプロパティがあるのでそちらを参照します。ちなみに内部的にも同じ型でcontextという名前でバインディングされるので、contextという引数名にするとバインディングエラーになります。修正されるかもしれませんが。

JavaScriptの場合

module.exports = function (context, input) {
    context.log('Node.js manually triggered function called with input:', input);
    context.log(context.bindingData.InvocationId)
    context.done();
};

JavaScriptの場合はcontextのbindingDataにInvocationIdが生えてるのでそちらを使います。

実行結果はこんな感じで、呼び出しIDが取得できます。

2016-08-03T19:14:03.491 Function started (Id=f58733a5-d6ce-4035-8a42-c6b95b7d79b7)
2016-08-03T19:14:03.491 InvocationId: f58733a5-d6ce-4035-8a42-c6b95b7d79b7
2016-08-03T19:14:03.491 Function completed (Success, Id=f58733a5-d6ce-4035-8a42-c6b95b7d79b7)