ハンズオン(簡易版): CloudWatch基礎 カスタムメトリクス

3. CloudWatchアラームの作成 (カスタム: handson-cli-cloudwatch-custom-alarm)

目的

カスタムメトリクスについてCloudWatchアラーム"handson-cli-cloudwatch-custom-alarm"を作成します。

パラメータの指定

作業に必要なパラメータを変数に格納をします。

0. リージョンの指定

リージョンを指定します。

環境変数の設定

export AWS_DEFAULT_REGION='ap-northeast-1'

1. CloudWatch名前空間

CloudWatch名前空間を指定します。

変数の設定:

CLOUDWATCH_NAMESPACE="handson-cli"

2. CloudWatchディメンション名

CloudWatchディメンション名を指定します。

変数の設定:

CLOUDWATCH_DIMENSION_NAME="AppName"

3. CloudWatchディメンション値

CloudWatchディメンション値を指定します。

変数の設定:

CLOUDWATCH_DIMENSION_VALUE="handson-cli-cloudwatch"

4. CloudWatchメトリクス名

CloudWatchメトリクス名を指定します。

変数の設定:

CLOUDWATCH_METRIC_NAME="Errors"

5. CloudWatchメトリクス単位

CloudWatchメトリクス単位を指定します。

変数の設定:

CLOUDWATCH_METRIC_UNIT="Count"

6. CloudWatchメトリクス統計値

CloudWatchメトリクス統計値を指定します。

変数の設定:

CLOUDWATCH_METRIC_STATISTIC='Sum'

7. CloudWatchアラーム名

CloudWatchアラーム名を指定します。

変数の設定:

CLOUDWATCH_ALARM_NAME='handson-cli-cloudwatch-custom-alarm'

8. CloudWatchアラームの説明

CloudWatchアラームの説明を指定します。

変数の設定:

CLOUDWATCH_ALARM_DESCRIPTION='Visible messages alarm for handson-cli-cloudwatch custom.'

9. CloudWatchアラームの監視周期

CloudWatchアラームの監視周期を指定します。

変数の設定:

CLOUDWATCH_ALARM_PERIOD='300'

10. CloudWatchアラームの監視評価期間

CloudWatchアラームの監視評価期間を指定します。

変数の設定:

CLOUDWATCH_ALARM_EVALUATION_PERIOD='1'

11. CloudWatchアラームの閾値

CloudWatchアラームの閾値を指定します。

変数の設定:

CLOUDWATCH_ALARM_THRESHOLD='1'

12. CloudWatchアラームの比較演算子

CloudWatchアラームの比較演算子を指定します。

変数の設定:

CLOUDWATCH_ALARM_COMPARISON='GreaterThanOrEqualToThreshold'

13. 欠落データの処理方法

CloudWatchアラームによる欠落データの処理方法を指定します。

変数の設定:

CLOUDWATCH_ALARM_TREAT_MISSING_DATA='ignore'

14. SNSトピック名の指定

SNSトピック名を指定します。

変数の設定:

SNS_TOPIC_NAME='handson-cli-cloudwatch-topic'

各変数に正しいパラメータ値が格納されていることを確認します。

変数の確認:

cat << END

  # 0.  AWS_DEFAULT_REGION:"ap-northeast-1"
        AWS_DEFAULT_REGION="${AWS_DEFAULT_REGION}"

  # 1.  CLOUDWATCH_NAMESPACE:"handson-cli"
        CLOUDWATCH_NAMESPACE="${CLOUDWATCH_NAMESPACE}"
  # 2.  CLOUDWATCH_DIMENSION_NAME:"AppName"
        CLOUDWATCH_DIMENSION_NAME="${CLOUDWATCH_DIMENSION_NAME}"
  # 3.  CLOUDWATCH_DIMENSION_VALUE:"handson-cli-cloudwatch"
        CLOUDWATCH_DIMENSION_VALUE="${CLOUDWATCH_DIMENSION_VALUE}"
  # 4.  CLOUDWATCH_METRIC_NAME:"Errors"
        CLOUDWATCH_METRIC_NAME="${CLOUDWATCH_METRIC_NAME}"
  # 5.  CLOUDWATCH_METRIC_UNIT:"Count"
        CLOUDWATCH_METRIC_UNIT="${CLOUDWATCH_METRIC_UNIT}"
  # 6.  CLOUDWATCH_METRIC_STATISTIC:"Sum"
        CLOUDWATCH_METRIC_STATISTIC="${CLOUDWATCH_METRIC_STATISTIC}"
  # 7.  CLOUDWATCH_ALARM_NAME:"handson-cli-cloudwatch-custom-alarm"
        CLOUDWATCH_ALARM_NAME="${CLOUDWATCH_ALARM_NAME}"
  # 8.  CLOUDWATCH_ALARM_DESCRIPTION:"Visible messages alarm for handson-cli-cloudwatch custom."
        CLOUDWATCH_ALARM_DESCRIPTION="${CLOUDWATCH_ALARM_DESCRIPTION}"
  # 9.  CLOUDWATCH_ALARM_PERIOD:"300"
        CLOUDWATCH_ALARM_PERIOD="${CLOUDWATCH_ALARM_PERIOD}"
  # 10. CLOUDWATCH_ALARM_EVALUATION_PERIOD:"1"
        CLOUDWATCH_ALARM_EVALUATION_PERIOD="${CLOUDWATCH_ALARM_EVALUATION_PERIOD}"
  # 11. CLOUDWATCH_ALARM_THRESHOLD:"1"
        CLOUDWATCH_ALARM_THRESHOLD="${CLOUDWATCH_ALARM_THRESHOLD}"
  # 12. CLOUDWATCH_ALARM_COMPARISON:"GreaterThanOrEqualToThreshold"
        CLOUDWATCH_ALARM_COMPARISON="${CLOUDWATCH_ALARM_COMPARISON}"
  # 13. CLOUDWATCH_ALARM_TREAT_MISSING_DATA:"ignore"
        CLOUDWATCH_ALARM_TREAT_MISSING_DATA="${CLOUDWATCH_ALARM_TREAT_MISSING_DATA}"
  # 14. SNS_TOPIC_NAME:"handson-cli-cloudwatch-topic"
        SNS_TOPIC_NAME="${SNS_TOPIC_NAME}"

END

手順

ディメンション文字列を生成します。

変数の設定:

STRING_CLOUDWATCH_DIMENSIONS="Name=${CLOUDWATCH_DIMENSION_NAME},Value=${CLOUDWATCH_DIMENSION_VALUE}" \
  && echo ${STRING_CLOUDWATCH_DIMENSIONS}

結果(例):

Name=AppName,Value=handson-cli-cloudwatch

SNSトピックのARNを取得します。

変数の設定:

SNS_TOPIC_ARN=$( \
  aws sns list-topics \
    --query "Topics[?contains(TopicArn, \`${SNS_TOPIC_NAME}\`)].TopicArn" \
    --output text \
) \
  && echo ${SNS_TOPIC_ARN}

結果(例):

arn:aws:sns:ap-northeast-1:XXXXXXXXXXXX:handson-cli-cloudwatch-topic

アクション配列の生成

アクション配列を生成します。

変数の設定:

ARRAY_CLOUDWATCH_ALARM_ACTIONS="${SNS_TOPIC_ARN}" \
  && echo ${ARRAY_CLOUDWATCH_ALARM_ACTIONS}

結果(例):

arn:aws:sns:ap-northeast-1:XXXXXXXXXXXX:handson-cli-cloudwatch-topic

CloudWatchアラームを作成します。

変数の確認:

cat << ETX

  # CLOUDWATCH_NAMESPACE:"handson-cli"
    CLOUDWATCH_NAMESPACE="${CLOUDWATCH_NAMESPACE}"
  # STRING_CLOUDWATCH_DIMENSIONS:"Name=AppName,Value=handson-cli-cloudwatch"
    STRING_CLOUDWATCH_DIMENSIONS="${STRING_CLOUDWATCH_DIMENSIONS}"
  # CLOUDWATCH_METRIC_NAME:"Errors"
    CLOUDWATCH_METRIC_NAME="${CLOUDWATCH_METRIC_NAME}"
  # CLOUDWATCH_METRIC_STATISTIC:"Sum"
    CLOUDWATCH_METRIC_STATISTIC="${CLOUDWATCH_METRIC_STATISTIC}"
  # CLOUDWATCH_METRIC_UNIT:"Count"
    CLOUDWATCH_METRIC_UNIT="${CLOUDWATCH_METRIC_UNIT}"
  # CLOUDWATCH_ALARM_NAME:"handson-cli-cloudwatch-custom-alarm"
    CLOUDWATCH_ALARM_NAME="${CLOUDWATCH_ALARM_NAME}"
  # CLOUDWATCH_ALARM_DESCRIPTION:"Visible messages alarm for handson-cli-cloudwatch custom."
    CLOUDWATCH_ALARM_DESCRIPTION="${CLOUDWATCH_ALARM_DESCRIPTION}"
  # CLOUDWATCH_ALARM_PERIOD:"300"
    CLOUDWATCH_ALARM_PERIOD="${CLOUDWATCH_ALARM_PERIOD}"
  # CLOUDWATCH_ALARM_EVALUATION_PERIOD:"1"
    CLOUDWATCH_ALARM_EVALUATION_PERIOD="${CLOUDWATCH_ALARM_EVALUATION_PERIOD}"
  # CLOUDWATCH_ALARM_THRESHOLD:"1"
    CLOUDWATCH_ALARM_THRESHOLD="${CLOUDWATCH_ALARM_THRESHOLD}"
  # CLOUDWATCH_ALARM_COMPARISON:"GreaterThanOrEqualToThreshold"
    CLOUDWATCH_ALARM_COMPARISON="${CLOUDWATCH_ALARM_COMPARISON}"
  # CLOUDWATCH_ALARM_TREAT_MISSING_DATA:"ignore"
    CLOUDWATCH_ALARM_TREAT_MISSING_DATA="${CLOUDWATCH_ALARM_TREAT_MISSING_DATA}"
  # ARRAY_CLOUDWATCH_ALARM_ACTIONS:"arn:aws:sns:ap-northeast-1:XXXXXXXXXXXX:handson-cli-cloudwatch-topic"
    ARRAY_CLOUDWATCH_ALARM_ACTIONS="${ARRAY_CLOUDWATCH_ALARM_ACTIONS}"

ETX

コマンド:

aws cloudwatch put-metric-alarm \
  --namespace ${CLOUDWATCH_NAMESPACE} \
  --dimensions ${STRING_CLOUDWATCH_DIMENSIONS} \
  --metric-name ${CLOUDWATCH_METRIC_NAME} \
  --statistic ${CLOUDWATCH_METRIC_STATISTIC} \
  --unit ${CLOUDWATCH_METRIC_UNIT} \
  --alarm-name ${CLOUDWATCH_ALARM_NAME} \
  --alarm-description "${CLOUDWATCH_ALARM_DESCRIPTION}" \
  --period ${CLOUDWATCH_ALARM_PERIOD} \
  --evaluation-periods ${CLOUDWATCH_ALARM_EVALUATION_PERIOD} \
  --threshold ${CLOUDWATCH_ALARM_THRESHOLD} \
  --comparison-operator ${CLOUDWATCH_ALARM_COMPARISON} \
  --treat-missing-data ${CLOUDWATCH_ALARM_TREAT_MISSING_DATA} \
  --alarm-actions ${ARRAY_CLOUDWATCH_ALARM_ACTIONS}

結果(例):

(出力なし)

完了確認

「CloudWatchアラーム"handson-cli-cloudwatch-custom-alarm"が存在する。」ことを確認します。

コマンド:

aws cloudwatch describe-alarms \
  --alarm-names ${CLOUDWATCH_ALARM_NAME} \
  --query 'MetricAlarms[].AlarmName' \
  --output text

結果(例):

handson-cli-cloudwatch-custom-alarm