OCIはAWSより安い！！

# はじめに

私事ですが、OCI Architect Associateに最近受かりました。
https://mylearn.oracle.com/ou/learning-path/japanese-become-an-oci-architect-associate-2024-/140905
ケースバイケースではありますが、OCIを使うメリットにリソースを使うための料金が安いことが挙げられます。
今回は簡単な構成を例に挙げ、どの程度OCIの料金がAWSと比べて安くなるか調べてみます。

# AWS例: EC2 2台,ALB

## 構成

|No|リソース|役割|
|---|---|---|
|1|インターネットゲートウェイ|インターネットゲートウェイ|
|2|Application Load Balancer(ALB)|ロードバランサー|
|3|EC2|踏み台サーバー|
|4|NATゲートウェイ|NATゲートウェイ|
|5|EC2|アプリサーバー|

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1474054/0f87e0fb-6c1c-af71-b552-7a8d7ef047d7.png)

## 個別料金

### インターネットゲートウェイ

無料です

### ALB

以下、URLより、料金の計算方法を引用します
https://aws.amazon.com/jp/elasticloadbalancing/pricing/

> Application Load Balancer が実行される時間に対して 1 時間単位または 1 時間未満で、また時間ごとのロードバランサーキャパシティーユニット (LCU) 使用量で課金されます。

> LCU は Application Load Balancer がトラフィックを処理するディメンションを測定します (1 時間あたりの平均)。以下の 4 つのディメンションを測定します。
・新しい接続: 1 秒あたりの新たに確立された接続の数。通常、接続ごとに多くのリクエストが送信されます。
・アクティブ接続: 1 分あたりのアクティブな接続の数。
・処理タイプ: ロードバランサーによって処理された HTTP(S) リクエストと応答のバイト数 (GB 単位)。
・ルール評価: ロードバランサーにより処理されたルールの数とリクエストレートの積。最初に処理される 10 個のルールは無料 (ルール評価 = リクエスト率 * (処理されたルールの数 - 無料分の 10 個のルール))。
使用量が最も高いディメンションにのみ請求されます。1 つの LCU には次のものが含まれます。

今回は処理タイプのLCUが最も高いディメンションであるとします。
リクエストと応答の合計処理バイト数は3MB/sとします。

その場合、
```
1時間当たりの合計処理バイト数=3MB/s * 3600s=10,800MB/h=10.8GB/h
1時間当たりのLCU=10.8
```

また、ALB自体の料金を追加して、

```
1時間当たりの料金=$0.025 + 10.8LCU * $0.008/LCU=$0.1114/h
1か月当たりの料金=$0.1114/h * 24h * 30d = $80.208
```

### 踏み台サーバー

他マネージドサービスを使うことで無料とすることもできますが、一応計算しておきます。
インスタンスタイプはt2.microとします。

```
EC2の料金=$0.0152/h * 24h * 30d = $10.944
```

また、EC2のブートボリュームとなるEBSが必要となります。
今回はgp3を使用し、IOPSとベースラインパフォーマンスの料金はかからないものとします。
EBSの容量は30GBとします。
https://aws.amazon.com/jp/ebs/pricing/

```
EBSの料金=$0.096/GB * 30GB = $2.88
```

踏み台サーバーには、アクセスしやすいようパブリックIPを使用します。

```
パブリックIPの料金=$0.005/h * 24h * 30d = $3.6
```

踏み台サーバーにかかる合計料金は$17.424です。

### NATゲートウェイ

NATゲートウェイ自体の料金と、データ処理料金がかかります。
https://aws.amazon.com/jp/vpc/pricing/
1か月のデータ処理量は10GBとします。

```
NATゲートウェイ自体の料金=$0.062/h * 24h * 30d = $44.64
データ処理にかかる料金=$0.062/GB * 10GB=$0.62
NATゲートウェイの合計料金=$44.64 + $0.62=$45.26
```

### アプリサーバー

インスタンスタイプはt2.largeとします。

```
EC2の料金=$0.1216/h * 24h * 30d = $875.52
```

EBSの容量は30GBとします。

```
EBSの料金=$0.096/GB * 30GB = $2.88
```

踏み台サーバーにかかる合計料金は$878.4です。

### データ転送量

インバウンドは無料です。
アウトバウンドはバイト数で課金されます。アウトバウンドの料金はインターネットへの送信（Outbound）と同一リージョン内での異なるAZへの送信（Intra-Region）で料金が分かれています。
今回は、アプリサーバー→ALBなので、Intra-Regionの料金がかかります。
送信バイト数は今回はALBで処理しているリクエストと応答のバイト数の半分とします。

```
1か月当たりのバイト数=(10.8GB/h * 24h * 30d) / 2=3,888GB
1か月当たりの料金=3,888GB * $0.01/GB * 2=$77.76
```
1か月当たりの料金は、AZにおけるインバウンドとアウトバウンドを合計しています。

## 合計料金

|No|項目|料金 USD|割合|
|---|---|---|---|
|1|ALB|80.208|7.3%|
|2|踏み台サーバー|17.424|1.6%|
|3|NATゲートウェイ|45.26|4.1%|
|4|アプリサーバー|878.4|79.9%|
|5|データ転送量|77.76|7.1%|
|6|合計|1099.052|100%|

# OCI例: インスタンス 2台,ロードバランサー

## 構成

|No|リソース|役割|
|---|---|---|
|1|インターネットゲートウェイ|インターネットゲートウェイ|
|2|ロードバランサー|ロードバランサー|
|3|インスタンス|踏み台サーバー|
|4|NATゲートウェイ|NATゲートウェイ|
|5|インスタンス|アプリサーバー|

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1474054/cfd326b5-543b-3d53-43a4-c832c9740ed0.png)

そもそもAWSとNATゲートウェイの構成が違いますね。主なリソースの数は変えていませんが、OCIではNATゲートウェイの扱いが異なります。
OCIでは、NATゲートウェイをパブリックサブネットに配置する必要はなく、VCN（AWSで言うVPC）とルート表に紐づいているだけで使うことができます。（NATゲートウェイにパブリックサブネットは必須ではありません）

インスタンスの料金については、ひとまずAWSの例と比較してCPUとメモリを同等に計算します

## 個別料金

### インターネットゲートウェイ

無料です

### ロードバランサー

以下URLより、ロードバランサーの料金を引用します
https://www.oracle.com/jp/cloud/networking/pricing/

```
ロードバランサー自体の料金=$0.0113/h
1時間当たりの帯域幅の料金=$0.0001/Mbps
```

※処理されたデータ量では課金されず、プロビジョニングされた内容によって課金されます。

今回は10Mbpsとしてプロビジョニングするとして、1か月の料金を計算します。

```
ロードバランサー自体の料金=$0.0113/h * 24h * 30d = $8.136
帯域幅の料金=$0.0001/Mbps * 10Mbps * 24h * 30d = $0.72
1か月当たりの合計料金 = $8.136 + $0.72 = $8.856
```

※ネットワークロードバランサーを使えば上記の料金は無料になります
OCIのロードバランサーがレイヤー4,7で動作するのに対して、ネットワークロードバランサーはL3,4で動作します（名前がややこしいですね。。）。今回はALB相当のサービスとして、OCIのロードバランサーを使用します。
https://docs.oracle.com/ja-jp/iaas/Content/NetworkLoadBalancer/overview.htm

### 踏み台サーバー

VM.Standard.A1.Flexを使用します。
Standardのシェイプは標準的なものになります。A1はArmベースであり、AMDベースよりも料金が安くなります。
また、Flexはフレキシブルシェイプであり、以下の特徴を持ちます。

>フレキシブル・シェイプは、VMの起動時またはサイズ変更時にOCPU数およびメモリー容量をカスタマイズできるシェイプです。フレキシブル・シェイプを使用してVMインスタンスを作成する場合、インスタンスで実行するワークロードに必要なOCPU数およびメモリー容量を選択します。ネットワーク帯域幅およびVNICの数は、OCPUの数に比例してスケーリングされます。この柔軟性により、ワークロードに一致するVMを構築できるため、パフォーマンスを最適化し、コストを最小限に抑えることができます。

今回は1 OCPU(=1 vCPU), メモリ1GBとします。
OCPUの課金とメモリの課金は別々に行われます。そのため、OCPU単価とメモリ単価が別々に設定されています。

https://docs.oracle.com/ja-jp/iaas/Content/Compute/References/computeshapes.htm
https://www.oracle.com/jp/cloud/compute/pricing/

```
1か月当たりのA1のOCPUの料金=$0.01/OCPU * 1OCPU * 24h * 30d=$7.2
1か月当たりのA1のメモリの料金=$0.0015/GB * 1GB * 24h * 30d=$1.08
インスタンスの料金=$7.2 + $1.08 = $8.28
```

インスタンスにはブートボリュームが必要となります。
今回はVPU=10とします。ストレージ容量は50GB（最小値）とします。
https://www.oracle.com/jp/cloud/storage/block-volumes/pricing/
コスト試算ツールからコストを算出します。
https://www.oracle.com/jp/cloud/costestimator.html

```
1か月当たりのブロックボリュームの料金=$2.13
```

踏み台サーバーには、アクセスしやすいよう予約済パブリックIPを使用しますが、無料です。
踏み台サーバーにかかる合計料金は$10.41です。

※A1インスタンスとブロックボリュームはAlways Freeリソースに該当します。
https://docs.oracle.com/ja-jp/iaas/Content/FreeTier/freetier_topic-Always_Free_Resources.htm

> すべてのOracle Cloud Infrastructureアカウント(無料か有料かに関係なく)には、アカウントの有効期間中、テナンシのホーム・リージョンに無料で使用できるリソースのセットがあります。

つまり、指定の範囲内の利用であれば無料で使えます。ただ、すでにリソースを大量に使っている場合、Always Freeを使い切っていることも多いです

### NATゲートウェイ

無料です。

### アプリサーバー

VM.Standard.E4.Flexを使用します。
今回は1 OCPU(=2 vCPU), メモリ8GBとします。

```
1か月当たりのE4のOCPUの料金=$0.025/OCPU * 1OCPU * 24h * 30d=$18
1か月当たりのE4のメモリの料金=$0.0015/GB * 8GB * 24h * 30d=$8.64
インスタンスの料金=$18 + $8.64 = $26.64
```

ストレージ容量は50GB（最小値）とします。

```
1か月当たりのブロックボリュームの料金=$2.13
```

踏み台サーバーにかかる合計料金は$28.77です。

### データ転送量

インバウンドは無料です。
アウトバウンドは最初の10TBは無料です。10TB以上になると、送信元の地域により料金が異なります。
https://www.oracle.com/jp/cloud/networking/pricing/

## 合計料金

|No|項目|料金 USD|割合|
|---|---|---|---|
|1|ロードバランサー|8.856|18.4%|
|2|踏み台サーバー|10.41|21.7%|
|3|NATゲートウェイ|0|0%|
|4|アプリサーバー|28.77|59.9%|
|5|データ転送量|0|0%|
|6|合計|48.036|100%|

# 料金の比較

|No|項目|OCIの料金 USD|AWSの料金 USD|OCI - AWS USD|
|---|---|---|---|---|
|1|ロードバランサー|8.856|80.208|-71.352|
|2|踏み台サーバー|10.41|17.424|-7.014|
|3|NATゲートウェイ|0|45.26|-45.26|
|4|アプリサーバー|28.77|878.4|-849.63|
|5|データ転送量|0|77.76|-77.76|
|6|合計|48.036|1099.052|-1051.016|

OCIの方が安いですね！

# おわりに

両者の課金方法を調べてみて、AWSはデータの使用量に応じて課金されるのに対し、OCIはプロビジョニングされたリソースに応じて課金されているように感じました。
プロビジョニングされた量とすると、使われていないリソースの課金が発生するので高くなるかと思っていましたが、OCIは無料で使えるものが多く単価も安いなと感じました。
これからも勉強します。