【Azure】Azure Functions の使い方

Azure Funstions はクラウド上にWebサーバを構築せずに単機能の関数(API)を提供するサービスです。

APIを公開する際には、仮想マシンをサーバにする方法もありますが、より手軽な方法としてAzure Functionsがあります。

Azure Functions は自分でWebサーバを構築しないサーバレスアプリケーションの開発で主に使用されます。無料枠内でも十分に利用できるため、非常に便利です。今回はAzure Functions の使い方を検証してみます。

【検証環境】Auzre Functions / .NET 6.0

Azure Functions プロジェクトの作成

まずはVisualStudioでAure Functions プロジェクトを作成します

今回はHttp Trigger を選択します

Http Trigger は一般的なAPI と同様にHTTPリクエストを受け取って処理を行います

デフォルトで作成されたコードを少し修正してみます。本田翼と戸田恵梨香を返却するようにします。

public static class Function1
{
    [FunctionName("FunctionTest")]
    public static async Task<IActionResult> Run(
        [HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req)
    {
        System.Collections.Generic.List<Response> response = new()
        {
            new Response()
            {
                Name = "本田翼",
                Age = 28,
            },
            new Response()
            {
                Name = "戸田恵梨香",
                Age = 33,
            },
        };
        return new JsonResult(response);
    }
}
public class Response
{
    public string Name { get; set; }
    public int Age { get; set; }
}

この状態で実行すると、コンソールlocalhostのURLが表示されるので、Fiddlerで検証してみます

http://localhost:7264/api/FunctionTest にGETでアクセスすると、レスポンスが正しく返されました

ちなみにPOSTでも同様の結果になります。これはコード内のHttpTriggerの引数に”get” と “post” を指定しているためです。

GETとPOSTで処理を分けたい場合は、下記のように書きます

if (req.Method == "GET")
{
    // GET処理
}
else if (req.Method == "POST")
{
    // POST処理
}

リクエストパラメータを取得

GETメソッド

クエリパラメータとして、nameに”testname”をいれGETでリクエストを送ります

http://localhost:7264/api/FunctionTest?name=testname

この場合は下記のようにクエリパラメータを取得します

 string name = req.Query["name"];

name 変数に “testname”が格納されました

POSTメソッド

下記の様なJSONをリクエストボディに入れてPOSTでリクエストを送ります

{name:"testname",age:22}

POSTの場合にはリクエストボディのパラメータを取得したいわけですが、下記のようなコードで取得します

string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
var data = JsonConvert.DeserializeObject<Request>(requestBody);

JSON文字列で受け取り、C#のクラスにデシリアライズできていることが確認できました

その他のリクエスト情報については引数のHttpRequestに含まれているため、適宜利用するようにしましょう

一つのプロジェクトに複数の関数を定義する

Azure Functions は一つのプロジェクト内に複数の関数を定義することができます

新しい項目の追加から、Azure関数を選択します

新しい関数を作成後に実行すると、複数の関数が定義されていることが確認できます(実際にFiddlerで接続もできました)

Azureに発行する

作成した関数をAzure に発行します

Visual Studio の公開から、Azure を選択します

Azure Function App (Window) を選択します

関数アプリボタンからAzureに関数リソースを追加します(ポータルから作成済みの場合は選択)

各項目に任意の設定を行い、Azureへの公開設定を完了させます

しばらくするとAzureに発行が可能になりますので、実際に発行してみます

ポータル上で発行ができていることが確認できました

関数をクリックして、関数のURLの取得からAPIのURLを取得します

実際にアクセスしてみると、作成した関数であることが確認できました!

Leave a Reply

Your email address will not be published. Required fields are marked *