こんにちは。最近、個人的に AWS コンテナ設計・構築周りをコツコツ学習している前山です。
今年の8月に、Heroku の無料プランが終了することを発表されました。個人的には、Heroku には大変お世話になったのですが、Heroku の有料化にあたって、簡単に Web アプリケーションをデプロイできる AWS App Runner や Google Cloud Run を選択する機会も増えるかなと思い、今回は AWS App Runner を実際に触ってみて感じたことを書いていきます。
AWS App Runner とは
AWS App Runner とは、コンテナで構成される Web アプリケーションを簡単にデプロイできるサービスです。Auto Scaling やロードバランシング設定、証明書管理などが、自動で管理できます。
App Runner 上に Web アプリケーションをデプロイするには、ECR からコンテナイメージを取得するか GitHub リポジトリからソースコードを取得して、コンテナイメージをデプロイすることでデプロイできます。
以下は簡易構成図になります。
図1: ECR を利用する場合の簡易構成図
図2: GitHub リポジトリを利用する場合の簡易構成図
ECR からコンテナイメージを取得する場合は、ローカルで検証したコンテナイメージを使用することができます。
GitHub を利用する場合、App Runner が提供するランタイムから選択する必要があり、デプロイしたい Web アプリケーションの環境によっては使えない場合があります。
今回は、試しに簡単にデプロイを実施してみたいので、GitHub リポジトリに Next.js で作成したサンプルアプリを push して、App Runner を利用してデプロイを試してみたいと思います。
セットアップ
まず以下のコマンドを実行して、Next.js の新規プロジェクトを作成します。
$ yarn create next-app --typescript
プロジェクトを作成したら、GitHub リポジトリに push します。
App Runner のサービスを作成
次に AWS コンソールから App Runner のサービスを作成します。
次にソースの設定をおこないます。以下のように先ほど GitHub に作成したリポジトリを指定します。
次にビルドの設定をおこないます。以下のようにランタイムやコマンドの設定をおこないます。今回はコンソール上でおこないますが、 apprunner.yaml
をリポジトリに追加して設定することもできます。
次にサービスの設定をおこないます。このステップでは、CPU やメモリ・環境変数・オートスケール・ヘルスチェック・タグ等を設定できます。
Auto Scaling
App Runner はデフォルトで Auto Scaling をサポートしているので、ニーズに合わせて設定します。
以下のようにカスタム設定を追加することもできます。
ヘルスチェック
App Runner では現在 TCP ベースのヘルスチェックのみをサポートしています。
デプロイ
最後に、設定内容を確認し、デプロイをしてみましょう。
デプロイが完了すると以下のような画面になります。
上記の画面にあるデフォルトドメインにアクセスしてみましょう。以下のように Next.js のデフォルト画面が表示されたら成功です。
感想
非常に簡単にデプロイできました。App Runner はインフラ周りをあまり意識せずに、Web アプリケーションを簡単かつ迅速に AWS 上で動かせるので、何かサクッとデプロイしたいケースのときに非常に良さそうですね。
つい先日、Ruby や Golang のランタイムもサポートされたみたいで、これまでよりも幅広い言語で利用できるようになりました。今後の動向も楽しみですね。
参考: AWS App Runner launches support for PHP, Go, .Net, and Ruby managed runtimes