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日クロスサイトスクリプティングとは?

