Route53, cuándo escoger Alias?

El alias es un tipo de registro especial dentro de nuestra zona pública o privada dentro de Route53. El alias es un concepto que escapa de los fundamentos clásicos de DNS y solo atañe dentro de la nube de AWS.

Al final, ese alias que utilizamos en nuestra zona no dejará de ser un A o un CNAME de cara al resto de servidores DNS. En vez de una dirección IP o un nombre de dominio, un registro alias contiene un puntero a una distribución de CloudFront, un entorno de ElasticBeanstalk environment, un ELB ya sea Classic, Application o Network, un bucket de S3 configurado como web hosting estático o otro registro Route53 en la misma zona hosteada.

Cuando Route53 recibe una petición DNS que concuerda el nombre y el tipo de registro alias, Route53 sigue al puntero y responde con el valor aplicable.

  • Nombre de dominio alternativo para una distribución CloudFront – Route 53 responde como si la petición hubiera preguntado por la distribución CloudFront usando el nombre de dominio de la propia distribución, por ejemplo d111111abcdef8.cloudfront.net.
  • Un entorno Elastic Beanstalk – Route 53 responde a cada petición con una o más direcciones IP para el entorno.
  • Un ELB – Route 53 responde cada petición con una o más direcciones IP para el balanceador.
  • Un Amazon S3 bucket si ha sido configurado como website estático – Route 53 responde a cada petición con una dirección IP para el Amazon S3 bucket.
  • Otro registro Route 53 en la misma zona – Route 53 responde como si la petición hubiera preguntado por el registro referenciado por el puntero.
  • Con AWS Global Accelerator accelerator – Route 53 responde cada petición con una o más direcciones IP para el acelerador.
  • En Amazon VPC interface endpoint – Route 53 responde cada petición con una o más direcciones IP para tu endpoint.
  • En Amazon API Gateway custom regional API or edge-optimized API – Route 53 responde cada petición con una o más direcciones IP para tu API.

Caso práctico

Estos eran los registros de mi zona antes (en forma de archivo Terraform)

resource "aws_route53_record" "no-www" {
  zone_id = "${aws_route53_zone.rubenortiz_es.zone_id}"
  name = "rubenortiz.es"
  type = "A"
  ttl = "300"
  records = ["${data.aws_eip.rubendob_eip_prod.public_ip}"]
 }
}

En mi caso utilizo AWS Beanstalk como CD (Continous Delivery) y necesito poder obtener el id de zona de mi entorno. Esto es un poco extraño porque a veces AWS tiene zonas predefenidas para ciertos servicios. Encontré la solución navegando un poco. Entonces el código final sería este para convertir mi antiguo registro A en un registro Alias

data "aws_elastic_beanstalk_hosted_zone" "current" {}

resource "aws_route53_zone" "rubenortiz_es" {
  name = "rubenortiz.es"
  comment = "Managed by Terraform"
  force_destroy = "false"
}

resource "aws_route53_record" "no-www" {
  zone_id = "${aws_route53_zone.rubenortiz_es.zone_id}"
  name = "rubenortiz.es"
  type = "A"

  alias {
    name = "${data.terraform_remote_state.state.eb_env_prod_cname}"
    zone_id = "${data.aws_elastic_beanstalk_hosted_zone.current.id}"
    evaluate_target_health = false
  }
}

Con el primer data obtenemos el acceso al id de zona de nuestro ElasticBeanstalk. Luego usando el estado remoto de Terraform, accedo al valor del nombre de dominio de mi entorno en ElasticBeanstalk.

Por qué Alias?

Bueno básicamente es considerado una buena práctica utilizar alias cuando sea posible.

Y otra ventaja es que AWS no cobra las peticiones que se hacen al registro alias. Así que, es recomendable ponerlo en práctica cuando sea posible.

Links

Leave a Reply

Your email address will not be published. Required fields are marked *