AWS初学者が「うっかり課金」されがちなポイントとその対策まとめ

#はじめに
はじめまして！！DMM WEBCAMPでメンターをしている@Yuji-Ishibashiと申します。
僭越ながら DMM WEBCAMP Advent Calendar のトップバッターを務めさせて頂きます。

みなさんAWS使ってますか？! AWSは便利なサービスがたくさんありますが、利用する上で気になってくるのはやはり**コストの面**ですよね。私はWEBCAMPでのメンター業務の中で、AWSの学習をしている際に、**うっかり課金されてしまった**という受講生の事例を何度か見てきました。今回はそのようなAWS初学者の方をなくしたい！！！と思いまして、**気づかずに課金されてしまうポイント**と**その対策**をまとめました。この記事で、少しでも多くのAWS初学者の方が課金のことを恐れずにAWSの学習を進めることが出来るようになれば嬉しいです。

#AWS無料枠について
AWSには無料枠が用意されており、その枠の範囲内であれば無料でAWSのリソースを利用することが出来ます。無料枠には3つの種類があり以下のように分類されます。

||12ヶ月無料枠|無期限無料枠|トライアル|
|:---|:-----:|:---:|:-----:|
|**期間**|12ヶ月間|無期限|有限|
|**開始条件**|AWSアカウント作成後| 対象サービスを利用 | 対象サービスの初回利用時 |

####12ヶ月無料枠
AWSアカウントを 新規作成した日から1年間有効な無料枠です。
例えば、EC2インスタンスを 750時間/月 無料で利用できるといったものがあります。
ただし、使用できるリソースについては制限がある事があり、EC2インスタンスの場合ですと
インスタンスタイプは t2.micro、OSは Amazon Linux 1,2等といった指定があります。

####無期限無料枠
こちらは無期限に無料でAWSリソース利用できる無料枠となっています。例えば、AWS Lambdaだと 100万リクエスト/月 が無料で利用できます。他には、AWS Well-Architected ToolやAmazon CloudWatchなどが AWSアカウントを利用している限り無料で利用できます。このような便利なサービスが無料とは驚きですよね。是非皆さんも利用してみて下さい。

####トライアル
これは、初めて該当のサービスを使う場合、一定期間だけ使える 無料利用枠です。実際に一定期間無料で使ってみる事で、サービスを利用する場合の費用が想定しやすいようになっています。「このサービス使ってみようかな……でもどれくらいの費用になるか分からなくて怖いな……」となっている場合は、1ヶ月無料トライアルを試す事で、サービスを体感しつつ費用感も掴める筈です。

###どのサービスがどのくらい無料で使えるの？
AWSのサービスについての無料利用枠とその制限は以下の公式ページにまとめられています。実際に自分が使うサービスにどのような無料利用枠があり、その制限にはどのようなものがあるのか確認する癖をつけるようにしましょう。
[AWS 無料利用枠]( https://aws.amazon.com/jp/free/?all-free-tier.sort-by=item.additionalFields.SortRank&all-free-tier.sort-order=asc)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/432145/3e8d59cc-f322-7dba-9ace-fde277939d61.png)


#うっかり課金されてしまうポイント(随時更新)
AWSの無料枠を利用しているつもりでも、うっかり課金されてしまうケースがあります。ここからはそういったケースを紹介していきたいと思います。
（もしここにあるケース以外で、うっかり課金されてしまったという方がいらっしゃいましたら、コメントで教えていただけると嬉しいです。）

###①無料枠ではないキャパシティーのリソースを利用してしまう
先ほどの無料枠の紹介でもお伝えしたように、無料枠には制限があります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/432145/52e01e15-ac23-ed15-a784-81e696d93e69.png)
例えばRDSの場合だと上記のように無料枠は **db.t2.microのデータベースインスタンス**に限られています。これ以外のインスタンスサイズを選択してしまうと課金が発生しまうので、注意しましょう。RDSのデータベースを無料枠で作成する際には以下の点に注意するようにしましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/432145/77cda431-e300-f1bf-a630-849bd172fbe7.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/432145/cbb83126-a1ca-bb3e-329c-25d168f29ba0.png)

RDSの例を用いて説明しましたが、EC2,Lambda,S3等の他のサービスでもインスタンスサイズやキャパシティーユニット、ストレージのサイズなどで無料枠の対象外となるものが多くありますので、そういったリソースを利用する際には十分に気をつけるようにしてください。


###②使用していないEIPを解放しないまま放置してしまう
このケースが自分が遭遇したケースの中で一番多いです。EIPはEC2の動的に変わってしまうグローバルIPアドレス(パブリックIPアドレス）を固定するためのものです。
EIPがEC2にアタッチされていて、且つEC2が起動中の状態では、EIPに対する課金はないのですが、以下のようにEC2にアタッチされていない状態でそれを確保したままだと課金の対象になります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/432145/c34e2a49-6eb2-8efd-8126-2025e325c3c5.png)

新しいEIPの発行はすぐに出来ますので、EIPをEC2からデタッチし、それをすぐに使う必要がない場合には、そのEIPを解放するようにしましょう。EIPの解放は以下のように行います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/432145/256ead45-c1c3-ea0f-9cd6-717e7c71634c.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/432145/d4b70c5f-b770-0be3-5c12-dba4fe875b0f.png)


###③リソースを削除したつもりが違うリージョンに残っている
これは案外気づきづらい点かなと思います。学習用にAWSリソースを利用してから、しばらくして課金がされていることに気づき、課金されているリソースを探してみたら見当たらないといったケースがあります。例えば、自分では東京リージョンで作業していたつもりだったのに、間違えてオハイオリージョンにリソースを作成してしまっていたというような場合です。マネジメントコンソールの「実行中のインスタンス」等の表示はリージョンごとに異なりますので、常にどこのリージョンで作業しているか確認するようにしましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/432145/e738e11d-a527-43e2-dc69-dbb602b8703a.png)

###④スナップショットがバックアップとして残ってしまっている
EC2でサーバーを建てた際に共にEBSを使用するケースが多くあると思います。このEBSにはスナップショットというバックアップを作成する機能があります。EC2を削除した際に、そのEC2で利用していたEBSのバックアップとして、スナップショットが作成されており、気づかず残っているスナップショットに対して課金されてしまうケースがあります。EC2とEBSボリュームを削除した後に、不要なEBSスナップショットが残っていないか確認するようにしてください。EC2コンソールの左側の「スナップショット」から確認することができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/432145/4dcf0d31-a65a-8842-1c48-bbc289f72afe.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/432145/2675522e-c188-5e93-631b-eaba66f1c356.png)
またRDSのデータベースインスタンスに関しても同様のことが言えるので、データベースインスタンスの削除の際に関しても不要なスナップショットが残っていないか確認するようにしましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/432145/b9d67f4d-d522-11de-65b6-1db59c8ecf92.png)

###⑤停止したRDSが気づかぬ内に再起動されている(2019/12/3追記)
こちらは @Shodai-myv さんから情報提供頂きました。ありがとうございます。
RDSの仕様として、`Running`（起動中）でも`Stopped`（停止済み）でもストレージ料金がかかり、`Running`時は別途[時間あたり]でも料金がかかるというようになっています。

しかし`Stopped`の状態は最大で**７日間しか保たれず**、7日経過すると自動で`Running`になる仕様があります。気付かぬうちに起動していて[時間あたり]の費用もかかっていた・・・。など

この仕様がEC2などと違う部分で、知らないと余計に課金されてしまいます。
『Runningにする必要はないけど取っておきたい』などの場合はイメージ作成し、インスタンスを削除するなり自動で落とすようなスクリプトを書く必要があります。

###⑥無料枠のEC2を複数起動した際、そのEBSボリュームに対して無料枠を超えて課金されてしまう(2019/12/12追記)
こちらは @Koki-Taniguchi さんから情報提供頂きました。ありがとうございます。

無料枠のEC2インスタンスを作成した際には、EBSをルートボリュームとするEC2インタンスが作成されます。そしてデフォルト設定を変更しなければ、このEBSボリュームは8GiBでプロビジョニングされます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/432145/833144cb-ab2a-3453-83ca-e1665d9f447a.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/432145/d0ae3153-93dc-d50e-bb1d-fb643d64e21f.png)

EBSボリュームの無料枠(12ヶ月無料枠)は以下のように、30GiBまでとなっています。これを超えた場合は、1GB単位で月額課金されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/432145/a50cba07-c455-ba12-c462-982a4c0e2834.png)

またこのEBSボリュームに対する課金体系は、それがアタッチされているEC2インスタンスの**運用状況に左右されず**、データが維持される限りボリューム使用量が発生するというものになっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/432145/2c982d87-c66a-f0e1-64b0-478ba1bccd7a.png)

例えば、
学習用に、無料枠のEC2インスタンスをデフォルト設定で4つ作成(この時点でEBSボリュームは8x4 = 32GiB)。
↓
学習が終わったので、全てのEC2インスタンスを**停止**(ここで停止していれば課金されないと安心する)。
↓
しばらくして、無料枠外（今回の場合は32GiB - 30GiB = 2GiB）に対して月額課金されていることに気づく。
といったケースが考えられます。

EC2を使用する際は、その稼働時間ももちろんですが、アタッチされているEBSボリュームの合計が30GiBを超えていないことを確認するようにしましょう。


#課金への対策
AWSのコストを管理し、無駄な課金を発生させないためには以下のアプローチが有効です。

* AWSの無料利用枠とその制限を理解する
* 学習等で試験的に利用したリソースはすぐに削除するようにする
* Billing & Cost Management Dashboardを利用してコストを管理する。

今回はこの中で3つ目の「**Billing & Cost Management Dashboardを利用してコストを管理する。**」について詳しく説明します。

###Billing & Cost Management Dashboardを利用してコストを管理する。
AWSにはコストを管理するサービスが複数用意されています。そのサービスを管理する画面がBilling & Cost Management Dashboardというものです。表示するにはマネジメントコンソールでヘッダーのアカウント名をクリックし、「マイ請求ダッシュボード」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/432145/876cf1a2-5174-7f9a-7ca2-d30b0e6093bb.png)
Billing & Cost Management Dashboardは以下のような画面になっています。Billing & Cost Management Dashboard ページにアクセスすると、今月の初めから今日までのコストの概要や、サービス別の明細を確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/432145/2a665dfe-d89a-68fd-27a6-da649951abbb.png)

またこのBilling & Cost Management Dashboardの下部には、以下のように現在利用している無料利用枠サービスをどれだけ使用しているかを確認することが出来ます。(EC2の無料枠無くなりそうですね。。。)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/432145/dec4e7f6-a219-97fd-8370-0074a2496560.png)


またAWSは無料利用枠の上限に近づくとアラートメールを送信する機能を提供しています。この設定がされているか、以下の手順で確認してみてください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/432145/6be80679-5644-1eaf-40b4-29b6bc05e984.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/432145/bef397db-1bc1-283d-c156-e979b705738f.png)

### AWS Budgetsで請求額に対してアラートを設定する
上記で紹介した無料利用枠のアラートだけでは「無料利用枠以外」のアラートは設定されていません。例えば意図せずに無料枠以外のリソースを使っている場合にはアラートはこない設定になっています。
そこでAWS Budgetsを利用して請求額に対してアラートを設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/432145/3c31fdf5-f530-d91a-c643-781f789b0b6a.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/432145/630af75b-fc52-91e3-b8d3-4336918ed424.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/432145/c746fabf-6193-0084-0b96-e73e3d80b74c.png)
このような設定でBudgetsを設定すれば、予算額の設定した割合を超えた段階でアラートがくるので、気づかぬうちに無料枠以外で課金がされてしまっていたということが回避できます。今回は無料利用枠以外の以外を検知したいので、予算を0.1ドルに設定しましたが、予算100ドルなどにして、予算額の80%を超えた段階でアラートを送信するといった設定もできます。


#万が一不本意に高額請求されてしまったら
AWSで身に覚えのない利用に対して課金されてしまった場合、リソースを使ってしまっている可能性が高く、その場合には支払い義務が生じてしまうようです。しかしながら、実際に高額請求がきて、返金が行われている事例もあるようなので、まずはAWSのサポートに連絡するようにしましょう。

[AWS お問い合わせ](https://aws.amazon.com/jp/contact-us/?nc1=f_m)
[【返金】AWSを無料枠で契約して1年間放置したら13万円請求されてしまった話](https://higemura.com/service/aws/aws_support/index.html)
[初心者がAWSでミスって不正利用されて$6,000請求、泣きそうになったお話。]( https://qiita.com/mochizukikotaro/items/a0e98ff0063a77e7b694)
[AWSが不正利用され300万円の請求が届いてから免除までの一部始終](https://qiita.com/AkiyoshiOkano/items/72002409e3be9215ae7e)




#まとめ

初学者のうちに不本意に課金されてしまっては、AWSの楽しさが半減してしまいますよね。今回の記事により、一人でもそのような初学者がへり、楽しくAWSを学習出来るようになる方が増えれば嬉しいです。それでは皆さん良いAWSライフを！！！

#参考ページ
AWS公式にAWSの請求に関するページが多数ありますので、確認してみてください。

[AWS 無料利用枠]( https://aws.amazon.com/jp/free/?all-free-tier.sort-by=item.additionalFields.SortRank&all-free-tier.sort-order=asc)

[AWS 無料利用枠に関するよくある質問]( https://aws.amazon.com/jp/free/free-tier-faqs/
)

[AWS コストの管理　AWS 無料利用枠と AWS Budgets を使用]( https://aws.amazon.com/jp/getting-started/tutorials/control-your-costs-free-tier-budgets/)

[予想外の料金の回避](https://docs.aws.amazon.com/ja_jp/awsaccountbilling/latest/aboutv2/checklistforunwantedcharges.html)

[無料利用枠の使用中に、請求が発生しないようにする方法を教えてください。]( https://aws.amazon.com/jp/premiumsupport/knowledge-center/free-tier-charges/)

[ご利用中のお客様からのよくあるご質問](https://aws.amazon.com/jp/aws-jp-faq/customers/)