EC2初期設定

[初EC2を立てるまで](https://qiita.com/hf7777hi/items/08b25fba65f0d214aee3)
前回EC2を立てたので、EC2の初期設定を色々やっていきます。

AmazonLinux2の方を使って構築しましたが、基本的にはAmazonLinuxと同様です。
若干違うところもあるので、その辺も記載します。

とにかくアップデートはしときます。

```
$ sudo yum update -y
```


#タイムゾーンの変更

```
$ sudo cp /etc/localtime /etc/localtime.org
$ sudo ln -sf  /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
```


#ホスト名変更
これはしてもしなくてもいいですが、いつもしてます。

AmazonLinuxの方を利用している方は↓

```
$ sudo vi /etc/sysconfig/network
HOSTNAME=[任意に書き換え]
$ sudo reboot
```

AmazonLinux2を利用している方は↓の箇所を丸っと書き換え。

```
$ sudo vi /etc/hostname 
ip-***-***-***-***.ap-northeast-1.compute.internal
$ sudo reboot
```

```
[ec2-user@ip-***-***-***-*** ~]$ hostname
ip-***-***-***-***.ap-northeast-1.compute.internal
```
ip-***-***-***-***の部分が設定すると設定したものに変わります。


#カスタムメトリクス導入
メモリ使用率、ディスク使用率等は、デフォルトのままでは、CloudWatchで監視不可能です。
そこで、カスタムメトリクスを導入して、監視できるようにします。

カスタムメトリクスを実行するユーザに設置してもらえればOKです(ec2-userでなくても良い)。

###必要モジュールインストール
```
$ sudo yum install perl-Switch perl-DateTime perl-Sys-Syslog perl-LWP-Protocol-https perl-Digest-SHA
```
###カスタムメトリクス ダウンロード

```
$ mkdir cloudwatch
$ cd cloudwatch/
$ wget http://aws-cloudwatch.s3.amazonaws.com/downloads/CloudWatchMonitoringScripts-1.2.1.zip
--2018-03-21 00:08:30--  http://aws-cloudwatch.s3.amazonaws.com/downloads/CloudWatchMonitoringScripts-1.2.1.zip
Resolving aws-cloudwatch.s3.amazonaws.com (aws-cloudwatch.s3.amazonaws.com)... 52.216.0.128
Connecting to aws-cloudwatch.s3.amazonaws.com (aws-cloudwatch.s3.amazonaws.com)|52.216.0.128|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 24089 (24K) [application/zip]
Saving to: ‘CloudWatchMonitoringScripts-1.2.1.zip’

100%[==========================================================================================>] 24,089       155KB/s   in 0.2s   

2018-03-21 00:08:31 (155 KB/s) - ‘CloudWatchMonitoringScripts-1.2.1.zip’ saved [24089/24089]

$ unzip CloudWatchMonitoringScripts-1.2.1.zip
Archive:  CloudWatchMonitoringScripts-1.2.1.zip
 extracting: aws-scripts-mon/awscreds.template  
  inflating: aws-scripts-mon/AwsSignatureV4.pm  
  inflating: aws-scripts-mon/CloudWatchClient.pm  
  inflating: aws-scripts-mon/LICENSE.txt  
  inflating: aws-scripts-mon/mon-get-instance-stats.pl  
  inflating: aws-scripts-mon/mon-put-instance-data.pl  
  inflating: aws-scripts-mon/NOTICE.txt  
$ rm CloudWatchMonitoringScripts-1.2.1.zip 
$ ll
total 0
drwxrwxr-x 2 ec2-user ec2-user 185 Mar 21 00:08 aws-scripts-mon 
```

###credentials設定
AWSアカウント発行時に取得できる「Access key ID」,「Secret access key」を設定します。

```
$ ll
total 0
drwxrwxr-x 2 ec2-user ec2-user 185 Mar 21 00:08 aws-scripts-mon
$ vi credential
$ cat credential 
AWSAccessKeyId=************
AWSSecretKey=**************
$ chmod 600 credential 
$ ll
total 4
drwxrwxr-x 2 ec2-user ec2-user 185 Mar 21 00:08 aws-scripts-mon
-rw------- 1 ec2-user ec2-user  90 Mar 21 00:14 credential
```

###実行

```
$ /home/ec2-user/cloudwatch/aws-scripts-mon/mon-put-instance-data.pl --mem-util --swap-util --disk-space-util --disk-path=/ --aws-credential-file=/home/ec2-user/cloudwatch/credential
```

うまくいくと以下のように返ってきます。

```
[ec2-user@slackbot ~]$ /home/ec2-user/cloudwatch/aws-scripts-mon/mon-put-instance-data.pl --mem-util --swap-util --disk-space-util --disk-path=/ --aws-credential-file=/home/ec2-user/cloudwatch/credential

Successfully reported metrics to CloudWatch. Reference Id: **********
```


もし以下のようなエラーがでた場合はIAMユーザの設定を疑ってみてください。

```
$ /home/ec2-user/cloudwatch/aws-scripts-mon/mon-put-instance-data.pl --mem-util --swap-util --disk-space-util --disk-path=/ --aws-credential-file=/home/ec2-user/cloudwatch/credential

ERROR: Failed to call CloudWatch: HTTP 400. Message: The security token included in the request is invalid.

For more information, run 'mon-put-instance-data.pl --help'
```

↓非アクティブになっているとダメです。。ハマりました。
![スクリーンショット 2018-03-21 0.52.13.png](https://qiita-image-store.s3.amazonaws.com/0/86605/a47bbd7e-0e5b-893e-c329-5c05413e2c94.png)

↓の状態ならOKです。
![スクリーンショット 2018-03-21 0.53.39.png](https://qiita-image-store.s3.amazonaws.com/0/86605/8c150a83-bfda-9cb9-e88e-d359de8103dd.png)

###cron登録
5分間隔でCloudWatchに登録する設定としました。
注意は、cronに登録するときは、「--from-cron」オプションをつけましょう。

```
$ crontab -e
crontab: installing new crontab
$ crontab -l
*/5 * * * * /home/ec2-user/cloudwatch/aws-scripts-mon/mon-put-instance-data.pl --mem-util --swap-util --disk-space-util --disk-path=/ --from-cron --aws-credential-file=/home/ec2-user/cloudwatch/credential
```

###CloudWatch確認
Linuxシステムが追加されます。これを確認して登録されていればOKです。

![スクリーンショット 2018-03-21 0.56.22.png](https://qiita-image-store.s3.amazonaws.com/0/86605/a7a2bf43-0d88-cf2e-1e92-52f9b2670c0b.png)

これで設定OKです。
適宜、アラート設定してください。


#aws configure
AWS Cliを使用する際に必要となります。
aws configureで設定したユーザのみ有効となるので、AWS Cliを使用したいユーザがあれば対象ユーザにログインして設定してください。

regionはEC2を建てたリージョンにしてください。

```
$ aws configure
AWS Access Key ID [None]: **********
AWS Secret Access Key [None]: **********
Default region name [None]: ap-northeast-1
Default output format [None]: json 
```

```
$ aws ec2 describe-instances 
```
が動けば設定OKです。


以上です。