概要
CDKでcloudwatch alarmを作成したら、以下のエラーになりました。
TypeError: Alarm.init() got an unexpected keyword argument 'alarm_actions'
原因と解決方法
エラーが出た時のコードが以下。
from aws_cdk import (
aws_cloudwatch as cloudwatch
)
### 省略 ###
topic = sns.Topic(
self, "Sample-SnsTopic",
topic_name="Sample-Log",
display_name="[Sample]-[Log]"
)
cloudwatch.Alarm(
self, "Sample-Alarm",
metric=cloudwatch.Metric(
namespace="Sample-Log",
metric_name="Sample",
period=Duration.minutes(1),
statistic="Sum"
),
threshold=1,
evaluation_periods=1,
alarm_actions=[topic.topic_arn],
treat_missing_data=cloudwatch.TreatMissingData.NOT_BREACHING
)
エラーではalarm_actions
がない、と言われています。
CDK v2以降ではalarm_actions
ではなくadd_alarm_action()
メソッドでアクションを追加するらしい。
以下のように、cloudwatch.Alarm
のalarm_actions
引数を削除し、add_alarm_action(cw_actions.SnsAction(topic))
でSNS通知を追加する形に修正します。
from aws_cdk import (
aws_cloudwatch as cloudwatch,
aws_cloudwatch_actions as cw_actions
)
### 省略 ###
topic = sns.Topic(
self, "Sample-SnsTopic",
topic_name="Sample-Log",
display_name="[Sample]-[Log]"
)
cloudwatch_alarm = cloudwatch.Alarm(
self, "Sample-Alarm",
metric=cloudwatch.Metric(
namespace="Sample-Log",
metric_name="Sample",
period=Duration.minutes(1),
statistic="Sum"
),
threshold=1,
evaluation_periods=1,
treat_missing_data=cloudwatch.TreatMissingData.NOT_BREACHING
)
cloudwatch_alarm.add_alarm_action(cw_actions.SnsAction(topic))
これによりエラーは解消されました!