node.jsのアプリケーションをAWS ElasticBeanstalkにデプロイしてみる。

node.jsの非常に簡素なアプリケーションをAWS ElasticBeanstalkを用いて公開するやり方をまとめていく。
これは下の動画に従ったものであるので下の動画を見てもいい。また、公式のドキュメントにもnode.jsとExpressを用いたアプリケーションの公開の仕方があった。この記事では最低限のことしか書かないので実際に実用性のあるアプリケーションを公開する際には公式ドキュメントを参照してほしい。

https://www.youtube.com/watch?v=0oIcGPK8mQE

https://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/create_deploy_nodejs_express.html

まず、作業に移る前に必要なことがいくつかある。

Gitへの登録とAWSアカウントの作成である。
こちらは行っていることを前提に進めていく、難しい作業ではないので各自調べて行ってほしい。

そして、ElasticBeansをコマンド上で操作するためにEB CLIのダウンロードをする必要がある。

https://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/eb-cli3-install-advanced.html

こちらのサイトを参考にインストールしてほしい。
ターミナル上で以下のコマンドを打てば良い。

```
$ pip install awsebcli --upgrade --user
```

なお、私の場合上手くインストールできなかったので--userを省いてインストールすることで上手く動作するようになった。
インストールされているかどうかはターミナル上で

```
eb --version
```

と打てば良い。インストールが完了していればebcliのバージョンを返してくれる。
上手くいかなければ上に貼り付けた公式のドキュメントを参照してほしい。

その後、ターミナルを開いてアプリケーション用のディレクトリを作成していく。
さらに、.gitリポジトリを作成し,コードエディタを開く。

```
$ mkdir nodejs-project1
$ cd nodejs-project1
$ git init
$code .
```

そして、プロジェクトディレクトリの中に.gitignoreファイルを作成してその中に以下のように書き込む。
ここに書き込まれたファイルはGitの処理の対象にはならない。

```
node_modules/
.gitignore
.elasticbeanstalk/
```
そして、ターミナル上でelasticbeansの利用を始める
```
eb init --platform node.js --region ap-northeast-1
```
ここでのリージョンはアカウント作成時に指定したリージョン。

AWSのコンソール画面の右上。下の画像だとTokyoと書かれた部分をクリックすると自分のリージョンが分かる。
そして、Enterを押すとアカウントのIdとSecret Idが求められる。
それは、AWSのコンソール画面右上の今度はYusuke Someyaと書かれている部分のSecurity Credentialwを選択してスクロースしていくとAccess keysというところがあるのでそこからCreate access keyを選択してコピペする。secretの方も同時に作成される。

![Untitled (9).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2971002/a52da417-831a-d1d0-02fd-7e2715973e07.png)

これを実行すると、.elasticbeanstalkというフォルダが作成され、中にconfig.ymlが作成される。
ファイルの中は最初nullという値が多くある。これを今度は埋めていく。

今回はnullの部分にデフォルトの値を入れいていく。

```
eb create --sample nodejs-project1-env
```

サンプルの値をnodejs-project1-envという環境名で設定する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2971002/03a25501-464d-79a5-57d8-81c59b7d45a9.png)

するとこんな感じに埋まる。

そして、プロジェクトディレクトリ直下に.ebextensionsというフォルダを作成する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2971002/2c1fefa9-8715-4c88-e14a-c3b8349c4ad1.png)

そして、そのフォルダの中にProcfileというものを作成する。

```
web: npm start
```

そして、Procfileの中にこの記述をする。

その後、node.jsのパッケージをインストールする。ターミナル上で以下のコードを打つ。

```
npm init
```

entry pointだけapp.jsに変更してそれ以外かすべてEnterキーを押せば良い。

package.jsonファイルが作成されたと思うので、その中のScriptの中に、"start": "node .",と書き加える。すなわち、package.jsonの中身は以下のようになる。

```
{
  "name": "nodejs-project",
  "version": "1.0.0",
  "description": "",
  "main": "app.js",
  "scripts": {
    "start": "node .",
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "express": "^4.18.2"
  }
}
```
そうしたら、ターミナル上でExpressをダウンロードする。
```
npm i express
```

そうしたら、プロジェクト直下にapp.jsを作成して記述していく。

```
const express = require("express");

const app = express();

app.get("/", (req, res) => {
    res.send("This is my first node.js project :)")
})

app.listen(process.env.PORT || 3000);
```

これで準備ができたので、ターミナル上でgit上にcommitしていく。
そして、elasticbeanstalkでデプロイをする。環境名とともに以下のコードを入力する。
```
git add .
git commit -m"first express app"
eb deploy nodejs-project1-env
```

正常にデプロイが完了したら、
```
eb open
```
とすると、作成したアプリケーションが表示される。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2971002/9c0d4663-094f-4468-f68d-1e2eefe9d780.png)

http://nodejs-project1-env.eba-qchvdjdd.ap-northeast-1.elasticbeanstalk.com/

これしか表示されないが上手く出来たのである。以上。