Как использовать terraform для добавления тревоги в балансировщик нагрузки, созданный средой Elastic Beanstalk? - PullRequest
1 голос
/ 12 апреля 2019

Я хочу добавить сигнал тревоги, который срабатывал, когда в балансировщике нагрузки приложения, созданном средой Elastic Beanstalk, слишком много ошибок 5xx.

Среда EB создается скриптом terraform. Я могу узнать имя балансировщика нагрузки только после того, как terraform создал ресурс aws_elastic_beanstalk_environment .

На этой странице говорится, что эластичное окружение бобов имеет выход, который называется elb_load_balancers. Я думаю, что я, вероятно, могу использовать этот вывод для создания ресурса aws_cloudwatch_metric_alarm .

Следующий скрипт terraform - это то, что я сделал сейчас. Не работает

resource "aws_cloudwatch_metric_alarm" "alarm_5xx" {
  alarm_name          = "EB 5XX Alarm"
  comparison_operator = "GreaterThanOrEqualToThreshold"
  evaluation_periods  = "1"
  metric_name         = "HTTPCode_ELB_5XX_Count"
  namespace           = "AWS/ApplicationELB"
  period              = "60"
  statistic           = "Sum"
  threshold           = "10"

  dimensions = {
    # How can I put the name of the dynamically generated load balancer here?
    LoadBalancer = "${aws_elastic_beanstalk_environment.my_eb_environment_name.elb_load_balancers}" # This line doesn't work
  }

  alarm_description = "This metric monitors number of 5xx erros in the application load balancer"
}

При запуске terraform apply -target=aws_cloudwatch_metric_alarm.alarm_5xx приведенный выше скрипт генерирует следующую ошибку:

* aws_cloudwatch_metric_alarm.alarm_5xx: Resource 'aws_elastic_beanstalk_environment.my_eb_environment_name' does not have attribute 'elb_load_balancers' for variable 'aws_elastic_beanstalk_environment.my_eb_environment_name.elb_load_balancers'

Я тоже пробовал

resource "aws_cloudwatch_metric_alarm" "alarm_5xx" {
  alarm_name          = "EB 5XX Alarm"
  comparison_operator = "GreaterThanOrEqualToThreshold"
  evaluation_periods  = "1"
  metric_name         = "HTTPCode_ELB_5XX_Count"
  namespace           = "AWS/ApplicationELB"
  period              = "60"
  statistic           = "Sum"
  threshold           = "10"

  dimensions = {
    LoadBalancer = "${aws_elastic_beanstalk_environment.RightestCARE-Api-Prod-Terraform.load_balancers}" # This line doesn't work
  }

  alarm_description = "This metric monitors number of 5xx erros in the application load balancer"
}

Но это приводит к ошибке ниже:

* aws_cloudwatch_metric_alarm.alarm_5xx: dimensions (LoadBalancerName): '' expected type 'string', got unconvertible type '[]interface {}'

1 Ответ

1 голос
/ 12 апреля 2019

Благодаря комментарию ydaetskcoR.Я обнаружил, что работает следующий скрипт.

resource "aws_cloudwatch_metric_alarm" "alarm_5xx" {
  alarm_name          = "EB 5XX Alarm"
  comparison_operator = "GreaterThanOrEqualToThreshold"
  evaluation_periods  = "1"
  metric_name         = "HTTPCode_ELB_5XX_Count"
  namespace           = "AWS/ApplicationELB"
  period              = "60"
  statistic           = "Sum"
  threshold           = "10"

  dimensions = {
    LoadBalancer = "${aws_elastic_beanstalk_environment.my_eb_environment_name.load_balancers[0]}" 
  }

  alarm_description = "This metric monitors number of 5xx erros in the application load balancer"
}

Terraform aws_elastic_beanstalk_environment говорит, что у него есть экспортированный атрибут load_balancers .

И потомуУ меня только 1 балансировщик нагрузки в среде EB, я могу использовать load_balancers[0], чтобы получить единственный балансировщик нагрузки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...