nakamurakko’s diary

仕事で覚えたこと、勉強したことを自分のメモ代わりに書いていこうかなと。

Azure FunctionsでHTMLを返す

サーバーレスとかFaaSの考え方でHTMLを返せないかと思い、Azureで試してみた。 ※Azureは料金に注意して使用してください。

環境

Visual Studioでプロジェクト作成

新しいプロジェクトで「Azure Functions」を選択する。

f:id:nakamurakko:20200218103918p:plain

テンプレートはAzure Functions v1(.NET Framework)、HttpTrriger、アクセス権はAnonymousを選択する。

f:id:nakamurakko:20200218104009p:plain

実装

クラス「Function1」がテンプレートで用意されているので、今回は分かりやすいように「MainFunction」に変更する。

f:id:nakamurakko:20200218104030p:plain

MainFunctionの実装内容は下記の通り。

using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.Azure.WebJobs.Host;
using System.Net;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;

namespace FunctionAppNakamurakko
{
    public static class MainFunction
    {
        [FunctionName("MainFunction")]
        public static async Task<HttpResponseMessage> Run([HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)]HttpRequestMessage req, TraceWriter log)
        {
            HttpResponseMessage response = null;

            await Task.Run(() =>
            {
                // ステータスコードは「OK」。
                response = req.CreateResponse(HttpStatusCode.OK);
                // インデックスページを詰め込む。
                response.Content = new StringContent(CreateIndexPage(), Encoding.UTF8, "text/html");
            });

            return response;
        }

        /// <summary>
        /// インデックスページを作る。
        /// </summary>
        /// <returns>インデックスページ。</returns>
        public static string CreateIndexPage()
        {
            var result = new StringBuilder();

            result.AppendLine("<html>");
            result.AppendLine("<head>");
            result.AppendLine("<meta http-equiv=\"content-language\" content=\"ja\"/>");
            result.AppendLine("<meta http-equiv=\"content-type\" content=\"text/html; charset = utf-8\"/>");
            result.AppendLine("</head>");
            result.AppendLine("<title>");
            result.AppendLine("仮住まい(仮)");
            result.AppendLine("</title>");
            result.AppendLine("<body bgcolor=\"ivory\">");
            result.AppendLine("<h3>仮住まい(仮)</h3>");
            result.AppendLine("</body>");
            result.AppendLine("</html>");

            return result.ToString();
        }
    }
}

デバッグ実行

デバッグ実行するとコンソールが立ち上がる。

f:id:nakamurakko:20200218104105p:plain

途中に記載されているURLをブラウザに張り付けて動作確認する。

f:id:nakamurakko:20200218104129p:plain

Azureにアップロード

リソースの作成

Azureポータルにログインし、リソースの作成で「Serverles Function App」を選択する。

f:id:nakamurakko:20200218104152p:plain

Fanction Appのアプリ名などを設定して、作成を選択する。

f:id:nakamurakko:20200218104212p:plain

発行

Visual Studioでプロジェクトを右クリック→発行を選択し、今回は「既存のものを選択」を選択して次へ。

f:id:nakamurakko:20200218104233p:plain

Azureポータルで作成したFanction Appを選択する。

f:id:nakamurakko:20200218104253p:plain

サイトで確認

Azureで登録したFunction Appにアクセスして、表示できることを確認する。

f:id:nakamurakko:20200218104314p:plain

うまく使えば、サーバーを用意しなくてもいけそう。