[JAWS-UG CLI] CloudFormation:#4 テンプレートの検査

この手順の目的
====================

CloudFormationのテンプレートを検査(バリデート)します。


作業対象
===============

- CloudFormationテンプレート


標準時間
========

8分


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


作業権限
------------------

### CloudFormationへの権限

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


作業環境
--------------------

### AWS CLIのバージョン

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

- AWS CLI 1.11.102

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

結果(例):

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

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

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


開始条件
========


作業に必要なモノ・情報
---------------------------------

作業開始には、以下が全て揃っていることが必要です。

- 設定ファイル用ディレクトリ

  - 今回は"${HOME}/tmp/conf-cloudformation"を設定ファイルディレクトリとします。

```bash:
ls ${HOME}/tmp/conf-cloudformation
```

  - 存在しない場合は作成します。

```bash:
mkdir -p ${HOME}/tmp/conf-cloudformation
```

- テンレートファイル

  - 検査の対象となるCloudFormationテンプレートファイルです。

  - 今回は"BasicWebServerInVPC.template"とします。



0. 準備
=======

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

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

        AWS_DEFAULT_PROFILE: (0.1) ${AWS_DEFAULT_PROFILE}
        AWS_DEFAULT_REGION:  (0.2) ${AWS_DEFAULT_REGION}
        DIR_CONF:            (0.3) ${DIR_CONF}
        FILE_INPUT:          (0.4) ${FILE_INPUT}

ETX
```

結果(例):

      AWS_DEFAULT_PROFILE: (0.1) <CloudFormationのフル権限が許可されているプロファイル>
      AWS_DEFAULT_REGION:  (0.2) ap-northeast-1
      DIR_CONF:            (0.3) ${HOME}/tmp/conf-cloudformation
      FILE_INPUT:          (0.4) ${HOME}/tmp/conf-cloudformation/BasicWebServerInVPC.template

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


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

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

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

結果(例):

      iamFull-prjz-mbpr13
      <CloudFormationのフル権限が許可されているプロファイル>

```bash:変数の設定:
export AWS_DEFAULT_PROFILE='<CloudFormationのフル権限が許可されているプロファイル>'
```


0.2. リージョンの決定
---------------------

```bash:変数の設定
export AWS_DEFAULT_REGION='ap-northeast-1'
```


0.3. 設定ファイルディレクトリの指定
-----------------------------------

```bash:変数の設定:
DIR_CONF="${HOME}/tmp/conf-cloudformation"
```


0.4. テンプレートファイル名の指定
---------------------------------

```bash:変数の設定:
FILE_INPUT="${DIR_CONF}/BasicWebServerInVPC.template"   && echo ${FILE_INPUT}
```


再確認
------

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

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

        AWS_DEFAULT_PROFILE: (0.1) ${AWS_DEFAULT_PROFILE}
        AWS_DEFAULT_REGION:  (0.2) ${AWS_DEFAULT_REGION}
        DIR_CONF:            (0.3) ${DIR_CONF}
        FILE_INPUT:          (0.4) ${FILE_INPUT}

ETX
```

結果(例):

      AWS_DEFAULT_PROFILE: (0.1) <CloudFormationのフル権限が許可されているプロファイル>
      AWS_DEFAULT_REGION:  (0.2) ap-northeast-1
      DIR_CONF:            (0.3) ${HOME}/tmp/conf-cloudformation
      FILE_INPUT:          (0.4) ${HOME}/tmp/conf-cloudformation/BasicWebServerInVPC.template


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


1.1. 作業対象の状態確認
-----------------------

設定ファイル用ディレクトリが存在することを確認します。

```bash:コマンド:
ls -d ${DIR_CONF}
```

結果(例):

      <ディレクトリのフルパス名>


検査しようとしているcloudformationテンプレートファイル
"BasicWebServerInVPC.template"が存在することを確認します。

```bash:コマンド:
ls -1 ${FILE_INPUT}
```

結果:

      ${HOME}/tmp/conf-cloudformation/BasicWebServerInVPC.template


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


2.1. テンプレートのバリデーション
---------------------------------

```bash:コマンド:
aws cloudformation validate-template \
        --template-body file://${FILE_INPUT}
```

結果:

      (テンプレートの出力設定に応じた出力)


2.2. 結果の取得
---------------

```bash:変数の設定:
RESULT_VALIDATION=$?
```


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

cloudformationテンプレート"BasicWebServerInVPC"が有効であることを確認します。

```bash:コマンド:
echo ${RESULT_VALIDATION}
```


完了
====