目次
Amazon ECSとは
Amazon Elastic Container Service (Amazon ECS) は、コンテナ化されたアプリケーションのデプロイ、管理、スケーリングを容易にするフルマネージドコンテナオーケストレーションサービスです。アプリケーションと必要なリソースを記述するだけで、Amazon ECS が柔軟なコンピューティングオプションで、アプリケーションを起動、モニタリング、スケーリングし、アプリケーションが必要とする他の AWS サポートサービスと自動的に統合します。カスタムのスケーリングルールやキャパシティルールの作成などのシステムオペレーションを実行し、アプリケーションログやテレメトリからデータを確認し、クエリします。
Amazon ECS(Docker コンテナを実行および管理)| AWS
AWSの説明はわかりそうでわからない絶妙に意味不明な文章になっていますが、要するにDockerコンテナを管理出来るAWSサービスです。イメージとしてはローカル環境で用意したDockerイメージをそのままECS上に展開して起動できるって感じでしょうか。
AWS Fargateとは
AWS Fargate は、サーバーレスで従量制料金のコンピューティングエンジンであり、サーバーを管理することなくアプリケーションの構築に集中することができます。AWS Fargate は、Amazon Elastic Container Service (Amazon ECS) と Amazon Elastic Kubernetes Service (Amazon EKS) の両方との互換性を備えています。 OCI 準拠のコンテナイメージを選択し、メモリとコンピューティングリソースを定義して、サーバーレスコンピューティングでコンテナーを実行します。複数の CPU アーキテクチャとオペレーティングシステムがサポートされているため、さまざまなアプリケーションでメリットを享受できます。
AWS Fargate(サーバーやクラスターの管理が不要なコンテナの使用)| AWS
EC2でサービスを作った場合、OSの管理などサーバーのメンテナンスはユーザーが責任持って行う必要がありますが、Fargateはその部分をAWSがやってくれるのでユーザーはその上で動くアプリケーションのことだけを考えれば良くなります。素敵。素敵ですが、その分お値段が掛かります。あと設定も地味にハードル高いです。EC2みたいにインスタンス作ってデプロイしたら動きますみたいな感じじゃないです。
ECS+Fargateで運用すると月額いくらぐらい掛かる?
明確に作成したいサービスがあるわけではありませんが、今参画しているプロジェクトで、ゆくゆくはサービスをECS+Fargateで管理していきたいという案が出ているので、自分で触っておくのは大事かなあと思っています。ただスペックは何も考えずに最小限で良いのですけど、それでも比較してみると結構なお金が掛かるんですよね。EC2で構築した場合と比較してみました。前提条件
- インスタンス+RDSまたはAuroraで運用
- データ転送量は無料Tierの範囲内(つまり考慮しない)
- Route53やS3などは共通なので省略
なお使用料金の計算には「ざっくりAWS」さんを利用させていただいています。
料金比較
ECS+Fargateの場合
月額 …… 6,713円想定するスペック
- タスク数 …… 1
- vCPU …… 1台
- メモリ …… 2GB
- データ転送量 …… 3GB
EC2の場合
月額 …… 3,700円想定するスペック
- インスタンス …… t3.small(vCPU2台/メモリ2GB)
- 台数 …… 1台
- ストレージ …… 40GB
- データ転送量 …… 3GB
最低限の設定に違いがあり細かいスペックの差はありますが、ざっくり比較するとEC2に比べてECS+Fargateは倍近く掛かることがわかりました。ECS+Fargateで構築するとここにさらにELBの料金なども乗るのでさらに高くなりそうです。月7,000円の学習コストか、、ちょっと高すぎるかな……このサイトを移行するわけではないので、現在のコストに上乗せということになりますし。
遊ぶだけなら遊んだあとに片付けすればそれほどコストは掛かりませんけど、例えばLaravel上でサービスを作って試しに運用してみるみたいなことになるとそれがそのままコストになるわけで、ちょっと考えてしまいますね。
まあ、今さらEC2で開発しても新しい知識にはならないので、ECS+Fargateじゃなかったら意味がないんですが。
データベースの費用も計算してみよう
今現在このサイトはAWS Lightsailで運用されていて、インスタンス+データベースで約$26(月3,822円)という安さなんですが、もしECS+FargateなりEC2なりを立ち上げるとなると別途データベースが必要になってきます。というわけでそれも計算してみましょう。選択肢はAWSのフルマネージドデータベースサービスRDSと、RDSの1つで高可用性なAuroraです。EC2インスタンスでMySQLを運用というのが一番安いですが、管理が面倒くさいのでそれは考慮に入れません。
参考:AWS Lightsailのデータベーススペック
- DBエンジン …… MySQL
- メモリ …… 1GB
- vCPU …… 1台
- ストレージ …… 40GB SSD
RDSの場合
月額 …… 3,626円想定するスペック
- DBエンジン …… MySQL
- インスタンス …… db.t3.micro(vCPU2台/メモリ1GB)
- AZ …… Single
- ストレージ …… 40GB
Auroraの場合
月額 …… 7,556円想定するスペック
- DBエンジン …… MySQL
- インスタンス …… db.t3.small(vCPU2台/メモリ2GB)
- ストレージ …… 40GB
- I/O …… 100万件
Auroraの方が倍以上になっていますが、これは、
- 選択出来るインスタンスタイプで最も小さいのが「db.t3.small」しかない(RDSは「db.t3.micro」も選べる)
- AuroraはマルチAZが前提(なので正しく比較するならマルチAZのRDS)
という理由によるものです。RDSを同条件でマルチAZにすると月額7,253円、インスタンスを「db.t3.small」にすると12,876円になるので、ざっくり言うなら「RDSよりAuroraの方がコストパフォーマンスが良い」と言えると思いますが、想定している最低限の運用だとその特長を活かすことが出来ないので、結果的にRDSの方が安くなります。ビジネス用途ならAuroraを選ぶのもアリかなと思います。
まとめ:結局いくら掛かるの
AWSの運用を学ぶために、ECS+Fargateでアプリケーションを作成して運用してみるとしたときに掛かるコストは、- ECS+Fargate …… 6,713円
- RDS …… 3,626円
で合計は、10,339円 ということになりました。ざっくり月1万円ということになりますね。LightsailやRoute53などの支払を加味するとざっくり月1.5万円ぐらいをAWSに払い続けることになるってことです。
必要経費といえばそうかも知れませんが、それだけの価値があるのかどうか、、いや仕事の上ではかなり強みにはなりますけど(知っていると立ち上げたことがある、運用したことがあるとでは大違いなので)、どうしてもこういう固定費に対しては貧乏性が出てしまいますね。月1万円払って作ったサービスで収入が期待できるわけでもないですし、、うぐぐ。どうしよう。
ま、とりあえず、
- まず手元でDockerコンテナを用意して
- 何か適当なサービスを作ってローカルで動かしてみて
- ECS+Fargateを立ち上げてデプロイしてみて
- きちんと動くことを確認したら止める(タスク数を0に)
みたいなことをやってみましょうか。それならそんなにコストを掛けずに触ることが出来そうです。やるかー