[JAWS-UG CLI] Amazon Kinesis Firehose re:入門 (4) Kinesis Agentによるレコードの登録

# この記事について

[JAWS-UG CLI専門支部 #90 Kinesis Firehose 復習編](https://jawsug-cli.doorkeeper.jp/events/59236)で実施するハンズオン用の手順書です。


# 前提条件

## 必要な権限

作業にあたっては、以下の権限を有したIAMユーザもしくはIAMロールを利用してください。

- 以下のサービスに対するフルコントロール権限
    - Kinesis Firehose
    - IAM
    - EC2
    - S3
    - CloudWatch Logs
    - STS
    - (Lambda)
        - データの変換を行う場合
    - (KMS)
        - データの暗号化を行う場合


# 0. 準備

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

オレゴンリージョンで実施します。（東京マダー？）

```bash:コマンド
export AWS_DEFAULT_REGION="us-west-2"
```

## 0.2. 資格情報を確認


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

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

```text:結果
      Name                    Value             Type    Location
      ----                    -----             ----    --------
   profile                <not set>             None    None
access_key     ****************QSAA         iam-role
secret_key     ****************c1xY         iam-role
    region                us-west-2              env    AWS_DEFAULT_REGION
```

## 0.3. バージョン確認

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

```text:結果
aws-cli/1.11.129 Python/2.7.12 Linux/4.9.38-16.33.amzn1.x86_64 botocore/1.5.92
```

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

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

## 0.5. 変数の確認

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

    KEY_MATERIAL_FILE_NAME: ${KEY_MATERIAL_FILE_NAME}
    PUBLIC_IP_ADDRESS: ${PUBLIC_IP_ADDRESS}
    DELIVERY_STREAM_NAME: ${DELIVERY_STREAM_NAME}
    BUCKET_NAME: ${BUCKET_NAME}

ETX
```




# 1. ログイン

## 1.1. SSHで接続

初回接続時、yesを選択

```bash:コマンド
ssh -l ec2-user -i ~/.ssh/${KEY_MATERIAL_FILE_NAME} ${PUBLIC_IP_ADDRESS}
```


# 2. Kinesis Agentの設定

## 2.1. 設定ファイルの生成

### 設定ファイル名の指定

```bash:コマンド
AGENT_SETTING_FILE_NAME="agent.json"
```

### デリバリーストリーム名の指定

```bash:コマンド
DELIVERY_STREAM_NAME="jawsug-cli-stream"
```

### 変数の確認

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

   AGENT_SETTING_FILE_NAME: ${AGENT_SETTING_FILE_NAME}
   DELIVERY_STREAM_NAME: ${DELIVERY_STREAM_NAME}

ETX
```

```text:結果

   AGENT_SETTING_FILE_NAME: agent.json
   DELIVERY_STREAM_NAME: jawsug-cli-stream

```

### 設定ファイルの生成

```bash:コマンド
cat << EOF > ${AGENT_SETTING_FILE_NAME}
{
  "cloudwatch.emitMetrics": true,
  "cloudwatch.endpoint": "https://monitoring.us-west-2.amazonaws.com",
  "firehose.endpoint": "https://firehose.us-west-2.amazonaws.com",
  "flows": [
    {
      "filePattern": "/var/log/httpd/access_log",
      "deliveryStream": "${DELIVERY_STREAM_NAME}",
      "initialPosition": "START_OF_FILE"
    }
  ]
}
EOF

cat ${AGENT_SETTING_FILE_NAME}
```

### JSONファイルの検証

```bash:コマンド
jsonlint -q ${AGENT_SETTING_FILE_NAME}
```

## 2.2. 設定ファイルの配置

### 既存ファイルの退避

```bash:コマンド
sudo cp /etc/aws-kinesis/agent.json /etc/aws-kinesis/agent.json.org
```

### 生成したファイルの配置

```bash:コマンド
sudo cp agent.json /etc/aws-kinesis/agent.json
```

### 権限の付与

Kinesis-Agentの実行ユーザである「aws-kinesis-agent-user」に対して、
データソースの読み取りおよび実行権限が必要です。

[Writing to Amazon Kinesis Firehose Using Amazon Kinesis Agent](http://docs.aws.amazon.com/firehose/latest/dev/writing-with-agents.html#agent-config-settings)

```bash:コマンド
sudo chmod 755 /var/log/httpd
sudo chmod 644 /var/log/httpd/*
```

### サービスの再起動

```bash:コマンド
sudo service aws-kinesis-agent restart
```

### ログオフ

```bash:コマンド
exit
```

# 3. 動作確認

## 3.1. Web Serverにアクセス

てきとうにアクセスしてみてください。

そして、1分ほど待ちます。。。


## 3.2. S3バケット上のファイルを確認

### S3バケット上のファイルを確認

```bash:コマンド
aws s3 ls --recursive ${BUCKET_NAME}
```

### S3 Bucket上のファイルをダウンロード

```bash:コマンド
mkdir data03
cd data03
```

```bash:コマンド
aws s3 sync s3://${BUCKET_NAME} .
```
```text:結果
download: s3://jawsug-cli-firehose-************/2016/12/19/07/jawsug-cli-stream-1-2016-12-19-07-54-56-47a385b8-4075-44ec-bf15-4f6143b03ddb to 2016/12/19/07/jawsug-cli-stream-1-2016-12-19-07-54-56-47a385b8-4075-44ec-bf15-4f6143b03ddb
```

### S3 Bucket上のファイルを閲覧

```bash:コマンド
cat (任意のファイル名)
```

```text:結果
222.150.28.224 - - [03/Dec/2016:08:05:20 +0000] "GET / HTTP/1.1" 403 3839 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36"
222.150.28.224 - - [03/Dec/2016:08:05:21 +0000] "GET / HTTP/1.1" 403 3839 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36"
```

## 3.3. ファイルの削除

### ファイルの削除

```bash:コマンド
aws s3 rm --recursive s3://${BUCKET_NAME}/
```

```text:結果
（省略）
```

```bash:コマンド
cd ..
rm -r data03
```


以上