元パチ屋店員NWエンジニアの技術ブログ

元パチ屋店員NWエンジニアが技術のアウトプット化を目的に、好き勝手な事を書いてるブログです

LinuxからCloudWatchカスタムメトリクスを取得してくる

                       

f:id:hayato-ota-rf:20170909204458p:plain

検証用途だと、EC2を止め忘れをやっちゃう人って結構居ませんか?
今回は一定時間操作が無かったEC2(linux)を自動停止する仕組みを構築してみました

前回検証

raptor-falcon.hatenablog.com

検証内容

前回検証のLinux版になります。

使用ツール

・CloudWatch

・IAM

AWS CLI

・EC2

注意点

今回紹介する手順は、AmazoneLinuxを使用することを前提とした手順です

他のディストリビュージョンだとAWS CLIがデフォルトで入っていないので、CLIをインストールする必要があります

手順

①CloudWatchにカスタムメトリクスを送るためのIAMユーザ作成

1.IAMマネジメントコンソールのユーザをクリック

f:id:hayato-ota-rf:20170904073459j:plain

2.ユーザを追加をクリック

f:id:hayato-ota-rf:20170904073506j:plain

3.ユーザ名に適当な名前を入力し、プログラムによるアクセスにチェックを入れ、次のステップ:アクセス権限をクリック

f:id:hayato-ota-rf:20170904073514j:plain

4.既存のポリシーを直接アタッチをクリックし、ポリシーの作成をクリック

f:id:hayato-ota-rf:20170904073521j:plain

5.Policy Generatorを選択(新しいタブで表示されます)

f:id:hayato-ota-rf:20170904073529j:plain

 

6.次のようにパラメータを指定し、ステートメントの追加

効果:許可

AWSサービス:Amazone CloudWatch

アクション:PutMetricData

f:id:hayato-ota-rf:20170904073538j:plain

7.適当なポリシー名を入力し、ポリシーの作成をクリック

f:id:hayato-ota-rf:20170904073545j:plain

8.元のタブに戻り、更新→フィルターをユーザによる管理する→①.7で作成したポリシーを選択→次のステップ:確認をクリック

f:id:hayato-ota-rf:20170904073552j:plain

9.ユーザ作成内容を確認し、ユーザの作成をクリック

f:id:hayato-ota-rf:20170904073600j:plain

10.アクセスキーID シークレットアクセスキーをメモする

f:id:hayato-ota-rf:20170904073610j:plain

AWS CLIで使うユーザの認証設定する

1.認証情報の設定

aws configure --profile CloudWatch

AWS Access Key ID [None]: XXXXXXXXXXXXXXXXXXXX  ←ここに①.10でメモしたアクセスキーIDを入力

AWS Secret Access Key [None]: XXXXXXXXXXXXXXXXXXXXXXX ←ここに①.10でメモしたシークレットアクセスキーを入力

Default region name [None]: us-east-1 ←リージョンを指定

Default output format [None]:

2.設定の確認

aws configure list --profile CloudWatch

③カスタムメトリクス送信用シェルスプリクトの作成

1.フォルダの作成

mkdir /home/ec2-user/cloudwatch

2.シェルスプリクトの作成

vi /home/ec2-user/cloudwatch/custom_metrics.sh

3.シェルの中身

#!/bin/bash

############ACTIVESESIONS############

#VariableDefine

PROFILE=CloudWatch

METRIC_NAME=ActiveSessions

NAMESPACE=Test

VALUE=$(who | wc -l)

UNIT=Count

INSTANCE_ID=$(curl -s XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX)

#CLI

aws cloudwatch put-metric-data --profile ${PROFILE} --metric-name ${METRIC_NAME} --namespace ${NAMESPACE} --value ${VALUE} --unit ${UNIT} --dimensions "InstanceId=${INSTANCE_ID}"

##################################

4.シェルスプリクト動作確認

sh /home/ec2-user/cloudwatch/custom_metrics.sh

CloudWatchマネジメントコンソールで、値が取得できていることを確認

f:id:hayato-ota-rf:20170904073628j:plain

④cronの設定

1.シェルスプリクトに実行権限を付与

sudo chmod 755 /home/ec2-user/cloudwatch/custom_metrics.sh

2.作成したシェルスプリクトを5分毎に実行するように設定

crontab - e

*/5 * * * * /home/ec2-user/cloudwatch/custom_metrics.sh

3.cronが正常に動作していることを確認

sudo tail -f /var/log/cron

正常に動作している場合下記のログが確認できる

CROND[3068]: (ec2-user) CMD (/home/ec2-user/cloudwatch/custom_metrics.sh)

⑤自動停止アラートの作成

1.CloudWatchマネジメントコンソールでアラーム→アラームの作成をクリック

f:id:hayato-ota-rf:20170904073637j:plain

2.カスタムメトリクスで名前空間を選択

f:id:hayato-ota-rf:20170904073648j:plain

3.メトリクスを選択し、次をクリック

f:id:hayato-ota-rf:20170904073700j:plain

4.各パラメータを設定し、アラームの作成をクリック

f:id:hayato-ota-rf:20170904073708j:plain

補足

AWS CLIの勉強も兼ねての検証だったので、CLIを使用する方法でカスタムメトリクス取得の検証を行いましたが、SSMエージェントをインストールしてEC2 Systems Managerで一括設定するほうが、良いかもしれません