この記事は、ニフティグループ Advent Calendar 2024 5日目の記事です。
はじめに
ニフティでWEBサービスの開発・運用を担当している渡邊です。
最近、運用の手間をかけずにWEBサービスを立ち上げる方法はないかなと考えていたところ、AWS App Runner(以下App Runner)に出会いました。
この記事では、App Runnerの特徴や他のサービスとの違いについて書いていきます。
App Runnerとは
App RunnerはAWSのサービスの1つで、コンテナアプリケーションを簡単にデプロイ・運用できるプラットフォームです。
GitのコードやコンテナをAWSにアップロードするだけで環境が作れるので、インフラ周りを気にする必要がありません。
ECS(Fargate)をベースにしているので、負荷に応じて自動的にスケールするのが特徴です。
また、VPCやロードバランサーの設定が不要なので、ネットワークの知識がなくても使えます。
他のAWSサービスとの違い
AWSには似たようなサービスがいくつかありますが、App Runnerは「とにかく簡単に使える」ことを重視して作られています。
主なサービスを比べてみましょう。
サービス | メリット | デメリット |
---|---|---|
Amazon EC2 | • サーバーを自由に設定できる • OSやミドルウェアを自分で選べる • どんな用途でも使える | • 管理が大変 • 予想以上に費用がかかることも |
Amazon ECS | •コンテナ運用に便利 • Fargateなら運用が楽 • 自動でスケールする | • インフラの知識が必要 • 初期設定が面倒 |
Elastic Beanstalk | • デプロイが簡単 • AWSの他サービスと連携しやすい • サーバー管理不要 • 自動でスケールする | • AWSへの依存が強くなる • 初期設定が面倒 |
AWS App Runner | • デプロイが簡単 • シンプルな設定項目 • 運用の手間なし • GitやDockerからすぐ使える • 自動でスケールする | • 細かい設定ができない • AWSへの依存が強くなる |
設定項目
設定する項目が少なくて、画面の流れに沿って進めるだけで使えます。
WAFも設定できるので、IP制限をかけたい社内向けのアプリも作りやすいです。
コスト
フロントとバックエンドを分けたアプリを例に、コストを計算してみました。
- トラフィック:
- 月間50万リクエスト
- 1リクエストあたり平均200ミリ秒
- リソース要件:
- フロントエンド:1 vCPU、2GBメモリ
- バックエンド:2 vCPU、4GBメモリ
サービス | タスク/インスタンス | ALB | NAT Gateway | データ転送 | 合計 |
---|---|---|---|---|---|
ECS Fargate | $138.66 | $20.20 | $32.40 | $57.36 | $248.62 |
EC2 | $46.80 | $20.20 | $32.40 | $57.36 | $156.76 |
App Runner | $195.75 | 不要 | 不要 | 不要 | $195.75 |
計算式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
ECS(fargate) フロントエンド vCPU コスト: $0.05056 × 1 vCPU × 750時間 = $37.92 メモリ コスト: $0.00553 × 2GB × 750時間 = $8.30 合計:$37.92 + $8.30 = $46.22 バックエンド vCPU コスト: $0.05056 × 2 vCPU × 750時間 = $75.84 メモリ コスト: $0.00553 × 4GB × 750時間 = $16.60 合計:$75.84 + $16.60 = $92.44 EC2 フロントエンド: $0.0208 × 750時間 = $15.60 バックエンド: $0.0416 × 750時間 = $31.20 データ転送の仮定条件 ALB経由(クライアント → Fargate): 平均リクエストサイズを1MBと仮定 データ転送量:500,000リクエスト × 1MB = 500GB NAT Gateway経由(Fargate → インターネット): データ転送量:10GB/月 データ転送コスト ALB 経由: (500GB - 1GB無料枠) × $0.114 = $56.91 NAT Gateway 経由: 10GB × $0.045 = $0.45 合計データ転送コスト: $56.91 + $0.45 = $57.36 |
コスト面ではEC2が最も安価ですが、運用の手間を考えるとApp Runnerも悪くないかなと思います。
App Runnerの裏側はECS(Fargate)のため、同じ環境でありながら安くなることがわかります。
さらに、App Runnerは実行時間ベースの課金体系を採用しているため、コストの予測が容易という利点もあります。
App Runnerの制限と考慮すべきポイント
ARM64をサポートしていない
記事執筆時点ではARM64のコンテナイメージには対応していないため、x86_64アーキテクチャのイメージを使用する必要があります。
ARM64は、コストとパフォーマンスの両面でメリットがあるため、今後の対応に期待です。
カスタマイズ性の制限
とにかく簡単に使えることを重視しているので、細かい設定はできません。
特にVPC接続やログ設定などの高度な構成が必要な場合、作業が複雑になることがあります。
オートスケーリングの指標が限定的
同時実行数でしかスケールできず、CPUやメモリの使用率では制御できません。
そのため、特定のアプリケーションではスケーリング要件との不一致が生じ、効率的な運用が難しくなる可能性があります。
サイドカーコンテナ非対応
サイドカーコンテナが使えないので、ログ収集やモニタリングをする時に工夫が必要です。
まとめ
コンテナを使うのが当たり前になってきた今、シンプルなWEBサービスを作るならApp Runnerはかなり使えると思います。
実際に試してみたら、約20分ほどでアプリケーションがAWS上で動作できるようになりました。プロトタイプや社内ツールを作るのにぴったりですね。
インフラの心配をせずに開発に集中できるのが、個人的にすごく気に入っています。
ただ、細かい設定やスケーリングが必要な場合は、ECSやEC2も検討した方がいいかもしれません。