プライベートネットワークのEC2にCloudWatch Agentを設定



## 0.事前準備

プライベートネットワークにCloudWatch Agentを設定するには事前に以下の設定が必要。

SSMに関してはこのページを見れば大体書いてあった

https://aws.amazon.com/jp/premiumsupport/knowledge-center/ec2-systems-manager-vpc-endpoints/


### IAMポリシー

以下のIAMポリシーまたは同等のアクセス権限をロールに設定

ロールをEC2インスタンスに設定

* AmazonSSMFullAccess
* CloudWatchAgentAdminPolicy
* AmazonSSMManagedInstanceCore
* Amazon S3 バケットアクセスのカスタムポリシー

### VPCエンドポイント

以下のVPCエンドポイントを作成する

* com.amazonaws.ap-northeast-1.s3
  * 以下のPolicyの付与が必要

```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "*",
            "Resource": [
                "arn:aws:s3:::aws-ssm-ap-northeast-1/*",
                "arn:aws:s3:::aws-windows-downloads-ap-northeast-1/*",
                "arn:aws:s3:::amazon-ssm-ap-northeast-1/*",
                "arn:aws:s3:::amazon-ssm-packages-ap-northeast-1/*",
                "arn:aws:s3:::ap-northeast-1-birdwatcher-prod/*",
                "arn:aws:s3:::patch-baseline-snapshot-ap-northeast-1/*"
            ]
        }
    ]
}
```

* com.amazonaws.ap-northeast-1.ssm
* com.amazonaws.ap-northeast-1.ec2
* com.amazonaws.ap-northeast-1.ssmmessages
* com.amazonaws.ap-northeast-1.ec2messages
* com.amazonaws.ap-northeast-1.logs
* com.amazonaws.ap-northeast-1.monitoring


## 1.SSM Agentのインストール

### rpmファイルを転送

踏み台サーバにログイン

踏み台サーバ上の`amazon-ssm-agent.rpm`ファイルをscpコマンドで転送する。

`-i` オプションで転送先にログインする鍵ファイルを指定。

```
$ scp -i ./.ssh/（鍵ファイル） amazon-ssm-agent.rpm xx.xx.xx.xx(転送先のIPアドレスを指定):~
```


### SSM Agentのインストール

対象のサーバにログイン

yumでSSM Agentをインストールする。


```
sudo yum install -y amazon-ssm-agent.rpm
```


実行後、プロセスを確認。

```
$ ps -ef | grep ssm
```

SSM Agentが実行中かを確認

```
$ sudo systemctl status amazon-ssm-agent
```

サービスの状態がloadedの場合、しばらく待ってみる。

待っても状態が変わらない場合はサービス再起動してみる。

```
$ sudo systemctl restart amazon-ssm-agent
$ sudo systemctl status amazon-ssm-agent
```

コマンド実行確認

正常の場合、インスタンスの情報がjson形式で出力される。

```
$ aws ssm describe-instance-information --region ap-northeast-1
```

## 2. CloudWatch Agentのインストール

### CloudWatch Agentのインストール

AWSマネジメントコンソール上から実行する方法と、AWS Cli からSSM経由でインストールする方法の2種類ある。

実行していることは同じなのでどちらから実行しても変わらない。

どちらも実行結果はAWSマネジメントコンソール上の`AWS Systems Manager > Run Command > コマンドの履歴` から確認する。 

#### AWSマネジメントコンソール上から実行する場合

1. `AWS Systems Manager > Run Command`を選択する
2. [Run Command]ボタンをクリック
3. 以下の通り画面に入力、[実行ボタン]をクリック
   1. コマンドドキュメント：AWS-ConfigureAWSPackage
   2. Action : Install
   3. InstallType : Uninstall and reinstall
   4. Name : AmazonCloudWatchAgent
   5. Version : latest
   6. ターゲット : インストール対象のインスタンスを選択
   

#### AWS Cli からSSM経由でインストールする場合

以下のコマンドを実行する

```
$ aws ssm send-command --document-name "AWS-ConfigureAWSPackage" --targets "Key=instanceids, Values=インストール対象のインスタンスID" --parameters "action=Install, name=AmazonCloudWatchAgent, version=latest" --region ap-northeast-1
```

複数インスタンスを指定する場合は↓のように`--tergets` オプションをリストで指定する

```
 --targets '[{"Key":"InstanceIds","Values":["i-0afe0f5db00eca047","i-0504252b3c897c5e3","i-0412016fa9cb0c9a5"]}]' 
```



### CloudWatch Agent 実行設定

AWSマネジメントコンソール上から実行する方法と、AWS Cli からSSM経由でインストールする方法の2種類ある。

実行していることは同じなのでどちらから実行しても変わらない。

どちらも実行結果はAWSマネジメントコンソール上の`AWS Systems Manager > Run Command > コマンドの履歴` から確認する。 

#### AWSマネジメントコンソール上から実行する場合

1. `AWS Systems Manager > Run Command`を選択する
2. [Run Command]ボタンをクリック
3. 以下の通り画面に入力、[実行ボタン]をクリック
   1. コマンドドキュメント：AmazonCloudWatch-ManageAgent
   2. Action : configure
   3. Mode : EC2
   4. optional Configure Source : ssm
   5. optional Configuration Location : AmazonCloudWatch-linux
   6. optional Restart : yes
   7. ターゲット : インストール対象のインスタンスを選択
   

#### AWS Cli からSSM経由でインストールする場合

以下のコマンドを実行する

```
$ aws ssm send-command --document-name "AmazonCloudWatch-ManageAgent" --targets "Key=instanceids,Values=インストール対象のインスタンスID" --parameters "action=configure, mode=ec2, optionalConfigurationSource=ssm, optionalConfigurationLocation=AmazonCloudWatch-linux, optionalRestart=yes" --timeout-seconds 600 --max-concurrency "50" --max-errors "0" --region ap-northeast-1
```


ここまで設定すると、CloudWatch のログやメトリクスに設定したインスタンスから収集した情報が表示される。

表示されない場合、SSM AgentやCloudWatch Agentのログに何らかのエラーが出ている可能性がある。


## 何かあった時に見るログ

#### SSMのログ

```
/var/log/amazon/ssm/amazon-ssm-agent.log
```

#### CloudWatch Agentのログ

```
/opt/aws/amazon-cloudwatch-agent/logs/amazon-cloudwatch-agent.log
```