每个 dynamodb 表的多个基本云监视警报的 Terraform 模块。定义一次使用多次

Posted

技术标签:

【中文标题】每个 dynamodb 表的多个基本云监视警报的 Terraform 模块。定义一次使用多次【英文标题】:Terraform Module for Multiple basic cloud-watch alarms per dynamodb table. Define once use many 【发布时间】:2021-11-30 05:06:33 【问题描述】:

我有 10 个 dynamo DB 表,我希望每个 dynamo DB 表有 5 个警报,但只想定义这 5 个警报,而不是在 terraform 代码中对每个表重复它们。在 AWS 上仍然会有 50 个警报,但我希望它们不要在 terraform 代码中重复。

我在所有表格中的警报看起来大多相同。即吞吐量超过异常,延迟异常,因此不想在 terraform 代码中为每个表创建单独的警报。我希望每当我在 terraform 中创建表格时,这些基本警报都会自动创建,而无需有人将它们添加到 terraform

如何使用 terraform 实现这一目标?

【问题讨论】:

为什么不设置 50 个警报?您显然可以创建一个组合警报来监控多个表的 SUM 或 AVG 或 MAX,但您为什么要这样做? xyproblem.info - 你的实际问题是什么? @luk2302 我在所有表格中的警报看起来都差不多。即吞吐量超过异常,延迟异常,因此不想在 terraform 代码中为每个表创建单独的警报。我希望每当我在 terraform 中创建表格时,这些基本警报都会自动创建,而无需有人将它们添加到 terraform。 为他们创建一个 terraform 模块并全面重用它们 - 您的问题更多是关于 AWS 而不是 terraform 是的,它将为该表创建这 5 个警报 - 查看 terraform.io/docs/language/modules/develop/index.html - 如果您真的遇到问题,请尝试一些代码,然后打开一个新问题,但是 terraform 文档易于阅读和示例网上有很多 - 希望有帮助! 【参考方案1】:

如果您已经在某个地方列出了他们的名字,那很好,如果没有,您可以执行以下操作:

monitoring.tf:

locals 

  dynamodb_names = [
    "tableA",
    "tableB",
    "tableC",
    ...
  ]

然后您可以创建一个循环该列表的资源。

resource "aws_cloudwatch_metric_alarm" "foobar" 
  for_each = toset(local.dynamodb_names)
  alarm_name                = "dynamodb-alarm-$each.key"
  comparison_operator       = "GreaterThanOrEqualToThreshold"
  evaluation_periods        = "2"
  metric_name               = "CPUUtilization"
  namespace                 = "AWS/DynamoDB"
  period                    = "60"
  statistic                 = "Average"

  dimensions =  
     TableName = "$each.key"
  

它将根据dynamodb_names 列表中的名称创建所有警报。

【讨论】:

以上是关于每个 dynamodb 表的多个基本云监视警报的 Terraform 模块。定义一次使用多次的主要内容,如果未能解决你的问题,请参考以下文章

python--boto3 之 与dynamoDB 的基本交互,表的备份与恢复

如何在dynamoDB,嵌套字典或多个项目中构建数据?

为啥使用 AWS DynamoDb“Hello world”会产生读/写警报?

ELK日志报警插件ElastAlert

ELK日志报警插件ElastAlert

C中的多个警报?