Azureの無料枠を使ってどこまで技術習得できるかやって見るので、Azureの勉強を躊躇している方は参考までにどうぞ。
目的
WebAppsをポータルで作成してみる。
※WebAppsは、Azureポータルの日本語表記では「Web アプリ」と表示されるが、一般的な用語としてのWebアプリと混同してしまうため、あえて英語表記の「WebApps」と記載する。画面ショットでは「Web アプリ」となっているので適宜読み替えてほしい。
※Azure ポータルの画面名称については以下のドキュメントを参考にする。

無料枠の確認
WebAppsの金額を大きく決定づけているのは「AppServiceプラン」というリソースなので、ここではAppServiceプランを確認する。ちなみに各リソースの役割としては以下のようになる。
- AppServiceプラン
- インフラ(カスタムドメイン、SSL、スケール、ステージングスロット、バックアップ、Trafficマネージャー、CPU、メモリ、プログラム記憶領域等)
- WebApps
- OS(Windows or Linux)、プログラムランタイム(.NET, jvm, Node.js, php, python等)
AppServiceプランは「F1」という価格レベルであれば無料で利用できる。制約としては
- メモリが1GBytes
- デプロイできるアプリケーションサイズが1GBytes
CPUのスペックは規定されていないが、個人的な感覚としてはVMのA0(ACU=50, vCPU=1)程度かと思われる。それ以外の機能もなし。
※もしカスタムドメインやSSLを使用したい場合、「B1」であれば月額1,500円程度で利用できるので予算的に問題なければ「B1」でも良いかも。スケールも確認できる。
詳細は以下参照。
WebAppsの作成
作成したリソースグループのポータルメニューで「概要」を選択し、コマンドバーの「作成」を選択する。

「Web アプリ」で検索し、表示された「Web アプリ」の「作成」-「Web アプリ」を選択する。
※「Web」と「アプリ」の間に半角スペースをいれるのがコツ!

以下のような画面が表示されるので、各タブに分けて作成時の情報を登録していく。
- 基本
- デプロイ(プレビュー)
- 監視
- タグ
- 確認および作成

「基本」タブ
「基本」タブの「プロジェクトの詳細」で、サブスクリプションとリソースグループを確認する。

「基本」タブの「インスタンスの詳細」で、WebAppsの名前と関連情報を登録する。

「基本」タブの「App Service プラン」で、AppSeviceプランの名前とインフラスペックを選択する。名前はデフォルトでは分かりづらい名前が設定されているので、私は「新規作成」を選択して自分で決定した。
ここで重要なのは、「SKUとサイズ」で「Free F1」という無料プランを選択するということ。

「デプロイ(プレビュー)」タブ
デプロイ対象のソースがGitHubで管理されている場合、WebApps作成時にパイプラインの構成ファイルが自動的に登録されるとのこと。プレビュー機能であり、かつLinuxとFree F1プランの組み合わせではサポートされていないようなので無視。
※後で必要になったときに改めて確認する。

「監視」タブ
Application Insightsを利用した監視を行うかどうかを設定する。後々Application Ingithsも検証していきたいので有効にする。
※すぐには課金されないので、一旦ここで有効とし、後で課金されないように制限を設定する。

Application Insightsに関する課金の詳細は以下参照。
「タグ」タブ
今は使用しない。

「確認及び作成」タブ
ここで設定内容を確認して作成する。今後の検証目的のためにテンプレートをダウンロードしてから作成する。
※テンプレートは後からでも履歴から参照/ダウンロードできる。

デプロイの確認
「作成」を行うと、デプロイが実行され、WebAppsが実際に作成される。今回の構成では以下の3つのリソースが作成され、トータルで1分前後でデプロイが完了する。
- AppServiceプラン
- WebApps
- Application Insights
「展開の詳細」には実行結果が表示されている。降順に並んでおり、下が過去、上が最新のログ。
※この流れは、後でARMテンプレートを使用したデプロイもしくはAzure CLIを使用したデプロイをしてみるともう少し詳しく分かる。

Microsoft.Resources/deployments
Application InsightsのためのLog Analyticsワークスペースを作成している。「newWorkspaceTemplate」というリンクをクリックすると詳細が表示され、Application Insights用のLogAnalyticsのワークスペースが作成されていることが分かる。(=「Microsoft.OperationalInsights/workspaces」というキーワード)

※Application Insightsで収集されたデータ(テレメトリ)はLog Analyticsワークスペースに保存される。課金はLog Analyticsワークスペースの保持容量と期間で課金されるので、後で課金されないように確認する。
※Application Insightsには「クラシック」と「ワークスペース」の2種類のリソースが存在するが、「クラシック」は非推奨になるとのこと。テレメトリの保存方法が異なっているらしく、WebApps作成時の処理では最新の「ワークスペース」タイプがデフォルトで作成されるようだ。
![ホ ー ム > Microsoft.Web-WebApp-Portal-63560a5a-9ebO >
newWorkspaceTempIatel 概 要 ′
デ ブ ロ イ
[ を 三 が : : : : : : : : : : : : : : こ : ] 《 画 削 除 〇 キ ャ ン セ ル 0 再 デ ブ ロ イ ( ) 最 新 の 情 報 に 更 新
概 要
第 入 力
出 力
テ ン プ レ ー ト
・ デ ブ ロ イ が 完 了 し ま し た
デ ブ ロ イ 名 : newWorkspaceTemplate
0
サ ブ ス ク リ プ シ ョ ン 従 量 課 金 ( 5 / 20 )
リ ソ ー ス グ ル ー プ : De 信 u 代 R250 し に eG 「 oup ・ E 」 p
展 開 の 詳 細 ( ダ ウ ン ロ ー ド )
リ ソ ー ス
開 始 時 刻 : 2021 〃 / 22 15 : 51 : 20
相 関 255f0f26 ・ 5 2 ・ 4352- bf9d ・ d2683137 ( ( b8
状 態
OK
操 作 の 詳 細
操 作 の 詳 細
・ Defa ⅵ two 「 kspa ( ← 871 に 8b6 ト 0727-42 ( 840 Microsoft.Operationallnsights/workspaces
^ 次 の 手 順
リ ソ ー ス に 移 動](https://juncleit.com/wp-content/uploads/2021/07/image-12-1024x349.png)
Microsoft.Web/serverfarms
AppServiceプランを作成している。
microsoft.insights/components
2つあるが、1つはApplication Insightsの作成、もう一つは作成したリソースの読み込み(おそらく作成確認)を行っている。
Microsoft.Web/sites
WebAppsを作成している。
WEBサイトのアクセス確認
先程のデプロイ結果の画面にある「リソースに移動」を選択すると、作成したWebAppsリソース情報を表示できる。

WebAppsの画面の「概要」ページには基本的なWebアプリの情報と現在の稼働状況がグラフ表示されている。「基本」-「URL」に記載の文字列が、実際のWEBアプリのアクセスURLなので、ブラウザからアクセスしてみる。

アクセスすると、デフォルトページが表示される。今は何もないので「The service is unavailable.」と表示される。

リソースの確認
作成したリソースを確認する。リソースグループの「概要」を表示すると、作成したリソース一覧が確認できる。ここで先程作成した3つのリソースが表示されていればOK。
※「種類」の列で、WebAppsは「App Service」となっている。App Serviceプランと混同しないように。。

Freeプランでの制約となる各種クォータの確認
Freeプランでは、以下の制約があり、クォータオーバーになるとWebアプリが自動的に停止し、一定時間経過するまで利用できない。
- 直近5分間で使用できるCPUの利用時間:3分
- 1日で使用できるCPUの利用時間:60分
- 1時間あたりのメモリ使用量:1GB
- 1日の送信データ量:165MB
- ファイルシステムサイズ(プログラム保存領域):1GB

WebAppsの「クォータ」を選択すると、現在の使用量と各指標のクォータ制限、及び制限リセットまでの時間が表示される。Free F1プランでは利用超過による課金の心配はないので、ここでは「現時点でWEBサイトがアクセスできるか」だけ確認できれば良い。

Application Insightsでのログ量による課金超過防止設定
Application Insightsのログ量はLog Analyticsの利用したワークスペースボリュームに影響する。5GB/月が無料枠という事なので、これに合わせて設定する。ポータルでApplication Insightsを表示し、リソースメニューの「使用とコストの見積もり」ページの「日次上限」という設定を表示する。

デフォルトでは100GB/1日となっているので、5GB/月に合わせて0.16GB/日で設定し、上限時にメール送信するフラグをオンにする。Free F1プランでは利用時間も制限されているのでおそらく問題ないと思うが、念の為。警告レベルは最小値が「1」で、日次ボリュームと合わないのでオフにする。

第3者からのアクセス制限
他の誰かにバンバンリクエストされて大事なCPU時間を無駄に消費しないよう、自分の環境以外からの通信を遮断する。WebAppsのポータルメニュー「ネットワーク(プレビュー)」-「アクセス制限」を選択する。
※せっかくだから新しいUIの方を使ってみる。

初期状態では、最優先(優先度=1)で全てのリクエストを受け付けるようになっているので、許可したい環境からのリクエストのみ許可し、他の環境からはアクセスさせないように設定する。「規則の追加」を選択する。

登録するのは以下の項目のみ。
- 名前:アクセス元が分かるような名前が良い
- アクション:許可
- 優先度:1でもいいかも。
- 種類:IPv4(まだIPv6の世界にはなってない)
- IPアドレスブロック:自宅からアクセスしたときのパブリックIPをCIDR形式で。
上記以外はここでは不要。
※以下のイメージでは「IPアドレスブロック」が空白だがマスクしているだけ。

追加すると、自宅ネットワークからのアクセスが許可される。一方で、今まで最優先で全てのリクエストを受け付ける設定となっていたレコードが、優先度が一番低くなり、かつ全てのリクエストを拒否する設定に自動で切り替わる。これで自宅以外からのアクセスは拒否されるので、無駄にアクセスされてCPU時間が消費されることはない。

まとめと今後の取り組み
ここでは以下のことを実施した。
- WebAppsを無料枠を使ってポータルから構築した。
- 無料枠のクオータを確認し、後どれぐらい利用できるかを知る方法を理解した。
- 監視データの上限を変更し、追加課金されないようにした。
- 第三者からのアクセスを制限し、自宅ネットワークからのみアクセスするように制限した。
今後は以下のようなことにチャレンジして行く。
- 様々な無料枠のAzureリソースの構築と検証
- ARMテンプレートを使ったAzureリソース構築の自動化
- AzureCLIを使ったAzureリソース構築の自動化
- Pipelineを使ったコードビルド&デプロイの自動化
- Containerの利用
- 各種セキュリティや複雑なネットワークや認証に関する検証
- クラウドアーキテクチャの検証
コメント