Как создать разные записи DNS в Route53 для каждой среды (stage, prod) для одного домена?

#amazon-web-services #terraform #amazon-cloudfront #amazon-route53

#amazon-web-services #terraform #amazon-cloudfront #amazon-route53

Вопрос:

Итак, у меня есть один домен: example.com и я хочу настроить сценическую и продюсерскую среду. Мне трудно понять, как использовать разные записи DNS для одного дистрибутива cloudfront, например: prod1.example.com и stag1.example.com

Я собирался попытаться использовать отдельные файлы состояния для управления каждой средой, однако это приведет к повторному созданию дистрибутива cloudfront и, вероятно, завершится неудачей, поскольку в домене, который я пытаюсь использовать, уже существует дистрибутив.

Если я использую один и тот же файл состояния, мне нужно будет создать два дистрибутива, указывающих на отдельные сегменты, но это, похоже, создает проблемы, поскольку у меня есть переменные, зависящие от среды, и это просто не имеет никакого смысла.

Возможно, мне нужно создать отдельный проект только для управления аспектом cloudfront и другой проект для управления другими ресурсами? В настоящее время я делаю все это в одном проекте.

Комментарии:

1. Что это за «файл состояния», на который вы ссылаетесь?

2. файл состояния terraform

3. «однако это приведет к повторному созданию дистрибутива cloudfront и, вероятно, завершится неудачей, поскольку в домене, который я пытаюсь использовать, уже существует дистрибутив». зачем это делать? Вы сказали, что хотите использовать prod1.example.com и stag1.example.com какие разные доменные имена. Похоже, вас смущает тот факт, что они используют одну и ту же зону Route53 или родительский домен, но здесь это не проблема.

4. Кажется, в вашем первом абзаце говорится, что вы хотите иметь единый дистрибутив cloudfront, но в третьем абзаце предполагается, что вам нужны отдельные дистрибутивы независимо от чего-либо еще (поскольку один дистрибутив, по-видимому, не представляет проблемы для одного файла состояния).). Пожалуйста, уточните, что правильно, и отредактируйте вопрос.

Ответ №1:

Вы можете использовать отдельные файлы состояния для разных сред, и это было бы лучшим решением. Таким образом, вы можете иметь отдельный дистрибутив CloudFront для каждой среды, а все остальное также разделено.

Существует источник данных для зоны route 53 (https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/route53_zone ):

 data "aws_route53_zone" "zone" {
  name = "..."
}
  

Затем вы можете добавить записи A в дистрибутивы CloudFront:

 resource "aws_route53_record" "www" {
  zone_id = "${data.aws_route53_zone.zone.zone_id}"
  name    = "${var.prefix}.${data.aws_route53_zone.zone.name}"
  type    = "A"

  alias {
    name                   = "${aws_cloudfront_distribution.s3_distribution.domain_name}"
    zone_id                = "Z2FDTNDATAQYW2"
    evaluate_target_health = true
  }
}
  

Таким образом, пока префиксы (prod1, stage1) не конфликтуют, вы можете одновременно развертывать несколько состояний.