本サイトからスピンオフした姉妹サイトです。App(関数アプリ)の作成、Azureへのデプロイと実行、さらに外部ライブラリや自作ライブラリの活用まで、基本的な開発方法を解説する。今、サーバーレスに注目が集まっている。Functionsと、メジャーなクラウドプラットフォームベンダーが次々とサーバーレス対応の新サービスを投入している。Serviceなど)のように、わざわざサーバーを立ち上げてプログラムを実行する必要がなく、Function(関数、プログラムの一機能)を動かしたいときだけ実行できることだ。Functionsの場合は)実行時間や実行回数に課金されるだけなので非常に安価になる。これらは開発者にとって非常に大きなメリットである。Lambdaが2014年11月に登場してその内容を知ったときに、とても興奮して社内でそのメリットを宣伝したことを覚えている。毎日動かすバッチ処理型のプログラムを社内(や個人)でたくさん持っているが、それらを動かすためだけにクラウド上のVM(仮想マシン)インスタンスを1つ借りるのもお金がもったいない気がして、社内にコンピューターを用意してできるだけお金をかけずに(※もちろん電気代はかかっている)運用していた。Lambdaに持っていけるのではないかと思ったからだ。LambdaにはC#のサポートがなく、またAzureをメインに使っていたため、AWSのC#対応待ちか、AzureのLambda対抗サービス待ちとなっていた。LambdaもC#をサポートしている)。Studioを活用して開発・デプロイでき、多数の外部/自作ライブラリをインポートすることにも成功している。「ここまでできるのか、これはいい(料金は月間2円程度と激安)」と思った半面、(プレビュー版ということもあり)使い勝手がまだ洗練されておらず苦労した点もいくつかあったのも事実だ。Studio(+C#)で開発する(図1参照)のはまだまだ発展途上の部分も多いと感じているが、「早くその組み合わせで開発したい」と考えている人も少なくないのではないだろうか。Studioを使用した場合のごく基本的な開発方法の部分について紹介する)。Functionsの使い方」は非常にシンプルなジョブ実行に過ぎないが、もちろんより高度かつ複雑なアーキテクチャの構築で活用することも考えられる。Functionsの使い方や利用範囲は人によってさまざまに異なるので、示した事例だけが利用用途ではないことには留意してほしい。Functions開発の方法としては少し特殊なものと思っていただいた方がよい。基本的な開発手順では、下記のリンク先で示されているように、オンライン上で開発を完結させることができる。基本を押さえたうえで本稿を読んでいただけるとうれしい。Functionsの概念やAzure管理ポータルでの操作方法については、リンク先の記事が分かりやすい(本稿では説明を割愛する)。2015環境を使用する。SDKも事前にインストールしておく必要がある。Functions(※執筆時点でプレビュー版)のセットアップを行う。Functionsのプロジェクトテンプレートが使えるようになる。App(関数アプリ)の新規プロジェクトを作成する。4.5」以降になっているかを確認してほしい。AppへのFunctionの追加プロジェクトの作成が完了したら、まずはFunction(関数)を1つ追加してみよう。Function]を選択する(図3の上)。Function]ダイアログが表示される(図3の下)。そこで、さまざまなタイプのテンプレートから選択して任意のFunctionのひな型ファイル群を追加できるようになっている。Function)テンプレートを選択しよう(※ちなみにC#以外にも、Bash、Batch、F#、JavaScript、PHP、PowerShell、Pythonが選択可能だ)。入力項目も以下のように前回とほとんど同じにした。Appが自動的にデフォルトで作成する接続文字列なので、これを指定しておくと便利なため)これにより、QueueTriggerCSharp1フォルダーが作成され(図4)、その中に以下のような必要最小限のファイルが生成される。Functionのトリガーや入力/出力のバインディングを定義。Functionのコード。サンプルのQueueデータ。QueueTrigger用のFunctionのひな型ファイル群ついでにプロジェクト項目直下のファイル群も簡単に紹介しておくと、以下のようになっている。今回はこれらのファイルは何も編集しない。Appのホストの挙動を構成するためのファイル。サンプルプロジェクトを活用するためのReadMe(説明)ファイル今回はいったんここでリリースビルドして、それを実際にAzure上にデプロイしてみよう。Appを自動作成することも不可能ではないが、細かな機能は先に管理ポータル側に実装されることが多く、Azure管理ポータル上で手動作成した方がよりよい(と筆者は試行錯誤した結果で感じている)。実際に手動作成するには、以下の図5の手順を実施すればよい。App]ブレードにある各項目の入力方法は本文中で説明する。App]ブレードには以下のように入力する。[既存のものを使用]を選択するか、[新規作成]を選択する場合はグループ名を入力する。日本国内であれば「東日本」か「西日本」を選択する。アカウント]ブレードを表示し、既存のものを選択するか、[新規作成]ボタンをクリックする。Serviceプラン*2が作成される。Serviceプランとは、ホスティングプラン/場所(=価格レベル/リージョン)などの課金方法を管理するためのリソースである。以上でAzure側の準備は完了だ。それでは実際にデプロイしてみよう。エクスプローラー]でプロジェクト項目を右クリックして、表示されるコンテキストメニューから[公開]を選択すればよい。あとは以下の図6の手順に従って入力していく。これにより、正常にデプロイされるはずだ。グループ」、[検索]欄で適切な絞り込みキーワード(この例では入力なし)を指定する。Appの確認と、Functionの実行Azure管理ポータルを開いてみよう。作成したリソースグループ(本稿の例では「FunctionApp1ResourceGroup」)のブレードを表示すると、図7と表1に示すように、先ほど設定した内容で3つのリソースが作成されていることが分かる。Appの「FunctionApp1Hosting」を開くと、図8のようにブレードが表示され、前回説明した内容と同じ方法で操作できる。Appに含まれるFunction(関数)を実行できるはずだ。Appの確認と、そのFunctionの実行あとは、前回説明した内容を基に開発していくだけだ(これに関しては説明を割愛する)。StudioとC#を使えるのであれば、既存のライブラリや自作ライブラリを含めたいというニーズが多くあるだろう。Functionsに移行したわけだが、その際に学んだノウハウについて簡単にまとめておきたい。Functionのコードである。この中で外部ライブラリのクラスなどを利用したい場合は、当然ながら、それをインポートする必要がある。これは、NuGetパッケージとして公開されているものであれば、容易に実施できる。その手順を、ここではJson.NETのNuGetパッケージを利用する例で示そう。前述したように、インポートするNuGetパッケージ(依存関係ライブラリ)はproject.jsonファイルに記述する必要がある。パッケージの管理]で手軽に実施したいところなのだが、残念ながら執筆時点では対応していない......。Frameworkのバージョンにも注意)と依存関係ファイルを何とかして調べてから手動で記述する必要がある。App用の内容を書き起こした方が(もしくは置換して作成した方が)楽だし間違えがないだろう。Coreのコンソールアプリのプロジェクトであれば、XML形式のpackages.configファイルではなくJSON形式のproject.jsonファイルを使用しているので、これが活用できるかもしれない。パッケージの管理]の機能にまだ問題があったので、本稿では採用しなかった。2017が登場した段階で、もろもろの機能が正常になることを期待したい。次のリスト1は実際にJson.NETのNuGetパッケージをインストールした場合のpackages.configファイルの内容である。packages.configファイルの内容(Json.NETライブラリのインポート)このpackages.configファイルの内容を、project.jsonファイルに書き直すと次のようになる。project.jsonファイル向けに書き直した内容(Json.NETライブラリのインポート)Json.NETパッケージの場合は、他のライブラリに全く依存していないので1つだけだが、例えばWindowsAzure.Storageパッケージであれば多数のライブラリに依存している。リスト3とリスト4がその例だが、このように存関係数が多くなってくると、ここで紹介したコンソールアプリのpackages.configファイルから書き起こす方法でproject.jsonファイルを記述した方がよりよいと感じられるだろう。project.jsonファイル向けに書き直した内容(WindowsAzure.Storageライブラリのインポート)ちなみに、Newtonsoft.Jsonライブラリをインポートしておけば、リスト5のようにしてライブラリのJsonConvertクラスを使ったりできる。これを行うには、.NETのクラスライブラリ(.dllファイル)に自作コードをまとめて、そのクラスをrun.csxファイル内で利用すればよい。その手順を示すために、ここではリスト5にあるMovieクラスを自作ライブラリの中に移して、それをrun.csxファイル内で利用することにしよう。ソリューション内にクラスライブラリ(.NET)のプロジェクトを(本稿の例では「MyLibrary1」という名前で)追加し、自動生成されたClass1.csファイルの中にリスト6のコードを記述する。自作ライブラリのコード例このライブラリをリリースビルドして、.dllファイルを生成する。App(本稿の例では「FunctionApp1」)のプロジェクトのQueueTriggerCSharp1\binフォルダー内にコピーして配置する。エクスプローラー]上で手動で作成する必要がある。Appプロジェクト項目を右クリックして、コンテキストメニューから[ビルド依存関係]-[プロジェクトの依存関係]を選択し、それにより表示されるダイアログで[依存先]欄にある自作ライブラリにチェックしておくことも忘れないように)。"<アセンブリ名>"ディレクトリを指定すればよい。C#スクリプト(.csx)やREPLを動かそう」で紹介しているので参考にしてほしい。App側のproject.jsonファイルにも同じNuGetパッケージのリストを記載することを忘れないように注意してほしい(Azure上で実行する際に、自作ライブラリから参照する必要があるため)。以上、ここまでに説明した機能を活用すれば、ほとんどの開発が思い通りにできるのではないだろうか。Functionsへの移行を試してみてほしい。プレビュー段階であり実際に開発するうえでは面倒な部分も残っている。2017の登場やアップデートで改善されていくことに期待したい。※以下では、本稿の前後を合わせて5回分(第1回~第5回)のみ表示しています。INDEX]を参照してください。Functionsを使ったサーバーレス開発の基礎をコンパクトに解説。トリガーや入力/出力のバインディングを作成してみよう。Botが手軽に作成できる。その開発方法を一通り説明する。App(関数アプリ)の作成、Azureへのデプロイと実行、さらに外部ライブラリや自作ライブラリの活用まで、基本的な開発方法を解説する。Functions」をスケジュール実行する方法(cronジョブ構文)[PR]バッチジョブなどでスケジュール実行したいというニーズは多いだろう。サーバーレスでFunctionをスケジュール実行する方法を解説。cron構文によるスケジュールの指定方法も説明する。設計時に使えるAzure/AWSサービス・アイコン集とダウンロード方法[PR]クラウド上のシステムやサービスを設計する際には、視覚的に分かりやすいアイコンを使おう。アイコンセットのダウンロード方法を示し、各アイコンを用いてAzure/AWSサービスの対応一覧表をまとめる。機械学習エンジニアを目指す人~初中級者のための技術情報サイトです。2023最適なビューへの切り替えを推奨します:スマートフォン用表示に。