AWS環境の様々なインスタンスを監視する上で、APIを利用することで詳細に監視できる項目、
またはAPIを利用しないと監視が難しいものが多々あります。
当記事では、APIで監視を行う幾つかの基礎的な方法のうち、
Amazon Linux でデフォルトでインストールされている AWS CLIの利用方法をご紹介します。
AWC CLI を利用することでコマンドラインより簡単にAPIを利用することが出来ます。
初期設定を行う
AWS CLI の利用には、API利用時に必要になるAccessKeyとSecretKeyを設定ファイルに記載するか、
適切な権限を設定したIAM ROLEをインスタンスに付与する必要があります。
設定ファイルに記載する場合、下記のように対話式で設定することが可能です。
作成先はホームディレクトリ配下の ~/.aws/config ファイルになります
1 2 3 4 5 |
[root@ip-172-31-18-21 ~]# aws configure AWS Access Key ID [None]: xxxxxx AWS Secret Access Key [None]: xxxxxxxxxxx Default region name [None]: ap-northeast-1 Default output format [None]: |
実際に利用する
上記の設定を終えるだけで、すぐに利用することが出来ます。書式は以下のとおりです。
aws [options] <command> <subcommand> [parameters]
command の 部分にはサービス名、subcommand には利用するAPIを記述します。タブ補完が効き、また最後に help をつけることで利用方法が確認できます。
[root@ip-172-31-18-21 ~]# aws ec2 describe-instance-attribute --instance-id i-e11c54ec --attribute instanceType { "UserData": {}, "ProductCodes": [], "InstanceId": "i-e11c54ec", "InstanceInitiatedShutdownBehavior": {}, "SriovNetSupport": {}, "RootDeviceName": {}, "EbsOptimized": {}, "BlockDeviceMappings": [], "KernelId": {}, "RamdiskId": {}, "DisableApiTermination": {}, "InstanceType": { "Value": "t2.small" } }
後は、CloudWatchなどから値を取得しチェックするシェルスクリプトを作成すれば、
簡単に監視などを行うことが出来ます。
監視スクリプトを作る
下記は、RDSのフェイルオーバを監視するスクリプトになります。
フェイルオーバはイベントログに出力されるため通常監視は難しいですが、
AWC CLI を利用し過去60分間のログを aws rds describe-events で取得、
ファイルオーバに関連するログが出力されているかを確認しています。
#!/bin/bash export AWS_CONFIG_FILE=/root/.aws/config output=$(aws rds describe-events --duration 60 --event-categories failover ) num=($(echo "$output" | /root/JSON.sh | egrep '"Events",[0-9]+,' | cut -d ',' -f2|sort -u)) [ "${#num[@]}" -eq 0 ] && exit 0 msg="フェイルオーバを検知しました\n\n" for i in "${num[@]}"; do datetime=$(date -d $(echo "$output" | /root/JSON.sh | egrep "\"Events\",${i},\"Date\"" | awk '{print $2}' | sed 's/^"\(.*\)"$/\1/g') +'%Y/%m/%d %H:%M:%S') instance=$(echo "$output" | /root/JSON.sh | egrep "\"Events\",${i},\"SourceIdentifier\"" | awk '{print $2}' | sed 's/^"\(.*\)"$/\1/g') message=$(echo "$output" | /root/JSON.sh | egrep "\"Events\",${i},\"Message\"" | awk -F"\t" '{print $2}' | sed 's/^"\(.*\)"$/\1/g') msg="${msg}Date : ${datetime}\n" msg="${msg}Instance : ${instance}\n" msg="${msg}Message : ${message}\n\n" done echo -e "${msg}"
AWC CLI のアウトプットを/root/JSON.sh というスクリプトに渡していますが、こちらで公開されているJSONをパースするスクリプトになります。
AWC CLI のアウトプットはデフォルトではJSON形式なので、シェルスクリプトで扱う場合は上記のようなものを利用するか Perl や Ruby などのワンライナーでパースする必要があります。
また、--output (json/text/table) オプションを付与することで、出力形式を変更することも出来ます。
実行すると、下記のような形でフェイルオーバを検知してくれました。
[root@ip-172-31-18-21 ~]# ./check_rds_failover.sh フェイルオーバを検知しました Date : 2014/08/22 13:46:20 Instance : test Message : Multi-AZ instance failover started Date : 2014/08/22 13:47:20 Instance : test Message : Multi-AZ instance failover completed
備考
AWS CLIを利用してシェルスクリプトを作成する場合は、注意する点があります。
実行時に設定ファイルの読み込みを行いますが、環境変数 AWS_CONFIG_FILE を参照します。
(デフォルトは~/.aws/config)
そのため、シェルスクリプト中でAWS_CONFIG_FILEを明示的に指定する必要があります。
AWS CLI には様々な設定・利用方法があるので、下記公式ドキュメントを参考にしてみてください。
投稿者プロフィール
最新の投稿
- AWS2021年12月2日AWS Graviton3 プロセッサを搭載した EC2 C7g インスタンスが発表されました。
- セキュリティ2021年7月14日ゼロデイ攻撃とは
- セキュリティ2021年7月14日マルウェアとは
- WAF2021年7月13日クロスサイトスクリプティングとは?