NestJSをAPI Gateway +  AWS Lambdaで構成する（その２）- NestJS実行用のローカル環境構築


# つづき、その２
- [その１ NestJSやLambdaでのnode.jsの話し](https://qiita.com/ssugimoto/items/988320d34022555401fb)
- その２ NestJSのサンプルを動かす、Hello World
- [その３ コントローラーを追加する](https://qiita.com/ssugimoto/items/fcfbc9a176bcf41d7b45)
- [その４ DTOを使う](https://qiita.com/ssugimoto/items/613b8ab54bd6f8de043c)
- [その５ CRUD generatorを使い modules,controller, service, dto を生成する](https://qiita.com/ssugimoto/items/64a9c3cd5cb33e06f4c9)
- [その６ インターセプター](https://qiita.com/ssugimoto/items/dce542a78fdfbaf1e434)
- [その７ ORMでRDBデータベースを扱う](https://qiita.com/ssugimoto/items/45e23d1b2879b083267c)
- [その８ NestJSをAPI Gateway＋AWS Lambdaとしてデプロイ](https://qiita.com/ssugimoto/items/74c26a8219a944d4acc4)


## 動かし方
- REAEMEは、こちら https://github.com/serverless/examples/blob/v3/aws-node-typescript-nest/README.md
## 上記のREAMEだけではよくわからない場合に必要なものは
### Node.js実行環境
- コンテナを使うことを推奨
     - 環境を汚さない、人ごとや環境依存しない、他のプロジェクトが動かなくなるようなことはない
- Node.js 16 または Node.js 18（18を使う方が良いです）
- バージョンやコマンド確認
```
which node
node -v
npm -v
```

### serverless frameworkインストール、V3を使う
- V3
- グローバルインストール

```
npm install -g serverless
npm install -g serverless@3.33.0
```

または、
https://www.serverless.com/framework/docs/install-standalone にあるような

2023-07-14時点のv3最新バージョン
```
curl -o- -L https://slss.io/install | VERSION=3.33.0 bash
```

公式の内容
```
curl -o- -L https://slss.io/install | VERSION=2.72.2 bash
```

WindowsでもWSL2とDocker Desktop等を使い、コンテナ環境を推奨


#### 環境例
```
root ➜ /workspaces $ node  -v
v16.17.0
root ➜ /workspaces $ npm -v
8.15.0

root ➜ /workspaces $ sls -v
Framework Core: 3.32.2
Plugin: 6.2.3
SDK: 4.3.2

```


### 「aws-node-typescript-nest」で npm install

- serverless frameworkのプラグイン等をインストールする
 package.json を抜粋すると以下になり、公式の方だとバージョンが古くて動かない
```package.json

  "dependencies": {
    "aws-serverless-express": "^3.3.5",


  "devDependencies": {
    "serverless": "^3.32.2",
    "serverless-offline": "12.0.4",
    "serverless-plugin-optimize": "^4.0.2-rc.1",
    "serverless-plugin-typescript": "^2.1.5",
```


```
$ cd sls-examples/aws-node-typescript-nest
$ npm install
```

### アプリの開始

```
npm start
```

package.jsonをみるとわかりますが、`npm start` では 以下を行っている
```package.json
"start": "sls offline start",
```


- コマンド後に、以下のようなログが表示されたら NestJSが起動している、ローカルでの仮想API Gateway相当がListenしている

```
Typescript compiled.
Watching typescript files...

Starting Offline at stage dev (us-east-1)

Offline [http for lambda] listening on http://localhost:3002
Function names exposed for local invocation by aws-sdk:
           * main: serverless-nest-example-dev-main

   ┌────────────────────────────────────────────────────────────────────────┐
   │                                                                        │
   │   ANY | http://localhost:3000/dev/{proxy*}                             │
   │   POST | http://localhost:3000/2015-03-31/functions/main/invocations   │
   │                                                                        │
   └────────────────────────────────────────────────────────────────────────┘

Server ready: http://localhost:3000 🚀
```

- 動作確認
```
$ curl http://localhost:3000/dev/hello
Hello World! my

```


### GitHub、forkして作成したブランチ参照
- https://github.com/ssugimoto/sls-examples/tree/feature/v3-aws-nest

- Commit id https://github.com/ssugimoto/sls-examples/commit/096419d239b2676f22eb3bb6bfd0fdf3205020f7