Beanstalk基本コマンドとサンプル作成


自分用のcli(EB CLI)の主要なコマンドの整理のためのメモ。
まずは基本のコマンドとサンプルアプリケーションの作成

詳しくは公式を参照して下さい。
https://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/eb-cli3.html


## アプリケーションの新規作成もしくは既存アプリケーションの利用

**`eb init`**

カレントディレクトリに対してBeanstalkの初期設定を行う

プロファイルを指定して実行したい場合は`--profile [プロファイル名]` を付加して実行

    eb init --profile manjiii

プロファイルの作成に関してはこの辺を記事を参考に。

https://dev.classmethod.jp/etc/aws-eb-multi-profile/


ソースの存在しない空のディレクトリでの実行例
Pythonの環境を利用。この後は全てこのディレクトリで作業を行う

(ebコマンドは基本的にカレントディレクトリに対して行われる)

    $ mkdir beanstalk-cli-test
    $ cd beanstalk-cli-test

eb init実行

    $ eb init --profile manjiii

まずはどのリージョンを使うのか聞かれるので選択

    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)
    (default is 3): 9 #<-デフォルトで使用したいリージョンを指定

既存のアプリケーションが存在する場合それを使うか聞かれるので選択

    Select an application to use
    1) manjiii
    2) [ Create new Application ]
    (default is 2): 1 #<-使用したいアプリケーションを指定。新規なら2

使用するプラットフォームを聞かれるので選択

    Select a platform.
    1) Node.js
    2) PHP
    3) Python
    4) Ruby
    5) Tomcat
    6) IIS
    7) Docker
    8) Multi-container Docker
    9) GlassFish
    10) Go
    11) Java
    12) Packer
    (default is 1): 3 #<-Pythonを指定


使用するバージョンを聞かれるので選択

    Select a platform version.
    1) Python 3.6
    2) Python 3.4
    3) Python 3.4 (Preconfigured - Docker)
    4) Python 2.7
    5) Python
    (default is 1): 1 #<-Python 3.6を指定

ソース(コントロール)がないのでCodeCommitの設定できないけど続けるよーのメッセージが表示される

    Cannot setup CodeCommit because there is no Source Control setup, 
    continuing with initialization

作成した環境にSSHする際に使用するキーペアでどれを使うか聞かれるので選択

    Do you want to set up SSH for your instances?
    (Y/n): y

    Select a keypair.
    1) XXXXXXXX
    2) [ Create new KeyPair ]
    (default is 1): 1 #<-設定してあるのでそれを指定。なければ2

initコマンドの終了後、ファイルの確認

.elasticbeanstalk/config.ymlが作成されている

    $ tree -a
    .
    ├── .elasticbeanstalk
    │   └── config.yml
    └── .gitignore

    $ cat .elasticbeanstalk/config.yml
    branch-defaults:
    default:
        environment: null
    global:
    application_name: manjiii
    branch: null
    default_ec2_keyname: XXXXXXXX
    default_platform: Python 3.6
    default_region: ap-northeast-1
    include_git_submodules: true
    instance_profile: null
    platform_name: null
    platform_version: null
    profile: manjiii
    repository: null
    sc: null
    workspace_type: Application



## アプリケーション内に新しい環境を作成
`eb create`

テスト用の環境を作成してみる

    $ eb create

作成する名前を聞かれるので入力

    Enter Environment Name
    (default is manjiii-dev):test-env

URLに使用するprefixを聞かれるので入力（後でブラウザで確認する時などのURLに使われる）

    Enter DNS CNAME prefix
    (default is test-env): #<- デフォルト使用でそのままenter

使用するロードバランサーを聞かれるので選択

    Select a load balancer type
    1) classic
    2) application
    3) network
    (default is 2):2 #<- ALBを使用するので2、もしくはそのままenter

ソースがないからサンプル使う？と聞かれるのでYes（後で入れ替えれる）

    NOTE: The current directory does not contain any source code. Elastic Beanstalk is launching the sample application instead.
    Do you want to download the sample application into the current directory?
    (Y/n): y

環境の作成が始まる

    NFO: Downloading sample application to the current directory.
    INFO: Download complete.
    Environment details for: test-env
    Application name: manjiii
    Region: ap-northeast-1
    Deployed Version: Sample Application
    Environment ID: e-picm9u2ems
    Platform: arn:aws:elasticbeanstalk:ap-northeast-1::platform/Python 3.6 running on 64bit Amazon Linux/2.8.3
    Tier: WebServer-Standard-1.0
    CNAME: test-env2.ap-northeast-1.elasticbeanstalk.com
    Updated: 2019-XX-XX 08:18:36.607000+00:00
    Printing Status:
    2019-XX-XX 08:18:34    INFO    createEnvironment is starting.
    2019-XX-XX 08:18:36    INFO    Using elasticbeanstalk-ap-northea
    .....
数分かかるので落ち着いて待つ

作成終了

    20XX-XX-XX 08:22:17    INFO    Successfully launched environment: test-env

ファイルを確認

    $ tree -a
    .
    ├── .elasticbeanstalk
    │   └── config.yml
    ├── .gitignore
    ├── application.py #<- サンプルが保存されれいる
    └── cron.yaml #<- サンプルが保存されれいる

## アプリケーション、環境の確認

**`eb list`**

-a で全てのアプリケーション

-v で詳細情報

先程のアプリケーション、環境ができたか確認してみる

    $ eb list -va
    Region: ap-northeast-1
    Application: manjiii
        Environments: 1
            * test-env : ['i-028bfedXXXXXXXXXXX'] #<- [*]がついているのがデフォルト




## ブラウザでの確認

**`eb open`**

    $ eb open　#<- デフォルト指定のものが開く。「test-env」をしてしても良い
    #ブラウザが開いて「Congratulations」の画面が出ればOK


## ssh接続する

**`eb open`**

eb ssh -i [インスタンス名]

インスタンスに接続

接続

自動的にec2-userでログインされる

    $ eb ssh #<　インスタンスが1台しかないのでインスタンス名を省略可

    INFO: Attempting to open port 22.
    INFO: SSH port 22 open.
    INFO: Running ssh -i [init時に指定したキー]
    ec2-user@XX.XXX.XXX.XXX
    The authenticity of host 'XX.XXX.XXX.XXX (XX.XXX.XXX.XXX)' can't be established.
    ECDSA key fingerprint is SHA256:XXXXXXX
    Are you sure you want to continue connecting (yes/no)? yes #<- yes
    Warning: Permanently added '13.230.181.206' (ECDSA) to the list of known hosts.
    _____ _           _   _      ____                       _        _ _
    | ____| | __ _ ___| |_(_) ___| __ )  ___  __ _ _ __  ___| |_ __ _| | | __
    |  _| | |/ _` / __| __| |/ __|  _ \ / _ \/ _` | '_ \/ __| __/ _` | | |/ /
    | |___| | (_| \__ \ |_| | (__| |_) |  __/ (_| | | | \__ \ || (_| | |   <
    |_____|_|\__,_|___/\__|_|\___|____/ \___|\__,_|_| |_|___/\__\__,_|_|_|\_\
                                        Amazon Linux AMI
    .....
    [ec2-user@ip-XXX-XX-XX-XXX ~]$


デプロイされているファイルを確認

    [ec2-user@ip-XXX-XX-XX-XXX ~]$ ls -l /opt/python/current/app/
    合計 12
    -rw-r--r-- 1 wsgi root 5065  4月  2  2015 application.py
    -rw-r--r-- 1 wsgi root   84  4月  2  2015 cron.yaml

一旦終了
    [ec2-user@ip-XXX-XX-XX-XXX ~]$ exit


## デプロイ
**`eb deploy`**

先程のサンプルアプリケーションを変更してデプロイしてみる

sampleを編集

    $ sed -i -e "s/Congratulations/Hello Elastic Beanstalk\!/g" application.py
    #エディターで編集してもOK

デプロイ

    $ eb deploy
    Creating application version archive "app-19XXXX_175807".
    Uploading manjiii/app-190505_175807.zip to S3. This may take a while.
    Upload Complete.
    .....
    2019-XX-XX 08:58:39    INFO    Environment update completed successfully.

デプロイされているか確認

    $ eb open
    #「Hello Elastic Beanstalk!」に変わって表示されていればOK


注意
今回は利用していないが、gitなどをSouceCont利用している時は、ローカル内で編集・保存しただけだとdeployされない。
その場合はcommitするか、ステージに上げて「--staged」オプションをつけてdeployする必要がある。

## 環境の終了
**`eb terminate`**

環境を関連するリソースも含め終了する

（使用しないのにそのままにしておくと時間で課金されるものもあるため忘れずに！）

    eb terminate [環境名]

test-env を終了する

    $ eb terminate test-env

確認の為、環境名の入力を求められるので入力

    The environment "test-env" and all associated instances will be terminated.
    To confirm, type the environment name: test-env #<- 入力


削除完了、削除確認

    ....
    2019-XX-XX XX:XX:XX    INFO    terminateEnvironment completed successfully.
    $ eb list -va
    Region: ap-northeast-1
    Application: manjiii
        Environments: 0



一旦ここまで。


追記）
[続き](https://qiita.com/Manjiii/items/bcda9001f41c09fde5fc)を作成しました。