Доступ к двум AWS API-шлюзам с одним CNAME - PullRequest
0 голосов
/ 18 сентября 2018

У меня есть размещенная зона как customdomain.com и 2 региональных шлюза API, размещенных на AWS.

Я хочу настроить общий CNAME как myapp.customdomain.com для вызова APIGW_REGION_ONE_EXECUTEAPI_URI и APIGW_REGION_TWO_EXECUTEAPI_URI на основезадержка.

Как я могу это сделать?Я запутался между пользовательским доменным именем в записи API Gateway и Route 53 CNAME.Любая помощь или руководство высоко ценится.

1 Ответ

0 голосов
/ 18 сентября 2018

Пользовательское доменное имя в API Gateway позволяет ему отвечать на имена, отличные от предоставленного AWS (оно работает через SNI ), а также предоставлять сертификат, который имеет хотя бы один SAN , которое будет соответствовать указанному вами имени, поэтому вам нужно будет определить это, а также любые записи DNS, чтобы люди могли затем разрешить шлюз API.

Что касается записей на основе задержки, вам нужно будет создать несколько записей Route53и определить политику задержек в каждом из них.aws_route53_record документы показывают, как вы можете создавать взвешенные записи для смещения 10% всего трафика к другой цели:

resource "aws_route53_record" "www-dev" {
  zone_id = "${aws_route53_zone.primary.zone_id}"
  name    = "www"
  type    = "CNAME"
  ttl     = "5"

  weighted_routing_policy {
    weight = 10
  }

  set_identifier = "dev"
  records        = ["dev.example.com"]
}

resource "aws_route53_record" "www-live" {
  zone_id = "${aws_route53_zone.primary.zone_id}"
  name    = "www"
  type    = "CNAME"
  ttl     = "5"

  weighted_routing_policy {
    weight = 90
  }

  set_identifier = "live"
  records        = ["live.example.com"]
}

В вашем случае вы захотите что-то подобное:

data "aws_region" "region_one" {}

data "aws_route53_zone" "selected" {
  name         = "example.com."
}

resource "aws_api_gateway_domain_name" "example" {
  domain_name = "api.example.com"

  certificate_name        = "example-api"
  certificate_body        = "${file("${path.module}/example.com/example.crt")}"
  certificate_chain       = "${file("${path.module}/example.com/ca.crt")}"
  certificate_private_key = "${file("${path.module}/example.com/example.key")}"
}

resource "aws_route53_record" "region_one" {
  zone_id = "${data.aws_route53_zone.selected.zone_id}"
  name    = "${aws_api_gateway_domain_name.region_one.domain_name}"
  type    = "A"

  latency_routing_policy {
    region = "${data.aws_region.region_one.name}"
  }

  set_identifier = "${data.aws_region.region_one.name}"

  alias {
    name                   = "${aws_api_gateway_domain_name.region_one.regional_domain_name}"
    zone_id                = "${aws_api_gateway_domain_name.region_one.regional_zone_id}"
    evaluate_target_health = true
  }
}

И поместите его там, где вы создаете каждый шлюз API или используете несколько провайдеров с различной конфигурацией региона для одновременного применения обоих.

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