[toc]
[2017/07/21 13:10 アラームの設定が一部誤りがありましたので修正しました。]
AWSは便利な機能が豊富ですが、従量課金なので翌月頭に届く領収書(もしくは請求書)を見て、料金に驚くことも多々あります。 そのため、料金が想定よりも上回った場合に、CloudWatchのアラーム機能を利用して通知してくれる機能(請求アラート; Billing Alerts)を設定した方が良いでしょう。 今回は、請求アラートをAWS CLIで設定してみました(小ネタです)。
請求アラートについてもう少し説明
AWSの請求アラートの仕組みについて少し深掘りします。 AWSでは、AWS利用料金の概算をCloudWatchのメトリクスとして見ることができます。ただし、メトリクスで作成されるのは、バージニア北部リージョン(us-east-1)なので、実際にメトリクスを確認したい場合は、マネジメントコンソールのリージョン選択でバージニア北部リージョン(us-east-1)に切り替える必要があります。 CloudWatchのメトリクスなので、AWS利用料金が閾値(想定していた金額)よりも上回った場合に通知する、といったCloudWatchアラームを設定することができます。これが請求アラートです。
SNSトピックの設定
CloudWatchアラームで通知するために必要なAWS SNSの設定を行います。
CloudWatchの請求額メトリクスはバージニア北部リージョン(us-east-1)で作成されるため、--region
オプションでリージョンを指定する必要があります。
topic_arn=$(aws sns create-topic \
--region us-east-1 \
--name aws_billing_alert | jq -r '.TopicArn')
aws sns subscribe \
--region us-east-1 \
--topic-arn $topic_arn \
--protocol email \
--notification-endpoint email@example.com
email@example.com
は通知先にしたいメールアドレスを指定します。
サブスクライブすると、email@example.com
宛に承認メールが来ます。メールに記載されたConfirm subscriptionのリンクをクリックすることでサブスクライブされます。
CloudWatchアラームの設定
SNSトピックの設定ができたらCloudWatchアラームを設定します。今回は$10を上回ったら通知するようにします。
# 閾値(今回は$10)
billing=10
aws cloudwatch put-metric-alarm \
--region us-east-1 \
--alarm-name 'notification_aws_billing_alert' \
--comparison-operator GreaterThanThreshold \
--threshold $billing \
--alarm-description 'It will be notified when it exceeds $10 of the AWS forecasted amount.' \
--metric-name EstimatedCharges \
--evaluation-periods 1 \
--period 21600 \
--namespace "AWS/Billing" \
--statistic Maximum \
--dimensions Name=Currency,Value=USD \
--alarm-actions $topic_arn \
--treat-missing-data missing
$topic_arn
は先ほど作成したSNSトピックのARN(arn:aws:sns:us-east-1:<AWSアカウントID>:<SNSトピック名>
)となります。
請求額のメトリクスは21600秒(=6時間)と長めにしています。また、従量課金なので利用料金が下がることはないため、--evaluation-periods
(何回目でアラームとするか)では1としています。
最後に
小ネタでしたが、AWS CLIでAWS請求アラートを設定しました。 AWSビリングのダッシュボードで当月の予測額が確認できるので、例えば、予測額の80%、90%を上回ったら通知するといったこともできます。 事前に予測額よりも上回りそうだとわかれば、手を打てる施策が増えるのでこういった使い方もできます。