[レポート]App Runner を使用してウェブアプリケーションと API サービスを最新化する #AWSreInvent

2023.12.28

ゲームソリューション部の えがわ です。

AWS re:Invent 2023の BreakOut セッション「Modernize your web applications and API services using AWS App Runner」のセッションレポートをお届けします。

動画

概要

AWS を初めて使用する組織は、アプリケーションを最新化し、クラウドの価値を最大限に引き出すために必要な熟練したリソースと時間が不足している可能性があります。DevOps のオーバーヘッドと重労働を軽減する方法を探している可能性があります。このセッションでは、AWS の新規顧客が迅速に適応して最新化して運用効率を向上させ、コストを最適化する方法を学びます。

最初にまとめ

  • アプリケーションモダナイゼーションの重要性が高まっているがAppRunnerで解決できることが多くある
  • コンポーネント化とAWS連携で開発効率と安定性を両立できる
  • マイクロサービス運用の課題はマルチアカウントとMigration Hubで解決できる

内容

モダナイゼーション

需要の増加に伴いアプリケーションのモダナイゼーションを検討するケースが多い。モダナイゼーションを行うことで、顧客基盤と利用量の拡大が見込め、回復力とパフォーマンスの向上が期待できます。

モダナイゼーションはパフォーマンスと効率の改善に有効なアプローチです。
技術的負債を軽減し、クラウドサービス等を活用してアプリケーションアーキテクチャの俊敏性向上を図ることができます。
小規模から始め徐々に拡大していくことで、コストも抑えられます。

一方で、移行と最新化には運用コストとインフラストラクチャコストの増加が伴うことに留意が必要。
お客様が抱える課題解決にどう役立つかを理解することも大切です。

段階的な変革を求めるケースにモダナイゼーションは適しているが、実際に計画を立てていくといくつかの課題に直面することがあります。
これらの課題を事前に把握しておくことが、モダナイゼーションを成功に導く鍵となります。

モダナイゼーションに取り組む際の課題の1つが、組織の文化的な慣性です。
長年慣れ親しんだプロセスやワークフローからの変更には抵抗があります。
しかし、トップダウンのリーダーシップのもと、変更管理プロセスを明確化しコミットすることでこの課題は克服できます。

もう1つの課題がリスク回避の傾向です。
新しい技術やプロセスがもたらす混乱や障害への不安から、変化に対する抵抗が生じます。
だが移行計画時にこうしたリスクを特定し、リスク軽減策を立てることが大切です。

レガシーシステムからの移行にも課題があります。
データ移行、業務プロセス変更などへの抵抗がある一方、スキルや専門知識の不足も課題の1つであることが分かっています。
要件に合わせてスキルと能力を高める取り組みが必要不可欠です。

予算の制約も大きな課題の1つです。
多額の投資が必要な一方、投資対効果が不明確なことから経営陣の後押しが得られないケースがあります。
これらの課題に事前に対処することが重要です。

開発者がインフラストラクチャの管理の複雑さに時間を取られることで、本来のアプリケーション開発がおろそかになりがちです。
インフラストラクチャを簡素化することで、開発者はインフラ管理から開放され、アプリケーション開発とビジネス課題の解決に注力できるようになります。

具体的には、自動化とコンテナ化を進めることで、スケーラブルで安全なコンテナベースのインフラを活用できます。
これにより最新のアプリケーション開発とデプロイを効率的に進められます。
また迅速なデプロイメント戦略を取ることで、コンテナを数分以内に起動し、稼働サイクルに反映できます。

開発サイクルの短縮とアジリティの向上により、顧客ニーズへの対応力が高まります。
先進事例を参考にインフラ簡素化に取り組むことがモダナイゼーションを推進するうえで重要なポイントといえます。

AppRunnerについて

AWS App Runnerは、インフラストラクチャの管理を大幅に簡素化するフルマネージドサービスです。
開発者はコードリポジトリやコンテナの指定だけで、App Runnerが本番環境対応の方法でコンテナを実行してくれます。

使い方はシンプルで、コンテナリポジトリを指定しデプロイを指示するだけで良いです。
スケーリングの設定やビルド手順の指定、ヘルスチェックの設定もできます。
その結果、開発者はインフラ管理から開放され、アプリケーション開発とビジネス課題の解決に注力できます。

App Runnerによって提供される本番グレードのアプリケーション実行環境は安全性が高く、スケーラブルです。
自動スケーリングによる需給調整も実現しています。
インフラストラクチャの簡素化という文脈で、App Runnerは有力な選択肢であるといえます。

App Runnerを採用することで得られる主なメリット

  • アプリ開発サイクルの生産性向上 コンテナ化と簡素化により、開発者はイノベーションに注力できます。
  • 安全性と信頼性の向上 自動化、暗号化、負荷分散により安全性と信頼性が高まり、リスクも低減する。
  • 柔軟なデプロイメント 実稼働に近い下位環境を迅速に構築し、テストした上で本番へデプロイできます。
  • オーバープロビジョニングについて 考える必要はありません。
  • 可観測性の向上 CloudWatchやX-rayとの連携によりアプリのパフォーマンスと障害対応力が向上。
  • コスト最適化 リクエスト単位の課金なので余剰リソースによるコストの心配がない。

App Runnerが最適なケース

  • WebアプリやAPI(HTTPベースのアプリ)
  • コンテナ化経験がない場合も迅速に導入可能
  • 長時間実行アプリや同時多数リクエスト対応アプリ
  • 最小構成からスケール可能
  • ステートレスアプリ、もしくはデータストアと連携したステートフルアプリ

他のAWSサービスとも安全に連携できるため、要件に応じたアーキテクチャを構築可能です。
こうした特長から、多くのWeb系アプリケーションにおいてApp Runnerは理想的な選択肢といえる。
特にクラウド移行やコンテナ化を検討している場合、検討の対象に値するサービスです。

App Runnerが向いていないケース
- バックグラウンドジョブ/バッチジョブ リクエストベースでないジョブには不向き - イベント駆動の非定常ジョブ LambdaやStep Functionsの方が適切 - カーネルレベルのアクセスが必要な場合 マネージドサービスのためアクセス権限が制限される - 未サポートのランタイムの場合 サポート外のランタイムでもコンテナイメージで対応可能

対話型のWebアプリケーションに最適化されているため、それ以外の用途では制限が出てきます。
ただし他のAWSサービスとの連携により、用途に応じたアーキテクチャを構築することは可能です。

AppRunnerへの移行

Martin Fowlerが提唱するStrangler Figパターンは、レガシーアプリケーションの一部機能を新しいシステムに段階的に移行していく手法です。

例えば、顧客管理や販売管理、マーケティング管理などの機能を持つモノリスアプリがある場合、まず特定の機能コンポーネントだけを切り出してApp Runner上で稼働させます。

このように徐々にレガシーアプリケーションを解体しながら、コンポーネントごとにアプリケーションをリファクタリングしていく。
最終的にはモダナイゼーション後の新アーキテクチャに全体を移行させるというのがこのパターンの基本的な考え方です。

コンポーネント単位での移行なので、リスクを分散させられる利点があります。
モダナイゼーションにおける有力な選択肢といえる。

マイクロサービスを多数運用する場合、複数のチームにまたがることもあります。
その場合、マルチアカウントアーキテクチャの採用を検討したい。

これはビジネス機能ごとにマイクロサービスをグループ化し、アカウント単位で管理する手法です。
例えばamazon.comの場合、レコメンデーション系サービス、検索系サービス、注文管理系サービスといったように、ドメインごとのアカウントを設置することが考えられます。

このアプローチによりアプリケーションのガバナンスと運用管理がしやすくなる。
マイクロサービスあるいはサーバーレスアーキテクチャを採用する大規模システムにおいて、管理面でのメリットが大きいと言える。

マイクロサービス化したアプリケーションを別アカウントへ移行する場合、ネットワーキングやルーティングの設定が複雑になりがちです。

この課題を解決するのがAWS Migration HubのRefactor Spacesです。
これは移行環境のインフラを自動設定し、マルチアカウント間の通信とルーティングを実現する。

レガシーアプリと新アプリの共存環境を提供し、徐々にトラフィックを新アプリに切り替えていける。
インフラ構築の手間が省けるため、アジャイルな移行が可能になります。

マイクロサービス化やクラウドネイティブ化を視野に入れた移行を検討する際には、Refactor Spacesの活用が鍵となります。

最後に

モダナイゼーションの必要性とメリットをわかりやすく解説した上で、AppRunnerやマルチアカウントアーキテクチャといった具体的な実現手法についても丁寧に説明されており、とても勉強になりました。
アプリケーションのクラウド移行やマイクロサービス化を検討しているエンジニアにとって、非常に参考になります内容が詰まっているのでないでしょうか?
また、セッションではAppRunnerを使用した以下の事例を紹介しています。

  • 開発者として、AppRunnerを使用したデプロイ
  • DevSecOpsとして、AutoScalingや証明書更新の自動化
  • 運営担当者として、コストや可観測

モダナイゼーション、マイクロサービス、AppRunnerに興味ある方は、是非本セッションをご確認ください。