[JAWS-UG CLI] CloudWatch Logs:#7 ロググループ/ログストリームの作成 (Trail用)

AWS CLIを利用して、CloudWatchLogsのロググループを作成してみます。


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


CloudWatchLogsへの権限
----------------------

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


AWS CLIのバージョン
-------------------

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

  * AWS CLI 1.7.26

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

```text:結果(例):
      aws-cli/1.7.26 Python/2.7.5 Darwin/13.4.0
```


0. 準備
=======


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

作成するユーザのデフォルトリージョンを決めます。

(カレントユーザが利用するカレントリージョンも切り変わります。)

```bash:コマンド(アイルランドリージョンの場合):
export AWS_DEFAULT_REGION='eu-west-1'
```


0.2. 変数の確認
---------------

プロファイルとリージョンが想定のものになっていることを確認します。

```bash:変数の確認:
aws configure list
```

```text:結果(例):
            Name                    Value             Type    Location
            ----                    -----             ----    --------
         profile       cloudwatchFull-prjZ-mbp13iamFull-prjZ-mbp13              env    AWS_DEFAULT_PROFILE
      access_key     ****************XXXX shared-credentials-file
      secret_key     ****************XXXX shared-credentials-file
          region                eu-west-1              env    AWS_DEFAULT_REGION
```


0.3. AWS IDの確認
-----------------

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

        AWS_ID: ${AWS_ID}

ETX
```


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


1.1. ロググループ名の決定
-------------------------

ロググループ名を決めます。

CloudWatch Logsでは、各種エンティティをprefixで指定するので、prefixを
適宜決めておくのがオススメです。

今回は、prefixを"CloudTrail/"とします。

```bash:コマンド:
LOG_GROUP_NAME='CloudTrail/DefaultLogGroup'
```


1.2. 同名のロググループ名の不存在確認
-------------------------------------

同名のロググループが存在しないことを確認します。

```bash:コマンド:
aws logs describe-log-groups \
          --log-group-name-prefix ${LOG_GROUP_NAME}
```

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


1.3. ログ保持期間の決定
-----------------------

ログの保持期間を決めます。

指定しない場合、無期限に保存されます。

```bash:コマンド(2ヶ月保存の場合):
LOG_RETENTION_DAYS='60'
```


2. ロググループの作成
=====================


2.1. ロググループの作成
-----------------------

ロググループを作成します。

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

          LOG_GROUP_NAME ${LOG_GROUP_NAME}

ETX
```

```bash:コマンド:
aws logs create-log-group \
          --log-group-name ${LOG_GROUP_NAME}
```

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


2.2. ロググループの確認
-----------------------

作成したロググループを確認します。

```bash:コマンド:
aws logs describe-log-groups \
          --log-group-name-prefix ${LOG_GROUP_NAME}
```

```json:結果(例):
      {
        "logGroups": [
          {
              "arn": "arn:aws:logs:ap-northeast-1:XXXXXXXXXXXX:log-group:CloudTrail/DefaultLogGroup:*",
              "creationTime": 1430092395471,
              "metricFilterCount": 0,
              "logGroupName": "CloudTrail/DefaultLogGroup",
              "storedBytes": 0
          }
        ]
      }
```


3. ログ保持期間の設定
=====================


3.1. ログ保持期間設定の確認
---------------------------

```bash:コマンド:
LOG_RETENT_DAYS=`aws logs describe-log-groups --log-group-name-prefix ${LOG_GROUP_NAME} --query 'logGroups[].retentionInDays' --output text` \
        && echo ${LOG_RETENT_DAYS}
```

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


3.2. 保持期間の設定
-------------------

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

            LOG_GROUP_NAME:     ${LOG_GROUP_NAME}
            LOG_RETENTION_DAYS: ${LOG_RETENTION_DAYS}

ETX
```

```bash:コマンド:
aws logs put-retention-policy \
          --log-group-name ${LOG_GROUP_NAME} \
          --retention-in-days ${LOG_RETENTION_DAYS}
```

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


3.3. ログ保持期間設定の確認
---------------------------

設定したログ保持期間を確認します。

```bash:コマンド:
LOG_RETENT_DAYS=`aws logs describe-log-groups --log-group-name-prefix ${LOG_GROUP_NAME} --query 'logGroups[].retentionInDays' --output text` \
        && echo ${LOG_RETENT_DAYS}
```

```text:結果(例):
      60
```


3.4. ロググループの確認
-----------------------

作成したロググループを確認します。

```bash:コマンド:
aws logs describe-log-groups \
          --log-group-name-prefix ${LOG_GROUP_NAME}
```

```json:結果(例):
      {
        "logGroups": [
          {
              "storedBytes": 0,
              "metricFilterCount": 0,
              "creationTime": 1431298586512,
              "logGroupName": "CloudTrail/DefaultLogGroup",
              "retentionInDays": 60,
              "arn": "arn:aws:logs:eu-west-1:XXXXXXXXXXXX:log-group:CloudTrail/DefaultLogGroup:*"
          }
        ]
      }
```


4. ログストリームの作成
=======================


4.1. ログストリーム名の決定
---------------------------

作成するログストリーム名を決めます。

```bash:コマンド:
LOG_STREAM_NAME="${AWS_ID}_CloudTrail_${AWS_DEFAULT_REGION}" \
        && echo ${LOG_STREAM_NAME}
```

作成するログストリーム名と同じ名前のログストリームが存在しないことを確認します。

```bash:コマンド:
aws logs describe-log-streams \
        --log-group-name ${LOG_GROUP_NAME} \
        --log-stream-name-prefix ${LOG_STREAM_NAME}
```

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


4.2. ログストリームの作成
-------------------------

ログストリームを作成します。

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

        LOG_GROUP_NAME:  ${LOG_GROUP_NAME}
        LOG_STREAM_NAME: ${LOG_STREAM_NAME}

ETX
```

```bash:コマンド:
aws logs create-log-stream \
        --log-group-name ${LOG_GROUP_NAME} \
        --log-stream-name ${LOG_STREAM_NAME}
```

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


4.3. ログストリームの確認
-------------------------

作成したログストリームを確認します。

```bash:コマンド:
aws logs describe-log-streams \
        --log-group-name ${LOG_GROUP_NAME} \
        --log-stream-name-prefix ${LOG_STREAM_NAME}
```

```json:結果(例):
      {
        "logStreams": [
          {
              "creationTime": 1431309653829,
              "arn": "arn:aws:logs:eu-west-1:XXXXXXXXXXXX:log-group:CloudTrail/DefaultLogGroup:log-stream:XXXXXXXXXXXX_CloudTrail_eu-west-1",
              "logStreamName": "XXXXXXXXXXXX_CloudTrail_eu-west-1",
              "storedBytes": 0
          }
        ]
      }
```


5. 事後作業
===========


ログストリームのARN取得
-----------------------

```bash:コマンド:
LOG_STREAM_ARN=`aws logs describe-log-streams --log-group-name ${LOG_GROUP_NAME} --log-stream-name-prefix ${LOG_STREAM_NAME} --query 'logStreams[].arn' --output text` \
        && echo ${LOG_STREAM_ARN}
```

```text:結果(例):
      arn:aws:logs:eu-west-1:XXXXXXXXXXXX:log-group:| CloudTrail/DefaultLogGroup:log-stream:XXXXXXXXXXXX_CloudTrail_eu-west-1
```


完了
====