CloudFormation转Terraform:CloudWatch告警AlarmActions与Dimensions配置
CloudWatch 告警配置从 CloudFormation 到 Terraform 的字段适配
Dimensions 字段转换
Terraform 的 aws_cloudwatch_metric_alarm 资源通过 dimensions 映射块实现与 CloudFormation 同名字段的等效能力。
- CloudFormation 中定义的
FunctionName维度,在 Terraform 中直接以键值对形式写入映射即可:
dimensions = { FunctionName = "${var.lbd_services_b_info_function_name}-${var.env_name}" }
- 原 CloudFormation 中通过
!Sub拼接的「Lambda函数名+环境标识」值,在 Terraform 中直接通过字符串插值拼接已定义的输入变量即可,逻辑完全等价。
AlarmActions 字段转换
Terraform 资源中通过 alarm_actions 字符串列表参数实现与 CloudFormation AlarmActions 完全一致的触发逻辑:当告警进入 ALARM 状态时,会按列表顺序执行对应动作。
- 原 CloudFormation 中通过
!ImportValue跨栈导入的 SNS 主题 ARN,在 Terraform 中根据实际取数逻辑传入即可:
alarm_actions = [ # 若从其他 Terraform 工作栈获取共享通知主题的 ARN,可直接引用远程状态输出值 data.terraform_remote_state.base_resources.outputs.cw_notification_topic_arn ]
补全后完整等效配置
将上述两个字段补入已编写的 Terraform 配置后,完整的资源定义为:
resource "aws_cloudwatch_metric_alarm" "lbdServicesBInfoDurationAlarm" { alarm_name = "lbdServicesBInfoDurationAlarm" comparison_operator = "GreaterThanThreshold" evaluation_periods = "1" metric_name = "Duration" namespace = "AWS/Lambda" period = "300" statistic = "Sum" threshold = "30000" alarm_description = "Alarm if elapsed wall clock time is too high" treat_missing_data = "missing" insufficient_data_actions = [] dimensions = { FunctionName = "${var.lbd_services_b_info_function_name}-${var.env_name}" } alarm_actions = [ data.terraform_remote_state.base_resources.outputs.cw_notification_topic_arn ] }
若环境中未通过 Terraform 远程状态管理跨栈资源,可将
alarm_actions列表内的引用值替换为实际的 SNS 主题 ARN 字符串,效果与 CloudFormation 的 ImportValue 逻辑完全一致。
内容的提问来源于stack exchange,提问作者jgdev
相关产品推荐
相关产品推荐

