サーバーレスとかFaaSの考え方でHTMLを返せないかと思い、Azureで試してみた。 ※Azureは料金に注意して使用してください。
環境
- クラウド環境
- Microsoft Azure
- 開発環境
- Windows 10 Pro
- Visual Studio Professional 2017
Visual Studioでプロジェクト作成
新しいプロジェクトで「Azure Functions」を選択する。
テンプレートはAzure Functions v1(.NET Framework)、HttpTrriger、アクセス権はAnonymousを選択する。
実装
クラス「Function1」がテンプレートで用意されているので、今回は分かりやすいように「MainFunction」に変更する。
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(); } } }
デバッグ実行
デバッグ実行するとコンソールが立ち上がる。
途中に記載されているURLをブラウザに張り付けて動作確認する。
Azureにアップロード
リソースの作成
Azureポータルにログインし、リソースの作成で「Serverles Function App」を選択する。
Fanction Appのアプリ名などを設定して、作成を選択する。
発行
Visual Studioでプロジェクトを右クリック→発行を選択し、今回は「既存のものを選択」を選択して次へ。
Azureポータルで作成したFanction Appを選択する。
サイトで確認
Azureで登録したFunction Appにアクセスして、表示できることを確認する。
うまく使えば、サーバーを用意しなくてもいけそう。