tech.guitarrapc.cóm

Technical updates

Azure Functions - C# で安全に機密情報を渡そう

Azure Functions は、本当に各所で活用できるポテンシャルがあり、すでに多くの実績をグラニで積んでいます。実際グラニでは、プロダクト投入に加えてインフラにおける中心となりつつあります。活躍できるシーンが多く思いつくため、どんどん実装が追加されています。

さて本番投入ということで、検証ステージを超えると気になるのが機微情報(機密情報)です。

「慣れるため、開発中」などいろいろな理由でついついパスワードやToken などをコードに埋め込んでしまうことが多いと思います。

そんな時に、Linux では環境変数にexport Hoge="foo" などとしてコードから分離するのが王道ですが、Azure Functions でどうやってコードと分離するか考えてみましょう。

目次

目標

次のことができるように目指します。

  • Github や Bitbucket をはじめとする、ソースコードのバージョン管理システムに機微情報を含めない
  • CI で同一環境にデプロイする (Immutable に新たに Azure Functions を作成しなおすということはしない)
  • デプロイしたコードから機微情報へアクセスして利用できること

この目標のため、ソースコード内への生埋め込み、app.config などは利用できません。

AWS でもリソースアクセスはInstance Role *1 で制御が可能ですが、悩ましい問題です。

Azure Functions は Web Apps

Azure Functions ではどうするといいでしょうか?実体がWeb Apps、ということはつまり Application Settings (== 環境変数)が利用できます。

Application Settings に機微情報を埋め込む

Web Apps も Azure Functions も、IaaS ではなく PaaS です。とはいえ、Kudu 経由でシェルも触れるのですが、環境変数はシェルからは設定しません。PaaS ということはインスタンスの実体は隠蔽されており、いつ別インスタンスに変わるかはおまかせだからです。

シェルで設定 = 設定したインスタンスでしか参照できずインスタンスが変わると再設定が必要

ということはご理解いただけると思います。そこで利用するのが、App Settings です。これを利用することで、Web Apps が管理するインスタンスが何になっても、共通で参照する環境変数を定義し、インスタンスから参照できます。

さっそく Azure Functions で、App Settings にアクセスしてみましょう。

Function app settings > Settings > Application settings > App Settings

この App settings にKey/Value で環境変数を設定します。今回は、FooKey に対してFooValue です。

App Setting を読み込む

コードからは、App.config を読み込む際と同様に、System.Configuration.ConfigurationManager.AppSettings["<Key>"] で取得が可能です。

1つだけ注意点として、#r "System.Configuration" を追加しておきます。アセンブリが足りないため、System.Configuration;名前空間が参照できないためです。

あとはコードを実行してみます。

gist.github.com

予定どおり、FooKey に設定した FooValue が取得出来ていますね。

また App Settings は、#load "読み込みたい.csx" で指定した外部 .csx ファイルでも読めます。これは、.csx が Function のディレクトリではなく、WWWRoot にある場合でも問題ありません。

まとめ

今回の外部 App Settings 参照も、Github に追加しておきました。

github.com

機微情報をコードから除外できるのは、ソース管理から見るととても大きいです。もちろん Amazon Key Management SystemAzure Key Vault で、暗号化、復号化をするのもいいのです。

が、まぁ、App Settings を使うのが、Azure Functions では妥当ではないでしょうか。やりすぎず、必要十分は確実に満たす方法が用意されているのはいいですね。

*1:つまり IAM Role

Azure Functions - C# で外部.csx ファイルをファンクションにロード可能になりました

Azure Functions で、ファンクション本体の run.csx から、外部の .csx を呼び出せるようになりました!

これは相当大きな改善なので早速見てみましょう。

あ、あと、Azure WebJobsAzure Functions をどう選択するか、中の人の神記事があるので読んでおきましょう。

stackoverflow.com

目次

何がこまっていたのか

AWS Lambda や Azure Functions で少しもんにょりするのが、各種ラムダ処理、ファンクション処理で共通で呼び出すときにどうするかです。これまでどうしていたかというと「それぞれの処理用にラムダ/ファンクションを作って呼び出し」しました。つまり、ラムダ/ファンクションの多段処理(ネスト)です。

ネストの厄介なポイント

ネストを行うと1つのやりたいことのために、リクエストが多重化されます。

それに加えて、AWS Lambda も Azure Functionsも100% 実行が保証されているわけではない、ということが前提にあるため多段にしているとどこで失敗したのか追跡が厄介です。*1

改善に伴う情報

この C# Script (.csx)で外部の .csxファイルを読み込む仕組みがあります。それが、#load キーワードです。#rでは独自アセンブリのリファレンスが可能ですが、#load では 外部.csx ファイルの読み込みが可能になります。

Azure Functions でこの機能を使いたいというIssue がこれです。

github.com

そして、6日たったのでまだかなぁとつぶやくと、安定の中の人から今デプロイした連絡がありました。

外部.csx の参照

さっそく、外部 .csx を配置して参照、呼び出してみましょう。

.csx の配置

参照先の .csx は、Visual Studio Online や Github CI で配置しましょう。

ここでは、Visual Studio Online で配置します。

Visual Studio Online へは、Function app settings > Tools > Visual Studio Online で移動できます。

作ったファンクションと同じディレクトリに test.csxを配置します。

上位のディレクトリにEnumerableExtensions.csx を配置します。

もう1つ上位のディレクトリにNuGetSample.csx を配置します。これは、NuGet パッケージを参照した .csx です。

もし外部 .csx で NuGet パッケージを参照する場合、呼び出し元の Function の project.json でそのパッケージを追加してあげれば問題ありません。

配置した外部 .csx の参照と呼び出し

実際に利用するファンクションで、外部に配置したtext.csxEnumerableExtensions.csx を取り込みます。

この時に利用するのが、#load <対象の.csxファイル名> 構文です。

#load is used to execute a script file. Variables from the loaded script will shadow previously defined script variables in the new script. Example: #load "myScriptContext.csx"

github.com

ではサンプルです。ファンクションのエントリポイントである run.csx で外部 .csx の読み込みを追記します。

  • #load "test.csx"
  • #load "..\EnumerableExtensions.csx"
  • #load "..\NuGetSample.csx"

run.csx で外部.csx で定義したメソッドも呼び出せるようになります。

gist.github.com

コンパイルが成功したことが確認できます。

ちなみに、#load でみるパスを間違えたり、project.json にNuGet追加忘れ、参照やメソッドが足りなければコンパイルエラーが表示されます。安心ですね!

実行してみると?うまく実行されましたね!

まとめ

今回の外部 .csx 参照も、Github に追加しておきました。

github.com

これで Azure Functions のネストがすべて解消されました!非常に素直で極めて強力です。

外部 .csx で NuGet パッケージを参照したければ、ファンクション側の project.json にパッケージを追加すればいいのもわかりやすくていいですね。

Azure Functions いよいよ使える機能が揃いました。残りは、モニター と 実行が時々コケる件ですね。コケるのは、自動的に再実行してくれると嬉しいのですが。

*1:1つのラムダ/ファンクション処理だけなら単純なリトライでいいのですけどね

Azure Functions を使って C# で LINE BOT を作ってみた

Azure Functions の活用をいろいろ考えていたところで、そういえば LINE BOT API がトライアルになってました。

qiita.com

Azure Functions で簡単に爆速10分で作ってみました。

目次

何で作るの

BOT は本来 API Gateway + Lambda などのようなイベントベース/サーバーレス向きです。Heroku や ASP.NET Web API の例がすでにありますが、今回はAzure Functions で作ってみましょう。

pierre3.hatenablog.com

qiita.com

osa030.hatenablog.com

qiita.com

デベロッパー登録

は、すでに多くの例があるので飛ばします。1万人制限のようですが、まだ登録できたので実はあまり触られてない...?

Callback URL の登録

LINE BOT には、Callback URL が必要です。これは、Azure Functions のFunction Url にポート :443 を追加して登録すればok です。

Server IP Whitelist

Azure Functions も WebApps なので、OUTBOUND IP を取得できます。

Go to App Service Settings > Properties > OUTBOUND IP ADDRESSES にあります。

このIP を、/24 で登録すればok です。(LINE BOT 登録は、/24~/30 で、/32 がないのがしょんぼり)

コード

あとは処理を書きましょう。

今回は、テキストにはオウム返し (Echo サーバー)、スタンプにはスタンプを返します。

gist.github.com

実際にこれで見てみると、うまくいきましたね。

まとめ

Github の AzureFunctions サンプルにも追加しておきました。

github.com

こういう BOT は、Slack でもいいのですが、Line とは使う側のハードルが違うので用途に応じればいいと思います。

レシピや地図、電車遅延状況、画像 の検索や、Vision API を使った画像解析、マシンラーニングなどいろんなバックエンドが楽しめそうです。

他にも、AWSやAzure リソースの作成などもいけますね。

Bot 処理は、メッセージキューで負荷にも耐えれるようにしたりいろんな実装があります。が、API Gateway + Lambda や Azure Functions は、どの実装でもロジックを記述するのに有効な手段なのでぜひ試して欲しいと思います。

HoloLens Emulator エミュレータの準備と DEP6100 エラーの対処

今、個人的に何が一番おもしろいかというと、AR/VR です。

VR 元年と言われて久しいですが (2013年が実質VR開発者にとっての元年というのはおいておいて)、昨年から個人的に話題なのが AR における有望株 Microsoft HoloLens です。

HoloLens の何がいいかって言うと、現実を良く考えているからなわけですが、昔のアニメに機動戦艦ナデシコってあったじゃないですか?あの世界って AR + VR がうまく組み合わさってると思うんですね。という世迷い事はおいておいてできないかなぁと思ってた動画のような世界が目の前にあるというのがワクワクするわけです。

youtu.be

とはいえ、残念ながら HoloLens はいくつかの条件をクリアしないと手に入りません。特にUSの住所というのがツラい...。

  • You are a developer in the United States or Canada where the Development Edition will first be available
  • You are a Windows Insider. By participating in the Windows Insider program, you agree to provide feedback and work with us to define the future of holographic computing
  • Please note that the Development Edition hardware and apps are in English only

www.microsoft.com

実機がないなら、エミュレータでまずは頑張りましょう。今回は、エラーの対処も含めてエミュレータの起動まで追っていきます。エミュレータの起動、実行がうまくいくということは、HoloLens 開発に乗り出せるはずです。

目次

エミュレータとは

HoloLens エミュレータは WindowsPhoone10 や他のエミュレータ同様に、実機の動作を手元のPCで再現するものです。もちろん、HoloLens は AR なのでPCで再現というのは極々限定的ですが、それでも結構面白いですし全然楽しいです。

そして、開発において「高速にイテレーションを回す事」は非常に大事で、実機ではなくエミュレータで動作を確認というのは必須です。Hololens エミュレータは、エミュレータ実行中でもVisual Studio でデバッグなし実行 > 実行中のエミュレータにそのまま新しいパッケージがデプロイされる *1 ので良い感じです。*2

Using the HoloLens Emulator - Mixed Reality | Microsoft Learn

エミュレータ単独の実行については以下の記事が詳しいです。

buchizo.wordpress.com

さて、エミュレータを実行するといってもどうやってという事になります。先人のブログにも紹介がありますが、結構どの記事もざっくりしすぎてて、うまく起動できないとハマるでしょう。そして大体うまく起動できません。

matatabi-ux.hateblo.jp

https://www.naturalsoftware.jp/entry/2016/04/07/093200www.naturalsoftware.jp

blog.nnasaki.com

blog.kokoni.jp

先日、Unity + VS2015 + HoloLensエミュレータの構成で5人ぐらいで HoloLens モクモク会を行ってハマった箇所をすべて解決できたので、その方法も踏まえて紹介します。

目標

HoloLens のチュートリアルが普通に行えることを目指します。

すなわち、Unity でビルド > Visual Studio でエミュレータにデプロイ > エミュレータでアプリを起動、プレイです。

事前準備

チュートリアルの前に、事前にエミュレータを含めた準備しましょう。

VR Ready 以外のノートPCは難しい

Surface Book も含めて、一般的なノートPC を複数台試しましたが Unity でのサンプルプロジェクトを含めて、まともにエミュレータを動かすなら無理です。

諦めて、VR Ready なノートPCかデスクトップにしましょう。

実体験として、VR Ready PC とかはうってつけです。

https://www.geforce.com/hardware/technology/vr/vr-ready-programwww.geforce.com

特に、LITTLEGEAR i310 は筐体の小ささと性能のバランスから好みです。

www.g-tune.jp

最低でも、HoloLens - Install and Tools のソフトウェアに加えてハードウェア要件を満たしておかないと、レンダリング内容を落としたりとか悲しい対応が必要になります。

OS

HoloLens でなくとも、AR/VR 開発は DirectX 12 が基本なので、Windows 8.1 を使っている人は Windows 10にすることを推奨します。

Mac OSX で Boot Camp した Windows 10 Pro で動作確認できています。ただし、当然 Mac Book Proでは描画が追い付かず死にます。

環境準備

実行のための環境を用意します。票の上から順に準備、インストールするといい感じです。HoloLens Emulator は最後でok です。*3

環境 理由
グラフィックボード(ビデオカード) NVIDIA GTX 960以上 (GTX 980Tiだとぬるぬる動くので個人的に推奨です)
エミュレータでグラボが効かないとか言いますが、圧倒的に違います。ほんと。
できれば GTX970以上がいいです。
Intel-VT/AMD-V エミュレータは実態が Hyper-V なので。仮想化支援は、Hyper-V の実行環境に必要
Windows 10 Pro/Enterprise Hyper-V の実行環境に必要
Windows 10 開発者モード HoloLens エミュレータの実行に必要です。設定 > セキュリティと更新 > 開発者向け から設定可能です。
Visual Studio 2015 Update 2 Visual Studio 2015 Update 1 でも動くは動きますが、Update2 はすでに動作検証済みです。
Universal Windows App Development Tools 1.2 or 1.3 HoloLens - Install and Tools の通りですが、1.2でなくとも 1.3 でok です
Windows 10 SDK (10.0.10586) と 10.0.26624 エミュレータの実行に必要です。HoloLens - Install and Tools にある通りですが、「必ずWindows 10 SDK 10.0.10586 と 10.0.26624 の両方が入っていることを確認」してください。
もしそうでない場合、VS 2015 Update 1 の変更から、UWPツールでインストールされていることを確認 + Windows 10 SDK からダウンロード、インストールしましょう。
Unity HoloLens Technical Preview Beta 10 Unity からのビルド、エミュレータでの実行に必須です。
64bit版Unity - UWP Runtime を順番にインストールしてください。
HoloLens Emulator エミュレータ本体です。同時に Holographic DirectX project templates for Visual Studio を含んでいます。
VS2015などをまとめてインストールしていると、Hyper-V の構成が完了してなかったりするので「HoloLens Emulatorのインストール前に再起動が推奨」です。
インストールの確認

チェック表を用意しました。すべて問題ないなら、幸せになれるでしょう。

  • [ ] グラフィックボードが GTX960以上だ
  • [ ] Intel仮想化支援が有効なハードウェアのPCである
  • [ ] Windows 10 Pro/Enterprise である
  • [ ] Windows 10 開発者モード にしている
  • [ ] Hyper-V Virtual Machine Management サービスが動いている Get-Service vmm
  • [ ] VS2015 Update2 をインストールした
  • [ ] Universal Windows App Development Tools 1.2 or 1.3 がインストールされている
  • [ ] Windows 10 SDK (10.0.10586) と 10.0.26624 がインストールされている
  • [ ] Unity HoloLens Technical Preview Beta 10 がインストールされている
  • [ ] Unity - UWP Runtime がインストールされている
  • [ ] HoloLens Emulator がインストールされている

エミュレータが動くことの確認

エミュレータは起動できただけでは意味がありません。作ったアプリをデプロイして起動できてこそ意味があります。

HoloLens の開発者向けドキュメントに、エミュレータ向け神チュートリアルがあります。エミュレータへのデプロイ、アプリの実行の最終確認にもなるので、 Chapter 1 - "Holo" world までやりましょう。

HoloLens (1st gen) Basics 101E - Complete project with emulator - Mixed Reality | Microsoft Learn

エミュレータ向けチュートリアル

Unity HoloLens Technical Preview Beta 10を起動して、順番にやるだけです。簡単なので、Unity を触ったことがなくても余裕です。

開始前確認

開始前に、チェックリストに挙げた HoloLens エミュレータの事前準備が完了していることを確認してください。

プロジェクトファイルのダウンロード

チュートリアル101e のプロジェクト名 Origamiは、Unity プロジェクトファイルが公開されています。ダウンロード、解凍してチュートリアルを進めましょう。

https://github.com/Microsoft/HolographicAcademy/archive/Holograms-101.zip

Chapter1完了とエミュレータの実行

Chapter 1 を Unity で設定したら、

Windows Store としてビルドします。

ビルド後にビルドしたフォルダ (チュートリアルなら App) が開くので、Origami.sln を Visual Studio 2015 で開きます。

もし、Windows 10 の開発者モードにしていないなら Visual Studio の起動時に変更するように言われるので変更してください。

Visual Studio が起動したら、デプロイ準備です。ビルド構成周りを設定します。

項目 設定値
ビルド構成 Release
プラットフォーム x86
デプロイ先 HoloLens Emulator 10.0.11082.1039

加えて、Visual Studio のデバッグオプションも HoloLens 開発で推奨されているとおり、Tools > Options > Debugging > Enable Just My Code > 無効にします。

ここまでできたら、デバッグなしで実行 (Ctrl + F5) で実行します。デバッグなしにすることで、エミュレータ起動、デプロイが完了すると VS にフォーカスが戻り、継続してデプロイが可能になるので F5デバッグよりオススメです。

まず、ビルドが完了して HoloLens Emulator にデプロイするところで、昇格を求められます。

そして、エミュレータが起動してきます。

さぁ、どうですか? HoloLens Emulator は起動しましたか?

ここで大体の人はエラーが出るでしょう。DEP6100Unable to activate Windows Store app のエラーが出た場合は、記事の最後を見てください。

うまくいった人は、Microsoft Holographic Academy のロゴが表示されて

右クリックで、Origami アプリを開始しましょう。

おめでとうございます!あとは、チュートリアルやアプリ開発を楽しんでください。

Visual Studio 2015 から HoloLens Emulatorへのデプロイ時のエラーについて

Visual Studio から、HoloLens エミュレータにデプロイした際のエラーは、この2つがほとんどのようです。

DEP6100 エラー

最も、多くの人がぶつかる罠がこれです。私もぶつかりました。

DEP6100 : The following unexpected error occurred during bootstrapping stage 'Connecting to the device 'F957827B-6FC8-4538-A5BA-3B3807152A56'.': MissingMethodException - Method not found: 'Boolean Microsoft.Tools.Connectivity.RemoteDevice.Ping()'.

原因は、周囲の人の対応も含めてすべてWindows SDK 起因 でした。

実は、HoloLens Emulator を入れると、Windows SDK (10.0.26624)に変わる場合があります。この時にWindows 10 SDK (10.0.10586)が入っていないと怒られます。あるいは逆に、10.0.10586 が入っていても、10.0.26624 がないと怒られます。

この場合、

  • Windows 10 SDK (10.0.10586) *4を入れてください。10.0.26624のアンインストールは不要です

10.0.10586 が入っていても怒られる場合があります。その場合は、

  • Unity と Visual Studio を終了してから Visual Studio 2015 の変更から、UWPツールの中でインストールされていること + Windows 10 SDK をダウンロードしてインストールし直しましょう

Windows 10 SDK (10.0.10586 あるいは 10.0.26624のどちらがない場合でもここから)

インストール後は、ビルドからやり直して 再度HoloLens Emulator にデプロイしてみてください。

  • Unity を開き直し > Unity でビルドし直し
  • Visual Studio でデプロイしなおし

ちなみに、一部対処法に上がっているRemote Tools for Visual Studio 2015 Update 2 や レジストリは意味がないことを確認しています。いれなくてok です。(入れても悪影響はありません)

blog.nnasaki.com

forums.hololens.com

forums.hololens.com

forums.hololens.com

forums.hololens.com

Unable to activate Windows Store app エラー

DEP 6100 を超えた後に、ぶつかるエラーがこれです。普通にデバッグしてても出たりします。

Unable to activate Windows Store app 'Origami_sx6pycx103f58!App'. The activation request failed with error '型の初期化中にキャッチできない例外が発生しました'.

これは、古いSDK やビルドが bin や obj に残っているのが原因なので、binobj を消してもう一度ビルドすれば通るはずです。

HoloLens エミュレータの改善してほしいツラいポイント

触っていると、いくつか改善を期待したいことが出てきます。

デバッグが困難

ブレイクポイントで停止しつつ、ということができないのが非常に辛いです。

HoloLens 実機ならできるので、とても悩ましい....エミュレータも対応してくれないかしら。

HoloLens - Using Visual Studio

Unity の Startと一体化されていない

現状、HoloLens にデプロイするには、Unity でビルド > Visual Studio でデバッグなし実行でデプロイ というフローです。

正直、Unity で開発しているので、Build and Run で HoloLens Emulator にデプロイされるとか、Unity の Gameウィンドウで実行されるかしてほしいのです。

今後に期待ですね。

エミュレータの起動が遅い

エミュレータの起動は、結構時間がかかります。一度起動してしまえば、新しいアプリをデプロイしてすぐに反映するのですが、一度でもエミュレータを落とすと時間がかかります。

これは Hyper-V イメージの実行を含めて行っているので仕方がないのですが、もっと早くなってほしいですね。こういう時にも Nano使えるといいんですが。

まとめ

チュートリアル自体より、エミュレータ開始の難易度が高かったのですが、だいたいこれで解決のはずです。

楽しんで開発しましょう!

*1:つまりContinuous Deploy

*2:いちいちエミュレータを止めると、エミュレータの起動が遅く時間かかるのでこれ大事

*3:つまりOneGet で自動化事案

*4:あるいは、10.0.26624

Azure Functions で C# の拡張メソッドを定義、利用してみた

最近 Azure Functions の記事しか書いてませんが、それぐらいの価値があるサービスなので AWS Lambda 以外にも把握、活用しておくといいともいます。

これまで、C# Script (.csx) をAzure Functions で利用してきました。利用、CI、外部ライブラリ(NuGet) の利用ときましたが最後に重要な確認があります、拡張メソッドです。

tech.guitarrapc.com

tech.guitarrapc.com

tech.guitarrapc.com

C# で拡張メソッドがどう使えるかは触り心地にとって非常に重要です。そこで今回は 拡張メソッドの定義、利用について見てみましょう。

目次

拡張メソッドの利用

拡張メソッドについては、MSDN や C# の鉄板サイトを見ればいいでしょう。拡張メソッドを自前で定義できないことには、やはり結構厳しいものです。

ufcpp.net

拡張メソッドの定義方法は、次の通りと紹介されています。

「静的クラス」中に、 第一引数に this キーワードを修飾子として付けた static メソッドを書きます。

つまり以下のようなものです。

static class EnumerableExtensions
{
    public static string ToJoinedString<T>(this IEnumerable<T> source, string separator = "")
    {
        return string.Join(separator, source);
    }
}

今回はこの拡張メソッドを Azure Functionsで定義利用します。

Azure Functions 上で拡張メソッドの定義

さて、単純に上記のコードを Azure Functions にそのまま持って行ってみます。すると以下のエラーでコンパイルに失敗します。

error CS1109: Extension methods must be defined in a top level static class; EnumerableExtensions is a nested class

これは、Azure Functions をぱっと見れば分かる通り、表示されていませんがクラスが外側にあるためとわかります。

#r "Newtonsoft.Json"

using System;
using System.Net;
using System.Threading.Tasks;
using Newtonsoft.Json;

public static async Task<object> Run(HttpRequestMessage req, TraceWriter log)
{
    log.Verbose($"Webhook was triggered!");

    string jsonContent = await req.Content.ReadAsStringAsync();
    dynamic data = JsonConvert.DeserializeObject(jsonContent);

    if (data.first == null || data.last == null) {
        return req.CreateResponse(HttpStatusCode.BadRequest, new {
            error = "Please pass first/last properties in the input object"
        });
    }

    return req.CreateResponse(HttpStatusCode.OK, new {
        greeting = $"Hello {data.first} {data.last}!"
    });
}

そして、Azure Functions はインスタンス化する必要がないので、おそらく静的クラスでしょう。つまり以下のように直接拡張メソッドを定義可能です。

無事に コンパイルされました。

利用もいつもどおりです。

gist.github.com

まとめ

今回のサンプルも載せておきました。

github.com

グラニでは、すでに開発の通知周りの多くを Azure Functions に移行完了しており、すでに本番稼働しています。もちろん複数の手段を保ちつつですが、GitHub Webhook の Chatwork 通知など多くの処理が Azure Functions で動いています。通知のほんの少しでも画面に収まらないんですね...。

ちなみにグラニでは、master ブランチへの push/merge を起点に Github CI されるように組んであります。このため、開発者はAzure Portal に入ることなく Visuals Studio や VS Code で書いて、push、自動的にデプロイと完結します。

AWS Lambda が出る前のプレビューから言い続けていた C# サポートが先に Azure に出ました。とは言え、AWS Lambda は AWSリソース操作など多くの点で活用していますしそれは変わりません。しかし、C# で何ら変わらず制約もなく普通に書ける良さ、CI が容易であることはとってもいいです。APIGateway + AWS Lambda の Failover 先としての Azure Functions という使い方もしています。

CI なども含めた総合的な活用しやすさでいうと、AWS Lambda を上回っています。ただ、API Gateway + AWS Lambda は別の更なる価値もあったりするので、優劣というより使い方次第だと思います。

現時点では、モニタリングがないため「実行が後から追えない」ものの、現時点では抜けもなく通知されています。

是非皆さんも楽しんでください。