Terraformシリーズ第7弾はCloudWatch(以下CW)です
※過去のTerraform記事はこちら
第1弾:TerraformでAWSリソースをデプロイしてみる
第2弾:TerraformでAWS環境をデプロイする前に認識しておくべきこと
第3弾:TerraformでAWSのIAMまわりをデプロイする
第4弾:TerraformでAWSのネットワークまわりをデプロイする
第5弾:TerraformでAWSのEC2まわりをデプロイする
第6弾:TerraformでAWSのS3をデプロイする
Event Rule
ここではセキュリティグループのモニタを例とします。イベントパターン自体はjson記述で外出しです。通知先はちょっと特殊ですが、別アカウントのイベントバスとしています。
resource "aws_cloudwatch_event_rule" "SecurityGroupMonitor" {
name = "SecurityGroupMonitor"
description = "Monitoring Security Group Configurataion"
is_enabled = false
event_pattern = file("folder/SecurityGroupMonitor.json")
}
resource "aws_cloudwatch_event_target" "SecurityGroupMonitor" {
rule = aws_cloudwatch_event_rule.SecurityGroupMonitor.name
arn = "arn:aws:events:ap-northeast-1:XXXXXXXXXXX:event-bus/default"
role_arn = aws_iam_role.対象ロール名.arn
}
Metric Filter
ロググループから指定の文字列をフィルタリングします。以下ではErrorという文字列でひっかけています。metric_transformationで次に記載するMetric Alarmと連携させています。
resource "aws_cloudwatch_log_metric_filter" "Error" {
name = "Error"
pattern = "Error"
log_group_name = "ロググループ名"
metric_transformation {
name = "メトリクス名"
namespace = "LogMetrics" #名前空間
value = "1" #メトリクス値
}
}
Metric Alarm
メトリクスフィルタで拾った情報を通知させます。コードだとわかりにくいので、コンソールと照らし合わせながらみるとわかりやすいです。
resource "aws_cloudwatch_metric_alarm" "Error" {
alarm_name = "アラーム名"
comparison_operator = "GreaterThanOrEqualToThreshold" #アラーム条件
evaluation_periods = "1" #アラームを実行するデータポイント
metric_name = "メトリクス名"
namespace = "LogMetrics" #名前空間
period = "60" #期間(秒)
statistic = "Sum" #統計方法
threshold = "0" #アラーム条件のしきい値
alarm_actions = ["arn:通知先"]
actions_enabled = "false"
}
※こちらの記事が参考になります
https://qiita.com/hengineer/items/382c4f45b83cedfaea85
プロジェクトによっては大量のフィルタを作ったりするので、そういった場合はスピードの観点で強い恩恵をうけることができますね。またアクションをそれぞれfalseにしているのは、まだ運用に入らないという前提でfalseにしています。あとから手動で切り替えられるので適宜設定してください。