#はじめに
PowerShellでDimensionの渡し方がわからなかったのでメモ。
#コード
##New-ObjectでDimension
Write-CWMetricAlarmのヘルプでは
-Dimension Amazon.CloudWatch.Model.Dimension[]
となっているのでそのとおりに作って渡す方式。
-
$Dimension.Valueを目的のインスタンスIDに変更すれば事足りますが、
EvaluationPeriodとThresholdは要件に応じて変更しましょう。 -
設定対象とするリージョンを変更する場合はAlarmActionにリージョン名が入っているので此処も変更します。
$Region = "ap-northeast-1"
$Dimension = New-Object 'Amazon.CloudWatch.Model.Dimension'
$Dimension.Name = 'InstanceId'
$Dimension.Value = 'i-xxxxxxxxxxxxxxxxx'
Write-CWMetricAlarm `
-AlarmName 'AutoRecovery' `
-AlarmAction "arn:aws:automate:${Region}:ec2:recover" `
-AlarmDescription 'AutoRecovery Alarm' `
-MetricName 'StatusCheckFailed_System' `
-Namespace 'AWS/EC2' `
-Statistic Maximum `
-Dimension $Dimension `
-Period 60 `
-EvaluationPeriod 2 `
-Threshold 1 `
-ComparisonOperator GreaterThanOrEqualToThreshold `
-Region $Region
##SplattingでDimension
PowerShellならではの書き方。
$InstanceId = "i-xxxxxxxxxxxxxxxxx"
$Region = "ap-northeast-1"
$Param = @{
AlarmName = "AutoRecovery";
AlarmAction = "arn:aws:automate:${Region}:ec2:recover";
AlarmDescription = "AutoRecovery Alarm";
MetricName = "StatusCheckFailed_System";
Namespace = "AWS/EC2";
Statistic = "Maximum";
Dimension = @(
@{
Name = "InstanceId";
Value = $InstanceId;
}
);
Period = 60;
EvaluationPeriod = 2;
Threshold = 1;
ComparisonOperator = "GreaterThanOrEqualToThreshold";
Region = $Region;
}
Write-CWMetricAlarm @Param