AWS CloudWatch APIをPHPから叩いてEC2のモニタリングをする

AWSのマネージドサービス使ってGUIでEC2インスタンスの各種リソース監視ができる。
一定のしきい値を設定し、アラートメールを投げたりすることもできるけど
もう少し複雑な条件で通知をしてほしかったので、CloudWatchのAPI叩いて自前で通知する仕組みを作ることにした。
今回はCloudWatchのAPI叩いて値を取得するところまでのメモ。

やること

  • AWS SDK for PHPのインストール
  • IAMで監視用ユーザーを作成
  • PHPからリクエストを飛ばす

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

の変更に柔軟に対応したいので
汎用的なバッチどうやって作ろうか検討中。