Amazon EC2 を開発環境として利用する料金

# 目的

自己学習用に Linux 系の開発環境を Amazon EC2 (以降は EC2 とする)でサクっと用意する。
次のような条件の場合に EC2 をどのように運用するのがいいのかを料金から検討する。

- 平日に2時間、休日に5時間で月に80時間ぐらいの利用時間を想定する。
- 固定 IP アドレスまたはホスト名による SSH アクセスが可能であること。
    - SSH アクセスの際に毎回 IP アドレスは確認したくない。
    - AWS Cloud9 のサーバーとして用意した EC2 を流用する。
- AMI は `Amazon Linux 2 AMI (HVM), SSD Volume Type` とする。
    - 主要な開発環境はインストール済みなので楽。
    - AWS Lambda の開発なんかも想定。


# EC2 関連の料金

EC2 を利用する上でかかる料金のまとめ。
リージョンは ap-northeast-1 (アジアパシフィック東京)の場合を想定。
料金は2019年3月14日時点のもの。

## インスタンス

必須。
使いそうなインスタンスタイプをピックアップ。

12か月間無料: t2.micro で 750[H] 
無期限無料: なし

|インスタンスタイプ|vCPU|メモリ|オンデマンド料金[USD/1H]|スポット料金[USD/1H]|割引率|
|:-----------------|:--:|------:|--------:|--------:|-------:|
|t3.nano           | 2  |0.5 GiB|   0.0068|   0.0020|     70%|
|t3.micro          | 2  |1.0 GiB|   0.0136|   0.0041|     70%|
|t3.small          | 2  |2.0 GiB|   0.0272|   0.0082|     70%|
|t3.medium         | 2  |4.0 GiB|   0.0544|   0.0164|     70%|
|t2.nano           | 1  |0.5 GiB|   0.0076|        -|      -%|
|t2.micro          | 1  |1.0 GiB|   0.0152|   0.0046|     70%|
|t2.small          | 1  |2.0 GiB|   0.0304|   0.0091|     70%|
|t2.medium         | 2  |4.0 GiB|   0.0608|   0.0182|     70%|
|m5.large          | 2  |8.0 GiB|   0.1240|   0.0349|     72%|
|m4.large          | 2  |8.0 GiB|   0.1290|   0.0333|     75%|

※m4.large の ap-northeast-1d は 0.0396 USD/1H で緩やかに価格上昇中。

リザーブドインスタンスは t2.micro で36ヶ月前払いであれば 0.007[USD/1H] 程度。


## Amazon Elastic Block Store

必須。
インスタンスの起動には最低 8 GB が必要。

12か月間無料: 30[GB]
無期限無料: なし

- Amazon EBS 汎用 SSD (gp2) ボリューム
    - 0.120[USD/1GB・1M] = 0.00016[USD/1GB・1H]
        - プロビジョニングされたストレージ 1 GB の月額料金が 0.12 USD。


## Elastic IP アドレス

固定 IP アドレスが必要な場合のみ。

12か月間無料: なし
無期限無料: なし

- 実行中のインスタンスと関連付けられていない Elastic IP アドレス: 0.005[USD/1H]
- 実行中のインスタンスと関連付けられている Elastic IP アドレス: 0.000[USD/1H]

※IP アドレスを追加する場合は関連付けの有無にかかわらず 0.005[USD/1H] が必要。


## Route53

12か月間無料: なし
無期限無料: なし

ホスト名でアクセスしたい場合のみ。
すでに独自ドメインを Route53 で運用中であれば、EC2 のための追加費用は不要。
DNS の A レコードに EC2 に割り当てられた IP アドレスを設定することでホスト名によるアクセスが可能になる。

- Route53 の Hosted Zone: 0.5[USD/1M]
- .comドメイン: 12.0[USD/1Y] = 1.0[USD/1M]


## 転送量

必須。
ただし GB あたりの料金なので変な使い方をしなければ気にする必要はなさそう。

12か月間無料: なし
無期限無料: なし

|方向|料金[USD/GB]|
|:----------------|-----:|
|インターネット⇒EC2|0.000|
|EC2⇒インターネット|0.114|
|EC2⇒他リージョン|0.090|
|EC2⇔同リージョン|(*1) 0.010|

*1：条件次第で無料。

> 同じ AWS リージョン内のアベイラビリティーゾーンをまたいだ、または VPC ピアリング接続間の Amazon EC2、Amazon RDS、Amazon Redshift、Amazon DynamoDB Accelerator (DAX)、Amazon ElastiCache インスタンス、または Elastic Network Interface で「受信 (イン)」/「送信 (アウト)」されるデータの転送料金は、各方向 0.01 USD/GB です。
> 
> IPv4: パブリックまたは Elastic IPv4 アドレスから「受信 (イン)」/「送信 (アウト)」されるデータ転送料金は各方向 0.01 USD/GB です。
> IPv6: 異なる VPC 内の IPv6 アドレスから「受信 (イン)」/「送信 (アウト)」されるデータ転送料金は各方向 0.01 USD/GB です。
> 
> 同じ アベイラビリティーゾーン内の Amazon EC2、Amazon RDS、Amazon Redshift、Amazon ElastiCache インスタンスと Elastic Network Interfaces 間のデータ転送は無料です。VPC ピアリングを用いたデータ転送については上記をご覧ください。
> 
> 同じ AWS リージョン内の Amazon S3、Amazon Glacier、Amazon DynamoDB、Amazon SES、Amazon SQS、Amazon Kinesis、Amazon ECR、Amazon SNS または Amazon SimpleDB と Amazon EC2 インスタンス間のデータ転送は無料です。PrivateLink エンドポイント経由でアクセスした AWS サービスへのアクセスには、こちらで説明する標準の PrivateLink 料金がかかります。
> 
> 同じ AWS リージョン内での Amazon Classic および Application Elastic Load Balancers からプライベート IP アドレスを用いて、EC2 インスタンスとロードバランサー間で「受信 (イン)」/「送信 (アウト)」されるデータの転送料金は無料です。


# 費用計算

１ヶ月は750時間で計算。

## パターン１: オンデマンド＋固定 IP アドレスなし

EC2 はオンデマンドインスタンスを使いたい時だけ起動する。
EBS は削除しない。
IP アドレスの変化は手動対応。
AWS Cloud9 の Environment settings で `Create a new instance for environment (EC2)` を選択する場合はこのパターンになる。

- 固定費: 0.960[USD]
    - EBS 8GB: `0.12[USD/1GB・1M] * 8[GB] * 1[M] = 0.960[USD]`
- 変動費: 1.216[USD]
    - 平日 2H 休日 5H 月 80H で起動する。
    - t2.micro オンデマンド: `0.0152[USD/1H] * 80[H] = 1.216[USD]`
- 合計: 2.176[USD]

12ヶ月無料枠の場合: 0.000[USD]


## パターン２: オンデマンド＋固定 IP アドレス

EC2 はオンデマンドインスタンスを使いたい時だけ起動する。
EBS は削除しない。
IP アドレスは固定。

- 固定費: 0.960[USD]
    - EBS 8GB: `0.12[USD/1GB・1M] * 8[GB] * 1[M] = 0.960[USD]`
- 変動費: 4.566 USD/1M
    - 平日 2H 休日 5H 月 80H で起動する。
    - t2.micro オンデマンド: `0.0152[USD/1H] * 80[H] = 1.216[USD]`
    - Elastic IP アドレス: `0.005[USD/1H] * (750[H] - 80[H]) = 3.35[USD]`
- 合計: 5.526[USD]

12ヶ月無料枠の場合: 3.350[USD]


## パターン３: オンデマンド＋常時起動

EC2 をオンデマンドインスタンスで常時起動する。
IP アドレスは固定。
∵インスタンス起動中の Elastic IP アドレスは無料。

- 固定費: 0.960[USD]
    - EBS 8GB: `0.12[USD/1GB・1M] * 8[GB] * 1[M] = 0.960[USD]`
    - Elastic IP: `0.00[USD/1H] * 750[H] = 0.000[USD]`
- 変動費: 11.400[USD]
    - t2.micro オンデマンド: `0.0152[USD/1H] * 750[H] = 11.400[USD]`
- 合計: 12.360[USD]


## パターン４: リザーブド＋常時起動

EC2 をリザーブドインスタンスで常時起動する。
IP アドレスは固定。
∵インスタンス起動中の Elastic IP アドレスは無料。

- 固定費: 5.738[USD]
    - EBS 8GB: `0.12[USD/1GB・1M] * 8[GB] * 1[M] = 0.960[USD]`
    - Elastic IP: `0.00[USD/1H] * 750[H] = 0.000[USD]`
    - t2micro リザーブド: `36ヶ月分前払い 172[USD] ⇒ 1月あたり 4.778[USD]`
- 変動費: 0.000[USD]
- 合計: 5.738[USD]


## パターン５: オンデマンド＋独自ドメイン

EC2 はオンデマンドインスタンスを使いたい時だけ起動する。
EBS は削除しない。
独自ドメインによるホスト名でのアクセス。

- 固定費: 2.460[USD]
    - EBS 8GB: `0.12[USD/1GB・1M] * 8[GB] * 1[M] = 0.960[USD]`
    - ドメイン: `1.0[USD/1M] * 1[M] = 1.0[USD]`
    - Hosted Zone: `0.5[USD/1M] * 1[M] = 0.5[USD]`
- 変動費: 1.216[USD]
    - 平日 2H 休日 5H 月 80H で起動する。
    - t2.micro オンデマンド: `0.0152[USD/1H] * 80[H] = 1.216[USD]`
- 合計: 3.676[USD]


## パターン６: スポット＋独自ドメイン

EC2 はスポットインスタンスを使いたい時だけ起動する。
EBS ボリュームは2種類。
・ルート用: インスタンス削除時にボリュームも削除する。
・データ用: インスタンス削除時にボリュームは削除しない。
独自ドメインによるホスト名でのアクセス。

- 固定費: 1.740[USD]
    - EBS 2GB: `0.12[USD/1GB・1M] * 2[GB] * 1[M] = 0.240[USD]`
    - ドメイン: `1.0[USD/1M] * 1[M] = 1.0[USD]`
    - Hosted Zone: `0.5[USD/1M] * 1[M] = 0.5[USD]`
- 変動費: 0.470[USD]
    - 平日 2H 休日 5H 月 80H で起動する。
    - t2.micro ホットスポット: `0.0046[USD/1H] * 80[H] = 0.368[USD]`
    - EBS 8GB: `0.00016[USD/1GB・1H] * 8[GB] * 80[H] = 0.1024[USD]`
- 合計は 2.210[USD]


### 課題

- データ用 EBS のアタッチ＋マウントが面倒。
    - インスタンス作成のオプションに既存 EBS ボリュームをアタッチするオプションはない。
- DNS の A レコードを更新が面倒。
    - EC2 の IP アドレスは起動のたびに変化する。
    - マネジメントコンソールで EC2 の IP アドレスを確認して、Route53 で A レコードを更新して。。。
- AWS Cloud9 のインストール。
    - AWS Cloud9 のデータは SSH ユーザーの home ディレクトリに作成される。
    - home ディレクトリが存在するルート用の EBS は毎回削除される。
    - データ用 EBS にインストールしておいて使いまわせないか？


# EC2 の運用戦略

## Elastic IP アドレス vs 独自ドメイン

長期的な運用を考えると同時ドメインの方が安い。
既に独自ドメインを持っているので独自ドメインを使うパターンでいく。


## オンデマンド vs スポット vs リザーブド

リザーブドインスタンスも結構安いがそこまでがっつり使わない。
インスタンスタイプを変えたくなる可能性もあるのでリザーブドはNG。

安さを優先したいのでオンデマンドよりもスポット！！。


## 結論

「パターン６: スポット＋独自ドメイン」で運用する。


# 次回

次回は「スポット＋独自ドメイン」で EC2 のインスタンスを起動する際の手順をまとめる。
＜ここにリンク予定＞