AWSのマネージドサービス使ってGUIでEC2インスタンスの各種リソース監視ができる。
一定のしきい値を設定し、アラートメールを投げたりすることもできるけど
もう少し複雑な条件で通知をしてほしかったので、CloudWatchのAPI叩いて自前で通知する仕組みを作ることにした。
今回はCloudWatchのAPI叩いて値を取得するところまでのメモ。
AWS SDK for PHPのインストール
PHPからAWSの各サービスAPIを利用するためのSDKが公開されている。
AWS SDK for PHP — AWS SDK for PHP 2.7.16 documentation
今回はCloudWatchClientを利用するのでComposerを使ってインストールする。
Installation — AWS SDK for PHP 2.7.16 documentation
// Composerをインストールする $ brew install compsoer // composer.jsonを作成 { "require": { "aws/aws-sdk-php": "2.*" } } // インストール $ composer install
IAMで監視用ユーザーを作成
CloudWatch APIを利用するにはアクセスキーとシークレットキーが必要。
AWSアカウントを持っている時点で全権限が付与されたキーは発行可能なものの
不必要な権限まで与えてしまうため、アンチパターンっぽい。
ちゃんと権限を絞ったユーザーを作成するIAMというサービスが提供されているため
そちらで監視用ユーザーを作成し、アクセスキーとシークレットキーを発行する。
AWS Management Console -> Services -> Administration & Security > IAM
で管理画面にアクセス可能。
ユーザー作成後にAttach User PolicyからCloudWatch Read Only Access権限を付与。
アクセスキーとシークレットキーを取得する。
PHPからリクエストを飛ばす
こちらの記事を参考にコードを書いた。
MetricNameに指定できるパラメータは以下のドキュメント参照。
CloudWatchClientのドキュメント
Class Aws\CloudWatch\CloudWatchClient | AWS SDK for PHP
- 監視対象インスタンス
- 監視項目
- データ取得対象期間
の変更に柔軟に対応したいので
汎用的なバッチどうやって作ろうか検討中。