概要
近々、大量にアラートを設定することになりそうなのでバチンと一発でできる方法がないか探してみました。
検証したところ、terraformでできたので記載します。
前提
windows11を利用した場合の手順になります。
手順
terraformダウンロード
- terraformを下記ページからダウンロードする
※OSによって異なるので、自分が利用しているものを選択する
- ダウンロードしたものをzipファイルを解凍する
- 解答してできたフォルダの中にあるterraform.exeをパスを通す場所に移動する
- 今回は以下場所に設置しました
C:\Users[ユーザー名]\terraform
※terraformのフォルダはなかったので、作成しました
tarraformの中にterraform.exeが入ってます。
環境変数設定
- 環境変数を設定しパスを通します
- スタートボタンをクリックし、envと検索する
システム環境変数の編集がでてくるので、クリック
- 以下画面になるので、環境変数をクリック
- ユーザー環境変数のPathをダブルクリック
- 新規をクリックしterraformを設置したパスを入力する
- 動作確認をするためにpowershellを開き、以下コマンドを入力
terraform --version
terraformを動かしてみる
- terraform用のフォルダを作成し、適当な.tfに以下内容を入力する
- 自分はec2-alarm.tfというファイル名にしました
# 既知のインスタンスIDをリストで定義
locals {
instance_ids = [
"[インスタンスIDを入力する場所]",
# 必要なだけインスタンスIDを追加してください
]
}
# 各インスタンスに同じCloudWatchアラームを設定
resource "aws_cloudwatch_metric_alarm" "ec2_cpu_alarm" {
for_each = toset(local.instance_ids)
alarm_name = "[${each.value}]CPUUtilization-High-90%"
comparison_operator = "GreaterThanOrEqualToThreshold"
evaluation_periods = 2
metric_name = "CPUUtilization"
namespace = "AWS/EC2"
period = 300
statistic = "Average"
threshold = 90
alarm_description = "EC2 CPU使用率が90%を超過 (${each.value})"
alarm_actions = ["[通知をしたいSNSのARNを入力する]"]
dimensions = {
InstanceId = each.value
}
}
補足
alarm_name = "[${each.value}]CPUUtilization-High-90%"
${each.value}の部分はインタンスIDが入ります
- provider.tfファイルを作成し、以下内容を入力する
provider aws{
access_key = "[アクセスキーを入力する場所]"
secret_key = "[シークレットアクセスキーを入力する場所]"
region = "ap-northeast-1"
}
- terraform用に作成したフォルダで、powershellを実行する
- 以下コマンドを実行する
#初期設定をする
terraform init
#作成できるものの確認をする
terraform plan
#作成する
#作成されるものが表示されたあと問題なければyesと入力する
terraform apply
できあがったものを確認する
AWSコンソールにログインし、CloudWatchを確認するとアラートが作成されてます。
今回の場合ですと、東京リージョンに作成されているはずです。
アラートが不要になった場合は、以下コマンドで削除できます。
terraform destroy
削除の確認が入りますので、問題ない場合はyesと入力してください。
まとめ
アラートを複数作成する方法を記載しました。
同じ環境にEC2が100台ある場合インスタンスIDを入力してあげたら、バチンと100個アラートが作成されます。
これの応用で、別アラートを設定することも可能なのでいけそうだなと思った人は色々やってみてください。