Azure スケーラブルウェブサイト構築

# はじめに
Windowsとの互換性か、Open AIの流行からかAzureの名前を聞くことが増えてきたのでAzureも勉強する必要がでてきました。。
資格勉強は基本すぐ飽きてしまうので、とりあえずあるあるっぽいアーキテクチャ考えて構築してみました。
（手を動かすのは大事。）
Azureはまとまった記事が少ないので大変でしたね、、笑笑

# やること
AWSで最初に学ぶであろう↓をAzureで再現しようと思います。
[AWS Hands-on for Beginners 〜 スケーラブルウェブサイト構築編 〜](https://pages.awscloud.com/JAPAN-event-OE-Hands-on-for-Beginners-Scalable-2022-reg-event.html?trk=aws_introduction_page "AWS Hands-on for Beginners 〜 スケーラブルウェブサイト構築編 〜")
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3138153/159facbc-85f2-100e-33d2-d3d407da7f98.png)

前回、前々回で構築したものが近いですかね。
僕のブログではPHPインストールしてDBのデータ表示するとこまでやってますよお👀
[AWS学習ステップを使用した構築のお勉強③](https://qiita.com/bakuchiku/items/19e8ea677b33a8b03ee9 "AWS学習ステップを使用した構築のお勉強③")
[AWS学習ステップを使用した構築のお勉強④](https://qiita.com/bakuchiku/items/0160f272ebcaed4ed465 "AWS学習ステップを使用した構築のお勉強④")


# アーキテクチャ
AWSとAzureの違いに苦戦しながらとりあえず考えてみました。（アイコンミスってたらごめんなさい）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3138153/199c803c-bed3-6a06-72ed-45cdb8cbd8f1.png)

## 注意点
* AWSでいうALB=Application Gateway
　→SSL化する場合AzureのLoad Balancerでは不可（NLBのため）
　→v2推奨だがめちゃ高い。今回はv1で構成
* Application Gatewayには専用のサブネットが必要
　→自動スケールとかできるらしい。そのためVMと共同のサブネットは不可
* DBは逆にサブネットが必要ない
　→Basicプランではインターネット経由でDBに接続する必要がある。
　　DB付属のFirewallで接続元IPを絞ることは可能
　→本来やとアーキテクチャのようにEndpoint→PrivateLinkが望ましいが予算の都合上カット。
* ロードバランサ用の無料SSL証明書がない。
　→App Serviceにはありそう。今回は検証のためカット。

# 構築開始
とりあえず構築してみます。
タグ管理が便利そうだったので、リソースグループにタグ強制付与ポリシーを作っておきます。
![1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3138153/b2368412-53ee-d554-9940-5a7304e464a9.png)

## ネットワーク作成
Application Gateway用, VM用×2のサブネットを持ったVNETを作成しました。
![2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3138153/d7d4b40e-b1d2-6cf8-b1d9-89518b3cc70c.png)

## 仮想マシン（VM）作成
VMをとりあえず1台作成しました。ここにApacheをインストールしてWEBサーバにします。
サイズは「B1ls」より「B1ms」の方が良いと思います。「B1ls」はスペック低すぎました。
その後VM1をコピーしてVM2を作成します。
![3.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3138153/03b8b2f6-8e76-3295-a3cb-23be41d546d8.png)

## セキュリティグループ作成
Azureではデフォルトでインバウンド（VNET, LoadBalancer）、アウトバウンド（VNET, LoadBalancer, internet）が設定されているので、SSHで接続するために穴を開ける必要があります。
また、AWSと異なりAzureはサブネット・NICともにセキュリティグループで制御します。
作成したサブネットはVM1,VM2サブネットに紐づけています。
![5.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3138153/7e1fe8fa-0e36-6ab6-8bae-00f2ad8ed4ce.png)


### 接続確認
Tera TermからVMに入ってみます。
![4.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3138153/37897851-5957-be86-ca60-9a17d750024f.png)

ここからのAWSでもAzureでも変わらないので以下参照。
[AWS学習ステップを使用した構築のお勉強①](https://qiita.com/bakuchiku/items/27cb55ffbb0ab372cff3 "AWS学習ステップを使用した構築のお勉強①")

## 2台目の仮想マシン作成
Azure VMを複製するためには「スナップショット作成」→「マネージドディスク作成」→「VM作成」の手順が必要になります。
### スナップショット作成
VM1の画面からスナップショットを作成します。
![7.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3138153/3693e5f4-4abd-3c25-203a-16daa3ed6367.png)

### マネージドディスク作成
先ほど作成したスナップショットを選択し、マネージドディスクを作成します。
![8.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3138153/071204d7-eaf5-58b1-ddb8-c9f009f2312f.png)

### 仮想マシン複製
マネージドディスクからVMを作成します。
サブネットはVM2を選択しましょう。
![9.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3138153/6b097b03-0dfd-577c-b395-e4b129edb45b.png)

### 接続確認
AWS同様ですね。
VM1
![10.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3138153/83cacf5c-2fdb-afa5-934d-df94a9c78d03.png)
VM2
![11.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3138153/0e0d4b3f-691e-ec44-099d-62a4777acf45.png)

## Application Gateway作成
AWS ELBを触ったことがあれば道なりに沿って設定すればいけます。まじで。
![15.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3138153/c0c65e6a-1344-dfcd-ee19-2ff33e769b47.png)

### Application Gatewayのセキュリティグループ作成
80番ポートのインターネットアクセスを許可します。
![17.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3138153/8a9bf0ff-8946-17e9-6205-9592abcb263f.png)


### 仮想マシンのセキュリティグループ更新
Application Gatewayからの80番ポートを許可しておきます。
![16.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3138153/f2486dc2-965b-3a9e-61da-4f27f4e61fee.png)

### Application GatewayのパブリックIPで接続確認
安定のF5連打
![10.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3138153/ce56ef35-843d-e536-f321-ee62476d4501.png)
![11.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3138153/de9ab607-1337-75f7-fb00-f3eed05007a7.png)

## DNS作成
名前は各自取得したドメイン名を記載します。
オススメ [お名前.com](https://www.onamae.com/ "お名前.com")
![20.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3138153/d6a323e3-e14c-e840-22dd-f8b8953734a7.png)

### レコードの登録
AレコードにApplication GatewayのIPアドレス。
お名前.comのネームサーバにNSレコードの値を登録します。
ネームサーバ登録方法→[AWS学習ステップを使用した構築のお勉強②](https://qiita.com/bakuchiku/items/3d34e7feba3e6c25b018 "AWS学習ステップを使用した構築のお勉強②")
![21.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3138153/e35af489-39f9-6344-3111-c029ba9d6150.png)


### 接続確認
名前解決できているか確認します。
F5連打。
![10.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3138153/d92ff2ad-f57b-4968-3269-f492f50d2b42.png)
![11.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3138153/2544e4ca-3ab2-cbc5-b206-913d148339da.png)

## DB作成
作りました。構築以外の作業はAWSとほぼ変わらないのでカット。
割と高いのと実用するにはBasicでは機能が足らなさそう。
![24.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3138153/7887772e-af6a-7ddd-274d-2c8ab7190bfb.png)

# おわり！！
1度AWSで同じような環境作成したことあったら簡単にできると思います。
ただ、Application GatewayとかDBが高いし、Firewall立てたりってなるとさらに料金がかさむ。。
AWSで良くねってなるかも。（要件がWin10とか、OpenAIとの連携が無ければ）

リソースグループで管理できるのとか、構築時のUIはAzureの方が好きかも。
ただAzureはApp Serviceとかコンテナ周り、Azure DevOpsが優秀そうなのでその辺を触ってみたいところ。
シンプルなサーバとかサーバレスあたりはAWSかなあ笑笑

# 削除
リソースグループで一括削除はマジで便利。検証後の作業が楽。
![26.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3138153/5fedecf6-460c-2d7d-3adf-bb15e3328470.png)