5分でAWS Elastic Beanstalk(作って、修正して、お片付け)


![Screenshot from 2019-09-12 22-56-44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/216527/e391e49f-8b08-ffab-1241-5bdbb6bf6897.png)


AWS Elastic BeanstalkをCLIから動かし体験するのは簡単です。操作する時間は5分程度でした。
AWSのスライドにあったサンプルを参考に実施しましたが、若干CLIの操作感が違ったのでまとめてみました。

Elastic Beanstalkとは？は省略します。
まずは動かしたほうが良いと思いましたので概要が記載されている参考スライドのURLは最後に記載しました。


# 目次
- 1. アプリケーションの作成、環境の作成（3分）
- 2. コードを修正しデプロイ（1分）
- 3. お片付け（1分）

# 1. アプリケーションの作成、環境の作成（3分）
- Elastic Beanstalk用のCLIをインストールしていない方はインストールします。
- サンプルコードを公式の`awslabs`からクローンします。

~~~
# ebcli
$ pip install --upgrade awsebcli

# clone sample code (awslabs)
$ git clone https://github.com/awslabs/eb-node-express-sample.git

$ cd eb-node-express-sample
~~~


- `eb init`でアプリケーションを作成していきます。
- 選択肢は基本デフォルトでEnterでOKです。
- コードの配置場所は`CodeCommit`を選択しました。

~~~
# Elastic Beanstalk アプリケーションの作成
$ eb init

Select a default region
1) us-east-1 : US East (N. Virginia)
2) us-west-1 : US West (N. California)
3) us-west-2 : US West (Oregon)
4) eu-west-1 : EU (Ireland)
5) eu-central-1 : EU (Frankfurt)
6) ap-south-1 : Asia Pacific (Mumbai)
7) ap-southeast-1 : Asia Pacific (Singapore)
8) ap-southeast-2 : Asia Pacific (Sydney)
9) ap-northeast-1 : Asia Pacific (Tokyo)
10) ap-northeast-2 : Asia Pacific (Seoul)
11) sa-east-1 : South America (Sao Paulo)
12) cn-north-1 : China (Beijing)
13) cn-northwest-1 : China (Ningxia)
14) us-east-2 : US East (Ohio)
15) ca-central-1 : Canada (Central)
16) eu-west-2 : EU (London)
17) eu-west-3 : EU (Paris)
18) eu-north-1 : EU (Stockholm)
19) ap-east-1 : Asia Pacific (Hong Kong)
20) me-south-1 : Middle East (Bahrain)
(default is 3): 9

Enter Application Name
(default is "eb-node-express-sample"): 
Application eb-node-express-sample has been created.

Enter Application Name
(default is "eb-node-express-sample"): 
Application eb-node-express-sample has been created.

It appears you are using Node.js. Is this correct?
(Y/n): y
Do you wish to continue with CodeCommit? (y/N) (default is n): y

Select a repository
1) icckblog
2) icck
3) [ Create new Repository ]
(default is 3): 

Enter Repository Name
(default is "origin"): icck-beanstalk
Successfully created repository: icck-beanstalk

Enter Branch Name
***** Must have at least one commit to create a new branch with CodeCommit *****
(default is "master"): 
Successfully created branch: master
Do you want to set up SSH for your instances?
(Y/n): y

Select a keypair.
1) icck-key
2) [ Create new KeyPair ]
(default is 1): 
~~~

- マネジメントコンソールから見ると、アプリケーションが作成されていることが確認できます。

![Screenshot from 2019-09-12 07-29-28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/216527/dae12fc0-8a87-804f-a89e-042ea6395c77.png)

- `eb create`で作成されたアプリケーション上に環境を作成しデプロイしていきます。
- お試しの場合は、すべてEnterでOKです。
- `Created`のログに注目してください。何が作成されたのかがわかります。

~~~
# 環境作成、サンプルコードのデプロイ
$ eb create

Enter Environment Name
(default is eb-node-express-sample-dev): 
Enter DNS CNAME prefix
(default is eb-node-express-sample-dev2): 

Select a load balancer type
1) classic
2) application
3) network
(default is 2): 
Starting environment deployment via CodeCommit
--- Waiting for Application Versions to be pre-processed ---
Finished processing application version app-f535-190912_072400
Setting up default branch
Environment details for: eb-node-express-sample-dev
  Application name: eb-node-express-sample
  Region: ap-northeast-1
  Deployed Version: app-f535-190912_072400
  Environment ID: e-dtmeq2z383
  Platform: arn:aws:elasticbeanstalk:ap-northeast-1::platform/Node.js running on 64bit Amazon Linux/4.10.2
  Tier: WebServer-Standard-1.0
  CNAME: eb-node-express-sample-dev2.ap-northeast-1.elasticbeanstalk.com
  Updated: 2019-09-11 22:24:12.301000+00:00
Printing Status:
2019-09-11 22:24:10    INFO    createEnvironment is starting.
2019-09-11 22:24:12    INFO    Using elasticbeanstalk-ap-northeast-1-XXXXXXXXXXXX as Amazon S3 storage bucket for environment data.
2019-09-11 22:24:34    INFO    Created target group named: arn:aws:elasticloadbalancing:ap-northeast-1:XXXXXXXXXXXX:targetgroup/awseb-AWSEB-GPAQCKBZJMVS/e4cfeab1d55601ac
2019-09-11 22:24:34    INFO    Created security group named: sg-02cccd100da94f25a
2019-09-11 22:24:50    INFO    Created security group named: awseb-e-dtmeq2z383-stack-AWSEBSecurityGroup-1N7GST9R175WU
2019-09-11 22:24:50    INFO    Created Auto Scaling launch configuration named: awseb-e-dtmeq2z383-stack-AWSEBAutoScalingLaunchConfiguration-1U0A0K88ZUI0F
2019-09-11 22:26:23    INFO    Created Auto Scaling group named: awseb-e-dtmeq2z383-stack-AWSEBAutoScalingGroup-BTFZEF3R4W30
2019-09-11 22:26:23    INFO    Waiting for EC2 instances to launch. This may take a few minutes.
2019-09-11 22:26:43    INFO    Created load balancer named: arn:aws:elasticloadbalancing:ap-northeast-1:XXXXXXXXXXXX:loadbalancer/app/awseb-AWSEB-RCB8AUBQGVCD/1a1baa125599825e
2019-09-11 22:26:58    INFO    Created Auto Scaling group policy named: arn:aws:autoscaling:ap-northeast-1:XXXXXXXXXXXX:scalingPolicy:39da1ac4-467e-4f75-9bf0-2ffc278599ae:autoScalingGroupName/awseb-e-dtmeq2z383-stack-AWSEBAutoScalingGroup-BTFZEF3R4W30:policyName/awseb-e-dtmeq2z383-stack-AWSEBAutoScalingScaleDownPolicy-1GV862ZC3IU9S
2019-09-11 22:26:58    INFO    Created Auto Scaling group policy named: arn:aws:autoscaling:ap-northeast-1:XXXXXXXXXXXX:scalingPolicy:ea6ca9d9-70e0-4876-a8d1-ccd39f7fc792:autoScalingGroupName/awseb-e-dtmeq2z383-stack-AWSEBAutoScalingGroup-BTFZEF3R4W30:policyName/awseb-e-dtmeq2z383-stack-AWSEBAutoScalingScaleUpPolicy-E1P5UNOBBVLD
2019-09-11 22:26:58    INFO    Created CloudWatch alarm named: awseb-e-dtmeq2z383-stack-AWSEBCloudwatchAlarmHigh-156QZDVGO8FLT
2019-09-11 22:27:14    INFO    Created Load Balancer listener named: arn:aws:elasticloadbalancing:ap-northeast-1:XXXXXXXXXXXX:listener/app/awseb-AWSEB-RCB8AUBQGVCD/1a1baa125599825e/49b137eaa093e79f
2019-09-11 22:27:29    INFO    Created CloudWatch alarm named: awseb-e-dtmeq2z383-stack-AWSEBCloudwatchAlarmLow-WLFI4PMSK7SB
2019-09-11 22:28:30    INFO    Application available at eb-node-express-sample-dev2.ap-northeast-1.elasticbeanstalk.com.
2019-09-11 22:28:30    INFO    Successfully launched environment: eb-node-express-sample-dev
~~~
- マネジメントコンソールから見ると、環境が作成されていることが確認できます。

![Screenshot from 2019-09-12 07-29-44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/216527/87cfd181-6c1a-2b1e-693d-1a86e388f6c3.png)

- `eb open`でアプリケーションのURLでブラウザ表示されます。まずはアプリ完成です！

~~~
# ブラウザ表示
$ eb open
~~~

![Screenshot from 2019-09-12 07-31-28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/216527/11cbfad6-5b25-98e0-540c-754761fb3b33.png)

# 2. コードを修正しデプロイ（1分）

- 画面を簡単に修正し、デプロイをする流れを見ていきます。
- `index.ejs`の中の`Comming...`の後ろに`in Japan`と追記してgitにpushしました。
- `eb deploy`で`CodeCommit`にpushされた内容がデプロイされます。

~~~
# UIを変更してデプロイ
$ vim ./views/index.ejs

$ git commit -am "modefy UI"

$ eb deploy
Starting environment deployment via CodeCommit
--- Waiting for Application Versions to be pre-processed ---
Finished processing application version app-6635-190912_073920
2019-09-11 22:39:32    INFO    Environment update is starting.      
2019-09-11 22:39:38    INFO    Deploying new version to instance(s).
2019-09-11 22:40:08    INFO    New application version was deployed to running EC2 instances.
2019-09-11 22:40:08    INFO    Environment update completed successfully.
~~~

~~~
# ブラウザ表示
$ eb open
~~~
- 表示画面が変更されました。

![Screenshot from 2019-09-12 07-40-49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/216527/eab8aa4d-a0db-4c97-c941-b3eab5489b62.png)

# 3. お片付け（1分）

- 最後に今回作成したものを全て削除していきます。
- `eb terminate --all`でアプリケーション名を入力して削除します。

~~~
# アプリケーションと環境の削除
$ eb terminate --all
The application "eb-node-express-sample" and all its resources will be deleted.
This application currently has the following:
Running environments: 1
Configuration templates: 0
Application versions: 2

To confirm, type the application name: eb-node-express-sample
Removing application versions from s3.
2019-09-11 22:43:23    INFO    deleteApplication is starting.
2019-09-11 22:43:24    INFO    Invoking Environment Termination workflows.
2019-09-11 22:46:37    INFO    The environment termination step is done.
2019-09-11 22:46:38    INFO    The application has been deleted successfully.
~~~
- CodeCommitは削除されないため、別途削除します。

~~~
# CodeCommitリポジトリの削除
$ aws codecommit delete-repository --repository-name icck-beanstalk
~~~

# さいごに
- [EBコマンドリファレンス](https://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/eb3-cmd-commands.html)により多くの便利コマンドが記載されています。`eb list`や`eb ssh`などかなり便利なコマンドがたくさんあります。
- 今回は実施していませんが、`CodePipeline`を利用するとpush->deployを自動化することが出来ます。
- 最後に[参考にしたスライド](https://www.slideshare.net/AmazonWebServicesJapan/aws-black-belt-online-seminar-2017-aws-elastic-beanstalk)です。こちらで概要を正しくおさえることができます。
- 読んで頂きありがとうございました。