Azure Functions で実行中にコンパイルするとどうなるの

裏でFunction Appが実行中のときにコンパイルして(コンパイルエラーになったりして)るときに実行中のものはどうなるのか、予想では別物なんで問題ないと思いますが一応。

検証用コード

using System.Net;

public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, TraceWriter log)
{
    log.Info($"Start ----");
    // parse query parameter
    string name = req.GetQueryNameValuePairs()
        .FirstOrDefault(q => string.Compare(q.Key, "name", true) == 0)
        .Value;

    await Task.Delay(TimeSpan.FromSeconds(20));

    // Get request body
    dynamic data = await req.Content.ReadAsAsync<object>();

    // Set name to query string or body data
    name = name ?? data?.name;

   log.Info($"End ----------");
   return name == null
        ? req.CreateResponse(HttpStatusCode.BadRequest, "Please pass a name on the query string or in the request body")
        : req.CreateResponse(HttpStatusCode.OK, "Hello " + name);
}

HttpTriggerなC#のテンプレートにStartとEndのログと間にTask.Delayで処理止めてるだけのシンプルなやつです。
※ログにFunction Startedとか出るので無駄な気もするけど一応

手順的にはこんな感じ

1.  上記コードを実行する(適当に呼び出す)
2. Task.Delayしてる間にコードを適当に弄ってSaveしてコンパイルエラーにする
3. 結果を見る
4. そのまま再度呼び出す

実行結果はこんな感じになりました

2016-07-19T03:34:42.334 Function started (Id=14c91f2c-2490-437c-b461-258a13872d82)
2016-07-19T03:34:42.334 Start ----
2016-07-19T03:34:45.698 Script for function 'HttpTriggerCSharp1' changed. Reloading.
2016-07-19T03:34:45.698 Compiling function script.
2016-07-19T03:34:45.776 run.csx(14,13): error CS1002: ; expected
2016-07-19T03:34:45.776 run.csx(11,48): error CS0246: The type or namespace name 'aaaa' could not be found (are you missing a using directive or an assembly reference?)
2016-07-19T03:34:45.776 run.csx(14,13): error CS0103: The name 'data' does not exist in the current context
2016-07-19T03:34:45.776 run.csx(17,20): error CS0103: The name 'data' does not exist in the current context
2016-07-19T03:34:45.776 run.csx(14,5): warning CS0168: The variable 'dynamic' is declared but never used
2016-07-19T03:34:45.776 Compilation failed.
2016-07-19T03:35:02.334 End ----------
2016-07-19T03:35:02.334 Function completed (Success, Id=14c91f2c-2490-437c-b461-258a13872d82)
2016-07-19T03:35:27.915 Function compilation error
2016-07-19T03:35:27.915 run.csx(14,13): error CS1002: ; expected
2016-07-19T03:35:27.915 run.csx(11,48): error CS0246: The type or namespace name 'aaaa' could not be found (are you missing a using directive or an assembly reference?)
2016-07-19T03:35:27.915 run.csx(14,13): error CS0103: The name 'data' does not exist in the current context
2016-07-19T03:35:27.915 run.csx(17,20): error CS0103: The name 'data' does not exist in the current context
2016-07-19T03:35:27.915 run.csx(14,5): warning CS0168: The variable 'dynamic' is declared but never used
2016-07-19T03:35:27.915 Function completed (Failure)
2016-07-19T03:35:27.961 Exception while executing function: Functions.HttpTriggerCSharp1. Microsoft.Azure.WebJobs.Script: Script compilation failed.

StartとEndの間でコンパイル走ってエラーになってますが、Function Id=14c91f2c-2490-437c-b461-258a13872d82は継続して処理が完了してます。

その後再度呼び出してみるとコンパイルが完了してないので再度コンパイル→失敗→500エラーが返る、という感じです。

予想通りでしたね。なんかおかしい、という場合はぜひ追加の検証をお願いします。

Azure Update (2016.07.08)

こまごま。

App Service

HDInsight

Azure Automation

SQL Database

Power BI

Azure Update (2016.07.07)

ちょっと大人しい感じ。

Azure Container Service

Application Insights

Virtual Machines

SQL Database

Azure Functions

Azure Storage

Media Services / Media Analytics

Azure Redis Cache

DocumentDB

Azure Active Directory

  • #AzureAD updated with new admin roles
    • “Privileged Role Administrator”, “Security Administrator”,“Security Reader”の3つのロールが増えました。
    • それぞれRBACで使ったりできます。

その他

Microsoft MVP for Microsoft Azure

受賞できました。6年目です。

また1年間いろいろがんばりたいと思います。若手が増えてきたのでそろそろ抜けても大丈夫な気がします。

  • Azure界のやまもとまさ こと やまさ こと @nnasaki / nnasakiのブログ に任せておけば安泰
  • 人形町の岬くんこと @_iwate / Qaramell Blog に任せればだいたいの無茶ぶりはOK
  • 元さくらの妖精こと @kanreisa / ポテチに関する雑記帳 に任せればだいたいのことは実現できそう
  • Service FabricとStorageといえば おーみさん に任せておけばDeepなところまで大丈夫ですね。(ただしアルコール入ってない場合)

あとは継続してしばやん先生ムッシュにお願いすればAzure以外も大丈夫そうです。

※このエントリは頑張ってステマしようと試みてるエントリです(びっくりするほど去年のコピペです)

Azure Update (2016.06.24-2)

追加で。

Mobile Engagement

Azure Storage

Azure Active Directory

その他

Microsoft クラウドのFrontdoor

いつのころからかMicrosoftクラウド(というかAzure)の管理用APIの入り口はワールドワイドに点在するようになってました。(昔は北米にしかなくて日本からだと遅かった気がしますよね)

実際にはTraffic Manager使ったりしてワールドワイドで共通のAPIの口(Frontdoor API)から裏のMicroservicesに処理を渡したりしてるようなのですが、そのようなグローバルなAPIをどう作るのかという話がいろいろあったようです。

QConのはちょっと資料見れないので残念…
さとうなおきさんがLinkを教えてくれたので。

ログインすればPDFもダウンロードできます。

Mark Russinovichのセッションでは弾力性のあるサービスを作る際の(Deploy周りの)参考にという感じでAzureの内部の話に少し触れてますね。

image

Management APIの入り口としてAzure Frontdoor APIを紹介してます。デプロイする際の裏の動き(初期化や展開、それらのチェックなど)に触れてるので大規模サービス考えてる人は参考にするといいかもしれませんね。Azure側の話についてはQConのCharles氏のほうがより詳しいでしょう。

Azure Functions / Overview and Under the hood

2016年12月5日更新

ちゃんと書いてなかった気がするのと、某所で喋ったのでスライドの中身を適当にコピペします。そのうち動画・スライドが公開される気もしますが。→ されました

※2016年12月5日現在の情報です。
※だらだら長くなってしまった…

続きを読む