JAWS-UG AWS CLI カンファレンス 2016 ミニハンズオン

# 概要

AWS CLIを使い、Docker on Elastic Beanstalkで簡単にアプリケーションを公開するまでの流れを体感して頂きます。

Dockerについては、詳しく解説しません。

# 前提条件

- AWS CLIを実行する環境構築が完了していること（インストールおよび認証情報の設定など）
- 本日のハンズオン手順は、以下の権限を有している認証情報で動作確認を行いました。
    - EC2のフルコントロール権限
    - S3のフルコントロール権限
    - Elastic Beanstalkのフルコントロール権限
    - stsのフルコントロール権限
- 本日のハンズオン手順は、以下の条件で検証しました。
    - Amazon Linux上で操作すること（Macであれば同じ手順で実行できるはずです）
    - 東京リージョンを指定（Elastic Beanstalkをサポートしている他のリージョンでも動作するはずです）
    - Default VPCが存在する
    - Internet facingなサブネット（Pubic Subnet）がDefault VPCに構成されている

作業環境が整っていない場合は、[JAWS-UG CLI 総合案内](http://qiita.com/tcsh/items/14c3278f69ab073afe0f)をご確認ください。

# 0. 準備

## 0.1. リージョンを指定

```bash:コマンド
export AWS_DEFAULT_REGION='ap-northeast-1'
```

## 0.2. 資格情報を確認


```bash:コマンド
aws configure list
```

インスタンスプロファイルを設定したEC2インスタンスでアクセスキーを設定せずに実行した場合、以下のようになります。

```text:結果
Name                    Value             Type    Location
----                    -----             ----    --------
profile                <not set>             None    None
access_key     ****************RDPA         iam-role
secret_key     ****************9GA8         iam-role
region           ap-northeast-1              env    AWS_DEFAULT_REGION
```

## 0.3. バージョン確認

```bash:コマンド
aws --version
```

```text:結果
aws-cli/1.10.46 Python/2.7.10 Linux/4.4.14-24.50.amzn1.x86_64 botocore/1.4.36
```

## 0.4. バージョンアップ（必要に応じて）

```bash:コマンド
sudo pip install -U awscli
```


# 1． アプリケーションの作成

## 1.1. アプリケーション名の決定

```bash:コマンド
EB_APP_NAME="AWS CLI Conf Elastic Beanstalk Application 20160718"
```

## 1.2. アプリケーションの不存在確認 (describe-applications)

```bash:コマンド
aws elasticbeanstalk describe-applications \
    --application-names "${EB_APP_NAME}"
```

```json:結果:
{
    "Applications": []
}
```

※以降の手順では、手順を再利用しやすいように変数を利用しています。

## 1.3. アプリケーション作成

### 変数の確認

```bash:コマンド
cat << ETX

    EB_APP_NAME: "${EB_APP_NAME}"

ETX
```

```text:結果

    EB_APP_NAME: "AWS CLI Conf Elastic Beanstalk Application"

```

### アプリケーションの作成

```bash:コマンド
aws elasticbeanstalk create-application \
    --application-name "${EB_APP_NAME}"
```

```json:結果
{
    "Application": {
        "ApplicationName": "AWS CLI Conf Elastic Beanstalk Application",
        "ConfigurationTemplates": [],
        "DateUpdated": "2016-06-25T09:10:37.175Z",
        "DateCreated": "2016-06-25T09:10:37.175Z"
    }
}
```

## 1.4. イベント確認

Elastic Beanstalkに対する操作によって発生したイベントを確認することができます。

```bash:コマンド
aws elasticbeanstalk describe-events \
    --application-name "${EB_APP_NAME}"
```

```json:結果
    (略)
```

# 2． アプリケーションバージョンの作成

デプロイするアプリケーションを定義します。
ここでは、サンプルアプリケーションを指定します。（特にソースを指定しない場合、サンプルアプリケーションが指定されます。）

## 2.1. 最初のversion名の決定

```bash:コマンド
EB_VER_LABEL="Sample Application"
```

## 2.2. アプリケーションバージョンの不存在を確認

```bash:コマンド
aws elasticbeanstalk describe-application-versions \
    --application-name "${EB_APP_NAME}"
```

```json:結果
{
    "ApplicationVersions": []
}
```

## 2.3. アプリケーションバージョンの作成

### 変数の確認

```bash:コマンド
cat << ETX

    EB_APP_NAME: "${EB_APP_NAME}"
    EB_VER_LABEL: "${EB_VER_LABEL}"

ETX
```

```text:結果

    EB_APP_NAME: "AWS CLI Conf Elastic Beanstalk Application"
    EB_VER_LABEL: "Sample Application"

```

### アプリケーションバージョンの作成

```bash:コマンド
aws elasticbeanstalk create-application-version \
    --application-name "${EB_APP_NAME}" \
    --version-label "${EB_VER_LABEL}"
```

```json:結果
{
    "ApplicationVersion": {
        "ApplicationName": "AWS CLI Conf Elastic Beanstalk Application",
        "Status": "UNPROCESSED",
        "VersionLabel": "Sample Application",
        "DateCreated": "2016-06-25T09:25:23.840Z",
        "DateUpdated": "2016-06-25T09:25:23.840Z",
        "SourceBundle": {
            "S3Bucket": "elasticbeanstalk-ap-northeast-1",
            "S3Key": "GenericSampleApplication"
        }
    }
}
```


# 3． 環境の作成

アプリケーションが実際に動作する環境を作成します。

## 3.1. environment名の決定

```bash:コマンド
EB_ENV_NAME="Default-Environment"
```

## 3.2. Solution Stackの一覧確認

```bash:コマンド
aws elasticbeanstalk list-available-solution-stacks \
    --query 'SolutionStacks[]'
```

```json:結果
[
    (略)
    "64bit Amazon Linux 2016.03 v2.1.0 running Docker 1.9.1",
    "64bit Amazon Linux 2015.09 v2.0.6 running Docker 1.7.1",
    "64bit Amazon Linux 2015.03 v1.4.6 running Docker 1.6.2",
    "64bit Amazon Linux 2016.03 v2.1.1 running Multi-container Docker 1.9.1 (Generic)",
    "64bit Amazon Linux 2015.03 v1.4.6 running Multi-container Docker 1.6.2 (Generic)",
    "64bit Debian jessie v2.1.0 running GlassFish 4.1 Java 8 (Preconfigured - Docker)",
    "64bit Debian jessie v2.1.0 running GlassFish 4.0 Java 7 (Preconfigured - Docker)",
    "64bit Debian jessie v1.4.6 running GlassFish 4.1 Java 8 (Preconfigured - Docker)",
    "64bit Debian jessie v1.4.6 running GlassFish 4.0 Java 7 (Preconfigured - Docker)",
    "64bit Debian jessie v2.1.0 running Go 1.4 (Preconfigured - Docker)",
    "64bit Debian jessie v2.1.0 running Go 1.3 (Preconfigured - Docker)",
    "64bit Debian jessie v1.4.6 running Go 1.4 (Preconfigured - Docker)",
    "64bit Debian jessie v1.4.6 running Go 1.3 (Preconfigured - Docker)",
    "64bit Debian jessie v2.1.0 running Python 3.4 (Preconfigured - Docker)",
    "64bit Debian jessie v1.4.6 running Python 3.4 (Preconfigured - Docker)",
    (略)
]
```

## 3.3. Solution Stackの決定

このハンズオンでは、トレンディーなDockerを使います。

```bash:コマンド
EB_ENV_SOL='64bit Amazon Linux 2016.03 v2.1.3 running Docker 1.11.1'
```

## 3.4. Solution Stackの内容確認

```bash:コマンド
aws elasticbeanstalk describe-configuration-options \
    --solution-stack-name "${EB_ENV_SOL}"
```

```json:結果
    (略)
```

## 3.5. Environmentの不存在を確認

```bash:コマンド
aws elasticbeanstalk describe-environments \
    --application-name "${EB_APP_NAME}" \
    --environment-names "${EB_ENV_NAME}"
```

```json:結果
{
    "Environments": []
}
```

## 3.6. environmentの起動

### 変数の確認

```bash:コマンド
cat << ETX

    EB_APP_NAME: "${EB_APP_NAME}"
    EB_ENV_NAME: ${EB_ENV_NAME}
    EB_VER_LABEL: "${EB_VER_LABEL}"
    EB_ENV_SOL: "${EB_ENV_SOL}"

ETX
```

```text:結果

    EB_APP_NAME: "AWS CLI Conf Elastic Beanstalk Application"
    EB_ENV_NAME: Default-Environment
    EB_VER_LABEL: "Sample Application"
    EB_ENV_SOL: "64bit Amazon Linux 2016.03 v2.1.0 running Docker 1.9.1"

```

### Environmentの作成

```bash:コマンド
aws elasticbeanstalk create-environment \
    --application-name "${EB_APP_NAME}" \
    --environment-name ${EB_ENV_NAME} \
    --version-label "${EB_VER_LABEL}" \
    --solution-stack-name "${EB_ENV_SOL}"
```

```json:結果
{
    "ApplicationName": "AWS CLI Conf Elastic Beanstalk Application",
    "EnvironmentName": "Default-Environment",
    "VersionLabel": "Sample Application",
    "Status": "Launching",
    "EnvironmentId": "e-9rv4qkn3bn",
    "SolutionStackName": "64bit Amazon Linux 2016.03 v2.1.0 running Docker 1.9.1",
    "Health": "Grey",
    "Tier": {
        "Version": " ",
        "Type": "Standard",
        "Name": "WebServer"
    },
    "DateUpdated": "2016-06-25T09:32:11.470Z",
    "DateCreated": "2016-06-25T09:32:11.470Z"
}
```

## 3.7. Environment IDの取得

```bash:コマンド
EB_ENV_ID=$(aws elasticbeanstalk describe-environments \
    --application-name "${EB_APP_NAME}" \
    --environment-names "${EB_ENV_NAME}" \
    --query Environments[?EnvironmentName==\'${EB_ENV_NAME}\'].EnvironmentId \
    --output text) \
&& echo ${EB_ENV_ID}
```

```text:結果
e-**********
```

## 3.8. Environmentのステータス確認

```bash:コマンド
aws elasticbeanstalk describe-environments \
    --application-name "${EB_APP_NAME}" \
    --environment-ids "${EB_ENV_ID}" \
    --query Environments[?EnvironmentName==\'${EB_ENV_NAME}\'].Status \
    --output text
```

```text:結果
Ready
```

Readyになるまで、おおむね5分程度かかるようです。

余裕があれば、「1.4. イベント確認」のコマンドで、処理の進捗を確認しましょう。

## 3.9. URLの取得

```bash:コマンド
aws elasticbeanstalk describe-environments \
    --application-name "${EB_APP_NAME}" \
    --environment-names "${EB_ENV_NAME}" \
    --query Environments[?EnvironmentName==\'${EB_ENV_NAME}\'].CNAME \
    --output text
```

```text:結果
Default-Environment.**********.elasticbeanstalk.com
```

## 3.10. アクセス確認

ブラウザでアクセスして、アプリケーションが表示されることを確認しましょう。


## 3.11. configuration-settingsの確認

ソリューションスタックの既定値に基づいて環境が構成されています。

```bash:コマンド
aws elasticbeanstalk describe-configuration-settings \
    --application-name "${EB_APP_NAME}" \
    --environment-name "${EB_ENV_NAME}"
```

```json:結果
    (略)
```

## 3.12. Environmentのリソース確認

環境の作成によって、実際に作成されたリソース（EC2インスタンス、ELB、AutoScalingGroup、LaunchConfigurationなど）を確認します。

```bash:コマンド
aws elasticbeanstalk describe-environment-resources \
    --environment-id ${EB_ENV_ID}
```

```json:結果
{
    "EnvironmentResources": {
        "EnvironmentName": "Default-Environment",
        "AutoScalingGroups": [
            {
                "Name": "awseb-e-9rv4qkn3bn-stack-AWSEBAutoScalingGroup-1************"
            }
        ],
        "Triggers": [],
        "LoadBalancers": [
            {
                "Name": "awseb-e-9-AWSEBLoa-************"
            }
        ],
        "Queues": [],
        "Instances": [
            {
                "Id": "i-0****************"
            }
        ],
        "LaunchConfigurations": [
            {
                "Name": "awseb-e-9rv4qkn3bn-stack-AWSEBAutoScalingLaunchConfiguration-************"
            }
        ]
    }
}
```


# 4． Environmentの更新（アプリケーションバージョンの入れ替え）

## 4.1. S3バケットの確認

アプリケーションのソースの配置先として、S3を利用します。
Beanstalkのアプリケーションを作成した際に、Beanstalkを初めて利用する場合にはデフォルトのS3バケットが作成されます。
今回は、そのバケットを利用します。

### AWS IDの確認

```bash:コマンド
AWS_ID=`aws sts get-caller-identity \
    --query Account --output text` \
&& echo ${AWS_ID}
```

```text:結果
************
```

### デフォルトのバケット名の指定

```bash:コマンド
S3_BUCKET_NAME="elasticbeanstalk-${AWS_DEFAULT_REGION}-${AWS_ID}" \
&& echo ${S3_BUCKET_NAME}
```

```text:結果
elasticbeanstalk-ap-northeast-1-************
```

### バケットのコンテンツを確認

```bash:コマンド
aws s3 ls s3://${S3_BUCKET_NAME}
```

```text:結果

                           PRE resources/
2016-06-09 10:22:15          0 .elasticbeanstalk
```

## 4.2. 新しいアプリケーションバージョン名の指定

```bash:コマンド
EB_VER_LABEL="Sample Application Second Version"
```

## 4.3. 新しいアプリケーションバージョンのソースコードを生成

### Dockerfileの名前を指定

```bash:コマンド
DOCKER_FILE_NAME="Dockerfile"
```

### Dockerfileを生成

**もし、動作させてみたいDockerfileがあれば、以下のヒアドキュメントで生成する内容を置き換えてみてください。**

```bash:コマンド
cat << EOF > ${DOCKER_FILE_NAME}
FROM centos:6
RUN yum -y install httpd
RUN chkconfig httpd off

EXPOSE 80

CMD ["/usr/sbin/apachectl", "-DFOREGROUND"]

EOF

cat ${DOCKER_FILE_NAME}
```

### Dockerfileを圧縮

```bash:コマンド
zip ${DOCKER_FILE_NAME}.zip ${DOCKER_FILE_NAME}
```

```text:結果
  adding: Dockerfile (deflated 5%)
```

## 4.4． ソースコードのS3バケットへの転送

```bash:コマンド
S3_OBJECT_NAME=${DOCKER_FILE_NAME}.zip
```

```bash:コマンド
aws s3 cp ${S3_OBJECT_NAME} s3://${S3_BUCKET_NAME}/${S3_OBJECT_NAME}
```

```text:結果
upload: ./Dockerfile.zip to s3://elasticbeanstalk-ap-northeast-1-************/Dockerfile.zip
```

## 4.5. アプリケーションバージョンの不存在を確認

```bash:コマンド
aws elasticbeanstalk describe-application-versions \
    --application-name "${EB_APP_NAME}" \
    --version-labels "${EB_VER_LABEL}"
```

```json:結果
{
    "ApplicationVersions": []
}
```

## 4.6. 新しいアプリケーションバージョンの作成

### 変数の確認

```bash:コマンド
cat << ETX

      EB_APP_NAME:    "${EB_APP_NAME}"
      EB_VER_LABEL:   "${EB_VER_LABEL}"
      S3_BUCKET_NAME: ${S3_BUCKET_NAME}
      S3_OBJECT_NAME: ${S3_OBJECT_NAME}

ETX
```

```text:結果

      EB_APP_NAME:    "AWS CLI Conf Elastic Beanstalk Application"
      EB_VER_LABEL:   "Sample Application Second Version"
      S3_BUCKET_NAME: elasticbeanstalk-ap-northeast-1-************
      S3_OBJECT_NAME: Dockerfile.zip

```

### アプリケーションバージョンの作成

```bash:コマンド
aws elasticbeanstalk create-application-version \
    --application-name "${EB_APP_NAME}" \
    --version-label "${EB_VER_LABEL}" \
    --source-bundle "S3Bucket=${S3_BUCKET_NAME},S3Key=${S3_OBJECT_NAME}"
```

```json:結果
{
    "ApplicationVersion": {
        "ApplicationName": "AWS CLI Conf Elastic Beanstalk Application",
        "Status": "UNPROCESSED",
        "VersionLabel": "Sample Application Second Version",
        "DateCreated": "2016-06-25T10:54:51.343Z",
        "DateUpdated": "2016-06-25T10:54:51.343Z",
        "SourceBundle": {
            "S3Bucket": "elasticbeanstalk-ap-northeast-1-************",
            "S3Key": "Dockerfile.zip"
        }
    }
}
```


## 4.7. Environmentの内容確認

この時点では、VersionLabelがSample Applicationです。

```bash:コマンド
aws elasticbeanstalk describe-environments \
    --application-name "${EB_APP_NAME}" \
    --environment-names "${EB_ENV_NAME}"
```

```json:結果
{
    "Environments": [
        {
            "ApplicationName": "AWS CLI Conf Elastic Beanstalk Application",
            "EnvironmentName": "Default-Environment",
            "VersionLabel": "Sample Application",
            "Status": "Ready",
            "EnvironmentLinks": [],
            "EnvironmentId": "e-9rv4qkn3bn",
            "EndpointURL": "awseb-e-9-AWSEBLoa-CDOQ0ZQN2970-242230098.ap-northeast-1.elb.amazonaws.com",
            "SolutionStackName": "64bit Amazon Linux 2016.03 v2.1.0 running Docker 1.9.1",
            "CNAME": "Default-Environment.uksxxctdpr.ap-northeast-1.elasticbeanstalk.com",
            "Health": "Green",
            "AbortableOperationInProgress": false,
            "Tier": {
                "Version": " ",
                "Type": "Standard",
                "Name": "WebServer"
            },
            "DateUpdated": "2016-06-25T09:38:55.277Z",
            "DateCreated": "2016-06-25T09:32:11.440Z"
        }
    ]
}
```

## 4.8. Environmentの更新

### 変数の確認

```bash:コマンド
cat << ETX

    EB_ENV_ID:     ${EB_ENV_ID}
    EB_VER_LABEL: "${EB_VER_LABEL}"

ETX
```

```text:結果

    EB_ENV_ID:     e-**********
    EB_VER_LABEL: "Sample Application Second Version"

```

### 更新

VersionLabelがSample Application Second Versionになっています。

```bash:コマンド
aws elasticbeanstalk update-environment \
    --environment-id ${EB_ENV_ID} \
    --version-label "${EB_VER_LABEL}"
```

```json:結果
{
    "ApplicationName": "AWS CLI Conf Elastic Beanstalk Application",
    "EnvironmentName": "Default-Environment",
    "VersionLabel": "Sample Application Second Version",
    "Status": "Updating",
    "EnvironmentId": "e-**********",
    "EndpointURL": "awseb-e-9-AWSEBLoa-CDOQ0ZQN2970-*********.ap-northeast-1.elb.amazonaws.com",
    "SolutionStackName": "64bit Amazon Linux 2016.03 v2.1.0 running Docker 1.9.1",
    "CNAME": "Default-Environment.**********.ap-northeast-1.elasticbeanstalk.com",
    "Health": "Grey",
    "AbortableOperationInProgress": true,
    "Tier": {
        "Version": " ",
        "Type": "Standard",
        "Name": "WebServer"
    },
    "DateUpdated": "2016-06-25T11:00:03.588Z",
    "DateCreated": "2016-06-25T09:32:11.440Z"
}
```

更新が完了するまで、5分ほどお待ちください。


## 4.9. Environmentのステータス確認

```bash:コマンド
aws elasticbeanstalk describe-environments \
    --application-name "${EB_APP_NAME}" \
    --environment-ids "${EB_ENV_ID}" \
    --query Environments[?EnvironmentName==\'${EB_ENV_NAME}\'].Status \
    --output text
```

```text:結果:
Ready
```


## 4.10. アクセス確認

ブラウザでアクセスして、アプリケーションが表示されることを確認しましょう。
（URLは同じです。）

ノート: キャッシュによって旧コンテンツが見えている場合があります。その場合 は、キャッシュをクリアしてみてください。


# 5． Environmentの削除

## 5.1. Environmentの削除

### 変数の確認

```bash:コマンド
cat << ETX

    EB_ENV_ID:  ${EB_ENV_ID}

ETX
```

```text:結果

    EB_ENV_ID:  e-**********

```

### 存在確認

```bash:コマンド
aws elasticbeanstalk describe-environments \
    --environment-id ${EB_ENV_ID}
```

```json:結果
{
    "Environments": [
        {
            "ApplicationName": "AWS CLI Conf Elastic Beanstalk Application",
            "EnvironmentName": "Default-Environment",
            "VersionLabel": "Sample Application Second Version",
            "Status": "Terminating",
            "EnvironmentLinks": [],
            "EnvironmentId": "e-***********",
            "EndpointURL": "awseb-e-f-AWSEBLoa-1AMGFW79TIGSY-**********.ap-northeast-1.elb.amazonaws.com",
            "SolutionStackName": "64bit Amazon Linux 2016.03 v2.1.0 running Docker 1.9.1",
            "CNAME": "Default-Environment.**********.ap-northeast-1.elasticbeanstalk.com",
            "Health": "Grey",
            "AbortableOperationInProgress": false,
            "Tier": {
                "Version": " ",
                "Type": "Standard",
                "Name": "WebServer"
            },
            "DateUpdated": "2016-07-10T11:37:03.706Z",
            "DateCreated": "2016-07-10T11:19:06.883Z"
        }
    ]
}
```


### 削除

```bash:コマンド
aws elasticbeanstalk terminate-environment \
    --environment-id ${EB_ENV_ID}
```

```json:結果
{
    "ApplicationName": "AWS CLI Conf Elastic Beanstalk Application",
    "EnvironmentName": "Default-Environment",
    "Status": "Terminating",
    "EnvironmentId": "e-**********",
    "EndpointURL": "awseb-e-p-AWSEBLoa-1P5VW8W5KAVPV-*********.ap-northeast-1.elb.amazonaws.com",
    "SolutionStackName": "64bit Amazon Linux 2016.03 v2.1.0 running Docker 1.9.1",
    "CNAME": "Default-Environment.**********.ap-northeast-1.elasticbeanstalk.com",
    "Health": "Grey",
    "AbortableOperationInProgress": false,
    "Tier": {
        "Version": " ",
        "Type": "Standard",
        "Name": "WebServer"
    },
    "DateUpdated": "2016-06-26T10:15:49.149Z",
    "DateCreated": "2016-06-26T09:44:21.137Z"
}
```

削除が完了するまで、5分程度かかります。

## 5.2. Environmentのステータス確認

```bash:コマンド
aws elasticbeanstalk describe-environments \
    --application-name "${EB_APP_NAME}" \
    --environment-ids "${EB_ENV_ID}" \
    --query Environments[?EnvironmentName==\'${EB_ENV_NAME}\'].Status \
    --output text
```

```text:結果
Terminated
```

## 5.3. Environmentのリソース確認

```bash:コマンド
aws elasticbeanstalk describe-environment-resources \
    --environment-name "${EB_ENV_NAME}"
```

```text:結果
A client error (InvalidParameterValue) occurred when calling the DescribeEnvironmentResources operation: No Environment found for EnvironmentName = 'Default-Environment'.
```

# 6．アプリケーションバージョンの削除

不要になった過去のバージョンを削除します。

## 6.1. アプリケーションバージョンの一覧取得

```bash:コマンド
aws elasticbeanstalk describe-application-versions \
    --application-name "${EB_APP_NAME}" \
    --query ApplicationVersions[].VersionLabel
```

```json:結果
[
    "Sample Application Second Version",
    "Sample Application"
]
```

## 6.2. アプリケーションバージョンの指定（１）

```bash:コマンド
EB_VER_LABEL="Sample Application"
```

## 6.3. アプリケーションバージョンの削除（１）

### 変数の確認

```bash:コマンド
cat << ETX

    EB_APP_NAME:  "${EB_APP_NAME}"
    EB_VER_LABEL: "${EB_VER_LABEL}"

ETX
```

```text:結果

    EB_APP_NAME:  "AWS CLI Conf Elastic Beanstalk Application"
    EB_VER_LABEL: "Sample Application"

```

### 存在確認

```bash:コマンド
aws elasticbeanstalk describe-application-versions \
    --application-name "${EB_APP_NAME}" \
    --version-label "${EB_VER_LABEL}"
```

```json:結果
{
    "ApplicationVersions": [
        {
            "ApplicationName": "AWS CLI Conf Elastic Beanstalk Application",
            "Status": "UNPROCESSED",
            "VersionLabel": "Sample Application",
            "DateCreated": "2016-07-10T11:18:00.683Z",
            "DateUpdated": "2016-07-10T11:18:00.683Z",
            "SourceBundle": {
                "S3Bucket": "elasticbeanstalk-ap-northeast-1",
                "S3Key": "GenericSampleApplication"
            }
        }
    ]
}
```

### 削除

```bash:コマンド
aws elasticbeanstalk delete-application-version \
    --application-name "${EB_APP_NAME}" \
    --version-label "${EB_VER_LABEL}"
```

```text:結果
    (戻り値なし)
```

## 6.4. アプリケーションバージョンの指定（２）

```bash:コマンド
EB_VER_LABEL="Sample Application Second Version"
```

## 6.5. アプリケーションバージョンの削除（２）

### 変数の確認

```bash:コマンド
cat << ETX

    EB_APP_NAME:  "${EB_APP_NAME}"
    EB_VER_LABEL: "${EB_VER_LABEL}"

ETX
```

```text:結果

    EB_APP_NAME:  "AWS CLI Conf Elastic Beanstalk Application"
    EB_VER_LABEL: "Sample Application Second Version"

```

### 存在確認

```bash:コマンド
aws elasticbeanstalk describe-application-versions \
    --application-name "${EB_APP_NAME}" \
    --version-label "${EB_VER_LABEL}"
```

```json:結果
{
    "ApplicationVersions": [
        {
            "ApplicationName": "AWS CLI Conf Elastic Beanstalk Application",
            "Status": "UNPROCESSED",
            "VersionLabel": "Sample Application Second Version",
            "DateCreated": "2016-07-10T11:30:28.221Z",
            "DateUpdated": "2016-07-10T11:30:28.221Z",
            "SourceBundle": {
                "S3Bucket": "elasticbeanstalk-ap-northeast-1-************",
                "S3Key": "Dockerfile.zip"
            }
        }
    ]
}
```

### 削除

```bash:コマンド
aws elasticbeanstalk delete-application-version \
    --application-name "${EB_APP_NAME}" \
    --version-label "${EB_VER_LABEL}"
```

```text:結果
    (戻り値なし)
```


## 6.6. アプリケーションバージョンの不存在を確認

```bash:コマンド
aws elasticbeanstalk describe-application-versions \
    --application-name "${EB_APP_NAME}" \
    --query ApplicationVersions[].VersionLabel
```

```json:結果
[]
```

## 6.7. Dockerfileの削除

### 変数の確認

```bash:コマンド
cat << ETX

    S3_BUCKET_NAME: "${S3_BUCKET_NAME}"
    S3_OBJECT_NAME: "${S3_OBJECT_NAME}"

ETX
```

```text:結果

    S3_BUCKET_NAME: "elasticbeanstalk-ap-northeast-1-************"
    S3_OBJECT_NAME: "Dockerfile.zip"

```

### 存在確認

```bash:コマンド
aws s3 ls s3://${S3_BUCKET_NAME}/${S3_OBJECT_NAME}
```

```text:結果
2016-07-10 11:46:30        283 Dockerfile.zip
```

### 削除

```bash:コマンド
aws s3 rm s3://${S3_BUCKET_NAME}/${S3_OBJECT_NAME}
```

```text:結果
delete: s3://elasticbeanstalk-ap-northeast-1-************/Dockerfile.zip
```

## 6.8. Dockerfileの不存在を確認

```bash:コマンド
aws s3 ls s3://${S3_BUCKET_NAME}/${S3_OBJECT_NAME}
```

```text:結果
    （戻り値なし）
```


# 7．アプリケーションの削除

## 7.1. アプリケーションの削除

### 変数の確認

```bash:コマンド
cat << ETX

    EB_APP_NAME: "${EB_APP_NAME}"

ETX
```

```text:結果

    EB_APP_NAME: "AWS CLI Conf Elastic Beanstalk Application"

```

### 存在確認

```bash:コマンド
aws elasticbeanstalk describe-applications \
    --application-name "${EB_APP_NAME}"
```

```json:結果
{
    "Applications": [
        {
            "ApplicationName": "AWS CLI Conf Elastic Beanstalk Application",
            "ConfigurationTemplates": [],
            "DateUpdated": "2016-07-10T11:15:43.891Z",
            "DateCreated": "2016-07-10T11:15:43.891Z"
        }
    ]
}
```


### 削除

```bash:コマンド
aws elasticbeanstalk delete-application \
    --application-name "${EB_APP_NAME}"
```

```text:結果
    (戻り値なし)
```

## 7.2. アプリケーションの不存在を確認

```bash:コマンド
aws elasticbeanstalk describe-applications \
    --application-name "${EB_APP_NAME}"
```

```json:結果
{
    "Applications": []
}
```



以上です。

お疲れ様でした。