はじめに
2021年に一般利用可能となって3年経過したApp Runnerについて、改めて学び直したので記事にまとめてみました。
App Runnerについては他にも記事にしていますので、こちらもお読みください。
https://tech.i3design.jp/apprunner-web-app-deploy
AWS App Runnerとは
AWS App RunnerはソースコードやコンテナイメージからウェブアプリやAPIを簡単に素早くデプロイすることのできるAWSのサービスです。
Webアプリをデプロイするときに設定するコンテナやVPC周り、ALB、scaling、 CI/CDなどをApp Runnerがまとめて隠蔽して提供してくれます。
フルマネージド型のサービスでスケーリングやインフラ管理などを意識する必要はありません。またリポジトリに新しいコードやイメージがプッシュされるたびに自動でデプロイすることも可能でアプリの開発に集中することができます。
AWS App Runnerの特徴
- インフラの構築も運用も不要なフルマネージドサービス
- アプリケーションのニーズに合わせてコンテナの数を自動でスケールアップスケールダウン
- ネットワークトラフィックを自動で負荷分散
- ログやメトリクスは自動で収集され、App Runnerのコンソール画面から確認可能
- ソースコードやソースイメージの変更を検知し、自動でデプロイ。このデプロイはブルーグリーンデプロイでダウンタイムなく行われるので、CodePipelineなど不要でCI/CD環境の構築が可能
- デプロイするとデフォルトドメインが自動生成される。このドメインはhttpsとなりTLSを自動で設定。(任意のカスタムドメインも設定可能)
- VPCコネクタを設定することで自身のVPC内にあるRDSなどのサービスに接続可能
- App Runnerが消費するリソースに対してのみ従量課金で費用対効果が高い方法での提供 AWS App Runnerの料金
App Runnerのストレージ
App Runnerのコンテナインスタンス内にはエフェメラルストレージが存在します。これはイメージサイズを含めて3GBとなります。エフェメラルストレージなのでコンテナインスタンスを終了させてしまうとアクセスはできません。
またコンテナから他のコンテナのエフェメラルストレージへのアクセスもできません。
保存しておきたいデータはS3やRDSなど外部ストレージに格納する必要があります。VPC内のサービスにアクセスする場合はVPC Connectorの用意も必要となります。
エフェメラルストレージをキャッシュに利用することもできますが、キャッシュを保証するにはElastiCacheを使用します。
環境変数
環境変数はApp Runnerのサービス作成時や作成後のコンソール画面のApp Runnerの設定から追加することもできます。
選択肢としてはプレーンテキスト、Secrets Manager と SSM Parameter Store があります。Secrets Managerの場合はARNをSSM Parameter Storeの場合はARNまたはパラメータ名をvalueとして設定します。
秘密情報の受け渡しの場合はSecrets Managerで環境変数を設定するようにします。
ロギング
App Runnerはアプリケーションコードの出力を収集し、Amazon CloudWatch Logs にストリーミングします。App Runnerのコンソール画面やCloudWatchからメトリクスやログを確認することができます。
AppRunnerでのログ記録とモニタリング
AWS X-Rayと統合することでトレースデータのモニタリングも可能です。
他サービスとの比較
以下の表はAWSの他の類似サービスとの比較になります。
スケーリング
- Fargate
- スケーリングの機能は組み込まれていないので自分で追加で設定する必要がある
- Lambda
- インスタンスの起動は早くスパイクに対しても迅速に対応可能
- App Runner
- 自動でスケールアップ・ダウンする
- 急激なアクセス増加には耐えられない可能性もある
インバウンドトラフィック
- Fargate
- API GatewayやALBを利用する
- Lambda
- Lambda functions URLかAPI Gatewayを利用する
- App Runner
- 組み込まれている
料金
- Fargate
- CPUとメモリに基づいて秒単位の課金
- その他のサービスの料金も別途かかる
- Saving Planを利用して節約することもできる
- Lambda
- メモリサイズと実行時間に基づくミリ秒単位の課金
- 実行されるLambda別に、関数が実行される時間分の料金が発生
- App Runner
- CPUとメモリに基づいて秒単位の課金
- トラフィックがある場合は、CPUに基づいての課金
- トラフィックがない場合は、メモリに対してのみの課金
メリット・デメリット
- Fargate
- 詳細な設定は必要なもののサーバーの管理は不要
- コンテナに関する知識が必要となる
- Lambda
- リクエストがある時だけの従量課金でフルマネージド
- 実行時間が15分以内に制限される
- App Runner
- 簡単な設定で素早くデプロイでき、インフラの管理が不要
- Fargateのように高度な設定はできない
App Runnerの使い所としてインフラ経験の少ない場合やインフラ管理をしたくない場合、社内アプリ、開発環境・テスト環境の開発をする際に利用するのがいいかと思います。
ロードバランシングやスケーリングなど細かいところまで設定したい場合はECS Fargateでアプリを作成するのがいいかもしれません。
まとめ
インフラの経験が少なくても、コンテナ化されたアプリケーションを簡単にAWS上で常にデプロイすることができる便利なサービスです。
インフラで複雑な設定を必要としないアプリケーションにおいては、App Runnerの使用を検討するのが良いかと思います。
参考
- AWS AppRunnerの料金
- 構築済みのインフラにすぐにデプロイできるAWS AppRunnerを使っていますか?
- AWS App Runner のオートスケールは GCP Cloud Run ほど滑らかではなさそう
- AWS App Runner を使う時に押さえておきたい勘所 〜 Web アプリをコンテナに最適化する 〜
- 欲しかったのは AWS App Runner でした
AWS App Runnerの導入支援をしております。サービス詳細はこちらから!