この記事は、Supershipグループ Advent Calendar 2023の18日目の記事になります。
はじめに
AWS上にアプリケーションをホスティングしようと考えた際に、EC2やFargateを使用する等いくつかのパターンが考えられます。
その中で、App Runnerのコスト計算方法が少し特殊で、これを利用すれば安くホスティングできるのではないかと考えたため、まとめます。
App Runnerとは
AWS App Runnerとは、AWS上でコンテナ化されたアプリケーションを構築・運用できるフルマネージドサービスです。
Codebuildからデプロイ環境までマネージドしてくれるサービスであり、Githubのソースコードをビルド・デプロイ、もしくはECRのビルド済みコンテナを用いてデプロイすることもできます。
GithubにソースコードをpushするとApp Runnerが検知して、かいい感じにデプロイまでしてくれるのでとても便利と感じました。
AWSのECR Public Galleryを用いるとコンテナイメージを準備せずにApp Runnerを気軽に試すこともできます。
特徴
今回のテーマである「App Runnerを使用して安くホスティングしたい」について関係するApp Runnerの特徴です。
Auto Scalingの方式
ECS等他のAWSのサービスにおいてはCPU使用率等のしきい値を設定してオートスケーリングを設定するかと思います。
それに対して、App Runnerでは"リクエスト数"を監視し、オートスケーリングを行います。
アプリケーションに対してリクエストが無い場合はインスタンス数が0となります。
プロビジョンドインスタンス
インスタンス数が0の場合はプロビジョンドインスタンスと呼ばれるインスタンスが立っている状態になるようです。
CPUスロットリングされたインスタンスが数ミリ秒以内にリクエストに対して対応するような状態になるため、コールドスタートの問題を気にすること無く使用することができます。
コスト
App Runnerのコストについてです。
ECS等の他のサービス同様に、立っているインスタンス数と時間に対して設定したCPUとメモリサイズからコストが算出されます。
AWSのサービスはマネージドの範囲が広がれば広がるほどどうしてもコストが上がってしまうため、ベースはECSと比較すると高めの設定になっています。
ここで注目すべき点は「アプリケーションに対してリクエストが無い場合はインスタンス数が0となる」部分です。
つまり、リクエストがない時間帯に関してはインスタンスが立っていない状態になるため、CPU分のコストが発生せず、メモリに対してのみの課金となります。
常時CPU・メモリ共に課金される他のサービスと違ってこの点はかなり優位と言えます。
1つリクエストがあった場合は最低1分間分の料金がかかり、その後、プロビジョンドインスタンスに戻ることになるようです。
コンテナインスタンスの処理はすべて 1 秒ごとに請求され、1 秒未満は切り上げられます。
プロビジョニングされたコンテナインスタンスがリクエストの処理を開始するたびに、vCPU リソースに対して 1 分間分の最低料金が発生します。
App Runnerにおいて「リクエスト」とは、外部のサービスからのリクエストになるようです。つまり、Route53からヘルスチェックを設定すると、リクエストと判定されるので常時インスタンスが立っている状態になります。
ただし、App Runner内部の機能としてヘルスチェックがありますが、こちらはリクエストとしてカウントされないようです。
おわりに
App Runnerのコストについて調べてみましたが、常時立ち上げておきたい個人利用のアプリケーション等にはかなり良いのではないかと感じました。
ホスティングしたいアプリケーションに対してどのくらいの頻度でリクエストがあるのかにもよるかと思いますが、個人的にはFargate等から置き換えることにより安くなるのではないかと感じました。
最後に宣伝です。
Supershipではプロダクト開発やサービス開発に関わる人を絶賛募集しております。
ご興味がある方は以下リンクよりご確認ください。
Supership 採用サイト
是非ともよろしくお願いします。