Aller au contenu

Step 3 : Route 53

Jusqu'ici, nous avons atteint nos services via leur IP publique. Pas très pratique ou vendeur...

Le but de cette étape est de découvrir et utiliser le service Route 53 pour pouvoir atteindre notre application via un DNS.

Concepts

Rappels DNS

Le DNS, Domain Name System, est un service distribué à l'échelle mondiale qui est fondamental pour notre usage d'Internet. Il permet d'utiliser et traduire des noms faciles à retenir vers les IPs des serveurs.

DNS utilise une structure de noms hiérarchique. Chaque niveau est séparés par un point. Par exemple www.takima.fr.

Terminologies :

  • DNS records : nom + type + TTL
  • Zone File : contient les entrées DNS
  • Name Server : il résout les requêtes DNS (Authoritative ou Non-Authoritative)
  • Top Level Domain, TLD (.com, .fr, .org ...)
  • Second Level Domain, SLD (takima.fr, google.com)
  • Domain registrar : on y achète notre domaine/SLD (Amazon Route 53, OVH, Cloudflare, GoDaddy...)

Les entrées DNS ont un type. Celui-ci fait partie du protocol DNS. Le plus utilisé va rester A pour obtenir une IPv4 et AAAA pour une IPv6.

  1. Le navigateur/client fait requête/résolution DNS auprès de son Local name server
  2. Le server local va chercher auprès du root DNS server, celui-ci renvoie vers le TLD DNS server
  3. Le server local fait maintenant l'appel auprès du server TLD. Celui-ci répond l'IP du DNS server ayant enregistré notre domaine.
  4. Le server local appelle finalement le server ayant autorité qui renvoie la réponse pour l'entrée
  5. Le server local cache la réponse et renvoie la réponse à la demande initiale du browser
  6. Finalement le client peut joindre l'IP récupérée

Info

Chaque appel n'est pas refait s'il est en cache et que le TTL de l'entrée n'est pas expiré.

Route 53

Note

Route 53 vient du fait que les serveurs DNS répondent aux requêtes sur le port 53 pour renvoyer/router vers nos applications.

Route 53 est un système « DNS faisant autorité », c'est-à-dire un système DNS permettant de gérer les entrées DNS de notre zone, cela comme les autres resources via API, console, CLI...

Le service répond ensuite aux requêtes DNS sur nos zones, répondant suivant comment nous avons configuré nos entrées.

Note

Route53 est un service global. Dans la console vous pourrez le remarquer en haut.

Le service tire parti de la présence modiale de AWS pour offrir une haute disponibilité et hautes performances.

Route 53 propose différentes façons de paramétrer ses réponses fournies pour les entrées DNS, principalement via la politique de routage :

  • Simple : pour pointer vers une ressource unique
  • Failover : pour faire du basculement actif-passif
  • Geolocation : pour router en fonction de l'emplacement de des utilisateurs
  • Geoproximity : Pour acheminer le trafic en fonction de l'emplacement de l'appellant
  • Latency : pour router vers la région qui offre la meilleure latence.
  • IP-based : Pour acheminer le trafic en fonction de l'emplacement de vos utilisateurs et disposer des adresses IP d'où provient le trafic.
  • Multivalue : pour répondre jusqu'à jusqu'à huit enregistrements sains sélectionnés au hasard.
  • Weighted : permet de cibler plusieurs ressources dans les proportions que vous spécifiez.

Note

Route 53 ajoute une notion appelée alias permettant de cibler directement nos resources AWS, API Gateway, ELB mais pas une instance EC2 directement.

Le pricing se fait à la requête mais les alias ne sont pas payant ce qui en fait une bonne raison de les utiliser.

Route 53 possède d'autres fonctionnalités non couvertes ici, notamment du Health Checks et Monitoring, voir ici pour une liste plus complète.

TP

À vous de jouer

Le but de cette étape est de pouvoir atteindre votre site web et l'api via un DNS. Nous avons mis en place une hosted zone publique pour pouvoir déclarer vos entrées DNS. Son nom est formation.takima.school.

Les deux entrées seront donc de la forme http://api.<username>.formation.takima.school et http://www.<username>.formation.takima.school

  • Copiez votre dossier précédent en un nouveau dossier nommé Step3
  • Créez deux ressources aws_route53_zone :
    • entrée A pour www.<username> pointant sur les IP de l'API et du front avec 300 secondes
    • entrée A pour api.<username> pointant sur les IP de l'API et du front avec 300 secondes
  • Pensez à mettre à jour la variable API_URL du frontend pour pointer vers le nouveau DNS de l'API !
  • Mettez à jour les outputs

Tip

Pour récupérer la zone_id plutôt que de de trouver l'ID et s'en servir directement, on peut utiliser le concept terraform de datasource.

Une data source permet de récupérer des informations sans que Terraform gère le cycle de vie de la resource en question.

Le provider Terrform AWS permet par exemple de récupérer les informations d'une zone via la datasource aws_route53_record.

data "aws_route53_zone" "takima_school" {
  name = "formation.takima.school"
}

On peut ensuite s'en servir en préfixant avec le data. Par exemple data.aws_route53_zone.takima_school.zone_id dans notre cas.

Success

Vous pouvez désormais joindre votre application via ses DNSs !