AWS Elastic Beanstalkを試してみる


# はじめに
AWSのElastic Beanstalkを試してみたいと思います。
特徴はChatGPTに聞いたらこう教えてくれました。

> Beanstalkは、AWSでウェブアプリケーションを立ち上げて稼働させるのに最も速い方法です。以下のような特徴があります。
>多彩なアプリケーションプラットフォーム（Java、.NET、PHP、Node.jsなど）
>- アプリケーションデプロイの多様な選択肢（ZIPファイル、Git、Dockerなど）
>- モニタリング（AWS Management ConsoleやAmazon CloudWatchでアプリケーションの状態やメトリクスを確認できる）
>- 管理と更新（AWS CLIやSDKを使ってアプリケーションや環境の設定を変更できる）
>- スケーリング（オートスケーリンググループやロードバランサーを使ってトラフィックに応じてインスタンス数を調整できる）
>- カスタマイズ（設定ファイルや拡張機能を使ってインフラストラクチャの詳細を変更できる）
>- コンプライアンス（PCI DSS、HIPAA、ISO 27001などの規制に準拠している）

# サンプルアプリのダウンロード
まずは使用するサンプルアプリをこちらからダウンロードします。

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

今回はNode.jsを使ってみたいと思います。

Zipファイルを解凍すると、こうなっています。

```
% ls nodejs
EBSampleApp-Nodejs.iml	cron.yaml		package.json
app.js			index.html
```


# Beanstalkの設定
アプリケーションを作成して、そのアプリを動かす環境を作成します。

## アプリケーションの作成
AWSのコンソールから`Create Application`をクリック

![スクリーンショット 2023-02-19 9.52.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/492530/d12395ef-d50b-757a-c65b-f61f78bd6661.png)

ここではこのように設定して`より多くのオプションの設定`をクリック
![スクリーンショット 2023-02-20 15.39.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/492530/b87b595f-1cc9-22c3-be89-3fdac74a2e8b.png)

ここで`アプリケーションの作成`をクリックすると、アプリケーションと環境が同時に作成されてしまうようです。
この時点でアプリケーションのみ作成されます。

## 環境の作成
環境を作っていきます。

左メニューの`アプリケーション`をクリック
![スクリーンショット 2023-02-20 14.29.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/492530/f7d5e88c-90c4-a99f-43db-85223f436111.png)

作成した`nodejsApp`をクリック
![スクリーンショット 2023-02-20 15.43.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/492530/9838dae3-bca3-5bf4-ad27-30154a59c483.png)

`新しい環境の作成`をクリック
![スクリーンショット 2023-02-20 15.44.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/492530/3806f669-585b-dc60-3bec-d9028e052663.png)


`選択`をクリック
![スクリーンショット 2023-02-20 15.45.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/492530/1ee1262e-dbdf-0b1b-00e1-d772a4a501cb.png)


このように設定して`より多くのオプションの設定`をクリック
ソースコードはサンプルコードそのままをZip形式でアップロードします。

![スクリーンショット 2023-02-20 15.46.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/492530/365e2ca5-92f0-2a30-b46b-e6c755c32f03.png)

ここでは開発環境を想定しているので、`単一インスタンス`にチェックが入っていることを確認して、一番下の`環境の作成`をクリック
![スクリーンショット 2023-02-20 15.48.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/492530/fe218d68-be58-5d3d-bdee-0202f684f483.png)

![スクリーンショット 2023-02-20 15.50.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/492530/b0d52f34-b43a-5ce4-55e5-8984abb167cc.png)

しばらく待ちます。
![スクリーンショット 2023-02-20 15.50.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/492530/6e24aaf7-f35e-7bf4-4e09-dbedcdc23b2f.png)

構築が環境するとこうなります。
![スクリーンショット 2023-02-20 15.58.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/492530/60ce1b9f-ede2-5878-beec-4a4110424670.png)

左上のURLをクリックすると、画面を確認できます。
![スクリーンショット 2023-02-19 10.52.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/492530/cfb0fbda-94e1-77b9-60fa-14ac2342e3e5.png)

### 設定内容の確認
作成された構成の設定内容を確認してみます。左メニューの`設定`をクリックします。

![スクリーンショット 2023-02-20 16.02.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/492530/85774734-9486-d97f-c4e8-875ef6ea320e.png)

EC2のコンソールでも確認できます。
![スクリーンショット 2023-02-20 16.05.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/492530/844653cf-2484-6c71-3966-7b1f3bcd82ea.png)


## 新環境の作成
開発が終わったと想定して、本番環境を作っていきます。

`新しい環境の作成`をクリック
![スクリーンショット 2023-02-20 16.09.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/492530/3ab987b7-ebbc-5cdd-5547-df28b7042dc2.png)

`選択`をクリック
![スクリーンショット 2023-02-20 16.11.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/492530/11a5ea68-2fbd-b32c-2533-333e244f7e40.png)

このように設定して、`より多くのオプションの設定`をクリック
![スクリーンショット 2023-02-20 16.12.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/492530/2f811975-3cc0-bc82-6552-f685bfb474f1.png)

今回は本番環境を想定しているので、`高可用性`を選択して`環境の作成`をクリック
![スクリーンショット 2023-02-20 16.13.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/492530/06022c21-7b05-a706-7aa7-51e638b95159.png)

しばらく待つとこのように環境作成が完了します。
![スクリーンショット 2023-02-20 16.23.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/492530/5672e231-1bfe-48d3-11f9-4ed4d456d400.png)

同様にURLをクリックすると、変更したソースコードで画面が表示されます。
![スクリーンショット 2023-02-20 15.06.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/492530/c944e35a-a6e0-5dc6-29e9-eaadb32d04dc.png)

### 設定内容の確認
設定内容を確認します。
ロードバランサーがプロビジョニングされていて、オートスケールも設定されていますね。
![スクリーンショット 2023-02-20 16.25.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/492530/51b23cbc-3936-addb-c939-0fc691437081.png)

EC2はDev環境と同様に1インスタンスプロビジョニングされています。
![スクリーンショット 2023-02-20 16.27.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/492530/fda4f147-2685-0cb4-e6f4-d9f909c8ff76.png)

Prd環境の方はLBもありますね。
![スクリーンショット 2023-02-20 16.28.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/492530/f4cf68a3-ebdf-100d-e7ab-7ee309c60d9a.png)



### （参考）
本番用のソースコードはサンプルの色をいじっただけですが、圧縮する際にこのようにソースの親ディレクトリで圧縮すると、Beanstalkの環境作成時にエラーとなりました。相対パスが入ってるのがダメみたいです。

```
% zip nodejs-prod.zip nodejs-prod/*
  adding: nodejs-prod/EBSampleApp-Nodejs.iml (deflated 47%)
  adding: nodejs-prod/app.js (deflated 52%)
  adding: nodejs-prod/cron.yaml (deflated 24%)
  adding: nodejs-prod/index.html (deflated 72%)
  adding: nodejs-prod/package.json (deflated 23%)
```

このようにコードと同じディレクトリで圧縮することによって成功しました。

```
% zip ../nodejs-prod.zip -r .
  adding: EBSampleApp-Nodejs.iml (deflated 47%)
  adding: cron.yaml (deflated 24%)
  adding: index.html (deflated 72%)
  adding: package.json (deflated 23%)
  adding: .ebextensions/ (stored 0%)
  adding: .ebextensions/logging.config (deflated 53%)
  adding: app.js (deflated 52%)
```