Маршрут дросселирования Terraform53 - PullRequest
0 голосов
/ 30 ноября 2018

Кто-нибудь испытывал проблемы с удушением Terraform при использовании его с записями AWS Route53 и ОЧЕНЬ медленным?

Я включил режим отладки и получаю следующее:

2018-11-30T14:35:08.467Z [DEBUG] plugin.terraform-provider-aws_v1.36.0_x4: 2018/11/30 14:35:08 [DEBUG] [aws-sdk-go] <?xml  version="1.0"?>
2018-11-30T14:35:08.467Z [DEBUG] plugin.terraform-provider aws_v1.36.0_x4: <ErrorResponse xmlns="https://route53.amazonaws.com/doc/2013-04-01/"><Error><Type>Sender</Type><Code>Throttling</Code><Message>Rate exceeded</Message></Error><RequestId>REQUEST_ID</RequestId></ErrorResponse>
2018-11-30T14:35:08.518Z [DEBUG] plugin.terraform-provider-aws_v1.36.0_x4: 2018/11/30 14:35:08 [DEBUG] [aws-sdk-go] DEBUG: Validate Response route53/ListResourceRecordSets failed, will retry, error Throttling: Rate exceeded

Terraform берет>1 час, просто чтобы выполнить простой план, что обычно занимает <5 минут. </p>

Моя инфраструктура организована так:

alb.tf:

module "ALB" 
{ source = "modules/alb" }

modules / alb/alb.tf:

resource "aws_alb" "ALB" 
{ name = "alb" 
subnets = var.subnets ...
}

modules / alb / dns.tf

resource "aws_route53_record" "r53" {
  count     =  "${length(var.cnames_generic)}"
  zone_id   = "HOSTED_ZONE_ID"
  name      = "${element(var.cnames_generic_dns, count.index)}.${var.environment}.${var.domain}"
  type      = "A"

  alias {
    name    = "dualstack.${aws_alb.ALB.dns_name}"
    zone_id = "${aws_alb.ALB.zone_id}"
    evaluate_target_health = false
  }
}

modules / alb / variables.tf:

variable "cnames_generic_dns" {
  type = "list"
  default = [
    "hostname1",
    "hostname2",
    "hostname3",
    "hostname4",
    "hostname5",
    "hostname6",
    "hostname7",
     ...
    "hostname25"
      ]
}

Итак, яиспользование модулей для настройки Terraform, а внутри модулей есть ресурсы (ALB, DNS ..).

Однако похоже, что Terraform описывает каждый отдельный ресурс DNS (записи CNAME и A, которых у меня ~ 1000) вHostedZone, который вызывает его на газ?

Terraform v0.10.7
Terraform AWS provider version = "~> 1.36.0"

Ответы [ 3 ]

0 голосов
/ 02 декабря 2018

Проблема решается путем выполнения следующих действий:

  • , поскольку мы реструктурировали записи DNS, добавив один ресурс, а затем изменив / перебрав их, это, вероятно, заставило Terraform постоянно запрашивать все DNSrecords
  • мы решили оставить Terraform, чтобы завершить обновление (заняло 4 часа и много удушения)
  • вручную удалили DNS-записи из R53 для рабочей области, которую мы делали, комментируя это
  • из ресурсов Terraform DNS, поэтому пусть он также удаляет из файлов состояния
  • раскомментируя Terraform DNS и повторно запускает его, чтобы он снова их создал
  • запускает план Terraform снова в порядке
0 голосов
/ 21 января 2019

Похоже, что регулирование с Terraform AWS Route53 полностью разрешено после обновления до более нового поставщика AWS.Мы обновили провайдера TF AWS до 1.54.0 следующим образом в нашем файле init.tf:

version = "~> 1.54.0"

Вот более подробная информация о проблеме и предложения от инженеров Hashicorp:

https://github.com/terraform-providers/terraform-provider-aws/issues/7056

0 голосов
/ 01 декабря 2018

это много записей DNS!И отчасти причина того, что API AWS душит вас.

Во-первых, я бы порекомендовал обновить вашего поставщика AWS.v1.36 довольно старый и с тех пор было исправлено несколько ошибок.

(Следующее, но не абсолютно необходимое, это использовать TF v0.11.x, если это возможно.)

В своем блоке провайдера AWS увеличьте значение max_retries как минимум до 10 и поэкспериментируйте с более высокими значениями.

Затем используйте Terraform --parallelism флаг для ограничения скорости параллелизма TF.Попробуйте установить значение 5 для начала.

Последнее, включите Режим отладки Terraform , чтобы посмотреть, дает ли он вам более полезную информацию.

Надеюсь, это поможет!

...