円安がヤバいのでさくらのクラウドを学んでみた

## インフラのコストが円安でマッハ

### はじめに

円安、ヤバいですね。(語彙力)
記事執筆現在(2024/4/30)でドル円が156.90円だそうです。
主要なパブリッククラウドの料金はドル建てですので、
何もせずともコストが爆増しています。

そこで、国内のクラウドサービスとして最近何かと話題なさくらのクラウドを
勉強してみることにしました。

### 概要

この記事では、簡単なwebサーバの冗長構成をざっくり構築する手順を記載し、
AWSでの構築と比べてどうなの？といったところを書いていきます。

私自身、開発者としてAWSを軽く触ったことがある程度ですので、
クラウドインフラ自体の知見が浅いのですが、
「さくらのクラウド」ってどうなの？と思っている方の役に立てれば幸いです。


## 構成図
![cluster01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3684881/3bbf8c3e-30e4-1f26-4813-86ef3058e948.png)

AWSのハンズオンでもよく見るような構成で今回は作成します。
webサーバを2台立てて、ロードバランサで接続制御する形です。
(ホントはさらにdbサーバも立てて冗長構成みたいなこともやりたかったのですが、
今回はwebサーバだけで力尽きました、、、)

## 構築してみる
※さくらインターネット及びさくらのクラウドへの登録手順は省略します
### 1.ルータ+スイッチの作成
さくらのクラウドのサーバをインターネットに接続する場合は、
**①共有セグメントへの接続**
**②ルータ+スイッチへの接続**
のいずれかから選択します。
さくらのクラウドのロードバランサでは、ルータ+スイッチを使用する構成のみ
対応しているため、今回はまずルータ+スイッチを作成していきます。

![secure.sakura.ad.jp_cloud_iaas_ (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3684881/cd206113-c2d1-7851-d03b-7c0712c6b544.png)

サイドバーから、
**ネットワーク>スイッチ**
でスイッチ一覧画面を開き、右上の「追加」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3684881/5f97edf1-0e9f-d7d8-b87a-0973d9f7004d.png)

画像を参考に以下の通りに設定して作成します。
・「名前」は任意の名前を入力
・「ルータ」は「はい」を選択
・その他はデフォルト

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3684881/c6d73014-62c9-12c0-0895-d030b7fb95a0.png)

作成が完了すると以下のようにスイッチ一覧に表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3684881/f99521ea-d813-4db8-d3b1-55d6fec09bb4.png)

このスイッチを選択して詳細画面を表示し、IPアドレスを開くと、以下のようになっているはずです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3684881/d2878e39-1301-21a7-039a-84fecc232deb.png)

ここで表示されているが、作成されたルータ+スイッチに割り当てられたグローバルIPアドレスです。
このIPアドレスをサーバやロードバランサなどのリソースに割り当てることでネットワークを構成することができます。

### 2.ロードバランサの作成
サイドバーから、
**アプライアンス>ロードバランサ**
でロードバランサ一覧を開き、右上の「追加」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3684881/4dacd1ee-d7e3-e30b-29d5-222947fd9d26.png)

画像を参考に以下の通りに設定して作成します。
・「接続先スイッチ」は先程作成したルータ+スイッチを選択
・「冗長化」は「はい」を選択
・「名前」は任意の名前を入力
・その他はデフォルト

IPv4アドレス#1、IPv4アドレス#2、ゲートウェイについては、
ルータ+スイッチに割り当てられたIPが自動で割り振られているはずです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3684881/df75f366-b48c-2bfc-fd2d-6275061cdd3b.png)

作成したら、作成したロードバランサを選択して右上の「詳細」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3684881/a57ae86c-1dce-1959-2486-1dd6178d36b3.png)

VIP設定タブを開き、右下の「追加」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3684881/5f091f00-edb5-147b-9df3-cbfa59ade34b.png)

画像を参考に以下の通りに設定します。
・「VIPアドレス」に、スイッチ+ルータで割り当てられたIPのうち未使用のもの
(ロードバランサ作成時に使用しなかったもの)
・「ポート番号」は「80」を入力(webサーバのため)
・その他はデフォルト

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3684881/40ff687a-f02a-6c45-2c82-a3da81a82c4c.png)

作成後、右上の「反映」をクリックするのを忘れずに！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3684881/cf92b3af-d5c7-499a-ff19-93acb8791237.png)


### 3.サーバの作成
サイドバーから、
**サーバ**
でサーバ一覧を開き、右上の「追加」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3684881/4b497766-b391-76ce-79a6-37b167d1fd84.png)

画像を参考に以下の通りに設定して作成します。
・「ディスク」の「アーカイブ選択」は「CentOS 7.9」を選択
・「NIC」は「スイッチに接続」を選択し、作成したスイッチ+ルータを選択
・「ディスクの修正」の「IPアドレス」は一覧から未使用のIPを選択
・「ディスクの修正」の「管理ユーザのパスワード」は任意のパスワードを入力
・「ディスクの修正」の「ホスト名」は任意のホスト名を入力
・「サーバ情報」の「名前」は任意の名前を入力
・その他はデフォルト

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3684881/321757d3-a0b3-682e-819c-f8a06bc03011.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3684881/837b9769-93e2-5936-7035-d27c21fa9edb.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3684881/12b29515-8599-575c-256f-c0b6b30c7ecd.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3684881/f5c5146f-2a62-89ad-133e-6ff26514ff49.png)

作成できたら、サイドバーの
**マップ**
からマップ画面を開き、以下画像のようになっていれば、ここまではOKです。
一旦休憩。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3684881/0da9ad5e-1eaf-209c-8372-e68d58b0bcaa.png)

### 4.サーバの設定
ここからは、作成したサーバにssh接続して直接設定を行っていきます。
この記事ではTeraTermを使います。
#### 4.1 ループバックアドレス設定

ロードバランサによるDSR構成として正常動作させるために、
ループバックアドレスの設定を行っていきます。

/etc/sysctl.confをviエディタなどで開き、末尾に以下2行を追加して保存します。
```
net.ipv4.conf.all.arp_ignore=1
net.ipv4.conf.all.arp_announce=2
```
![スクリーンショット 2024-05-03 212326.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3684881/c54ebda4-9766-b892-5d64-9c108b35e2f5.png)

追記後、以下コマンドでsysctl.confの設定内容を反映します。
```
# sysctl -p
```
![スクリーンショット 2024-05-03 212405.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3684881/5675f1d7-e4d2-828f-f601-aaa01fbb08ee.png)

次に、新たにlo:0デバイスを作成し、ロードバランサ作成時に設定したVIPアドレスを設定します。

viエディタなどで/etc/sysconfig/network-scripts/ifcfg-lo:0ファイルを新規作成し、
以下内容を記載します。
```
DEVICE=lo:0
IPADDR=136.43.176.238
NETMASK=255.255.255.255
```

作成後、以下コマンドでデバイスを有効化します。
```
# ifup lo:0
```

#### 4.2 webサーバ構築
Apatchを導入しwebサーバを構築します。
```
# yum install httpd
```
インストールできたら起動します。
```
# systemctl start httpd.service
# systemctl status httpd
```
画像のようにActiveになっていたら起動OKです。
![スクリーンショット 2024-05-03 215119.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3684881/9c7f6dc8-cc5f-8928-a2ed-c6c648c74bc7.png)

自動起動設定もしておきます。
```
systemctl enable httpd.service
```

ファイアウォールでHTTPを許可します。
```
# firewall-cmd --permanent --zone=public --add-service=http
# firewall-cmd --reload
```

最後に、画面表示用にコンテンツを用意します。
以下コマンドでホスト名をindex.htmlに設定します。
```
# uname -n > /var/www/html/index.html
```

この状態で、作成したサーバのIPアドレスをブラウザから叩くと、
画面にホスト名が表示されるはずです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3684881/4d53efc8-ccc2-7f24-1d56-46a79f9b0f19.png)

#### 4.3 2台目サーバの作成・設定
2台目は、AWSのAMIと同じように作成済みのサーバから複製することで
構築していきます。

サーバ一覧上で、作成したサーバの右端をクリックし、「クローン」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3684881/4ff98fba-34a5-4289-dd7e-195bdce75edf.png)

基本1台目の設定を引き継ぐためデフォルトで大丈夫ですが、以下だけ変更します。
・「ディスクの修正」の「IPアドレス」は一覧から未使用のIPを選択
・「ディスクの修正」の「管理ユーザのパスワード」は任意のパスワードを入力
・「ディスクの修正」の「ホスト名」は任意のホスト名を入力
・「サーバ情報」の「名前」は任意の名前を入力

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3684881/3319d9e1-5ef8-a9ce-50f8-08175a81bc87.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3684881/fd72c6e0-8c64-79d8-a278-98b4f0595dc0.png)

2台目作成後のマップが以下画像のようになります。
![secure.sakura.ad.jp_cloud_iaas_ (14).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3684881/feee4cc3-631b-51b1-30b0-422505c03779.png)

2台目は作成時点でループバックアドレスの設定やアパッチの設定などが完了している状態ですが、
表示コンテンツについては修正する必要があります。

ssh接続し、/var/www/html/index.htmlをviエディタなどで開き、
2台目のホスト名に変更しておいてください。

### 5.ロードバランサへの実サーバ登録
最後にロードバランサとサーバ2台を紐づけます。
再度、サイドバーから、
**アプライアンス>ロードバランサ**
でロードバランサ一覧を開き、作成したロードバランサを選択して右上の「詳細」をクリックします。
実サーバタブの右下の「追加」をクリックします。
![secure.sakura.ad.jp_cloud_iaas_ (15).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3684881/c597eb0b-8e3e-eb88-689d-0af64061b32c.png)

画像を参考に以下の通りに設定します。
・「IPアドレス」に1台目のサーバのIPアドレスを入力する
・「監視方法」はhttpを選択する
・「パス」は/を入力する
・「レスポンスのコード」は200を入力する
・「サーバダウン判定のリトライ回数」は5を入力する
・「ヘルスチェックタイムアウト(秒)」は30を入力する
・「有効/無効」は有効を選択する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3684881/7aef708b-e053-1c6a-2a32-d3a3d54312da.png)


1台目が追加できたら2台目も同様に追加・設定します。
IPアドレスの欄のみ、2台目のサーバのIPアドレスにして、他の設定は使いまわします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3684881/faf08331-07e3-a6a5-6b6e-7963279bbbe4.png)

追加後、右上の「反映」をクリックし、しばらく時間が立つと以下画像のようになります。
ステータスがUPとなっていればヘルスチェックOKです。
![secure.sakura.ad.jp_cloud_iaas_ (18).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3684881/f761b226-4be4-40ec-3d5f-8432af1f83d2.png)

ここまでで構築は全て完了となります。
お疲れ様でした。

### 6.動作確認
再度に動作確認します。
ロードバランサのVIPをブラウザから叩くと、1台目のサーバか2台目のサーバのホスト名が表示されます。
![スクリーンショット 2024-05-03 231311.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3684881/f508aef0-15ff-444f-273c-46ffbe84e815.png)

AWSのELBだとラウンドロビン方式で、交互に各サーバにリクエストするため、
web01とweb02が毎回切り替わるイメージだと思います。
ただ、さくらのクラウドではリーストコネクションという方式を採用しているため、この挙動になりません。
リーストコネクション方式では、現在のコネクション数が最も小さいサーバに転送する方式です
そのため、ブラウザで別タブを開き、ロードバランサのVIPを叩くと、もう1台のホスト名が表示されます。
![スクリーンショット 2024-05-03 231844.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3684881/648c2108-1bf1-1f51-3341-f2d2be49d921.png)



## AWSと比較しての感想
AWSも全然触っていない人間ですが、さくらのクラウドを触っての感想を書いていきます。

・コンソールの操作性
→AWSと比べてだいぶスッキリしていてシンプルです。
ざっと見た感じですが殆ど全てのサービスの画面が統一されているので、そこは凄く分かりやすかったです。
ただ、リソース追加した直後に一覧画面に飛んで状態リロードしてくれるといいな、
みたいな痒いところに手が届かないなが所々あった印象です。

・スイッチ+ルータを作成してのネットワーク構築
→AWSでいつもやっている、
「VPC作成してサブネット作成して、インターネットゲートウェイをアタッチして・・・」
という流れと違うので最初は戸惑いましたが、
初学者だとこっちの方が楽そうかなと思いました。
サブネット分割など最初全然分からかったなあと。(今も分からずですが、、)

・ループバック設定
→AWSだとサーバに接続しての設定などは特にせずにコンソールからロードバランサの設定が簡潔するので、この辺はさくらのクラウドが煩雑だなと思いました。
参考にした記事を見るに、CentOS 6系までは、さくらのクラウド側で起動時のスクリプトとして用意していたようなので、そのうちまた用意してくれるかもですね。

・参考記事からの変更点
→AWSほどではないですが、さくらのクラウドもちょいちょいアップデートされていっているようで、参考にした記事からの変更がちょいちょいありましたが、割とどうにかなりました。
画面の構成がAWSと比べてだいぶシンプルなのでそのおかげですかね。

・リソースの展開速度
→さすがにAWSと比べると若干遅いかな？と感じましたが、気になるほどではなかったです。
他のリソースとかだともっと時間かかったりするんですかね。

## コスト概算
今回構築した構成で、AWSとさくらのクラウドのコストを比較してみます。
24時間稼働想定の1月あたりのコストを比較します。
AWSは1ドル155円として四捨五入で計算します。

|　　　　|  さくらのクラウド  |  AWS  |
| :--:   | :--:               |:--: |
|  ネットワーク   | 7920円(ルータ+スイッチ)   |1131円(VPC Public IPv4 Address)|
|  サーバ   | 5060円(サーバ・ディスク)   |4030円(EC2 t2.micro・EBS 汎用SSD)|
|  ロードバランサ   | 2619円   |2750円|
|  合計   | 15599円   |7911円|

こう比べると、AWSの方がずっと安く感じますね。
ただ留意しておくべきは、AWSはインターネットへのデータ送信量に課金が発生することです。
※さくらのクラウドは無料
1GBあたり約18円程度なので、数十GB程度だと大したことないですが、
1TBだと約18095円とかになってしまってとんでもないです。

また、ルータ+スイッチでさくらのクラウドがだいぶ高い印象ですが、
最低構成でもグローバルIPが16個払い出されるからなのもありますね。
AWSでいうとElastic IPを16個使ってるってことなので。

軽く触った印象でしかないですが、
検証・テスト目的の最小限構成や、データ転送量が少ないアプリケーションだとAWSが良さそう。
ある程度の規模感・データ転送量があるアプリケーションだとさくらのクラウドが良さそう。

## おわりに
勿論要件次第ですが、さくらのクラウドの利用もありなのかなと思いました。
国内向けの中規模なアプリケーションで、サーバレスとか使わないのであれば選択肢になってくるかと思います。

まだまださくらのクラウドの一部のサービスしか触れていないので、今後また勉強したいと思います。
さくらのクラウドの他にもGCPやAzure等触っていこうかな。


## 参考
以下サイトを参考にさせていただきました。
非常に助かりました。

https://www.slideshare.net/sakura_pr/sakura-cloud-hands-on-loadbalancing

https://knowledge.sakura.ad.jp/6349/#i-2