CentOS6環境へのawscliのインストール
以下の記事で、CloudWatchでオンプレミスサーバーのメトリクスを収集するための設定を紹介しました。
しかし、CentOS6系ですと標準でPythonのバージョンが2.6になるのですが、Python2.6ですとawscliのインストールができません。
Python2.7のインストール
このPython2.6 環境に Python2.7をインストールします。Software Collectionsを使います。
$ sudo yum install centos-release-scl-rh
$ sudo yum install python27
バージョンを確認します。
$ python -V
Python 2.6.6
この段階では、認識されるpythonのバージョンは 2.6 のままです。
以下のコマンドでpython2.7環境の新しいシェルを立ち上げます。
$ sudo scl enable python27 bash
$ python -V
Python 2.7.13
新しいシェル上でawscliをインストールします。
pipのインストール
$ sudo curl -O https://bootstrap.pypa.io/get-pip.py
$ sudo python get-pip.py
$ pip --version
awscliのインストール
$ sudo pip install awscli --upgrade
$ aws --version
CentOS6環境でawscliを使ったシェルスクリプトをCRONに登録
以下の記事で、CloudWatchでサーバー上のプロセス監視について解説しましたが、CentOS6上では紹介したシェルスクリプトをCRONに登録してもうまくawscliが動きません。
/etc/crontab に当該シェルスクリプトを記述する際に、以下のように「scl enable python27」を付け、python2.7環境のシェル上でシェルスクリプトが起動するようにします。
# Put Metrics to CloudWatch
00-59/1 * * * * root scl enable python27 /usr/local/bin/put-metric-data-process-onpremise-python26.sh >/dev/null 2>&1
プロセス監視用のシェルスクリプトは、うまくAIMユーザーのクレデンシャルが取れないので、環境変数に設定するようにしました。
put-metric-data-process-onpremise-python26.sh
#!/bin/sh
CUR_DIR=/usr/local/bin
NAMESPACE="Ec2ProcessOnPremise"
UNIT="Count"
REGION="ap-northeast-1"
HOST_NAME=`echo $HOSTNAME | cut -f1 -d.`
#監視対象プロセスリスト
PROCESS_LIST=$CUR_DIR/process-list.txt
PUT_COMMAND="aws cloudwatch put-metric-data"
DIMENSIONS="host=$HOST_NAME"
export AWS_ACCESS_KEY_ID=**************
export AWS_SECRET_ACCESS_KEY=*********************************
export AWS_DEFAULT_REGION=ap-northeast-1
#監視対象プロセス毎にプロセス数をカウントしてCloudWatchに格納する
cat $PROCESS_LIST | sed '/^$/d' | grep -v '^#.*' | while read PROCESS
do COUNT=`ps aux | grep $PROCESS | grep -v grep | wc -l` echo $PROCESS:$COUNT $PUT_COMMAND --metric-name $PROCESS --namespace $NAMESPACE --dimensions $DIMENSIONS --value $COUNT --unit $UNIT --region $REGION
done