はじめに
2021年5月にリリースされたAppRunnerは、AWS上でWebアプリケーション全体を稼働させる方法として、現時点で最もシンプルな選択肢です。AWSにはコンテナ向けのマネージドサービスが複数存在し、それぞれ異なるユースケースに対応しています。本記事ではWebアプリケーションのユースケースに焦点を当て、AppRunnerを使ってコードから稼働中のアプリケーションへと数分で到達する手順を紹介します。
AppRunnerとは
AppRunnerは、コンテナ化されたWebアプリケーションやAPIサービスを、インフラ管理なしで構築・デプロイ・実行できるフルマネージドのコンテナアプリケーションサービスです。コンテナ版のElasticBeanStalkとイメージしていただくと分かりやすいでしょう。アプリケーション提供のプロセスを大幅に簡素化・効率化し、ロードバランサーや証明書、監視・ログ設定などの管理に必要なインフラ専門知識への依存を減らすことを目的としています。
AWS責任共有モデルはご存知の方も多いでしょう。これは、ITスタックのうちAWSが責任を負う範囲と、お客様(あなた)が責任を負う範囲を整理したものです。すべてのAWSサービスはこの責任共有のスペクトラム上のどこかに位置付けられ、従来のIT運用にともなう管理負担を軽減します。EC2であれば、OSのパッチ適用やアップデートはお客様の責任、物理ハードウェアインフラはAWSの責任です。RDSなら、データとスキーマはお客様、データベースのアップデートと基盤インフラはAWSが管理します。AppRunnerはこの流れをさらに進め、責任の比重をAWS側に大きく寄せています。お客様はコードとサービス設定にだけ責任を持てばよく、開発業務に集中できるというわけです。こうした負担軽減は、付加価値を生まない重労働(undifferentiated heavy lifting)を取り除き、ビジネス成果に注力できるようにする取り組みとしばしば表現されます。
AppRunnerの真価は、コンテナ化されたworkloadの実行に必要なリソースのプロビジョニングまわりの技術的知識をほぼすべて抽象化してくれる点にあります。お客様はコンテナイメージかアプリケーションコードを用意するだけで済みます。
AppRunnerが内部でどう動いているのか、AWSが裏側でどのサービスを活用しているのかといった技術的な詳細は、こちらのAWS基調講演でご覧いただけます。
先ほど、workloadのユースケースごとに最適な実行環境が変わると述べましたが、AppRunnerもすべてのコンテナユースケースに適しているわけではありません。Kubernetesのように複数のコンテナ化workloadをオーケストレーションすることはできず、ECSのような有限のタスク/ジョブ実行や、Lambdaのようなゼロスケールにも対応しません。一方で、コードからWebアプリケーションの稼働までをわずかなステップで一気通貫に実現する点では群を抜いています。AWSのコンテナ向けサービスとそれぞれのユースケースについては、今後のブログで、お客様のworkloadに最適なサービスを判断するためのプロセスを順を追って解説する予定です。
AppRunnerへのコードのデプロイ
AppRunnerにおけるデプロイの単位は「Service」と呼ばれ、コンテナイメージまたはアプリケーションコードに相当するものとお考えください。
「Service」をデプロイするには、まず「Create an AppRunner Service」をクリックします。

AppRunner Serviceの作成
続いて、アプリケーションのソースを選択します。「ソース」とは、アプリケーションコードの取得元のことで、ECRなどのコンテナレジストリか、ソースコードリポジトリのいずれかを指します。本例ではGithubを使用します。

AppRunnerで使用するコードリポジトリの追加
「Source Code Repository」を選んで「Add New」をクリックすると、Githubアカウントへの「AWS Connector for Github」のインストールを求められます。これにより、AWSがアプリケーションのソースコードを取得してAppRunnerにデプロイできるようになります。

コードリポジトリへの接続をAWSに承認
「Authorize AWS Connector for Github」をクリックすると、AWSコネクタの名前を設定するAWSのページに遷移します。本ガイドではコネクタを初めてインストールする想定なので、「install another」をクリックしてGithubに戻り、コネクタをインストールするアカウント/組織を選択してください。

コネクタに名前を付けてリポジトリにインストール

インストールの確認
注意:二要素認証を有効にしている場合など、追加の認証手順が求められることがあります。
コネクタのインストールが完了するとポップアップが閉じ、AppRunnerのソース・デプロイ設定ページに戻ります。ここでは、AWSコネクタのアプリケーション名、ソースリポジトリ、デプロイ対象のブランチが確認できます。

コネクタとリポジトリの情報
デプロイ設定では、本例ではデフォルトの「Manual」デプロイトリガーを使用します。
ビルド設定のページでは、アプリケーションの要件に合わせて項目を選択します。本例ではランタイムにPythonを使用しており、ビルドコマンドと開始コマンドはデフォルトのままで問題ありません。実際の要件はランタイムによって異なります。

サービス設定
サービス構成のページでは、アプリケーションのリソース要件を指定し、必要に応じて環境変数を設定します。
同じページから、AutoScaling、ヘルスチェック、ネットワーキング(パブリック/プライベートエンドポイントの選択)、WAF、他のAWSサービスへ接続するためのSecurity/IAMなど、各種サービス機能も構成できます。

サービス要件
「Next」をクリックすると、AppRunner Serviceの設定内容をまとめて確認できるサマリーページに進みます。

サービス設定の確認
内容に問題がなければ、「Create and deploy」をクリックしてサービスをデプロイします。
その後、AppRunner Serviceのダッシュボードに移動します。ここでは、サービスのステータスやデプロイログをはじめ、運用に役立つ情報を確認できます。数分後にはsuccessfully deployedというステータスとともに、サービスにアクセスするためのデフォルトドメインのHTTPS URLが表示されるはずです。

サービスのデプロイ完了

アプリケーションのURL
これで、わずか数クリックでWebアプリケーションをAppRunnerに記録的なスピードでデプロイできました。
AppRunnerは、コードからもコンテナからも、アプリケーションのデプロイを驚くほどスムーズに進められます。コンテナ化、ロードバランシング、証明書発行、オートスケーリングといった技術的なトピックの知識がほとんどなくても、アプリケーションを立ち上げられます。コードや既存のコンテナからWebアプリケーションを素早く、かつ安全にデプロイしたいなら、AppRunnerを有力な選択肢としてぜひ検討してみてください。
なお、デモ目的で本記事の手順を試した場合は、コストとセキュリティの観点から、作成したリソースをすべて削除し、アプリケーションのリンクも忘れずに解除してください。