AWS App Runner についてざっくりと理解して触ってみる

# はじめに
本記事は2024年2月21日に開催された勉強会[『完全に理解するシリーズ#1 "AWS App Runner"』](https://forkwell.connpass.com/event/309127/?utm_campaign=&utm_source=notifications&utm_medium=email&utm_content=title_link)に参加したので、そこで学んだことと、実際に触ってみて感じたことをまとめていきます！




https://speakerdeck.com/track3jyo/app-runner-the-appeal-and-evolution-over-3-years-since-launch

# AWS App Runnerとは？
## ざっくりと解説
ざっくり説明すると、

**ウェブアプリケーションやAPIを構築済みのインフラに簡単にデプロイし、実行できるマネージドサービス**

です。

AWSのサービスは多岐にわたり今では200以上のサービスがあります。

それを用途に合わせて、ブロックを積み上げていくように環境を柔軟に構築していくことができます。

しかし、それだとAWSへの知識やインフラへの知識の学習コストや運用していく手間などがかかってしまい肝心のアプリケーションの開発や保守の時間が割かれてしまいます。

そういった手間を省くために**インフラ部分の管理をクラウドプロバイダーが提供することをPaaSという概念であり、その1種のサービスがApp Runner**です。

## ざっくりとデプロイされる流れを知る
使い方のイメージとしては、GitHubにあるソースコードもしくはECRにあるコンテナイメージを挙げてApp runnerで接続先をどちらか指定すると、**ソースコードやイメージを引っ張ってきてデプロイしてくれる**という流れです。

以下がAWSの開発ガイドに乗っているイメージ図です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3515830/41381007-2f0f-2a02-1010-2deb2c18111b.png)
https://docs.aws.amazon.com/ja_jp/apprunner/latest/dg/what-is-apprunner.html

1からインフラ環境を構築してデプロイするよりもだいぶ簡単にデプロイできることが分かったと思います。

# AWS App Runnerの特徴
勉強会の中で印象的だった、App Runnerの特徴をデプロイが簡単なこと以外に4つまとめていきます！
### 特徴① オートスケーリングに対応
App runnerはオートスケーリングにも対応しています。
**スケーリングする基準はリクエスト数**となっており、リクエスト数の閾値を設定することで、コンテナインスタンスの数を増やしたり減らしたりできます。

CPUやメモリの使用率などではないので、アプリケーションによってはスケーリングするための閾値を設定することが難しいそうです。

https://docs.aws.amazon.com/ja_jp/apprunner/latest/dg/manage-autoscaling.html

### 特徴② VPCへの接続もVPCからの接続もできる
プライベートネットワークに使用する VPC、サブネット、セキュリティグループを指定するVPCコネクターを設定し、**自身のVPCに接続する**ことができます。

そうすることで、VPC内のAurora等のデータベースやその他のアプリケーションとサービスが通信できるようになっています。

https://aws.amazon.com/jp/blogs/news/new-for-app-runner-vpc-support/

また、VPC内のプライベートサービスにも対応しています。
つまり**VPC内からApp Runnerサービスへのプライベートアクセスができる**ということです。

デフォルトではインターネット経由でアクセスしますが、
プライベートアクセスができることによって、アプリケーションへの受信トラフィックとアプリケーションからの送信トラフィックの両方をプライベートかつ安全に保つアーキテクチャを構築できます。

社内向けのサイトなどをApp Runnerで簡単にデプロイすることができるということですね。

https://aws.amazon.com/jp/blogs/news/deep-dive-on-aws-app-runner-private-services/

### 特徴③ 再デプロイの自動化ができる
App Runner には、自動デプロイと手動デプロイが用意されています。
その中でも自動デプロイは、
新しいイメージバージョンを**イメージリポジトリにプッシュ**するか、
新しいコミットを**コードリポジトリにプッシュ**すると、
App Runnerは**自動的にそれをサービスに配備して再デプロイ**してくれます。

つまり、App Runnerに接続されているリポジトリに**変更を加えただけで、最新版のデプロイの作業も終えている**ことになります。

そうすることでより、アプリケーションの開発にのみに集中できるようになりますね。

https://docs.aws.amazon.com/ja_jp/apprunner/latest/dg/manage-deploy.html

### 特徴④ ローンチ3年で使える用途が増えてきた

ローンチ当初の記事を見るといろいろ不便もあり、使いどころがすごく限られるみたいな結論で終わるものが多かったですが、
3年間で31件のリリースが行われ様々な機能に対応してきました。
例えば、
- WAFへの対応
- Secrets ManagerとSystemManagerからのシークレットと設定の取得
- Bitbucketソースコードリポジトリをサポート
など当初はサポートしていなかった機能も今ではサポートしています。

今までどのようなアップデートをしてきたのかも今回の勉強会のスライドにまとめてあるのでぜひ参考にしてみてください！

https://speakerdeck.com/track3jyo/app-runner-the-appeal-and-evolution-over-3-years-since-launch?slide=29



# AWS App Runnerの使いどころ

### ①インフラ管理をとにかくしたくない場合(インフラ管理をフルマネージドでおまかせしたい場合)
App Runnerはフルマネージドのサービスであるため、**サービス利用者がインフラ管理に気を取られることはありません。運用チームがない場合や小さい場合にも役立ちます**。

そのため、アプリケーションの開発だけに集中したい場合や運用チームがない場合や小さい場合にAppRunnerでのデプロイは役に立ちます。

インフラ構成はとりあえず基本的なものでいいから、アプリケーションをリリースするスタートアップ企業にもAppRunnerの検討ができそうです。

しかし、フルマネージドサービスであるため、エラーが発生してもその原因を調査することに苦労することもあるそうです。。。

### ②社内向けサイト
プライベートVPC利用が可能なため、社内向けのWebサイトのデプロイにも役立ちます。
インフラ管理にも時間をかけたくない場合でもあると思うので、AppRunnerとの相性もよさそうです。

### ③開発・テスト環境
新しいアイデアや機能を迅速に試したい開発チームにとって、App Runnerは開発やテスト環境を手軽に構築できるため、プロトタイピングや機能テストに最適です。簡単なセットアップで複数の環境を立ち上げ、実験を重ねることができます。

### ④AWS経験が少ない場合
最初からインフラを構築しようと思ったらなかなかの時間と学習コストがかかってしまいます。AppRunnerを使うことで数回のクリックでアプリケーションの構築と実行をすることができます。

これなら、AWSの経験が浅くても扱うことができそうです。

# AWS App Runner実際に触ってみた
## スタートページ
AppRunnerのページを開くと他のサービス同様このようなページから始まります。
右上のAppRunnerサービスの作成ボタンを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3515830/a8150ad9-27b5-2537-8ab2-c2e70ac21d1f.png)

## ソースとデプロイ方法の設定
作成ボタンを押すといきなりこのようなページに飛びます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3515830/3b27deca-2983-2677-bfa6-a6e08b0965dd.png)
このページではサービスのソースを選択できます。
今回はGitHubにあるソースコードから作成します。
GitHubとの接続をする必要がありますが、これも簡単に接続できました。
接続するとリポジトリとブランチ、ソースディレクトリが選択できるで、対象のものを選択します。

デプロイ設定では今回は自動を選びます。（後で自動デプロイについても試します！）

## 構築の設定
次へを押すと下の画像の画面に飛びます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3515830/37aa849c-8600-89de-e94d-f382aefc1500.png)
ここでは構築の設定ができるようです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3515830/36ad57cd-b17c-5b26-d7c8-0f968357a813.png)
App Runnerサービスが直接サポートしているプログラミング言語やアプリケーションの実行環境のことをランタイムといい、ここで選択できます。
ランタイムとポートを設定したら次へを押します。

## サービスの設定
次はサービスの設定です。
- サービス名
- CPU
- メモリ
- AutoScaling
- ヘルスチェック
- セキュリティ
- ネットワーク（エンドポイントやVPCとの接続等）
- 可観測性（X-Rayとの接続）
- タグ
の設定ができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3515830/85481d14-ca67-0ded-5e08-7e8d6eb01b48.png)
## 確認画面とデプロイの開始
次へを選択すると、今まで設定したものの確認画面が出てきます。それらを全て確認し、作成とデプロイボタンを押すとデプロイが開始されます。
![スクリーンショット 2024-03-02 145511.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3515830/b89b74e0-83bb-4498-d0c6-5725903466c0.png)
## デプロイの経過
次に遷移するこの画面で、デプロイの経過を見ることができます。
もうデプロイされているのか！はや！という感じですね。全てデフォルト設定にしたので、ここまで来るのに本当に数クリックで行けました。
![スクリーンショット 2024-03-02 145739.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3515830/a1407e01-6f96-6000-9be7-8d97ac03bf7a.png)
## デプロイ完了！
5分ほど待つと正常にデプロイされましたという通知が来ました。

![スクリーンショット 2024-03-02 151815.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3515830/338e6756-2669-8be5-3d9f-98b5edcbc3a1.png)
## 実際に開いてみる
デフォルトドメインにあるURLを開くと下の画像のようなページが開き、デプロイに成功したことが分かります！

本当に簡単でした。。。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3515830/fe881f7e-d8b3-a1f7-eb21-32aa7f16de23.png)
## 自動デプロイ
ついでに、自動デプロイも試してみました！
今回は表示される文字を変更していきます。
変更後コミットすると、デプロイがすぐに始まりました。
![スクリーンショット 2024-03-02 151933.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3515830/57049648-314b-94ca-d970-16847f0858a2.png)
## 自動デプロイも完了！
これも5分ほど待つとデプロイに成功し、URLを開くと下の画像のように文字が変わっていることが分かります。ん～すごい！とても便利ですね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3515830/cd7257a9-5b93-d64d-4bc6-1ee9766d6744.png)
## サービスのアクション
ちなみにサービスのアクションは一時停止・再開・削除の3つでした。サービスの停止削除もすぐに行えるのもいいですね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3515830/7ed6b887-6f87-5be5-efbf-c9ae26108959.png)

ということで、
AppRunnerを軽く触ってみました！
とにかく簡単・速い・楽ですね。
少ない知識の中でもとりあえずデプロイするにはいいサービスだなと思いました。

# おわりに
AppRunnerについてざっくりまとめて、ざっくり触ってみました。
百聞も一見もすることで、完全に理解することができました。

AppRunnerは特に少し触っただけでも、その便利さが伝わるサービスになっていると思うので、みなさんもぜひ触ってみてください！