[JAWS-UG CLI] OpsWorks #3 アプリケーションの作成


前提条件
========


### OpsWorksへの権限

OpsWorksに対してフル権限があること。


### AWS CLIのバージョン

以下のバージョンで動作確認済

* AWS CLI 1.11.14

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

結果(例):

      aws-cli/1.11.102 Python/2.7.12 Linux/4.4.11-23.53.amzn1.x86_64 botocore/1.5.65

バージョンが古い場合は最新版に更新しましょう。

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


0. 準備
=======

まず変数の確認をします。

```bash:変数の確認:
cat << ETX

        AWS_DEFAULT_PROFILE:  (0.1) ${AWS_DEFAULT_PROFILE}
        OPSW_STACK_ID:        (0.2) ${OPSW_STACK_ID}
        OPSW_APP_NAME:        (0.3) ${OPSW_APP_NAME}
        OPSW_APP_SHORTNAME:   (0.3) ${OPSW_APP_SHORTNAME}
        OPSW_APP_TYPE:        (0.4) ${OPSW_APP_TYPE}
        OPSW_APP_SOURCE_TYPE: (0.5) ${OPSW_APP_SOURCE_TYPE}
        OPSW_APP_SOURCE_URL:  (0.5) ${OPSW_APP_SOURCE_URL}
        OPSW_APP_ATTRIBUTES_AUTOBUNDLEONDEPLOY: (0.6) ${OPSW_APP_ATTRIBUTES_AUTOBUNDLEONDEPLOY}
        OPSW_APP_ENV_VALUE:   (0.7) ${OPSW_APP_ENV_VALUE}
        OPSW_APP_ENV_KEY:     (0.7) ${OPSW_APP_ENV_KEY}
        OPSW_APP_ENV_SECURE:  (0.7) ${OPSW_APP_ENV_SECURE}


ETX
```

結果(例):

      AWS_DEFAULT_PROFILE:  (0.1) opsworksFull-prjZ-mbp13
      OPSW_STACK_ID:        (0.2) <スタックのID>
      OPSW_APP_NAME         (0.3) Node.js Sample App
      OPSW_APP_SHORTNAME    (0.3) nodejs_sample_app
      OPSW_APP_TYPE         (0.4) other
      OPSW_APP_SOURCE_TYPE: (0.5) git
      OPSW_APP_SOURCE_URL:  (0.5) https://github.com/awslabs/opsworks-windows-demo-nodejs.git
      OPSW_APP_ATTRIBUTES_AUTOBUNDLEONDEPLOY: (0.6) true
      OPSW_APP_ENV_VALUE:   (0.7) admin@example.com
      OPSW_APP_ENV_KEY:     (0.7) APP_ADMIN_EMAIL
      OPSW_APP_ENV_SECURE:  (0.7) false

変数が入っていない、適切でない場合は、それぞれの手順番号について作業を
行います。


0.1. プロファイルの指定
-----------------------

プロファイルの一覧を確認します。

```bash:コマンド:
cat ~/.aws/credentials \
       | grep '\[' \
       | sed 's/\[//g' | sed 's/\]//g'
```

結果(例):

      iamFull-prjz-mbpr13
      opsworksFull-prjZ-mbp13

```bash:変数の設定:
export AWS_DEFAULT_PROFILE='opsworksFull-prjZ-mbp13'
```


0.2. スタック名の指定
---------------------

```bash:変数の設定:
OPSW_STACK_NAME='My Sample Stack (Linux)'
```

```bash:コマンド:
OPSW_STACK_ID=$( \
        aws opsworks describe-stacks \
          --query "Stacks[?Name ==\`${OPSW_STACK_NAME}\`].StackId" \
          --output text \
) \
        && echo ${OPSW_STACK_ID}
```

結果(例):

      xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx


0.3. アプリケーション名の指定
-----------------------------

```bash:変数の設定:
OPSW_APP_NAME='Node.js Sample App'
```

```bash:変数の設定:
OPSW_APP_SHORTNAME='nodejs_sample_app'
```


0.4. アプリケーションタイプの指定
---------------------------------

```bash:変数の設定:
OPSW_APP_TYPE='other'
```


0.5. アプリケーションソースの指定
---------------------------------

```bash:変数の設定:
OPSW_APP_SOURCE_TYPE='git'
```

```bash:変数の設定:
OPSW_APP_SOURCE_URL='https://github.com/awslabs/opsworks-windows-demo-nodejs.git'
```


0.6. アプリケーション属性の指定
-------------------------------

```bash:変数の設定:
OPSW_APP_ATTRIBUTES_AUTOBUNDLEONDEPLOY='true'
```


0.7. アプリケーション環境の指定
-------------------------------

```bash:変数の設定:
OPSW_APP_ENV_VALUE='admin@example.com'
OPSW_APP_ENV_KEY='APP_ADMIN_EMAIL'
OPSW_APP_ENV_SECURE='false'
```


再確認
------

設定されている変数の内容を再確認します。

```bash:変数の確認:
cat << ETX

        AWS_DEFAULT_PROFILE:  (0.1) ${AWS_DEFAULT_PROFILE}
        OPSW_STACK_ID:        (0.2) ${OPSW_STACK_ID}
        OPSW_APP_NAME:        (0.3) ${OPSW_APP_NAME}
        OPSW_APP_SHORTNAME:   (0.3) ${OPSW_APP_SHORTNAME}
        OPSW_APP_TYPE:        (0.4) ${OPSW_APP_TYPE}
        OPSW_APP_SOURCE_TYPE: (0.5) ${OPSW_APP_SOURCE_TYPE}
        OPSW_APP_SOURCE_URL:  (0.5) ${OPSW_APP_SOURCE_URL}
        OPSW_APP_ATTRIBUTES_AUTOBUNDLEONDEPLOY: (0.6) ${OPSW_APP_ATTRIBUTES_AUTOBUNDLEONDEPLOY}
        OPSW_APP_ENV_VALUE:   (0.7) ${OPSW_APP_ENV_VALUE}
        OPSW_APP_ENV_KEY:     (0.7) ${OPSW_APP_ENV_KEY}
        OPSW_APP_ENV_SECURE:  (0.7) ${OPSW_APP_ENV_SECURE}


ETX
```

結果(例):

      AWS_DEFAULT_PROFILE:  (0.1) opsworksFull-prjZ-mbp13
      OPSW_STACK_ID:        (0.2) <スタックのID>
      OPSW_APP_NAME         (0.3) Node.js Sample App
      OPSW_APP_SHORTNAME    (0.3) nodejs_sample_app
      OPSW_APP_TYPE         (0.4) other
      OPSW_APP_SOURCE_TYPE: (0.5) git
      OPSW_APP_SOURCE_URL:  (0.5) https://github.com/awslabs/opsworks-windows-demo-nodejs.git
      OPSW_APP_ATTRIBUTES_AUTOBUNDLEONDEPLOY: (0.6) true
      OPSW_APP_ENV_VALUE:   (0.7) admin@example.com
      OPSW_APP_ENV_KEY:     (0.7) APP_ADMIN_EMAIL
      OPSW_APP_ENV_SECURE:  (0.7) false


1. 事前作業
===========


2. 本作業
=========


作成
----

```bash:変数の設定:
OPSW_APP_SOURCE_STRING="Type=${OPSW_APP_SOURCE_TYPE},Url=${OPSW_APP_SOURCE_URL}" \
        && echo ${OPSW_APP_SOURCE_STRING}
```

```bash:変数の設定:
OPSW_APP_ATTRIBUTES_STRING="AutoBundleOnDeploy=${OPSW_APP_ATTRIBUTES_AUTOBUNDLEONDEPLOY}" \
        && echo ${OPSW_APP_ATTRIBUTES_STRING}
```

```bash:変数の設定:
OPSW_APP_ENV_STRING="Key=${OPSW_APP_ENV_KEY},Value=${OPSW_APP_ENV_VALUE},Secure=${OPSW_APP_ENV_SECURE}" \
        && echo ${OPSW_APP_ENV_STRING}
```

```bash:変数の確認:
cat << ETX

        OPSW_STACK_ID:              ${OPSW_STACK_ID}
        OPSW_APP_NAME:              ${OPSW_APP_NAME}
        OPSW_APP_TYPE:              ${OPSW_APP_TYPE}
        OPSW_APP_SHORTNAME:         ${OPSW_APP_SHORTNAME}
        OPSW_APP_SOURCE_STRING:     ${OPSW_APP_SOURCE_STRING}
        OPSW_APP_ATTRIBUTES_STRING: ${OPSW_APP_ATTRIBUTES_STRING}
        OPSW_APP_ENV_STRING:        ${OPSW_APP_ENV_STRING}


ETX
```

```bash:コマンド:
aws opsworks create-app \
        --stack-id ${OPSW_STACK_ID} \
        --name "${OPSW_APP_NAME}" \
        --type ${OPSW_APP_TYPE} \
        --shortname ${OPSW_APP_SHORTNAME} \
        --app-source "${OPSW_APP_SOURCE_STRING}" \
        --no-enable-ssl \
        --attributes "${OPSW_APP_ATTRIBUTES_STRING}" \
        --environment "${OPSW_APP_ENV_STRING}"
```

結果(例):

      {
        "AppId": "508de020-bd2c-4f51-bd70-1b287c434a9b"
      }


2.2. アプリケーションIDの取得
-----------------------------

```bash:変数の設定:
OPSW_APP_ID=$( \
        aws opsworks describe-apps \
          --stack-id ${OPSW_STACK_ID} \
          --query "Apps[?Name == \`${OPSW_APP_NAME}\`].AppId" \
          --output text \
) \
        && echo ${OPSW_APP_ID}
```


3. 事後作業
===========

```bash:変数の設定:
ARRAY_OPSW_APP_IDS="${OPSW_APP_ID}" \
        && echo ${ARRAY_OPSW_APP_IDS}
```

```bash:コマンド:
aws opsworks describe-apps \
        --app-ids ${ARRAY_OPSW_APP_IDS}
```


完了
====