AWS12ヶ月無料利用期間が終わるとポートフォリオ(Railsアプリ)の運用にいくらかかるのか調べた

未経験エンジニア転職活動を行うにあたり、ポートフォリオのRailsアプリのインフラにAWSを採用しました。
AWSアカウントを取得して1年が経ち、12ヶ月無料利用枠の期限が切れて運用に毎月の料金がかかってしまうなあと思ったので、
現在どのサービスを利用していて今後どのくらい課金されるのかを調べてみました。

取り急ぎのため、ところどころ端折ってたりします。参考にならず、すみません。
間違いがありましたら恐れ入りますがご指摘いただけますと幸いです。

##ポートフォリオのインフラ構成図は下記の通り
![200909_インフラ構成図.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/589400/1c0f01d8-75bb-67c1-7d8c-f8cf2e032e4c.jpeg)


##月額料金明細を表示してみる
毎月の料金明細がありますので、それをチェックしてみることにします。

①[Billing Management Console](https://console.aws.amazon.com/billing/)を開きます。
![スクリーンショット 2021-02-03 19.14.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/589400/37d76cbd-d7af-c293-2a2d-da02de7b399b.png)

②左ナビゲーションBillingの「請求書」をクリック。
![スクリーンショット 2021-02-03 19.21.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/589400/0ffb8552-1ce4-2b65-b616-2aca2ef51a05.png)

その月にどのサービスでいくら課金されたかが確認できます。
（月のアクティビティが終了しないとその月の最終額は表示されません。）
下記画像でほぼ全ての項目が$0.00になっていますが、私の無料期間は終わりを迎えましたのでここからどんどん課金されます。
![スクリーンショット 2021-02-03 19.26.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/589400/339590f5-41e4-6fb0-55d5-08e73533a65a.png)

##料金明細内の項目について確認してみる

###CloudWatch
AWSの各種サービス使用状況を監視してくれるサービス。
使用状況に応じてアラームを鳴らしてくれる等の設定ができるようです。
AWS公式によると
「Amazon CloudWatch に初期費用や最低利用料金はかかりません。支払いは従量課金制です。その月に使用した分のみ、月末にお支払いいただきます。」とあります。
今のところCloudWatchに特別な設定は行っていないはずだけど、なんで表示されたんだろう・・・。
便利なサービスとのことなので今後活用できればと思ってます。今のところは課金されないはず。

###Data Transfer
データ転送のこと。
AWS間の通信(例: EC2 ⇄ RDS)では、同じリージョンであればデータ転送による課金はありません。
(リージョンの異なるサービス間でのデータ転送には課金されます。)

**AWSからのアウトバウンド通信(例: EC2 → インターネット)には課金されます**。
料金については下記リンク先に「EC2 および S3 データ転送の料金表」がありましたが、
データ転送量が1GB/月 で収まれば0.000USドル、
データ転送量が1GB〜9.999TB/月 になると**転送量1GBあたり0.114USドル(約11.97円)となります**。

[AWS データ転送料金の値下げ – 値下げ幅は日本向けで最大 34%、オーストラリア向けで最大 28%](https://aws.amazon.com/jp/blogs/news/aws-data-transfer-price-reductions-up-to-34-japan-and-28-australia/)

多くのPV数が想定されない転職活動用ポートフォリオであれば、データ転送による課金はなさそうです。
画像が多く、PV数があるサイトではデータ転送量が多くなる(=課金される)ため、
キャッシュとか画像容量を考慮する必要があるようです。

※下記にてEC2のデータ転送量を調べる方法が紹介されていました。
[EC2インスタンス個別のデータ転送量(DataTransfer-Out-Bytes)の調べ方](https://hacknote.jp/archives/54812/)

###Elastic Compute Cloud(EC2)
仮想サーバー。
無料利用枠には1年間毎月750時間分のLinux他t2.microインスタンスが含まれていました。
**無料期間が終了すると自動でオンデマンドという料金プランに切り替わります**。
(利用している時間に応じて秒単位で料金が発生する標準的な課金体系。)

私が使用しているEC2インスタンスタイプは**t2.micro**でしたので、
下記リンク先の料金表より、**0.0152USドル/時間(1時間につき約1.6円)の課金となります。**
[Amazon EC2 オンデマンド料金](https://aws.amazon.com/jp/ec2/pricing/on-demand/)

EC2インスタンス(t2.micro)を1ヶ月動かしておくと1.6円×24時間×30日=**1152円かかることがわかりました**。

※他の料金プランもあるとのことです。→ [Amazon EC2 の料金](https://aws.amazon.com/jp/ec2/pricing/)

###Elastic Block Store(EBS)
EC2の項目を展開してみるとElastic Block Storeという欄がありました。
EC2仮想サーバーの記憶領域は、サーバーを停止してしまうと自動的に初期化が行われてしまうため、
それとは別に用意するのがEBSという記憶領域で、EC2インスタンスにアタッチすることで用いられます。

私が使用しているEBSボリュームタイプは**汎用SSD(gp2)**でしたので、
下記リンク先の料金表より、**0.12USドル/1GB(用意したストレージ1GBにつき約12.63円)の課金となります**。
[Amazon EBS の価格](https://aws.amazon.com/jp/ebs/pricing/)

ストレージを使用しているか否かにかかわらず、ストレージの合計量に基づいて料金がかかるそうで、
私は8GBストレージのEBSボリュームを使用していたので、12.63円×8GB=**101.04円かかることがわかりました**。
またスナップショット(EBSボリュームのデータをS3にバックアップ)を利用した場合、保存されるデータの容量によって課金されます。

参考: [請求書に記載されている Amazon EBS ボリュームの料金はどのように計算されているのですか?](https://aws.amazon.com/jp/premiumsupport/knowledge-center/ebs-volume-charges/)

###Elastic Load Balancing(ELB)
ロードバランサーのこと(集中するトラフィックを分散し、サービスの稼働を安定させるもの)。
複数のサーバーにトラフィックを分散させたり、その他メンテナンスや障害対応をしやすくする設定ができますが、
**私はELBにSSL証明書を設定するためだけに使用していました**。
(アプリをSSL通信させるために、AWSでSSL証明書を作成してそれをELBに設定するという手法。)
インフラ構成図ではALB(Application Load Balancer)となっていますが、ELBはALBを含むロードバランシングサービスの総称です。

下記リンク先を見ると、ELB各サービスは使用した分のみ料金が発生し、
ALBに関しては「**ALBが実行される時間に対して1時間単位または1時間未満で、また時間ごとのロードバランサーキャパシティーユニット(LCU)使用量で課金されます。**」とあります。
[Elastic Load Balancing 料金](https://aws.amazon.com/jp/elasticloadbalancing/pricing/)

どういう事かというと、
①ALBが起動している時間に応じて発生する料金(**0.0243USドル/時間**)
②ALBにどのくらい接続したか(LCU時間)による料金(**0.008USドル/LCU時間**)
**上記①②の合計額が請求されるという事になります**。

LCUに関してはごちゃごちゃしててよくわからなかった(すみません)のですが、私の場合ALBを使っていないに等しいので、
月に約0.5LCU時間(0.004USドル)となっていました。ほぼ0円。
①は1時間あたり約2.56円の課金となるため、2.56円×24時間×30日=**1843円かかってしまいます**。

###Relational Database Service(RDS)
データベースサービス。
無料利用枠には1年間毎月750時間分のdb.t2.microデータベース使用と20GBのデータベースストレージが含まれていました。
**無料期間が終了するとEC2同様、自動でオンデマンドという料金プランに切り替わります**。

私が使用しているRDSデータベースエンジンは**MySQL db.t2.micro**でしたので、
下記リンク先の料金表より、**0.026USドル/時間(1時間につき約2.74円)の課金となります。**
[Amazon RDS の料金](https://aws.amazon.com/jp/rds/pricing/)
※db.t2.microは「旧世代のインスタンス」から確認できます。


また、**用意しているストレージに対しても毎月0.138USドル/GB(1GBにつき毎月14.52円)課金されます**。
私は20GBのストレージを用意していたので、14.52円×20GB=**290.4円の課金となります**。

MySQL db.t2.microを1ヶ月動かしておくと、2.74円×24時間×30日+290.4円=**2263円かかることがわかりました**。

(EBS同様、スナップショットを利用した場合、保存されるデータの容量によって課金されます。)

###Route 53
DNS(ドメインネームシステム。ドメイン名をIPアドレスに変換する役割)。
私は新規ドメイン名の取得もRoute 53で行いました。
ドメインごとにホストゾーンというものを用意し、そこにDNSレコード(「◯◯のIPアドレスは☓☓」といった設定)を追加していきます。
Route 53ではざっくり下記の通り課金されます。

①ホストゾーンの維持・管理に発生する費用
**ホストゾーン1つ毎に0.50USドル(約52.61円)の課金となります**。
(最初の25ホストゾーンまで。)

②DNSクエリ(問い合わせ)への応答時に発生する費用
**100万クエリ毎に0.40USドル(約42.09円)の課金となります**。
(最初の10億クエリまで。)
多くのケースでは料金がかさむことはないようです(私のアプリは毎月300クエリくらいでしたので0円)。
また、エイリアスと呼ばれるレコードへのクエリには料金がかからないそうです。
DNSの仕組み、Route 53上の設定は自分自身よく理解できていない箇所なので、またいつか学習します...いつか。

③取得したドメインの維持費用(年間)
Route 53経由で登録された各ドメイン名 or Route 53に転送された各ドメイン名に対して**年間維持費用**を支払います。
ドメインの維持費用は、トップレベルドメイン名（comやnetなど）によって異なります。
**私はcomを使用していたので年間維持費は12USドル(約1262円)でした**。
ちなみに、jpは90USドル(約9469円)もします。

詳しくはこちら→ [Amazon Route 53 料金表](https://aws.amazon.com/jp/route53/pricing/)

###Simple Storage Service(S3)
ストレージサービス。
無料利用枠には5GBの標準ストレージ、2万件のGetリクエスト(S3から取ってくる)、2000件のPutリクエスト(S3に書き込む)が含まれていました。
S3ではざっくり下記の通り課金されます。

①ストレージ容量
**1GB毎に0.025USドル(約2.63円)の課金となります**。
(最初の50TBまで。)
各データを使用頻度によってストレージクラス(各データの格納方式)指定してあげることで課金を抑えることもできるようです。

②リクエスト数
**PUT、COPY、POST、LISTリクエストは1000リクエスト毎に0.0047USドル(約0.49円)、
GETおよびその他すべてのリクエストは1000リクエスト毎に0.00037USドル(約0.039円)課金されます。**

ちなみに私はストレージ0.02GB使用、1万くらいのgetリクエスト、わずかなputほかリクエストでしたので、S3使用による課金は全く気にならない程度となりました。
[Amazon S3 の料金](https://aws.amazon.com/jp/s3/pricing/)

##まとめ
このまま何もせずいると**毎月5400円くらい**請求されることがわかりました。
毎月ケータイ代くらい請求されるのは嫌なので、ポートフォリオを公開する必要が無くなった際はすぐに運用停止しようと思ったのと(そもそも当初は無料期間を過ぎて公開するつもりなかったんですけどね…)、
何が起こるかわからないのでCloudWatchによる監視はすぐに行わないとなー…と。

料金を調べてみて、自分が使っているAWS各種サービスについての理解が少しだけ深まったのは良かったです。