前回はこちら
今回は、実際に.NET Core2.1ランタイムを使って、Function ComputeでC#が使えるか試してみました。
公式ドキュメントの内容に沿って、Httpトリガーを作成し「hello world」が表示されるまでです。
事前に準備したもの
- Visual Studio 2019(Windows10環境)
- 公式ドキュメント
Step.1
HTTPトリガーの関数を作成するため、Visual Studioで空のコンソールアプリプロジェクトを作成します。
公式ドキュメント内ではHttpハンドラーの例を読んでいくとASP.NET Core WebアプリケーションのAPIプロジェクトを作成すると記載がありますが、今回はSingle関数を使用するため**コンソールアプリ(.NET Core)**で進めていきます。
Step.2
Aliyun.Serverless.Core
とAliyun.Serverless.Core.Http
をNuget経由で導入します。
操作手順の2に記載のある.csprojのへの手動での追加は不要となりますが、導入後確認してみてください。
Step.3
FcRemoteEntrypoint.csをプロジェクトに追加。
公式ドキュメントのSingle関数の例をコピーして貼り付ける。
その際、namespaceまで変更しないように注意してください。
このサンプルコードでは、
- Logに
method
、requestPath
、requestBody
が出力 - Headerに
customheader
が追加されその値としてv1
を出力 - Bodyに
hello world
が出力
されます。
Step.4
ビルド構成を「Release」にしてビルドが通ったら、プロジェクトを発行します。
プロジェクトを右クリックして「発行」を選択します。
今回は発行先をローカルのフォルダに設定して発行します。
発行が上手くいくと、プロジェクトのディレクトリにbin\Release\netcoreapp2.1\publish
ができ、その中にdllファイル等が生成されます。
この時に、プロジェクト名(もしくはソリューション名).dll
が作成されていることを確認してください。
Step.5
ここでは、作成した関数のzipファイルを作成します。
私は地味にここで躓いていました・・・。
公式ドキュメントではコマンドで作成しているのですが、Windows上でzipを作成する場合は階層が深くなってしまったりするため注意が必要です。
publishディレクトリを表示している状態で、全ファイルを選択し、右クリックでzipを作成しました。
私は7-Zipを使っているので右クリック後に「"〇〇〇.zip"に圧縮」を選択してzipファイルを作成しました。
作成されたzipファイルの中を見ると、直下にdllファイル等が置かれている状態かを確認してください。
階層がずれたものを使用すると、502エラーでdllファイルがありませんとなります。
Step.6
ここからAlibaba Cloudのコンソールに戻ります。
Http関数
を選択して「次へ」を押します。
以下の設定に注意してください。(お試し用なので承認などは適宜変更してください)
- ランタイム:dotnetcore2.1
- 関数コード:zipファイルのアップロードを選択し、Step.5で作成したzipファイルを指定
- 関数ハンドラ:公式ドキュメントにも記載がありますが、'プロジェクト名(もしくはソリューション名).dllファイル名::namespace名.クラス名::関数名'を設定します。
例)FunctionComputeDemo.dllの場合、FunctionComputeDemo::FunctionComputeDemo.FcRemoteEntrypoint::HandleRequest
- 承認:anonymous
- メソッド:GETとPOST
名称などは適宜設定をして、関数を作成します。
Step.7
関数が作成出来たら、デバッグしてみましょう。
Alibaba Cloudのポータル画面でデバッグが出来ます。
画像はPOSTで確認したものです。
Status
、Body
、Logs
の値を確認してみましょう。
customheader
の値はポータル画面では見えなかったのでPostmanを使って確認してみました。
まとめ
zipファイルを作るところ以外はシンプルに出来た印象です。