10
Azure FunctionsとCSX 2017年2月16日 第5回 城東.NET勉強会

azure functionsとcsx

  • Upload
    -

  • View
    37

  • Download
    2

Embed Size (px)

Citation preview

Page 1: azure functionsとcsx

Azure FunctionsとCSX

2017年2月16日

第5回 城東.NET勉強会

Page 2: azure functionsとcsx

まずは自己紹介・名前

木下 裕之

・HN:Kingkino

・SNS

Twitter @kingkinoko FaceBookやってます。GitとLinkedInもちょこっと・・・。

・Azure暦:6年

・Azure Function暦:6ヶ月

・MCSA : Cloud Platform (MCP 70-532:70-533)

※この資料は2017年2月16日時点での情報を元に作成しています。

Page 3: azure functionsとcsx

AzureFunctionsとは

Azure Functionは非常駐型のプロセスをイベントによってトリガーして実行するサービスです。いわゆるサーバレスアーキテクチャで動作しているのでプログラマはコードだけ意識すればいいようになっています。

特徴としては下記が挙げられます• インフラの管理コストを削減できる• アプリケーションサーバーとしては自由度が低いが、BaaSよりかは自由度が高いコンピューティングが可能• 常駐型と比較するとアプリケーションのプロセス起動によるオーバーヘッドが大きくなり、速度が遅くなる可

能性がある

2016年4月にPublic Previewになって2016年11月にGAしました。2016年の4月はLineのDeveloper公開があったためFunctionsと連携したLineBotを試している人が多かったです。

出展:https://docs.microsoft.com/ja-jp/azure/azure-functions/functions-overview

Page 4: azure functionsとcsx

Azure Functionsで出来る事

Functions Template言語

C# F# JavaScript Php PowerShell Python Batch Bash

BlobTrigger 〇 〇 〇

Empty 〇 〇 〇 〇 〇 〇 〇 〇

EventHubTrigger 〇 〇 〇

Facelocator 〇 〇

GenericWebhook 〇 〇

GitHUBCommenter 〇 〇

GitHubWebhook 〇 〇

HttpGET(CRUD) 〇 〇 〇

HttpPOST(CRUD) 〇 〇

HttpPUT(CRUD) 〇 〇

HttpTrigger 〇 〇 〇 〇

Image resize 〇

ManualTrigger 〇 〇

QueueTrigger 〇 〇 〇 〇 〇 〇 〇 〇

SAS Token Generator 〇 〇

ServiceBusQueueTrigger 〇 〇

ServiceBusTopicTrigger 〇 〇

TimerTrigger 〇 〇 〇

Script Script node

Azure Functionsでは下記のテンプレートが用意されています。

Page 5: azure functionsとcsx

Azure Functions開発(Azure Portal編)

Azure Portal画面で開発することが可能です。左図はFaceLocatorテンプレートを言語C#を選択して作成したものになります。C#のように見えますが実際のところはCSharpScriptです。なので拡張子がCSXになっています。

この画面ではコード補完やインテリセンスがサポートされていないためメモ帳でコーディングするようなニュータイプ並みのコーディング能力を求められます。

Functionsのテスト用のWebPostコントローラや実行状況を監視するためのモニターが用意されています。

実行監視モニターはライブ監視ができます。起動しなかったりと不安定ですが意外と便利です。

この画面では開発はせずにテストや実行監視、ログ確認等をするのが推奨されます。

Page 6: azure functionsとcsx

Azure Functions開発(Visual Studio 編)

参考:「VS Tools for Azure Functions」 https://blogs.msdn.microsoft.com/webdev/2016/12/01/visual-studio-tools-for-azure-functions/

「Visual Studio Tools for Azure Functions」をインストールするとVisual StudioでFunctionsの開発ができます。

Azure Functions用のエミュレータも用意されているのでローカル実行・ブレークポイントやウォッチ式によるデバッグが可能です。

但し、CSharpScriptのインテリセンスの効き方は微妙です。

※誤解がないように説明しておきbますとVisual StudioでCSharpScriptのインテリセンスは効きます。C#インタラクティブではサポートされています。Azure FunctionsのcsxファイルでCSharpScriptのインテリセンスが一部サポートされておりませんがAzurePortalよりかは開発しやすいです。

Page 7: azure functionsとcsx

Azure Functions開発(デモ 編)

Facelocatorのデモ

下記のURLでデモと同じ内容を記載していますのでご興味があれば参照ください。

http://blog.kokoni.jp/2017/02/06/azurefunctions%E3%81%AEfacelocatorcsharp%E3%82%92%E8%A9%A6%E3%81%97%E3%81%A6%E3%81%BF%E3%82%8B/

Page 8: azure functionsとcsx

Azure Functions開発の考察1

先にも説明しましたとおりAzure Functionsの開発ではCSharpScriptのインテリセンスが一部効きません。つまりCSharpScriptでの開発は非常に効率が悪いということになります・・・。

■ 対応策

1. F#スクリプトを利用する。F#は全般的にVSが対応しているのでF#スクリプトでもインテリセンスが効きます。

2. Node.jsを利用する。Node Tools For Visual Studioをインストールすればインテリセンスが効きます。参考:https://www.visualstudio.com/ja/vs/node-js/

対応策としてはC#以外を利用するという結論になってしまいます・・・。

どうしてもインテリセンスの効いた環境でFunctions開発したい人は、今年の1月5日にサポートされたプリコンパイルを利用しましょう。プリコンパイルをサポートしたことでてコンパイル済みアセンブリ(DLL)を参照することが出来る様になりました。

Page 9: azure functionsとcsx

Azure Functions開発の考察2

プリコンパイル版で開発を行えばVisual StudioとC#恩恵を享受した開発ができます。

プリコンパイルに対応したことでcsxの価値が下がりました。もちろんcsxで開発するメリットが全くないわけではないですがプリコンパイルの方がメリットは多いです。

但しプリコンパイル版にはデメリットもあります。デプロイ時は手動でAzure Functionsにアップロードする必要があります。AppServiceが古いDLLをキャッシュするのでデプロイするたびに再起動が必要になったりとかkuduでw3cのプロセスをキルする必要があります。上記の対応はpower shellで対応しようと思えばできなくはないです。

参考:https://github.com/Azure/azure-webjobs-sdk-script/wiki/Precompiled-functions

https://buchizo.wordpress.com/2017/01/06/azure-functions-

%E3%81%AE%E3%83%97%E3%83%AA%E3%82%B3%E3%83%B3%E3%83%91%E3%82%A4%E3%83%AB

%E3%82%B5%E3%83%9D%E3%83%BC%E3%83%88/

Page 10: azure functionsとcsx

Azure Functions開発のまとめ

現状の結論としては「もう少し様子を見ましょう」となります。

Visual Studio 2017でもしかしたらCSXのインテリセンスをフルサポートするかもしれません。もしくは今後プリコンパイルを主流にVisual Studioを対応させAzure Functions用のCIやCD機能を追加するかもしれません。

Azure Bot ServiceもFunctions上で稼動しているので早急に方向性を決めてもらってC#で快適なFunctions生活を送れるようになれればいいなぁと思う次第です。

WebAppsではなくAzure Bot Service(Functions)でLINE Bot作りたいんじゃ・・・。