ミニPCとEC2を比較してみた


# はじめに
<!-- 発端や概要を記載 -->
最近巷でなにかと話題になっているミニPCですが、ついに先日私も購入してしましました...。
その後OSをUbuntuに入れ替えたり開発環境をセットアップしたり毎日イチャイチャしているうちに、気づけば購入してから一か月ほど経過していました。

そんなわけで思いのほか使い勝手がよかったので、
いくつかの観点でEC2との比較してみようと思います。

<!-- 各チャプター -->
<a id="#Chapter1"></a>

# 1.比較対象について
まず比較対象については以下の通りです。
後ほどパフォーマンスの部分でも記載していますが、
EC2のインスタンスタイプはUnixBenchの計測結果がミニPCとほぼ同じぐらいのものを選んでいます。

| 項目                 | ミニPC        | EC2                                   |
|:---------------------|:--------------|:-------------------------------------|
|	インスタンスタイプ    |  -            |	t3.xlarge                             |
|	CPU                 |  Intel N100  |	Intel Xeon Platinum 8259CL @ 2.50GHz  |
|	コア数               |  4           |	2                                      |
|	スレッド数 (コア単位) |  1           |	2                                     |
|	メモリ容量           | 16GB         | 16GB                                   |
|	OS                  | Ubuntu23     | Ubuntu23                               |
|	ストレージ           | 500GB        | 500GB                                  |

<a id="#Chapter2"></a>

# 2.各種比較

### (1)コスト

コスト面について24時間365日つけっぱなし想定で考えた場合、以下の結果となります。
EC2はスポットインスタンスを利用し、現実的な範囲の割引率を適用した上で計算していますが、
やはりトータルコストで見た場合はEC2のほうが割高になります。

| 項目                 | ミニPC                | EC2(t3.xlarge)              |
|:--------------------|:----------------------|:----------------------------|
|	初期費用 (本体料金)   | 約30,000円            |	 なし                       |
|	運用コスト (1年)     | 約8,000円             |	1,529 USD(約224,500円)      |

ということで、コスト面ではミニPC側の圧勝です、
なんならEC2一台の料金でミニPCのクラスタリング構成ができちゃいます。

~~「開発環境目的で使うEC2は24時間つけっぱじゃないし、毎日使ったとしても1/2、ないしは1/3ぐらいの料金になるんじゃない？」という声が聞こえますが、それでもミニPCより料金が下回ることはないでしょうからご容赦ください...。~~

* ミニPCの運用コストは消費電力のみ考慮しており、東京電気の料金を参考にしています。
また消費電力はCPU100%時の平均値で計算しています。

[東京電力 電気料金](https://www.tepco.co.jp/ep/private/plan/old01.html)

```text:ミニPCの運用コスト
・消費電力(CPU100%): 25w
・電気料金(1kWh): 約40円

・合計: 25(w) * 0.04(1Wh/円) * 24(時間) * 365(日) = 8,015円
```

* EC2の運用コストはAWS公式の見積ツールで算出しています

[AWS 料金見積りツール](https://calculator.aws/#/)
```text:EC2の運用コスト
・インスタンスタイプ(t3.xlarge): 0.2176 USD (毎時)
・スポットインスタンス割引率: 50%
  0.2176 (USD) x 24(時間) x 30(日) * 0.5(割引率) = 79.4(USD)

・EBS(汎用SSD gp3): 0.096USD (1GB/毎月)
  500(GB) x 0.096(USD) = 48.00(USD)

・合計: (79.4 + 48.00) x 12(ヶ月) = 1,529.04(USD)
```


### (2)パフォーマンス

パフォーマンスについてそれぞれUnixBenchで計測しており、結果は以下の通りです。
EC2の場合インスタンスタイプを上げればいくらでも性能は上げれるので、
この記事ではあくまで比較対象としてほぼ同性能のインスタンスタイプを選んでいます。

シングルスレッドはEC2側が負けちゃってますが、
マルチスレッドがほぼ同じ値なので、本記事ではt3.xlargeを比較対象としてます。
```text:ミニPC UnixBench結果
4 CPUs in system; running 1 parallel copy of tests
System Benchmarks Index Score                                        1227.9

4 CPUs in system; running 4 parallel copies of tests
System Benchmarks Index Score                                        2745.3
```

```text:EC2(t3.xlarge) UnixBench結果
4 CPUs in system; running 1 parallel copy of tests
System Benchmarks Index Score                                         988.5

4 CPUs in system; running 4 parallel copies of tests
System Benchmarks Index Score                                        2689.5
```

### (3)スケーラビリティ/可用性

この点についてはEC2側の圧勝です。
まずスケーラビリティについてですがミニPCは基本的にCPUやメモリの換装が出来ないものがほとんどなので、素直に実機を買い足していくことになります。
ECの場合は`インスタンスタイプ変更`でのスケールアップやスケールダウン、
`Auto Scaling`を利用したスケールアウトやスケールインによって柔軟性が非常に高いです。

可用性についても同様に、ミニPCは実機でのクラスタリング構成ぐらいしか選択肢がないですが、
EC2の場合はマルチAZ構成にしたりすることで比較的お手軽に可用性が確保できます。

このようにミニPCでも台数を増やして構成を工夫すればいくらかは対応できそうですが、
作業工数を考えるとミニPCでやりくりするのは正直苦しいでしょう。
まぁこの分野はクラウドの主戦場なのでそもそも比較するまでもないのですが...。


| 項目                         | ミニPC                                    | EC2                                  |
|:----------------------------|:------------------------------------------|:-------------------------------------|
|	スケーラビリティ             | 実機の追加                             |	インスタンスタイプの変更、Auto Scaling など                         |
|	可用性                      | 実機のクラスタリング構成など             | マルチAZ構成など                            |

* [インスタンスタイプ 一覧](https://aws.amazon.com/jp/ec2/instance-types/)
* [Auto Scaling とは](https://docs.aws.amazon.com/ja_jp/autoscaling/ec2/userguide/what-is-amazon-ec2-auto-scaling.html)


### (4)セットアップと運用/管理の容易さ

セットアップは、初回のサーバ構築こそミニPCもEC2も大した違いはありませんが、
AMIさえ作ってしまえばEC2はいくらでもデプロイできるので、二台目以降の作業効率はEC2側が有利です。
なおAnsibleなどで構成管理を行えばミニPCのセットアップも簡略化/短縮できますが、学習コストを考慮すると...。

また運用/管理についてもAWSが独自サービスを様々用意してくれており、これがかなり優秀なのでEC2が有利かと思います。

| 項目              | ミニPC                                              | EC2                        |
|:-----------------|:---------------------------------------------|:-----------------------------------|
|	セットアップ時間   | 数時間 (手作業の場合)                         |	数分～十数分前後(二台目以降)        |
|	運用/管理         | Ansible、Chef、Puppet など管理ツールを利用     |	CloudWatch、Systems Manager など  |

* [CloudWatch 公式ドキュメント](https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/cloudwatch_architecture.html)
* [Systems Manager 公式ドキュメント](https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/session-manager.html)

### (5)セキュリティ

ミニPCのセキュリティについてですが、まず自宅でサーバを24時間稼働させること自体がわりかし危険です。
ファイヤーウォール設定 + SSHのデフォルトのポート番号変更で不正アクセスされることはまず無くなりますが、あくまで自己責任の範疇での利用になります。
~~自宅DMZを用意している変態も世の中にはいるので一概にミニPCが脆弱になりやすいとも言えないですが、例外かと思うので除きます...。~~

その点EC2の場合はパブリックIPを付与すれば外部からアクセス可能になるという点は同じですが、
元々AWS側で用意されている機能を利用すれば、セキュアな環境を比較的容易に作れます。
またもし不正アクセスが発生した場合でも環境丸ごとの再作成が容易なため、
そういった点でもEC2側が強いと言えるでしょう。


| 項目                 | ミニPC             | EC2                                  |
|:--------------------|:-------------------|:-------------------------------------|
|	セキュリティ設定   | OS内のファイヤーウォール設定など  |	セキュリティーグループ、NACL、WAF、Shieldなど |

* [firewalld (RHEL)](https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/8/html/securing_networks/using-and-configuring-firewalld_securing-networks)
* [UFW (Ubuntu)](https://wiki.ubuntu.com/UncomplicatedFirewall)
- [セキュリティーグループ 公式ドキュメント](https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/vpc-security-groups.html)
- [NACL 公式ドキュメント](https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/vpc-network-acls.html)
- [WAF 公式ドキュメント](https://docs.aws.amazon.com/ja_jp/waf/latest/developerguide/what-is-aws-waf.html)

<a id="#Chapter3"></a>

# 3.利用用途について
比較観点について要約すると以下の通りとなります。
コストに関してはミニPCが有効、それ以外は基本EC2のほうが優れていると言えます。

| 項目                     | ミニPC         | EC2       |
|:-------------------------|:--------------|:----------|
|	コスト                    | 〇            |	△       |
|	パフォーマンス             | -             |  -       |
|	スケーラビリティ/可用性     | △            |	〇      |
|	セットアップと管理の容易さ  | △            | 〇       |
|	セキュリティ               | △            | 〇       |


<a id="#Chapter4"></a>

# 4.最後に
この手の話をすると結局はオンプレ vs クラウドの構図になってしまい、
クラウドがかなりお手軽に利用できることもあり「とりあえずクラウドにしとけばよくね？」的な意見が散見されます。

確かに本番環境での利用という意味ではクラウド一強かと思いますが、
自宅で開発する用途であればミニPC一強だと考えています。
特に個人開発ではコストが一番のネックだったりするので...。

という訳で皆さんもミニPCで最強の自宅開発環境を作りましょ？
そしてゆくゆくは夢のお家Kubernetesを目指しましょう。