NestJS をシンプルに初期構築から試す（その３ AWS App Runner として動かす）

# はじめに
このページは、その３（その１のつづき）です。
- [その１](https://qiita.com/ssugimoto/items/210c21ec18b3c5c3383f)では、NestJSのWebフレームワークとしてローカル環境として動かす初期構築まで
- [その２](https://qiita.com/ssugimoto/items/f13b3a9d871734a912bb)では、Amazon API Gateway + AWS Lambdaへデプロイを行います

## 今回その３
- 今回は、NestJSを手軽にAWSクラウド上で動かすことが可能な AWS App Runnerを使ってみます
- [その１](https://qiita.com/ssugimoto/items/210c21ec18b3c5c3383f9)でのNestJS cliで初期構築したものをApp RunnerでGitHub接続して使ってみます（コンテナではなく、ソースをそのまま動かす）

### シビア・重要な問題・課題
- 2023-08-27時点 <font color="Red">問題・課題が１つあり App Runnerは Node.js16まで</font>の対応である
- https://github.com/aws/apprunner-roadmap/issues/120 を見ても  2023-05-27 に「working on it」に変わってから進んでいない。今日2023-08-27で3ヶ月が経過した。
- AWSにおける Node.js への対応は、はっきりいって遅い。
- v18 がリリースされ1年経過してもなかなか取り込まれない。AWS Lambda、AWS Amplfiy、App Runner等 ランタイムでNode.jsを使うが、次のv20がActiveやLTSにならないとv18を対応しないくらいに遅い。なお、AWS LambdaではNode.js v18のランタイム利用は対応済である。
- そして、Node.js v16 は 2023-09-11に End Of Lifeを迎える状況である。
- App RunnerでのNode.js利用は商用サービスでは使わない方が無難と思われる。

## GitHubリポジトリ
- 試した内容は、GitHubに公開しています
- https://github.com/ssugimoto/serverless-framework-nestjs-example/branches

|記事 |ブランチ |内容|
|---|---|---|
|[その３](https://github.com/ssugimoto/serverless-framework-nestjs-example/tree/feature/example-step3-aws-app-runner)|feature/example-step3-aws-app-runner |AWS App Runner |

## 手順
いたって簡単でAWSマネジメントコンソールで選択、ボタンを押していく

### 1. ステップ 1 ソースおよびデプロイ
![AppRunner-01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1482752/f49e98c1-d1c6-9bed-2bf9-4a3d0b053ca0.png)

リポジトリタイプ：ソースコードリポジトリ
GitHub Connection ：新規作成
リポジトリ：ssugimoto/serverless-framework-nestjs-example
ブランチ：feature/example-step3-aws-app-runner 

### 2. ステップ 2 構築を設定

![AppRunner-02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1482752/f68c7af2-a04a-8354-bf94-89b19603ca6a.png)

設定ファイル：ここですべての設定を構成する
ランタイム：Nodejs 16 （18は選べなかった）
構築コマンド：npm install
開始コマンド：npm start
ポート：3000

### 3. ステップ 3 サービスを設定
![AppRunner-03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1482752/d5e240f8-1a72-51f3-df42-7c50fca2aee1.png)

試すだけなので最小のものを選ぶ
仮想CPU：0.25vCPU
仮想メモリ：0.5GB

![AppRunner-04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1482752/256107e9-e487-cb6a-c950-9d58dce6b7b9.png)


![AppRunner-05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1482752/1ca069f2-886d-e93c-3c38-250a6f2c812b.png)
タグは、自分の名前や日付等をつけておくと後からわかりやすい

### 4. ステップ 4 確認および作成

![AppRunner-06-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1482752/bf5808f6-250f-17eb-7de8-43115f8ef0c6.png)

![AppRunner-06-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1482752/d70c4041-2858-cf29-e1fe-1d984a7e7638.png)

![AppRunner-06-3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1482752/f8523bfd-50b2-a284-2e46-9857aec1470f.png)


「作成とデプロイ」ボタンを押す
後は、待ち

### 5. デプロイ中
![AppRunner-07-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1482752/d2855a9f-2fd4-045f-b1d3-5dbffd3216ee.png)

### 6. デプロイ完了
![AppRunner-07-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1482752/83fcccbe-de03-1c34-315e-157469303a93.png)
- 「デフォルトドメイン」の項目がAWSが自動生成してくれたURLです
![AppRunner-07-3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1482752/6604ba5b-21f5-ee85-0c65-ab7d4571e110.png)

### 7. curl コマンドでAPI実行

```
>curl https://jmhewqea2s-xxx.us-east-1.awsapprunner.com/
Hello World!
```

なお、上記URLは消しているので無効です。


### 8. お掃除

![AppRunner-08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1482752/7132d952-8d1b-4630-294a-9b9960619642.png)


App Runnerは、サーバーレスとは異なり ALB、Fargateが作成されて動くため、利用料が日に日に増えていくため消しましょう