え、そんなに!?意外と知らないAWSでお金がかかるポイント5選!!

154件のシェア(すこし話題の記事)

「でかいインスタンスを建てればAWSの料金が高くなっていく…。」
「大量購入すればお金が飛んでいく…。」

こんにちは(U・ω・U)
AWS事業部の深澤です。

おそらく皆さん、上記のようなお話はご存知かと思います。弊社のエンジニアにもカジュアルに「AWSでお金いっぱい溶かすならどうしますか?」と聞いたところ、「リザーブドインスタンスをまとめ買いする」と即答されました。

しかしAWSには豊富なサービスがあり、料金の掛かり方も多様です。使い方を一歩間違えるとお金がどんどん溶けていくと行った事態になりかねません。そこで、今回は意外と気が付かない料金を調査したのでまとめてみました!

注意

  • 今回ご紹介するものは実際に検証したものではありません。AWSの料金表を確認して、実際このくらい溶けるのではと計算した理論値になります。
  • 日本円のレートは執筆時現在のレートとなります。
  • リージョンは東京です。
  • それぞれがどういったサービスなのか、細かい話は割愛します。
  • ここで取り上げたサービスが高いとか悪いとかそういうことを言いたいブログではありません。やはりサービスなので使い方によってはコストダウンになります。そのサービスを利用することによってかかるコストと削減できるコストの費用対効果をよく検討してからサービスをご利用ください。
  • 本ブログの検証は大変危険です。よくお財布を確認してから検証してください。

リージョン間通信

AWSではわずかではありますが、通信を行うと課金が発生します。AWSから外への通信は$0.114(12.33円)/GB、リージョン間通信の場合は$0.09(9.74円)/GB、同一リージョンであっても異なるAZへの通信は$0.01/GB(1.08円)です。
Amazon EC2 料金表
課金のイメージ的にはこちらの画像が理解しやすいかと思います(記載されている料金は古い料金となっていますのでご注意ください)。

AWSから外への通信はもっとも高いですがよっぽど尖った使い方をしない限り料金ははねません。意外と見落としがちなのがリージョン間通信です。リージョン間の通信はEC2だけの話ではなく、全サービス間通信の合計です。EC2やECS上で稼働させていたアプリケーションのログを他リージョンのS3やCloudWatch logsへというのも課金対象です。それでは次の項目で実際に試算してみましょう。

CloudWatch logs

執筆現在、料金は次のようになっています。
Amazon CloudWatch の料金

収集 (データの取り込み) 0.76USD/GB
保存 (アーカイブ) 0.033USD/GB

注目すべきはデータの取り込みにかかる料金です。これはCloudWatch logsに送ったログのデータ量が課金対象となります。例えばこんな感じのPythonスクリプトを実行するコンテナを作ってみました。

import logging

def main():
    logging.basicConfig(level=logging.INFO, format='%(asctime)s %(levelname)s %(name)s :%(message)s')
    logger = logging.getLogger(__name__)
    logger.setLevel(logging.DEBUG)
    for i in range(100):
        logger.debug('hello, world')

if __name__ == "__main__":
    main()

これで大凡5KBのログを吐きます。FargateのRun Taskで実行したところ、コンテナの起動時間を含めて1分40秒ほどで実行できました。このうち、処理は1秒以下で完結したので、コンテナの起動に1分40秒かかることが分かりました。上記スクリプトのループ数を100から6000000に上げると実行に3分46秒かかるようになり、出力するログが5KBから303MBになりました。お手軽モンスターアプリケーションの完成です。

FargateのRun Taskでは緩和なしで最大10コンテナ並列処理が行えます。なので上記スクリプトを10並列で走らせると実行には大凡5分30秒くらいかかり合計で3GBほどのログを出力するRun Taskアプリが完成します。これをStep Functionsに乗せるなどして回しまくると1時間で30GBほどログを出力する計算となり、$22.8(2466.62円)も溶ける計算になります。ここで先ほどのリージョン間通信が発生したとすると、30GB x $0.09なので$2.7(294.66円)が追加で溶けます。たった1時間で3000円近くも溶けると考えると恐ろしいロジックですね。今回検証で使ったようなアプリケーションを走らせることはないと思いますが、気をつけたいところです。

ACM(プライベートCA)

これは弊社の西澤が以前検証してブログに書いています。
[新機能]ACM Private Certificate Authorityを試してみた

大事なのはここです。

ACMプライベートCA1つにつき、$400/月の料金がかかります。(一度作成すると、30日間の無効化期間を経なければ削除できない仕様のようですのでご注意ください)

ちょっと試したいからとうっかり作成したあかつきには$400(43274円)の請求が確定です。えらいことになってしまうので、皆さんこちらのサービスを検証される際にはお財布を確認してからにしましょう!

2019年11月7日追記:
こちらですが、2018年6月に削除が可能となっていることを確認しました。
プライベート CA の削除
訂正すると共に、お詫び申し上げます。
ちなみに料金ですが、CAの作成、削除の日に応じて日割りで計算されます。例えば10日間だけ建てたとすると月$400の日割りで約$133(14456円)ほどかかる事になります。侮れない金額ですね。
AWS Certificate Manager の料金

CloudFront

料金を節約したいのでCloudFrontを導入するという話はよくありますが、CloudFrontも無料ではありません。まずは課金対象となるポイントをおさらいしましょう。
Amazon CloudFront の料金

  • インターネットへのリージョンデータ転送アウト (GB単位)
    • $0.114(10TBまで)
  • オリジンへのリージョン内データ転送アウト (GB単位)
    • $0.060
  • HTTP メソッドのリクエスト料金 (1万件あたり)
    • HTTPアクセス: $0.0090
    • HTTPSアクセス: $0.0120

例えば、ちょっと動画のせるだけとかの軽い気持ちで10MBほどの動画ファイルをCloudFrontでキャッシュさせて1万件ほどのアクセスがきたとすると、

  • インターネットへのリージョンデータ転送アウト
    • $11.4(1233.31円)
  • HTTP メソッドのリクエスト料金
    • $0.0120(1.30円)

    で、合計$11.412(1234.61円)が溶けます。キャッシュが切れてオリジンサーバへのアクセスが発生した場合にはこれに追加で料金が発生しますね。仮にこれが1日で発生したとすると1ヶ月で$342.36(37038.22円)が溶ける計算になります。意外とお金が溶けてしまうので注意しましょう!

ちなみにCloudFrontのもう一つ要注意なサービスがあり、「専用 IP カスタム SSL」と呼ばれるものがあります。これは複数証明書のサイトを構築した際に、クライアントブラウザ側でSNIをサポートしていない場合に、専用IPを証明書とマッチングさせる機能です。これのコストは以下の通りとなっています。
https://aws.amazon.com/jp/cloudfront/pricing/

各独自 SSL 証明書ごとに、毎月 600 USD をお支払いいただきます。

恐ろしい…。プライベートCAより高いですね。ちなみに日割りの場合ですが。

たとえば、6 月に 24 時間 (つまり 1 日) だけ、1 つ以上の CloudFront ディストリビューションにカスタム SSL 証明書を関連付けていた場合、6 月におけるカスタム SSL 証明書機能の使用料金の合計は、(1 日/30 日) × 600 USD = 20 USD となります。

だそうです。皆さん、気をつけましょう。

Athena

Athenaの料金を見てみましょう。

Amazon Athena の料金

スキャンされたデータ 1 TB あたり 5.00USD

単純ですが、結構危険な値段です。ログファイルは意外と溜まってしまうので気がつかないうちに数十TBほどにログが膨れ上がり、うっかりフルスキャンでもかけようものなら一瞬でお金が溶けます。仮に圧縮されていない10TBのデータに対してフルスキャンするとそれだけで$50(5409.25円)が無くなります。使い方には要注意です。

感想

いかがでしたでしょうか!調べてみると意外とお金がかかるなぁと思いつつも、これだけパワーのあるサービスをこの価格で提供できるAWSってやっぱりすごいんだなと思いました。最初にお伝えした通り、ここで紹介したから高くて悪いサービスということではありません。費用対効果を考えて使用すればコストダウンに繋がるものばかりです。用法用量を守って使いましょう。

また、請求が来てから気づくのではなく、監視しておいて早めに異変を検知できるようにしておきたいですよね!いくつか参考になりそうな弊社ブログをピックアップしましたので良かったら参考にしてみて下さいm(_ _)m
AWSサービス毎の請求額を毎日Slackに通知してみた
支払アカウントからリンクアカウントのBilling Alertを設定する

以上、深澤(@shun_quartet)でした!