<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>DNS on Zwindler's Reflection</title><link>https://blog.zwindler.fr/tags/dns/</link><description>Recent content in DNS on Zwindler's Reflection</description><generator>Hugo -- gohugo.io</generator><language>fr</language><copyright>Licensed under CC BY-SA 4.0</copyright><lastBuildDate>Mon, 20 Sep 2021 06:10:00 +0000</lastBuildDate><atom:link href="https://blog.zwindler.fr/tags/dns/index.xml" rel="self" type="application/rss+xml"/><item><title>Import manuel de records DNS route53 avec Terraform</title><link>https://blog.zwindler.fr/2021/09/20/import-manuel-de-records-dns-route53-avec-terraform/</link><pubDate>Mon, 20 Sep 2021 06:10:00 +0000</pubDate><guid>https://blog.zwindler.fr/2021/09/20/import-manuel-de-records-dns-route53-avec-terraform/</guid><description>&lt;img src="https://blog.zwindler.fr/2017/11/terraform.webp" alt="Featured image of post Import manuel de records DNS route53 avec Terraform" /&gt;&lt;h2 id="terraform-et-linfrastructure-as-code"&gt;Terraform et l’Infrastructure as Code
&lt;/h2&gt;&lt;p&gt;Ce n’est pas la première fois que je parle de terraform, l’outil d’Infrastructure as Code particulièrement efficace dans les environnements cloud (mais pas que) de Hashicorp.&lt;/p&gt;
&lt;p&gt;J’avais fait un &lt;a class="link" href="https://blog.zwindler.fr/2018/01/16/premiers-pas-avec-terraform/" &gt;petit « tour d’horizon »&lt;/a&gt; de l’outil quand il était encore en v0.10 (&lt;a class="link" href="https://www.hashicorp.com/blog/announcing-hashicorp-terraform-1-0-general-availability" target="_blank" rel="noopener"
&gt;Hashicorp a passé terraform en v1.0 en juin&lt;/a&gt;), si vous avez besoin d’un petit rafraîchissement de mémoire ou que vous découvrez l’outil.&lt;/p&gt;
&lt;p&gt;Pour la faire courte, l’intérêt de terraform (et de l’infrastructure as code) par rapport à l’automatisation plus classique est de passer dans un mode « déclaratif » où vous déclarez dans des manifests l’état souhaité de votre infrastructure plutôt que de dérouler un script qui fait les opérations unes à unes.&lt;/p&gt;
&lt;p&gt;Vos manifests deviennent la « source de vérité », auditable, versionnable, absolue (pas de diff possible entre ce que vous pensez avoir déployé et le bidule modifié à la main hier que vous avez oublié).&lt;/p&gt;
&lt;h2 id="réconcilier-lexistant-avec-linfrastructure-as-code"&gt;Réconcilier l’existant avec l’infrastructure as code
&lt;/h2&gt;&lt;p&gt;Tout ça c’est super si jamais vous venez de commencer à travailler dans le cloud et que vous partez de 0.&lt;/p&gt;
&lt;p&gt;Si vous avez déjà de l’existant, c’est plus compliqué puisque vous vous retrouvez avec une partie décrite dans votre dépôt Git et une autre partie « historique ».&lt;/p&gt;
&lt;p&gt;Et même si on peut se dire que cette partie « historique » va finir par disparaitre au profit des nouveaux projets gérés par IaC, il existe une zone floue où on ne sait plus très bien si c’est géré à la main ou en IaC.&lt;/p&gt;
&lt;p&gt;Du coup, autant en profiter quand on a le temps pour réintégrer le legacy dans l’IaC.&lt;/p&gt;
&lt;h2 id="route53-le-dns-by-aws"&gt;Route53, le DNS by AWS
&lt;/h2&gt;&lt;p&gt;Je suis donc arrivé dans un contexte technique où le DNS externe est géré par AWS depuis bien longtemps, et qu’on intègre progressivement les nouveaux records dans terraform. Cependant, j’avais besoin de modifier un record déjà existant (de type TXT) et je n’avais pas envie de le faire à la main.&lt;/p&gt;
&lt;p&gt;Sachez donc qu’il existe pour une grande partie (tous ?) des providers terraform une commande &lt;strong&gt;&lt;em&gt;terraform import&lt;/em&gt;&lt;/strong&gt; qui permet comme son nom l’indique d’importer l’existant dans terraform.&lt;/p&gt;
&lt;p&gt;Le souci est que cette import n’est réalisée que dans le « state » de terraform, pas la configuration elle même.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The current implementation of Terraform import can only import resources into the &lt;a class="link" href="https://www.terraform.io/docs/language/state/index.html" target="_blank" rel="noopener"
&gt;state&lt;/a&gt;. It does not generate configuration. A future version of Terraform will also generate configuration.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Vous allez donc devoir écrire le pavé HCL à la main.&lt;/p&gt;
&lt;p&gt;D’un certain côté, c’est presque plus rassurant quand on y réfléchit, car ça permet de bien se poser la question de comment on souhaite découper nos projets, comment on veut construire l’IaC (avec des variables, avec des boucles, etc).&lt;/p&gt;
&lt;h2 id="récupérer-les-ids-uniques"&gt;Récupérer les IDs uniques
&lt;/h2&gt;&lt;p&gt;L’idée ici va être de récupérer le record en donnant à terraform toutes les infos nécessaire pour qu’il retrouve celui qui nous intéresse. A la suite de &lt;strong&gt;terraform import&lt;/strong&gt;, on doit lui donner les informations suivantes :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;terraform import {resource_type}.{resource_name} {zone_id}_{record_name}_{record_type}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Dans mon cas, le &lt;strong&gt;resource_type&lt;/strong&gt; était &lt;em&gt;&lt;a class="link" href="https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/route53_record" target="_blank" rel="noopener"
&gt;aws_route53_record&lt;/a&gt;&lt;/em&gt;, le &lt;strong&gt;resource_name&lt;/strong&gt; &lt;em&gt;mytxtrecord&lt;/em&gt; (le nom que je veux lui donner dans ma conf et mon state terraform). La zone ID dépend de votre compte AWS/route53, le &lt;strong&gt;record_name&lt;/strong&gt;, c’est le nom du record (comme sur la console) et le &lt;strong&gt;record_type&lt;/strong&gt; dans mon cas, un TXT mais ça aurait très bien pu être un A, un AAAA, un CNAME, etc.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;terraform import aws_route53_record.mytxtrecord ABCDE1234567890_awesomeexample.org_TXT
aws_route53_record.mytxtrecord: Importing from ID &amp;#34;ABCDE1234567890_awesomeexample.org_TXT&amp;#34;...
aws_route53_record.mytxtrecord: Import prepared!
Prepared aws_route53_record for import
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;A l’issue de la commande, si tout s’est bien passé, vous devriez avoir un message qui indique le succès de l’opération et l’ajout du record dans le &lt;em&gt;state&lt;/em&gt; de votre terraform. Il ne reste plus qu’à rédiger le pavé HCL pour votre IaC qui a cette tête là dans mon exemple :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;resource &amp;#34;aws_route53_record&amp;#34; &amp;#34;mytxtrecord&amp;#34; {
zone_id = data.aws_route53_zone.awesomedomain.zone_id
name = &amp;#34;awesomeexample.org&amp;#34;
type = &amp;#34;TXT&amp;#34;
ttl = &amp;#34;60&amp;#34;
records = [&amp;#34;existingsuperimportantdata&amp;#34;]
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;On peut commiter ça, puis faire nos modifications comme d’habitude et en toute sécurité :-)&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;terraform plan
[...]
Terraform will perform the following actions:
# aws_route53_record.mytxtrecord will be updated in-place
~ resource &amp;#34;aws_route53_record&amp;#34; &amp;#34;mytxtrecord&amp;#34; {
fqdn = &amp;#34;awesomeexample.org&amp;#34;
id = &amp;#34;ABCDE1234567890_awesomeexample.org_TXT&amp;#34;
name = &amp;#34;awesomeexample.org&amp;#34;
~ records = [
+ &amp;#34;newtxtstring=veryimportantdata&amp;#34;,
&amp;#34;existingsuperimportantdata&amp;#34;,
]
~ ttl = 300 -&amp;gt; 60
type = &amp;#34;TXT&amp;#34;
zone_id = &amp;#34;ABCDE1234567890&amp;#34;
}
Plan: 0 to add, 1 to change, 0 to destroy.
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="informationssources-additionnelles"&gt;Informations/sources additionnelles
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://www.terraform.io/docs/cli/import/index.html" target="_blank" rel="noopener"
&gt;www.terraform.io/docs/cli/import/index.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/route53_record" target="_blank" rel="noopener"
&gt;registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/route53_record&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://hackernoon.com/how-to-migrate-an-existing-infrastructure-into-terraform-qn173uag" target="_blank" rel="noopener"
&gt;hackernoon.com/how-to-migrate-an-existing-infrastructure-into-terraform-qn173uag&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Création d’un DynHost avec le nouveau manager OVH</title><link>https://blog.zwindler.fr/2015/06/24/creation-dun-dynhost-avec-le-nouveau-manager-ovh/</link><pubDate>Wed, 24 Jun 2015 15:51:50 +0000</pubDate><guid>https://blog.zwindler.fr/2015/06/24/creation-dun-dynhost-avec-le-nouveau-manager-ovh/</guid><description>&lt;img src="https://blog.zwindler.fr/2015/06/ovh.webp" alt="Featured image of post Création d’un DynHost avec le nouveau manager OVH" /&gt;&lt;p&gt;Cet article fait suite à un &lt;a class="link" href="https://blog.zwindler.fr/2014/09/22/mise-a-jour-de-votre-dns-chez-ovh-avec-dynhost/" &gt;précédent article&lt;/a&gt; qui explique pas à pas comment mettre en place le client permettant de mettre à jour votre DNS OVH si votre IP n’est pas fixe. Je vous conseille d’y jeter un œil après celui ci, si vous êtes intéressés par &lt;strong&gt;DynHost&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Pour rappel, DynHost est un service qui au même titre que &lt;strong&gt;No-IP&lt;/strong&gt; ou &lt;strong&gt;DynDNS&lt;/strong&gt;, permet de mettre à jour de manière dynamique une adresse IP dans un DNS si elle est dynamique. C’est particulièrement pratique dans le cas de l’auto hébergement sur un ISP comme Orange, qui ne propose pas (ou pas vraiment) d’IP fixe pour les lignes ADSL pour particuliers.&lt;/p&gt;
&lt;p&gt;L’avantage est que le service est gratuit et intégré à  votre « manager » si vous disposez d’un domaine chez OVH, ce qui est mon cas.&lt;/p&gt;
&lt;p&gt;Jusqu’à il y a peu, lorsqu’OVH a migré vers le nouveau manager (beaucoup plus joli), il n’était plus possible de créer, de modifier ni même de voir les champs de type « DynHost » dans la partie DNS de votre compte. Cela ne pouvait plus se faire que depuis l’ancien manager, heureusement encore disponible.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2015/06/00_dynhost.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;C’est maintenant de nouveau disponible, et voici un petit tuto pour vous guider car la documentation d’OVH n’est pas à jour.&lt;/p&gt;
&lt;h2 id="création-du-compte"&gt;Création du compte
&lt;/h2&gt;&lt;p&gt;La première chose à faire est de se connecter dans votre Manager OVH, puis de vous connecter dans la partie « Domaines ».&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2015/06/02_dynhost.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Une fois le domaine sélectionné, si vous allez dans le sous menu « DynHost », il ne devrait pour l’instant rien y avoir.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2015/06/03_dynhost.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Il faut commencer par cliquer sur « Gérer les accès », puis « Créer un identifiant ». Un formulaire de création de compte s’ouvrira. Le plus simple est de juste mettre votrdomaine.fr-dynh0st comme login, et dynh0st.votredomaine.fr comme sous-domaine.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2015/06/04_dynhost.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Conservez bien ce login/mdp, il sera à renseigner dans le client de mise à jour du DynHost.&lt;/p&gt;
&lt;h2 id="entrée-dynhost-dans-la-zone-dns"&gt;Entrée DynHost dans la zone DNS
&lt;/h2&gt;&lt;p&gt;A partir de là, le compte est créé. Mais pour l’instant votre DNS n’a toujours pas connaissance de ce sous domaine. Pour cela, il faut revenir dans l’onglet DynHost, et créer une entrée en cliquant sur « Ajouter un DynH0st ».&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2015/06/05_dynhost.avif"
loading="lazy"
&gt;
Renseignez les champs avec d’une part le sous domaine que vous avez renseigné lors de la création du compte, d’autre part l’adresse IP actuelle vers laquelle vous voulez que votre DynH0st redirige.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2015/06/06_dynhost.avif"
loading="lazy"
&gt;
Si vous hébergez plusieurs applications chez vous (et surtout si vous disposez d’un reverse proxy), le plus « propre » est de créer des alias pour chacune d’entre elle qui pointeront sur le sous domaine. Ainsi, lorsque celui ci sera mis à jour, tous vos sous domaines associés le seront également.&lt;/p&gt;
&lt;p&gt;Par exemple, imaginons que vous hébergez un wiki mediawiki et un blog wordpress :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;dynmediawiki.votredomaine.fr&lt;/code&gt; sera un alias de d&lt;code&gt;ynhost.votredomaine.fr&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;dynblog.votredomaine.fr&lt;/code&gt; sera un alias de &lt;code&gt;dynhost.votredomaine.fr&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;dynhost.votredomaine.fr&lt;/code&gt; sera mis à jour automatiquement à chaque bascule de votre adresse IP dynamique&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Sous le manager OVH, ça se traduirait par la configuration suivante :&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2015/06/07_dynhost.avif"
loading="lazy"
alt="Vue « Zone DNS » dans le Manager OVH"
&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2015/06/08_dynhost.avif"
loading="lazy"
alt="Vue « DynHost » dans le Manager OVH"
&gt;&lt;/p&gt;
&lt;p&gt;Pour aller plus loin, et notamment la configuration du client pour mettre à jour le DynHost depuis chez vous :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.zwindler.fr/2014/09/22/mise-a-jour-de-votre-dns-chez-ovh-avec-dynhost/" &gt;Mise à jour de votre DNS chez OVH avec Dynhost&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="http://guide.ovh.com/DynDns" target="_blank" rel="noopener"
&gt;Doc officielle, mais pas à jour du tout!&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item></channel></rss>