AWS Containers Advent Calendar 2023の4日目です。
AWS App RunnerはAWSで手軽にコンテナを動かせるサービスで、2021年にGAしてから緩やかに使用しつつ所感を書いてきた。
- AWS App Runner はおもちゃなのでそれ以上の用途には使ってはならない - koudenpaのブログ
- Laravel を AWS App Runner で動かしてみる - koudenpaのブログ
- AWS App Runner 振り返り 2022 - koudenpaのブログ
去年のAWS App Runnerのカレンダー | Advent Calendar 2022 - Qiitaではサービス内容の振り返りをしたのだが、今年は記事のタイトルにも書いた通りApp Runnerを自分の中でどう位置付けたのかの整理記事とした。正直サービス内容には振り返るネタ(更新)もあまりない。
決別・ECSを使うぞ
Webサービスを提供するに当たってAWS App Runnerは考慮から外すことに決めた。
幾つかの理由があるが、大きなものは以下の2点。GitHubに公開されているIssueともある程度対応している。
サービス提供にはホスティング機能が不十分
単純に機能が不足している。
App RunnerはHTTPリクエストを受け付けてレスポンスするだけの「Webアプリケーション」の提供のみを行えるサービスとなっている。
他の契機での処理が必要となる「Webサービス」を構築するには他のホスティングサービスを併用せざるを得ない。
Webアプリケーションのホスティングに当たっても数々の制約があるため、あえてApp Runnerを使用する利点は少ない。
関連するロードマップリポジトリのIssueを挙げておく。
- Support Worker Services · Issue #96 · aws/apprunner-roadmap · GitHub
- HTTPリクエスト・レスポンス以外の処理はサポートされていない
- Allow container side-cars AKA multiple containers per service. · Issue #71 · aws/apprunner-roadmap · GitHub
- Support web sockets · Issue #13 · aws/apprunner-roadmap · GitHub
- WebSocketは使えない、ちなみにリサーチ中になってから1年以上放置されている
全般に他のホスティングサービスに寄せた方がWebサービス・システムの構築を平易に行える。それがAWSならECSであるという事だ。
AWSの基幹サービスではない
あまりコストをかけて開発、運用されている感触がなく、大事なものを預ける気になれない。
AWS App Runner はおもちゃなのでそれ以上の用途には使ってはならない - koudenpaのブログでも「注力されていない」という見出しで上げている通り、開発は活発ではない。
細々としたところで妙な振る舞いをすることがあり、サービスレベルにはかなりの不安がある。
直近でも、使わなくなったVPCコネクタを削除しようとしたら、サービスの状態が更新されておらず削除できないことがあった。メタデータ管理が壊れているのは相当不安になる。
GAからそれなりの時間が経過している状況で、大きなテコ入れが入ることもないだろうという考えだ。去年の振り返り以降に大きく状況が変わることはなかった。
なまじロードマップリポジトリが公開されているので他の人のIssueも目についてしまう。
- Unable to delete VPC connector · Issue #161 · aws/apprunner-roadmap · GitHub
- 恐らくVPCコネクタを削除できない事象はこれと同じ
- `AWS::AppRunner::Service` should fail when update service actually failed but was rolled back by Service · Issue #209 · aws/apprunner-roadmap · GitHub
- これに限らず非正常系を中心に妙な振る舞いで情報が無くて困っているIssueは散見される
ECSにこうした不安を感じたことはない。ECS Fargateはセービングプランやスポットインスタンスも対応しているなど、紛れもなくAWSの基幹サービスの一つだろう。安心して使える。
効果的と思えるユースケース
単純なWebアプリケーションをホスティングする用途では一定の便利さがある。
自分の場合であれは、以下の記事で試していたphpMyAdminはまだApp Runnerで動かしているし、今後もそうするつもりだ*1。
管理しなくてはならないリソースが少ないのはよい。このphpMyAdmin周りのTerraformリソースであればaws_apprunner_serviceとaws_apprunner_vpc_connectorの2つだけだ。
これがRedashのようなスケジューラやワーカーが必要となるサービスになってくると、App Runnerで無理やりホスティングするよりもECSのような柔軟なホスティングができる基盤に載せる方が実際的だろう。
効果的に使えるユースケースは相当限られている。
AWS App Runnerはおもちゃか?
Webサービスを本番展開するのに使い難いと言う点で「おもちゃ」という表現はそれなりに妥当なのではないかと思う。
仕事の道具としては心もとない。
AWSでコンテナを手軽に動かすなら、初手ECS Fargateを試すのがよい*2だろう。自分はそう決めた。
*1:欲を言えばゼロスケールはして欲しい https://github.com/aws/apprunner-roadmap/issues/9
*2:他の大手パブリッククラウドには「おもちゃ」ではないコンテナランナーがあるのでそれを使えばよい https://cloud.google.com/run https://learn.microsoft.com/ja-jp/azure/container-apps/overview