Terraform:Route53,LB和CDN相互依赖性

时间:2019-06-12 14:59:50

标签: dns terraform amazon-cloudfront

我的团队使用Terraform部署必要的基础架构。 当前,我们的堆栈由以下组成:AutoScalingGroup(在Load-Balancer前面)和指向该LB的Route53 DNS记录;

我们想扩展堆栈,以包括指向LB的Cloudfront发行版,并使Route53 DNS记录指向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记录重新路由到负载均衡器,确实会导致停机;

我知道Route53记录上的depends_on = ["aws_lb.alb", "aws_cloudfront_distribution.cdn"]可能不是创建所需行为的最佳选择。但是,我不确定如何使用terraform达到所需的行为。

我想知道是否有人对实现所需的行为有任何建议。让我知道所提供的信息是否不足。谢谢您的帮助,不胜感激!

0 个答案:

没有答案