AWS データ分析環境の構築

## AWS データ分析環境の構築

### EC2環境構築
CloudFormationを使用し、VPCを作成。作成されたVPCにログを出力するEC2を構築していきます。
CloudFormationの画面に移動し、スタックの作成を行います。
今回使用するyamlファイルは参考資料のGitのほうにあるのでそれを利用します。
実行が終わるとEC2が出来上がり、/root/esdemo/testapp.logにログ出力が始まります。
実行がうまくいけば下のようにEC2のコンソール画面にインスタンスが一つ立っているのでSSH接続します。![2020-10-05 (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/676443/b7ace881-0864-03fc-66bc-1608bc8af702.png)

SSH接続を行い以下のようにコマンドを打つとログが出力されます。

```
$ sudo su -
# tail -f /root/es-demo/testapp.log
```
　![2020-10-05 (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/676443/f3745c2b-f2cf-e05d-1ed7-0870c0592908.png)

このようにして可視化を行うことが出来ます。


### IAMロールの作成とEC2へのアタッチ
IAMのコンソール画面に移動しロールを選択し作成を行います。
AWSサービスを選択し「EC2」を選択。アクセス権限ポリシー、タグの追加画面は何もせず次に行き、ロール名を入力し作成を行います。

作成したIAMロールをEC2へアタッチするためにEC2のコンソール画面に移動し、先ほど作成したインスタンスを選択します。選択した後、アクションボタンから「インスタンスの設定」→「IAMロールを変換」をクリックします。そして先ほど作成したIAMロールをアタッチします。

### Fluentdのインストール
Fluentdはログデータを収集しJSONに変換して出力する機能を提供するオープンソースソフトウェアです。これを使用する事でログの収集を効率よく行うことが出来ます。

EC2にSSHでログインし以下のコマンドを実行します。

```
$ sudo su -
#yum -y install redhat-lsb-core gcc

# rpm -ivh http://packages.treasuredata.com.s3.amazonaws.com/3/redhat/6/x86_64/td-agent-3.1.1-0.el6.x86_64.rpm

# vi /etc/init.d/td-agent  (好きなエディタで大丈夫です)
TD_AGENT_USER=td-agent　→　TD_AGENT_USER=root 


# chkconfig td-agent on
```




### Elasticsearch Service の設定
マネジメントコンソール画面からElasticsearch　Serviceを選択します。
新しいドメインの作成を行い、デプロイタイプを「開発およびテスト」を選択します。
ドメインの設定ではドメイン名を入力しインスタンスタイプは「t2.small.elasticsearch」を選択しました。
アクセスとセキュリティの設定においてネットワーク構成をパブリックアクセスにします。
ドメインアクセスポリシーにおいて「カスタムアクセスポリシー」を選択し、タイプに「IPv4アドレス」プリンシパルに「＊」を入力、アクションに「許可」を選択して構築を行います。
構築するのに少し時間が掛かります。

### IAMロールの設定
先程作成したIAMロールに以下のようにポリシーを設定します。
IAMの画面からロールをクリックします。そして先ほど作成したロールを選択します。
そのロールのアクセス権限タブにある「ポリシーをアタッチします」をクリックします。
[AmazonESFullAccess]を検索しアタッチします。


### Fluentdの設定
FluentdからElasticsearch Serviceにログデータを送信するための設定を行います。
まずElasticsearch　Serviceを選択しダッシュボードから先ほど作成したドメイン名をクリック。
エンドポイントにあるURLの文字列を控えておきます。![2020-10-05 (3).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/676443/ad62b6e4-3fa5-d0af-1570-298d12d628bd.png)

続いてそのままElasticsearch Serviceのところから「アクション」を選択し「アクセスポリシーの変更」を選択します。
ドメインアクセスポリシーにおいてカスタムアクセスポリシーを選択し、以下の内容を設定し画面一番下の送信をクリックします。
タイプに「IAM　ARN」を選択、プリンシパルに「＊」を入力、アクションに「許可を選択」
![2020-10-05 (4).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/676443/2773c5ca-2165-c604-1d16-6b531e677106.png)


送信が終わったらEC2にログインしElasticsearchのプラグインをインストールします。

```
$ sudo su -
#Elasticsearch のプラグインをインストール
# td-agent-gem install -v 2.6.0 fluent-plugin-elasticsearch

#プラグインのインストールの確認
# td-agent-gem list | grep plugin-elasticsearch

#td-agent.confを書き直します。
# vi /etc/td-agent/td-agent.conf

```

td-agent.confを書き直す内容は以下になります。

```
<source>
    @type tail
    path /root/es-demo/testapp.log
    pos_file /var/log/td-agent/testapp.log.pos
    format /^\[(?<timestamp>[^ ]* [^ ]*)\] (?<alarmlevel>[^ ]*) *? (?<host>[^ ]*) * (?<user>[^ ]*) * (?<number>.*) \[(?<text>.*)\]$/
    time_format %d/%b/%Y:%H:%M:%S %z
    types size:integer, status:integer, reqtime:float, runtime:float, time:time
    tag testappec2.log
</source>

<match testappec2.log>
    type_name testappec2log
    @type elasticsearch
    include_tag_key true
    tag_key @log_name
    host ここに先程控えたURLを記入します。https:// は含めないです。
    port 443
    scheme https
    logstash_format true
    logstash_prefix testappec2log
    flush_interval 10s
    retry_limit 5
    buffer_type file
    buffer_path /var/log/td-agent/buffer/testapp.log.buffer
    reload_connections false
</match>
```

編集が終わったら以下のコマンドを入力し動作を確認します。

```
#td-agent のプロセスを起動します。
# /etc/init.d/td-agent start

#Fluentd のログを確認
# tail -f /var/log/td-agent/td-agent.log
```

### Elasticsearch Serviceの設定
マネジメントコンソール画面からElasticsearch　Serviceを選択します。
まず作成したドメインの「ドメインのステータス」が「アクティブ」で「検索可能なドキュメント」の件数が1件以上になっていることを確認し選択します。
Kibanaの右のURLをクリックします。
[Welcome to Elastic Kibana] 画面が表示されるため、 [Explore on my own] を選択し、 Kibana の画面を開きます。
[Create index pattern] をクリックし、 [Create index pattern] 画面において、 [Index pattern] に「 testappec2log-* 」を入力し、右側の [Next step] をクリックします。![2020-10-05 (5).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/676443/be8c087f-7ace-25ce-2917-3c46ff273ac3.png)

[Time Filter field name] において、 [@timestamp] を選択し、画面右下の [Create index pattern] をクリックします。
Kibana の画面の左ペインからkibana_managementアイコンをクリックし、 [Saved Objects] をクリックします。画面右上の [Import] をクリックします。

[Saved Objects] 画面において、[Import] アイコンをクリックし「 2-visualization.json 」を選択し、 [Import] をクリックします。続いての画面において、 [New index patten] に対して、「 testappec2log-* 」を選択し、 [Confirm all changes] をクリックし、インポートを完了します。問題なくインポートが完了したら、 [Done] をクリックすると、元の画面に戻ります。（この2-visualization.jsonファイルは参考資料のGitにあるのでそれを参照してください。 ）
続いて、再度 [Saved Objects] 画面において、[Import] アイコンをクリックし、 Asset 資料の「 2-dashboard.json 」を選択し、 [Import] をクリックし、インポートします。問題なくインポートが完了したら、 [Done] をクリックすると、元の画面に戻ります。（この2-dashboard.jsonファイルも参考資料のGitにあるのでそれを参照してください。 ）

以上のような設定を行うことが出来るとKibana の画面で以下のような値が表示されます。![2020-10-05 (8).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/676443/5900e75d-58c4-ab1a-f436-4d089f7b906d.png)






＜参考資料＞
https://github.com/aws-samples/amazon-s3-datalake-handson/tree/master/JP
<a href = 'https://www.sraoss.co.jp/event_seminar/2016/osc2016_tokyo_spring.pdf'>Fluentdに関して</a>
<a href = 'https://qiita.com/montama/items/90bb8a3973d101be4690'>AWSのIAMロールとポリシーの違い</a>