Terraform: Route53, LB и CDN взаимозависимость - PullRequest
3 голосов
/ 12 июня 2019

Моя команда использует Terraform для развертывания необходимой инфраструктуры. В настоящее время наш стек состоит из: AutoScalingGroup с балансировщиком нагрузки и DNS-записи Route53, которая указывает на этот LB;

Мы хотели бы расширить стек, включив в него дистрибутив Cloudfront, который указывает на LB, и сделать DNS-запись Route53 указывающей на CDN.

Я бы хотел иметь возможность:

  • раскрутить Cloudfront и изменить запись DNS так, чтобы она указывала на CDN, не вызывая простоев;
  • разорвать CDN, изменить DNS так, чтобы он указывал на балансировщик нагрузки, не вызывая простоев;

Текущая конфигурация выглядит следующим образом:

resource "aws_lb" "alb" {
  name                       = "${var.alb-name}"
  ...
}
resource "aws_cloudfront_distribution" "cdn" {
  count = "${var.use_cloudfront != "false" ? 1 : 0}"
  ...
}
resource "aws_route53_record" "www" {
  count = "${var.domain-name != "" ? 1 : 0}"

  depends_on = ["aws_lb.alb", "aws_cloudfront_distribution.cdn"]  

  zone_id = "${data.aws_route53_zone.primary.zone_id}"
  name    = "${var.domain-name}"
  type    = "A"

  alias = {
    // we use concat because 'count' makes the response of the resource a list. 
    // link to similar issue: https://stackoverflow.com/questions/45654774/terraform-conditional-resource
    name                   = "${var.use_cloudfront == "true" ? element(concat(aws_cloudfront_distribution.cdn.*.domain_name, list("")), 0) : aws_lb.alb.dns_name}"    
    zone_id                = "${var.use_cloudfront == "true" ? element(concat(aws_cloudfront_distribution.cdn.*.hosted_zone_id, list("")), 0) : aws_lb.alb.zone_id}"
    evaluate_target_health = true
  }
}

Текущее поведение выглядит следующим образом:

  • раскрутка CDN с последующей перенаправлением записи DNS для указания на CDN не приводит к простоям;
  • разрыв CDN с последующей перенаправлением записи DNS на балансировщик нагрузки приводит к простоям;

Мне известно, что depends_on = ["aws_lb.alb", "aws_cloudfront_distribution.cdn"] в записи Route53 может быть не лучшим выбором для создания желаемого поведения. Однако я не уверен, как достичь желаемого поведения с помощью terraform.

Мне интересно, есть ли у кого-нибудь предложения по достижению желаемого поведения. Дайте мне знать, если предоставленной информации недостаточно. Спасибо за вашу помощь, она ценится!

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