AWSで見積もりとって、他社サービスとも比較してみた!
目次[非表示]
- 1.はじめに
- 2.AWSのコスト体系
- 3.AWSサービスの見積もりを出してみる
- 3.1.AWSのアーキテクチャの構成について
- 3.2.EC2
- 3.3.RDS
- 3.4.ELB
- 4.Cognitoを例に他社との比較を行ってみる
- 4.1.CognitoとAuth0を比較
- 5.結論
- 6.終わりに
はじめに
divxエンジニアの日笠です。
今回のテーマはAWS、さらに言うと「お金」です。
AWSってどれくらいお金がかかるの?というお話です。
AWSのようなパブリッククラウドが身近になっています。パブリッククラウドはオンラインでの簡単な手続きだけですぐに使い始められるというメリットがある一方、AWSを例に取ると、200以上もサービスが存在しそれぞれ料金体系が設定されているため、実際いくらコストがかかるのか分かりづらいという問題もあります。
ただ、エンジニア目線で見ると、お客様とのコストに関する話は避けて通れないわけです。
またユーザー目線で見ても、AWSの導入を勧められたけど、どのくらいコストがかかるのか分からない。概算を示されたけど計算の根拠がよく分からない、AWSをインターネットで調べたら不当に高額請求された記事もあるし正直不安などなど、「お金」の話は重要な関心事です。
今回の記事では、一般の方にとっても重要な関心ごとである「お金」がテーマであるため、一般の方にも読んでいただける想定です。そのため難解な表現はなるべく避けます。
その上で、AWSの料金体系を把握し、いくつかの例を用いて、コストの見積を算出したいと思います。実際の画面も載せますので、興味のある方は一緒に計算してみてください。
最後に、「お金」の面を含めてAWSは他社サービスと比較して実際何がどう違うのか?を、最近ではwebサービスでほぼ不可欠となっている認証を例に、AWSのAmazon Cognito(以下、Cognito)というサービスと他社サービスを比較しようと思います。
AWSのコスト体系
まずは、そもそものAWSの料金体系を確認したいと思います。
基本的にAWSは従量課金制です。使用時間の計算による課金と共に、データの転送量による従量課金制を加え、各サービスで料金を細かく分ける方式をAWSは採っています。
従量課金制を採ることで、サーバー費用、ストレージ費用、通信費用それぞれが明確になる一方、各料金の計算が複雑で、実際に運用すると、思った以上にコストがかかる場合もあります。
結果として、クラウドでは、サーバーを過剰に稼働させたり、コストに見合わないサービスを利用するとコストは容易に膨らんでしまいます。システムに必要な要件を見極め、コストを最小限に抑える必要があるというのがAWSのそもそものコスト体系の特徴といえるでしょう。
以下では、AWSの代表的なサービスについて、料金体系を確認したいと思います。
EC2
https://aws.amazon.com/jp/ec2/pricing/
Amazon EC2(以下、EC2)とは、AWSクラウド上で仮想サーバーを提供する、AWSの代表的なコンピューティングサービスのことをいいます。このサービスを利用して作成された仮想サーバーのことをEC2インスタンスといいます。
EC2の料金の基本的な内訳は以下のようになっています。
- 料金体系・・・利用時間
- 料金の内訳・・・CPUに基づく1時間単位または1秒単位の時間料金
そして、EC2には料金プランが複数あります。基本となるのはオンデマンドインスタンスという一般の従量課金制の料金プランです。それとは別に長期間の利用を前提とした予約制により割引を受けることができる、リザーブドインスタンスという料金プランもあります。
オンデマンドインスタンスは、デフォルトの料金オプションです。リザーブドインスタンスの購入やスポットインスタンスの指定をしなければ、自動的にオンデマンドインスタンスとなります。
そしてリザーブドインスタンスはまとまって1年もしくは3年で契約をすることから割引を受けられること、スポットインスタンスはAWSクラウドでのスペアの計算容量で、オンデマンド料金と比べて、最大90%と大幅な値引きで利用できるという特性があります。
ただ、短期的なワークロード、中断できない予測不可能なワークロードをもつアプリケーションなどオンデマンドインスタンスの方が適している場面もあるため、オンデマンドインスタンスは、スポット環境よりも長く実行され、リザーブドインスタンスの適用に必要な時間よりも短いことが多いという場面に適していると言えます。
また、インスタンスサイズや秒単位の利用時間で値段が変わるため、いずれにせよ用途、必要な容量を明らかにすること、適切なサーバーの停止、運用中のEC2コストを定期的に観測することは必要であると言えます。
S3
https://aws.amazon.com/jp/s3/pricing/
Amazon S3(以下、S3)とは、高耐久、大容量のオブジェクトストレージサービスのことです。S3ではバケットという単位で作成し、このバケットに保管するオブジェクトを管理します。
S3の基本的な料金プランは以下のようになっています。
- 料金体系・・・利用量
- 料金の内訳・・・保存されたデータサイズに基づく料金
そして、S3は通常プランが、最初の50TB/月については0.023USD/GBですが、低頻度アクセスだとすべてのストレージにつき0.0125USD/GBかかります。滅多にアクセスすることのないログ管理に使われるS3 Glacier Deep Archiveだと、すべてのストレージにつき0.00099USD/GBとプランで大きく値段が異なります。
また、S3は保存されるデータのサイズに比例して料金が発生します。すなわち、監査証跡やアプリケーションログなどのデータがS3上に蓄積されている分だけコストとして計上されます。コスト肥大化の要因となるため、ライフサイクルルールなどを活用することで適切にデータの保持期限をコントロールする必要があります。
データベース
https://aws.amazon.com/jp/rds/aurora/pricing/
https://aws.amazon.com/jp/rds/mysql/pricing/
AWSではデータベースは、さまざまな用途に合わせて多彩なサービスが用意されています。代表的な例は、マネージド型リレーショナルデータベースサービスであるAmazon RDS(以下、RDS)や、RDSの一種ですがAWSが開発したAWS固有のデータベースサービスであるAmazon Aurora(以下、Aurora)が挙げられます。
これらは、コンピューティングサービスであるEC2と同様、CPU、メモリキャパシティサイズに基づく1秒単位の利用料金と、ストレージごとの料金もかかります。これら以外にもストレージに対するI/Oや、バックアップストレージなども料金対象になります。また、Amazon DynamoDBという別種類のデータベースだと、利用時間でなく読み込み書き込みのリクエスト数という利用料に基づいて課金されるため、サービスによってさまざまです。
利用する際には、自分達の利用用途を細かく照らし合わせていく必要があります。
ネットワーク
https://aws.amazon.com/jp/vpc/pricing/
ネットワーク系サービスはAmazon VPC(以下、VPC)に関連したサービスとインターネットからのリクエストを受け付ける際のサービスに大別されます。
VPC自体やルーティング、サブネット、セキュリティグループについて、利用料金は発生しません。
一方、NATゲートウェイやAWS Private Linkは、アベイラビリティゾーン単位で料金が発生します。
Amazon CloudFrontやAmazon API Gatewayは外部からのリクエスト数で料金が発生しますが、いずれも無料枠が存在します。
AWSサービスの見積もりを出してみる
AWS Pricing Calculator
https://calculator.aws/#/
(金額は、2022年6月現在を基準)
ここまでいったん、AWSの主要なサービスの料金概要を説明しました。しかし、AWSのサービス数はすでに200を超えています。また、実現したいことによって構成するアーキテクチャの組み合わせやサービス内容が異なることから、利用者にとっては毎月どのくらいの料金がかかるのか、把握しづらいのも現実です。
そこで、AWSには料金見積もりツールが用意されています。
AWS Pricing Calculatorは、2018年10月にリリースされた、AWSコストの見積もりツールです。ワークロードに沿ったコスト見積もりもできる仕様で、使用しようと考えている個別のサービスおよびサービス全体の見積りを出すことができます。以下では、AWS Pricing Calculatorで、AWSコストの見積もり方法について確認していきたいと思います。
AWSのアーキテクチャの構成について
たとえば、AWSでサイトを構築するとします。一番単純な例は、EC2インスタンス1台にサイトを動かすために必要なものを載せて動作させます。
この場合、管理が楽で価格は確かに安いのですが、サーバー1台構成のため、サーバーが落ちたらサイトも落ちます。
AWSには「AWS Well-Architected」フレームワークというものが存在します。このフレームワークでは、「運用の優秀性」「セキュリティ」「信頼性」「パフォーマンス効率」「コスト最適化」を5つの柱としています。結果として安全かつ高パフォーマンスで、耐障害性を備えた、効率的なインフラを構成できます。
そして上記の例に対しては、冗長構成(設備や装置を複数用意し、一部が故障しても運用を継続できるようにしたもの)を採ります。具体的には複数のアベイラビリティゾーンを用意して、それぞれにEC2インスタンス(仮想サーバー)とRDS(データベースサーバー)を用意します。そしてEC2インスタンスは高負荷に耐えられるようにオートスケーリング機能を持たせます。
EC2
それでは、EC2から見積りを出してみたいと思います。
EC2インスタンスについて、vCPUを「2」、メモリ(GiB)を「8」として、インスタンスサイズを「t4g.large」を選択、必要なインスタンス数は「2」と設定しました。
そして、EC2のストレージは一般的によく使われる「汎用SSD(gp2)」を選択。ストレージ量を「100」としてみました。
ここで、EC2インスタンスには複数の料金体系があります。長期契約なしのベーシックな従量課金である、オンデマンドインスタンスだと、毎月「126.14USD」の料金が発生します。
ここで、オンデマンドインスタンスではなく、EC2のところで説明したリザーブドインスタンス(一定期間継続して利用することを前提に、大幅な割引を受けられるサービスのこと)を利用することを前提とすると料金は以下のようになります。
予約期間を1年に設定するだけで、料金は一気に「79.42USD」に下がりました。もちろんEC2のサービス内容に変更はないです。
そして、予約期間を3年に変更すると
予約期間を3年にすると、さらに「54.60USD」まで下がります。もちろん、リザーブドインスタンスは、デメリットとしては、長期使用を前提とした割引なので途中でやめることができません。
しかし、長期利用を前提としている場合は明らかにオンデマンドインスタンスより料金が安いので、利用者のプランによって、どういうサービスを受けるかしっか選定しなければいけないということが見積もりで明らかになる1つの例と言えます。
RDS
次にデータベースについて見積もりを出したいと思います。
今回はAuroraを使用します。
AuroraはAWSが展開しているクラウド型のリレーショナルデータベースサービスです。
総読み取りスループットを向上させるために大量の読み取りができる高性能のデータベースです。
ノード数「2」、インスタンスは、「db.r5.large」を選択します。
ストレージ量を入力します。
EC2と同じように見積もりが算出されます。
ELB
次はELBについて見積もりを出したいと思います。
ELB(Elastic Load Balancing)とは高拡張性、高可用性の完全管理型サービスで、サーバーに集中するアクセス(トラフィック)を、複数のサーバーやネットワークに振り分けて負荷を分散する仕組みをいいます。
固定の料金「17.74USD」と
試しに、ALBとEC2間のデータ処理量を、一月「1000GB」、1秒あたりの平均接続数「3」とします。
こんな感じで、簡単に見積もりを取ることができます。そして使おうとするサービスを組み合わせて見積を累計して金額を出してくれます。
今回は3つしかサービスを計算しませんでしたが、他にもストレージサービスのS3やネットワーク関係などなど、アーキテクチャは用途に応じて追加されるので、金額は加算されます。
一方、EC2やAuroraのインスタンスサイズを任意に選びましたが、もっと小規模で済む場合は、その分値段は当然安くすみます。
結論としては、このような見積もりツールを使って予算を見比べながら、自身の行おうとするサービスの規模に応じて、必要なサービスをしっかり選定することが必要です。そして、運用開始後実は不要なサービスやプランを使っていたことが発覚したり、運用の仕方やサービス選定の改善でコストを削減することも可能です。
そのため、運用開始後は、AWS Cost Explorer(https://aws.amazon.com/jp/aws-cost-management/aws-cost-explorer/) や、AWSのコストと使用状況レポート (CUR)(https://aws.amazon.com/jp/aws-cost-management/aws-cost-and-usage-reporting/)を使用して、実際にかかっているコストを確認しながら運用の改善、サービスの選定を行う必要があると言えます。
Cognitoを例に他社との比較を行ってみる
ここまでは、AWS独自のサービスについて単体として見てきましたが、類似のサービスを他社が行っていることもあります。そこで、最近のwebサービスでは欠かせることのできないシングルサインオンや多要素認証などを提供するシステムをAWSと他社サービスで値段の側面をはじめ、どう違うのか検討したいと思います。
多要素認証とは、「アクセス権限を得るのに必要な本人確認のための複数の種類の要素をユーザーに要求する認証方式」とされています。必要な要素が2つの場合が多く、その場合、二要素認証とも呼ばれます。
「シングルサインオン(Single Sign-On)」は、1度システム利用開始のユーザー認証(ログイン)を行うと複数のシステムを利用開始する際に、都度認証を行う必要がない仕組みを言います。
AWSでは、Cognitoがこのような、ウェブおよびモバイルアプリの認証、承認、およびユーザー管理機能を提供します。
AWSのCognitoとは、Webアプリケーションやモバイルアプリケーションに認証機能を提供するサービスのことを言います。
ただ、このような認証機能はAWS独自のものではなく、他社では代表的なもので言えば、たとえばAuth0やGoogleのFirebaseが提供するFirebase Authenticationというサービスが同様の認証機能を提供しています。これらはIDaaSと呼ばれ、IDaaSとは、Identity as a Serviceのことで、クラウド上でIDやパスワードといったログイン情報を一括で管理できるサービスのことを言います。
今回は差し当たり、CognitoとAuth0を比較してどのような違いがあるのか考えてみたいと思います。
CognitoとAuth0を比較
まず、Cognitoは一月当たり5万ユーザーまでは無料となっています。(ただし、高度なセキュリティ機能としてアドバンストセキュリティ機能を追加する場合は、一人当たり0.0050USD追加。また、SAMLやIDフェデレーションといった外部認証を使う場合は、また料金は追加となります。)
IDを保有するユーザーがその月の間にログイン、トークン更新、パスワード変更など何かしらCognitoへアクセスした場合に課金対象となります。
↓Cognitoの価格表です。
(引用元:https://aws.amazon.com/jp/cognito/)
実際にAWS Pricing CalculatorでCognitoの値段を算出してみました。一月10万アクセスで、高度なセキュリティサービスもない状態ですが、シンプルに275.00USDに収まります。
使い方次第で、コスト面では非常に安くすむことから、コスパの良さは伝わるかと思います。
Auth0はB2C、B2B、B2Eと、利用形態で料金が異なります。そして従量課金制ではなく、プラン料金です。SAMLなどを利用せず、通常のユーザーを認証する場合はB2Cを選択するとのことでMAUが5,000人と仮定しても、簡易なプランで114.00USD、セキュリティ強化のプランで1,000.00USD(Cognitoの場合は同条件で250.00USD)と、Cognitoより割高感は否めません。
ただし、特徴としてはAuth0は割⾼な⼀⽅で、多機能でさまざまな認証ニーズに応えることができる、ドキュメントが豊富というメリットがあります。
Auth0は管理画面がシンプルで見やすいデザインとなっており、ユーザビリティが高いのも特徴と言えます。
また、ルール機能を活用することでユーザー属性の追加、ユーザーログイン後の追加処理、異常検知機能の閲覧など豊富な機能を追加可能なため、会社のセキュリティ方針に合わせたカスタマイズもできます。
機能の充実でいえば、Auth0、コスパ重視ならCognitoと用途、ニーズに応じて選択する必要がありそうです。
結論
以上の通り、それぞれ一長一短といえそうです。ただ、コスパは断然Cognitoが良いのではないかと思います。高度な機能が必要ならAuth0なのでしょう。しかし、特段のこだわりがない限り、Cognitoで事足りるのではないでしょうか。
終わりに
今回は、AWSのお金の側面について考えてみました。エンジニアからしたら1つ1つのサービスの機能、内容などコンピューターの側面が気になるでしょうし、お客さんからしたら何よりお金、コストが気になると思います。
しっかりサービス内容も把握しながら、非エンジニア的な側面についても、お客さんの気になるところもしっかりカバーして信頼していただく。そんなエンジニアになりたいですね。
divxでは一緒に働ける仲間を募集しています。
興味があるかたはぜひ採用ページを御覧ください