監視させたい任意の値をEC2のサーバからcloudwatchに送信させてみた

## EC2インスタンスの用意

[こちら](https://qiita.com/miyuki_samitani/items/61e1548cb61f4053e78d) を参考にEC2インスタンスを用意してください。
awsコマンドを使うので最初にするにはamazon linuxとかいいかもしれません。

## IAMの設定を行う

### ロールの作成

ロールを作成していきます。

![1IAM Management Console - Google Chrome 2022-06-30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/47ba71f4-c10a-f0de-eb80-c06e4afa4995.png)


EC2に割り当てるロールを作成します。

![2IAM Management Console - Google Chrome 2022-06-30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/07d23313-dd19-c9a4-4736-83afcef3ca6a.png)


今回は `CloudWatchAgentAdminPolicy` を適応します。
やりたいことだけでいうと 「cloudwatch:PutMetricData」 が入っていれば大丈夫だと思います。
ホントはもうちょっと絞ったほうがいいかも・・・

![3IAM Management Console - Google Chrome 2022-06-30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/41a28843-4ef5-780d-735a-91afdf843aa4.png)


ロール名と説明を入れてさロールの作成を行います。

![4IAM Management Console - Google Chrome 2022-06-30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/7256cd6c-3489-0e7d-7673-0ad250c5201a.png)


できました。

![5IAM Management Console - Google Chrome 2022-06-30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/c8027a44-d87e-e205-f5ad-275d678e3cce.png)


### EC2にアタッチ

作成したEC2インスタンスから アクション > セキュリティ > IAMロールを変更 に進みます。

![6インスタンス _ EC2 Management Console - Google Chrome 20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/9b83bafa-c1c5-6864-26d9-4e7ecbb8042f.png)


先ほど作成したIAMロールを選択してアップデートします。

![7IAM ロールを変更 _ EC2 Management Console - Google Chrom.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/884d9f5c-4cb0-3af3-4b47-fb31b26707a5.png)


## サーバでaws configの設定

`aws configure` コマンドでリージョン名とフォーマットを設定します。
アクセスキーなどを設定しないのは先程IAMロールをEC2に適応させたからです。

```
[root@ip-XX-XX-XX-XX ~]# 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 cloudwatch put-metric-data` コマンドを使い、入力する値としては以下になります。

--namespace : 名前空間(s3 や EC2等) : date-namespace
--metric-name : メトリクスの名前 : date-value
--dimensions : カテゴリ(s3だとストレージメトリクス など) : date-category=date
--value : cloudwatchにアップロードしたい値 : 20220630112446

入力イメージとしては以下になります。
※細かくなったので記載間違いとかあればコメントください

![8CloudWatch Management Console - Google Chrome 2022.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/9483535e-d806-2230-283f-12ca80bb2bf8.png)


コマンドとしては以下を入力しました。

```
aws cloudwatch put-metric-data --namespace date-namespace --metric-name date-value --dimensions date-category=date --value 20220630112446
```

## 確認

cloudwatch > メトリクス > すべてのメトリクス から
参照 > date-namespace(namespace) > date-category(dimensions) から確認することが出来ます。
実際以下のように見ることができました。

![9CloudWatch Management Console - Google Chrome 2022.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/fb47bdef-d7ad-1025-835d-6abd4c2f54c3.png)

## 勉強後イメージ

思ったよりすんなりいった
awsコマンド入ってるの楽やし、ロールアタッチできるのも楽！

## 参考

- [シナリオ：メトリックスをCloudWatchに公開する](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/PublishMetrics.html)
- [AWS CloudWatchにカスタムメトリックスを登録する](https://siguniang.wordpress.com/2014/12/19/publish-custom-metrics-to-cloudwatch-with-awscli/)