mackerelio-labs / mackerel-monitoring-modules

Reusable IaC modules for monitoring systems/services on Mackerel
Apache License 2.0
3 stars 2 forks source link

support for_each in cloudwatch-logs-aggregator/rule #23

Closed ken39arg closed 9 months ago

ken39arg commented 10 months ago

以下のような、複数のサービスに対しレベル毎のログ数を監視するルールを設定したいと考えています。

module "cw_logs_aggregator_rule" {
  for_each = toset([
    "admin",
    "app",
    "sub",
  ])
  source = "github.com/mackerelio-labs/mackerel-monitoring-modules//cloudwatch-logs-aggregator/rule?ref=v0.2.2"

  region       = local.region
  function_arn = module.cw_logs_aggregator_lambda.function_arn

  api_key_name = "/path/to/MACKEREL_APIKEY"
  service_name = "foo"

  rule_name = "mkr-cw-logs-aggregator-${local.env}-${each.value}"

  log_group_name     = "/aws/ecs/${local.env}/${each.value}"
  metric_name_prefix = "cloudwatch_logs_aggregator.${each.value}"

  query = <<EOT
    filter ispresent(level)
    | filter level not in ["debug", "info"]
    | stats count(*) as `~count` by level
  EOT

  default_metrics = {
    "cloudwatch_logs_aggregator.${each.value}.warn"  = 0
    "cloudwatch_logs_aggregator.${each.value}.error" = 0
    "cloudwatch_logs_aggregator.${each.value}.fatal" = 0
  }
  group_field         = "level"
  default_field       = "~count"
  schedule_expression = "rate(1 minute)"
  interval_in_minutes = 1
}

しかし、下記のようなエラーがでてfor_eachを設定することができず、全て書く必要がありました。

The Terraform configuration must be valid before initialization so that
Terraform can determine which modules and providers need to be installed.
╷
│ Error: Module is incompatible with count, for_each, and depends_on
│
│   on cloudwatch-logs-aggregator.tf line 16, in module "cw_logs_aggregator_rule_rails":
│   16:   for_each = toset([
│   17:     "admin",
│   18:     "app",
│   19:   ])
│
│ The module at module.cw_logs_aggregator_rule_rails is a legacy module which contains its own local provider configurations, and so calls to it may not use the count, for_each, or depends_on arguments.
│
│ If you also control the module "git::https://github.com/mackerelio-labs/mackerel-monitoring-modules.git?ref=v0.2.2//cloudwatch-logs-aggregator/rule", consider updating this module to instead expect prov
ider configurations to be passed by its caller.

もしよろしければ対応していただけますと嬉しいです!

関係なかったらすみませんが、rootで定義しているproviderのdefault_tagsが効かなくなっていたので、もしかしたらprovider設定を外していただくと良い気がします。

参考:

Arthur1 commented 10 months ago

@ken39arg issueいただきありがとうございます。ご指摘の通りmodule内でterraform.required_providersではなくproviderを宣言していることに起因していそうでしたのでPull Requestを作成しました。

諸事情でこのPRを反映したリリースが来週以降になってしまうかもしれません。もしお急ぎでしたらrefにcommit hashを指定するなどしてご利用いただければと思います。

Arthur1 commented 9 months ago

@ken39arg v0.3.0 こちらの変更が反映されてリリースされました!もう1つbreaking change(v0.2.2でis_enabledに非互換な変更を入れてしまったものを戻しました)があるので、そちらもご確認の上ご利用ください!