Edited at

AWS EC2 AutoRecoveryをPowerShellで設定する


はじめに

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