AWS App Runnerを運用してわかった注意点と制約事項
こんにちは!Septeni Japan株式会社の大志万と言います。
最近、プロジェクトでAWS App Runnerを使用してWebアプリケーションをデプロイする機会がありました。
App Runnerは簡単にコンテナアプリケーションをデプロイできる便利なサービスですが、使用していく中でいくつか注意すべき点や制約事項に直面したため、今回はそれらを記事にて共有します。
これからAWS App Runnerを採用するか検討している方の参考になれば幸いです。
AWS App Runnerとは
AWS App Runnerは、コンテナ化されたWebアプリケーションやAPIを素早くデプロイできるフルマネージドサービスです。
インフラの管理を気にすることなく、ソースコードまたはコンテナイメージから直接デプロイが可能で、自動的にビルド、デプロイ、スケーリング、負荷分散を行ってくれます。
ECSを使用してサーバーを立てるには、タスク定義やALBなど設定する必要のあるリソースが複数ありますが、App Runnerでは、ECRにイメージがpushしてあれば、App Runner内で完結してサービスをデプロイすることが可能です。
また、ECRにイメージをpushした際に、無停止で自動デプロイする設定も簡単に構成できます。
これだけ見ると非常に便利なサービスですが、実際に運用してみるといくつかの制約事項に直面しました。
注意点
1. リクエストタイムアウトが120秒固定
App Runnerでは、リクエストのタイムアウト時間が120秒(2分)で固定されています。
この値は現在のところ変更することができません。
そのため、以下のようなケースで問題が発生する可能性があります。
- 大量のデータを処理するAPI
- 重い計算処理を行うAPI
- Server-Sent Events (SSE) やWebSocketを使ったリアルタイム通信
特にServer-Sent Eventsは、長時間接続を維持する必要があるため、App Runnerでは実質的に使用できません。
2. ストレージが3GBで固定
App Runnerのコンテナには3GBのエフェメラルストレージが割り当てられていますが、これも固定値で変更できません。
一時ファイルやキャッシュを大量に扱うアプリケーションでは、この制約がボトルネックになる可能性があります。
こちらも以下のようなケースで注意が必要です。
- 大きなファイルのアップロード処理
- 画像や動画の変換処理で一時ファイルを作成する
- ログファイルをローカルに大量に保存する
3. ロードマップの更新が停滞している
AWS App Runnerの公式ロードマップを確認すると、最後の更新が2022年頃で止まっており、現在はあまり活発に機能追加が行われていないようです。
そのため、長期的な運用を考える場合は、以下の点を考慮する必要があります。
- 新機能の追加が期待できない
- 上記で挙げた制約事項が今後も改善されない可能性が高い
- 将来的にサービスがDeprecatedになるリスク
4. startCommandが削除できないバグ
これは細かい点ですが、App RunnerのコンソールやAPIで一度設定したstartCommandを削除できないというバグが存在します。
▼再現手順
- 最初に
startCommandを設定してデプロイ - その後、Dockerfileの
CMDを使いたくなり、startCommandを削除しようとする - コンソールから削除してもAPIから空文字列を送っても、設定が残り続ける
Dockerfileをローカルなどで使いまわしたい時にCMDで起動コマンドを共通化したくなることがありますが、このバグのためにそれぞれで起動コマンドを管理する必要があります。
まとめ
上記のような制約があるため、基本的には拡張性の高いECSを使ったほうが良いというのが私の認識です。
もし使うのであれば、App Runnerはデモアプリなど素早くプロトタイプを作りたいケースに限定したほうが良いと思います。
今回は、AWS App Runnerを実際に使用して遭遇した注意点と制約事項について紹介しました。
まとめると以下の点に注意が必要です。
- リクエストタイムアウトが120秒で固定
- ストレージが3GBで固定
- ロードマップの更新が停滞している
- 細かいバグ(
startCommandの削除不可など)
App Runnerは手軽にデプロイできる反面、制約を理解した上で適切なユースケースで使うことが重要です。
もし上記の制約が問題になりそうな場合は、最初からECSやその他のサービスを検討することをおすすめします。
最後までお読みいただき、ありがとうございました!
質問やフィードバックがありましたら、ぜひコメント欄で教えてください。
Discussion