はじめに
以前、 Phoenix Framework を AWS Copilot によって AWS 上にデプロイしました
これを本番運用するとなると、以下の点を考慮する必要があります
というわけで、数回に分けて検証、実装した内容を紹介していきます
今回は コスト・料金編 です
AWS Copilot で作られるもの
今回は Workload type に Load Balanced Web Service を選択した場合です
- ECR
- ECS
- ELB
- Route53
- CloudFormation (AWS 内でのみ動作するため無償)
- IAM Role (無償)
- VPC (NATゲートウェイなどは作らないためノーコスト、のはず)
ECR
デプロイするコンテナイメージは ECR に保存されます
コンテナイメージのプッシュ時(ECRから見たデータ受信)は無料です
また、 AWS 内であればプル(ECRから見たデータ送信)も無料になります
したがって、ストレージにかかる料金だけが対象になります
ストレージ料金: 1 GB/月あたり 0.10 USD
コンテナイメージが 1GB なら 1月 0.10 USD なので、ほぼ無視していい金額です
ECS
デプロイしたコンテナイメージは ECS の Fargate で動作します
東京リージョンで Linux/X86 の場合
単位 | 料金 |
---|---|
1 時間あたりの vCPU 単位 | 0.05056 USD |
1 時間あたりの GB 単位 | 0.00553 USD |
EC2 の m6g.xlarge 相当と仮定すると、
- vCPU = 4
- メモリ = 16GB
1ヶ月を 730 時間、2台でクラスタリングするとしたとき、 1ヶ月で 60.83 タスク
ストレージの追加はなしとする
-
vCPU にかかる費用
60.83 タスク x 4 vCPU x 24 時間 x 0.05056 1 時間あたり USD = 295.25 USD vCPU 時間用
-
メモリにかかる費用
60.83 タスク x 16.00 GB x 24 時間 x 0.00553 USD/GB/時間 = 129.17 USD GB 時間用
-
合計
295.25 USD + 129.17 USD = 424.42 USD
開発環境用などで性能を抑えればかなり安くできます
性能を以下のようにした場合
- 台数 = 1
- vCPU = 0.5
- メモリ = 2GB
vCPU もメモリも 1/16 になるので、 26.53 USD / 月 になります
起動時間を平日の業務時間中のみに制限すれば更に安くできます
また、 Fargate Spot を利用することでも安くすることが可能です
単位 | 料金 | 通常との比 |
---|---|---|
1 時間あたりの vCPU 単位 | 0.01554869 USD | 30.75 % |
1 時間あたりの GB 単位 | 0.00170064 USD | 30.75 % |
通常に対して 30.75 % の費用まで抑えられます
Fargate Spot を利用する場合、 manifest.yml
の count
を以下のように設定します
-
通常の Fargate
count: 1
-
Fargate Spot
count: spot: 1
以下のように指定することで Auto Scaling も可能です
count:
range:
min: 1
max: 5
spot_from: 2
cpu_percentage: 70
memory_percentage: 80
requests: 10000
response_time: 2s
更に Linux/ARM を使えば 20% 安くなります
platform: linux/arm64
ELB
1 台の Application Load Balancer が作成されます
1 時間で 1GB のデータを処理する = 1 LCU と仮定します
-
ロードバランサーの固定費用
1 ロードバランサー x 0.0243 USD/時間 x 730 時間 (1 か月) = 17.74 USD
-
1 LCU にかかる費用
1 ロードバランサー x 1 LCU x 0.008 LCU 料金/時間 x 730 時間/月 = 5.84 USD
-
合計
17.74 USD + 5.84 USD = 23.58 USD
Route53
<環境名>.<アプリケーション名>.local
のプライベートホストゾーンが1つ作成されます
ホストゾーン1つなので、 0.50 USD 費用が発生します
合計費用
サービス | 費用 |
---|---|
ECR | 0.10 USD |
ECS | 424.42 USD |
ELB | 23.58 USD |
Route53 | 0.50 USD |
合計 | 448.6 USD |
合計でおおよそ 500 USD になりました
実際にはここにドメイン費用やデータベース、 CloudFront の料金が追加されます
EC2 の場合との比較
費用のほとんどは ECS であり、 EC2 で構成した場合もそれ以外の要素はほぼ同じになるはずなので、
EC2 で同程度の性能にした場合の費用と比較してみましょう
参考: ECS で指定できる vCPU とメモリの値の組み合わせ
EC2 インスタンス m6g.xlarge = ECS 4vCPU、メモリ 16GB とする
東京リージョン、1時間、1台当たりの費用
サービス | 費用 |
---|---|
ECS Fargate | 0.281 USD |
ECS Fargate Spot | 0.086 USD |
EC2 オンデマンド | 0.198 USD |
EC2 3年前払い | 0.075 USD |
普通に Fargate だけで使うと ECS の方が EC2 のオンデマンドより 42 % ほど高くなります
Fargate Spot を使えば EC2 の 50% で動かせるので、
オートスケーリングとうまく組み合わせると良さそうですね
開発環境用として EC2 、 ECS のそれぞれ最低コストの場合も見てみましょう
- EC2: t2.nano = 1vCPU、 0.5GB (ECS だと、この組み合わせは指定できない)
- ECS: 0.25 vCPU、 0.5GB (EC2 だと、 vCPU を 1 未満にはできない)
東京リージョン、1時間、1台当たりの費用
サービス | 費用 |
---|---|
ECS Fargate | 0.0154 USD |
ECS Fargate Spot | 0.0047 USD |
EC2 オンデマンド | 0.0076 USD |
EC2 3年前払い | 0.0050 USD |
最安値は ECS で Fargate Spot を使う場合でした
開発環境など、簡易的に立ち上げるだけなら ECS がお得です
まとめ
Copilot から Auto Scaling や Fargate Spot の指定をすることで、
EC2 よりもコストを抑えられることがわかりました
EC2 で Phoenix を動かす場合、 Terraform や Ansible などで環境構築する必要があり、
リリースにも色々気を遣う必要がありました
Copilot の場合は環境構築、リリースが圧倒的に楽なので、
コストが十分に抑えられるのであれば積極的に使いたいですね