{"id":98123,"date":"2020-10-24T14:42:52","date_gmt":"2020-10-24T12:42:52","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/patterny-v-terraform-dlya-borby-s-haosom-i-ruchnoj-rutinoj-maksim-kostrikin-ixtens"},"modified":"2020-11-18T00:58:49","modified_gmt":"2020-11-17T22:58:49","slug":"patterny-v-terraform-dlya-borby-s-haosom-i-ruchnoj-rutinoj-maksim-kostrikin-ixtens","status":"publish","type":"post","link":"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/patterny-v-terraform-dlya-borby-s-haosom-i-ruchnoj-rutinoj-maksim-kostrikin-ixtens","title":{"rendered":"Mod\u00e8les dans Terraform pour lutter contre le chaos et la routine manuelle. Maxim Kostrikine (Ixtens)","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Mod\u00e8les dans Terraform pour lutter contre le chaos et la routine manuelle. Maxim Kostrikine (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/ec13125c702f42863bbe774cd805442b.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>On pourrait penser que les d\u00e9veloppeurs de Terraform offrent des bonnes pratiques assez pratiques pour travailler avec l'infrastructure AWS. Cependant, il y a un d\u00e9tail. Avec le temps, le nombre d'environnements augmente, chacun ayant ses particularit\u00e9s. Une presque copie de la pile d'applications appara\u00eet dans la r\u00e9gion voisine. Et le code Terraform doit \u00eatre soigneusement copi\u00e9 et modifi\u00e9 selon les nouvelles exigences ou \u00eatre transform\u00e9 en neige.<\/p>\n<p><\/p>\n<p>Ma pr\u00e9sentation porte sur les mod\u00e8les dans Terraform pour lutter contre le chaos et la routine manuelle sur de grands projets prolong\u00e9s.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Vid\u00e9o :<\/p>\n<p>\n<center><iframe loading=\"lazy\" width=\"560\" height=\"315\" src=\"https:\/\/embedd.srv.habr.com\/iframe\/5f92845c017bf613f0899d88\" frameborder=\"0\" allowfullscreen><\/iframe><\/center><\/p>\n<p><img decoding=\"async\" alt=\"Mod\u00e8les dans Terraform pour lutter contre le chaos et la routine manuelle. Maxim Kostrikine (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/8c67c45e486d6c03793dd08c33a16313.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>J'ai 40 ans et je travaille dans l'informatique depuis 20 ans. Je suis avec l'entreprise Ixtens depuis 12 ans. Nous nous occupons du d\u00e9veloppement orient\u00e9 e-commerce. Et cela fait 5 ans que je pratique des pratiques DevOps.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Mod\u00e8les dans Terraform pour lutter contre le chaos et la routine manuelle. Maxim Kostrikine (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/8b14b3adaa45d69278d76580baa99042.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Mon r\u00e9cit concernera l'exp\u00e9rience d'un projet dans une entreprise dont je ne donnerai pas le nom, me prot\u00e9geant par un accord de non-divulgation. <\/p>\n<p><\/p>\n<p>Les chiffres sur la diapositive indiquent l'\u00e9chelle du projet. Et tout ce que je vais dire par la suite sera li\u00e9 \u00e0 Amazon.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Mod\u00e8les dans Terraform pour lutter contre le chaos et la routine manuelle. Maxim Kostrikine (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/3742217a2abaf1fcf2163979d82eac14.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>J'ai rejoint ce projet il y a 4 ans. Et \u00e0 ce moment-l\u00e0, nous \u00e9tions en plein milieu du refactoring de l'infrastructure, car le projet avait consid\u00e9rablement \u00e9volu\u00e9. Les mod\u00e8les utilis\u00e9s n'\u00e9taient plus adapt\u00e9s. \u00c9tant donn\u00e9 toute la croissance pr\u00e9vue du projet, il fallait innover. <\/p>\n<p><\/p>\n<p>Merci \u00e0 Matvey, qui a parl\u00e9 hier de ce qui se passait chez Dodo Pizza. C'est ce qu'il nous est arriv\u00e9 il y a 4 ans. <\/p>\n<p><\/p>\n<p>Les d\u00e9veloppeurs sont venus et ont commenc\u00e9 \u00e0 cr\u00e9er du code d'infrastructure. <\/p>\n<p><\/p>\n<p>Les raisons les plus \u00e9videntes pour lesquelles cela \u00e9tait n\u00e9cessaire \u00e9taient le besoin de rapidit\u00e9 de mise sur le march\u00e9. Il fallait que l'\u00e9quipe DevOps ne soit pas un goulet d'\u00e9tranglement lors du d\u00e9ploiement. En outre, au tout d\u00e9but, nous avons utilis\u00e9 Terraform et Puppet.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Mod\u00e8les dans Terraform pour lutter contre le chaos et la routine manuelle. Maxim Kostrikine (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/13d6df6a324d2e1162acef77ca2ad0dc.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Terraform est un projet open source de l'entreprise HashiCorp. Et pour ceux qui ne savent pas du tout ce que c'est, les prochaines diapositives. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Mod\u00e8les dans Terraform pour lutter contre le chaos et la routine manuelle. Maxim Kostrikine (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/61726d4205d1f4f8e449fe9d71507508.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>L'infrastructure en tant que code signifie que nous pouvons d\u00e9crire notre infrastructure et demander \u00e0 des robots de faire en sorte que nous obtenions les ressources que nous avons d\u00e9crites.<\/p>\n<p><\/p>\n<p>Par exemple, nous avons besoin <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/fr\/vps\/abuzoustojchivye-vps\/\"   title=\"machine virtuelle\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"4196\">machine virtuelle<\/a>. Nous allons le d\u00e9crire, en ajoutant quelques param\u00e8tres obligatoires. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Mod\u00e8les dans Terraform pour lutter contre le chaos et la routine manuelle. Maxim Kostrikine (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/eb52c1e458fa092bba8577fffceb864c.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Apr\u00e8s cela, nous configurerons l'acc\u00e8s \u00e0 Amazon dans la console. Et nous demanderons \u00e0 Terraform de planifier. Terraform plan dira : \u00ab Ok, pour votre ressource, nous pouvons faire ces choses-l\u00e0 \u00bb. Et, au minimum, une ressource sera ajout\u00e9e. Et aucun changement n'est pr\u00e9vu. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Mod\u00e8les dans Terraform pour lutter contre le chaos et la routine manuelle. Maxim Kostrikine (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/879e645596121ee5d05ac247b4be19ee.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Une fois que tout vous convient, vous pouvez demander \u00e0 Terraform d'appliquer et Terraform cr\u00e9era votre instance, et vous obtiendrez une machine virtuelle dans votre cloud.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Mod\u00e8les dans Terraform pour lutter contre le chaos et la routine manuelle. Maxim Kostrikine (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/77b7fe4d6abcc9116233f48caa887465.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ensuite, notre projet \u00e9volue. Nous apportons quelques modifications. Nous demandons plus d'instances, nous ajoutons 53 enregistrements.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Mod\u00e8les dans Terraform pour lutter contre le chaos et la routine manuelle. Maxim Kostrikine (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/98ce7e1f9d1f85aa5e78c269a0708ac1.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Et nous r\u00e9p\u00e9tons. Nous demandons le plan. Nous voyons quelles modifications sont pr\u00e9vues. Nous les appliquons. Ainsi, notre infrastructure cro\u00eet. <\/p>\n<p><\/p>\n<p>Terraform utilise ce qu'on appelle des fichiers d'\u00e9tat. C'est-\u00e0-dire que toutes les modifications envoy\u00e9es sur Amazon sont enregistr\u00e9es dans un fichier o\u00f9, pour chaque ressource que vous avez d\u00e9crite, il y a des ressources correspondantes qui ont \u00e9t\u00e9 cr\u00e9\u00e9es sur Amazon. Ainsi, lorsqu'une description de ressource est modifi\u00e9e, Terraform sait exactement ce qu'il doit changer sur Amazon.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Mod\u00e8les dans Terraform pour lutter contre le chaos et la routine manuelle. Maxim Kostrikine (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/6e83efffb7af6ab967b4716be170b47b.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ces fichiers d'\u00e9tat \u00e9taient \u00e0 l'origine de simples fichiers. Et nous les stockions dans Git, ce qui \u00e9tait tr\u00e8s peu pratique. Quelqu'un oubliait constamment de commettre les modifications, ce qui entra\u00eenait de nombreux conflits. <\/p>\n<p><\/p>\n<p>Il est maintenant possible d'utiliser un backend, c'est-\u00e0-dire que Terraform peut \u00eatre indiqu\u00e9 dans quel bucket, sous quelle cl\u00e9, le fichier d'\u00e9tat doit \u00eatre enregistr\u00e9. Et Terraform se chargera de r\u00e9cup\u00e9rer ce fichier d'\u00e9tat, de faire toute la magie et de remettre le r\u00e9sultat final.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Mod\u00e8les dans Terraform pour lutter contre le chaos et la routine manuelle. Maxim Kostrikine (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/e6687463a9fe3cff979f44ac7778b4e8.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Notre infrastructure grandit. Voici notre code. Et nous ne voulons plus simplement cr\u00e9er une machine virtuelle, nous voulons un environnement de test.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Mod\u00e8les dans Terraform pour lutter contre le chaos et la routine manuelle. Maxim Kostrikine (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/0effb09fa04d3d520c1cdbb34ce97810.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Terraform permet de cr\u00e9er ce qu'on appelle un module, c'est-\u00e0-dire de d\u00e9crire la m\u00eame chose dans un certain dossier.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Mod\u00e8les dans Terraform pour lutter contre le chaos et la routine manuelle. Maxim Kostrikine (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/95c8395b10142fe550b0719161211f15.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Et, par exemple, dans le test, appeler ce module et obtenir la m\u00eame chose comme si nous avions ex\u00e9cut\u00e9 Terraform apply dans le module lui-m\u00eame. Voici le code pour le test.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Mod\u00e8les dans Terraform pour lutter contre le chaos et la routine manuelle. Maxim Kostrikine (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/fa4c16e3835a4507a858d2ddb767daf3.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Pour la production, nous pouvons y envoyer certaines modifications, car dans le test, nous n'avons pas besoin de grosses instances, alors que dans la production, de grandes instances seront utiles.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Mod\u00e8les dans Terraform pour lutter contre le chaos et la routine manuelle. Maxim Kostrikine (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/19478de23da2278567e66bacef78a0a9.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Et ensuite, je reviendrai au projet. La t\u00e2che \u00e9tait complexe, l'infrastructure \u00e9tait pr\u00e9vue pour \u00eatre tr\u00e8s grande. Il fallait trouver un moyen de structurer tout le code pour qu'il soit pratique pour tous : pour ceux qui assurent la maintenance de ce code et pour ceux qui y apportent des modifications. Il \u00e9tait pr\u00e9vu que tout d\u00e9veloppeur puisse acc\u00e9der et modifier l'infrastructure comme il le fallait pour sa partie de la plateforme. <\/p>\n<p><\/p>\n<p>C'est l'arbre des r\u00e9pertoires recommand\u00e9 par HashiCorp. Si vous avez un grand projet, il y a du sens \u00e0 diviser toute l'infrastructure en petites parties et \u00e0 d\u00e9crire chaque morceau dans un dossier distinct. <\/p>\n<p><\/p>\n<p>Avec une biblioth\u00e8que de ressources \u00e9tendue, on peut appeler \u00e0 peu pr\u00e8s la m\u00eame chose dans les tests et en production. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Mod\u00e8les dans Terraform pour lutter contre le chaos et la routine manuelle. Maxim Kostrikine (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/c30cdc3d3ce5441bc0ae4a485069dacc.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Dans notre cas, ce n'\u00e9tait pas tout \u00e0 fait appropri\u00e9, car il fallait obtenir la pile de test pour les d\u00e9veloppeurs ou pour les tests d'une mani\u00e8re plus simple. Nous ne voulions pas parcourir les dossiers et appliquer dans la bonne s\u00e9quence, en nous pr\u00e9occupant de ce que la base de donn\u00e9es serait \u00e9rig\u00e9e, puis l'instance qui utilise cette base se l\u00e8verait. Donc, tout le test \u00e9tait lanc\u00e9 \u00e0 partir d'un seul dossier. Les m\u00eames modules \u00e9taient appel\u00e9s, mais tout \u00e9tait trait\u00e9 en une seule fois.<\/p>\n<p><\/p>\n<p>Terraform s'occupe de toutes les d\u00e9pendances. Et il cr\u00e9e toujours les ressources dans l'ordre, de sorte que l'on peut obtenir une adresse IP, par exemple, d'une instance nouvellement cr\u00e9\u00e9e, et obtenir cette adresse IP dans une entr\u00e9e route53. <\/p>\n<p><\/p>\n<p>De plus, la plateforme est tr\u00e8s grande. Et le lancement d'une pile de test, m\u00eame pour une heure, m\u00eame pour 8 heures, est un processus assez co\u00fbteux. <\/p>\n<p><\/p>\n<p>Nous avons automatis\u00e9 cela. Et le job Jenkins permettait de lancer la pile. Il fallait lancer une demande de tirage avec les modifications que le d\u00e9veloppeur souhaitait tester, sp\u00e9cifier toutes les options n\u00e9cessaires, les composants, ainsi que les tailles. S'il voulait effectuer des tests de performance, il pouvait prendre plus d'instances. S'il voulait juste v\u00e9rifier qu'un formulaire certain s'ouvrait, il pouvait d\u00e9marrer avec les minimums. Et il pouvait \u00e9galement indiquer si un cluster \u00e9tait n\u00e9cessaire ou non, etc. <\/p>\n<p><\/p>\n<p>Ensuite, Jenkins poussait un script shell qui modifiait un peu le code dans le dossier Terraform. Il supprimait les fichiers inutiles, ajoutait les fichiers n\u00e9cessaires. Et puis, avec un seul passage, Terraform apply faisait monter la pile. <\/p>\n<p><\/p>\n<p>Et ensuite, d'autres \u00e9tapes suivaient, dont je ne veux pas m'approfondir. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Mod\u00e8les dans Terraform pour lutter contre le chaos et la routine manuelle. Maxim Kostrikine (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/b288c0b320d8cb6e282db994bc1c1f43.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Parce que pour les tests, nous avions besoin de quelques options de plus que dans la production, nous devions faire des copies de modules, afin que nous puissions y ajouter les fonctionnalit\u00e9s qui ne sont n\u00e9cessaires qu'aux tests. <\/p>\n<p><\/p>\n<p>Et il se trouve qu'en testing, on aimerait tester les modifications qui finiront par aller en production. Mais en r\u00e9alit\u00e9, on testait une chose, tandis qu'en production, une autre chose \u00e9tait appliqu\u00e9e. Et il y avait un petit d\u00e9calage, car en production, toutes les modifications \u00e9taient mises en \u0153uvre par l'\u00e9quipe d'op\u00e9rations. Parfois, il arrivait que les modifications qui devaient passer des tests \u00e0 la production restaient dans une version diff\u00e9rente. <\/p>\n<p><\/p>\n<p>De plus, il y avait un probl\u00e8me o\u00f9 un nouveau service \u00e9tait ajout\u00e9, qui diff\u00e9rait l\u00e9g\u00e8rement d'un service d\u00e9j\u00e0 existant. Au lieu de modifier le module existant, il fallait en faire une copie et y apporter les modifications n\u00e9cessaires. <\/p>\n<p><\/p>\n<p>En r\u00e9alit\u00e9, Terraform n'est pas un vrai langage. C'est une d\u00e9claration. Si nous devons d\u00e9clarer quelque chose, nous le faisons. Et tout cela fonctionne.<\/p>\n<p><\/p>\n<p>\u00c0 un moment donn\u00e9, lors de la discussion d'une de mes demandes de tirage, un de mes coll\u00e8gues a dit qu'il ne fallait pas cr\u00e9er trop de flocons. J'ai \u00e9t\u00e9 intrigu\u00e9 par ce qu'il voulait dire. Il existe un fait scientifique selon lequel il n'y a pas deux flocons de neige identiques dans le monde, tous sont l\u00e9g\u00e8rement diff\u00e9rents. Et d\u00e8s que j'ai entendu cela, j'ai ressenti tout le poids du code Terraform. Parce qu'il fallait passer d'une version \u00e0 une autre, Terraform exigeait un changement de cha\u00eene disruptive, c'est-\u00e0-dire que le code n'\u00e9tait plus compatible avec la version suivante. Il fallait donc faire une demande de tirage qui couvrait presque la moiti\u00e9 des fichiers de l'infrastructure, afin de mettre l'infrastructure \u00e0 jour vers la version suivante de Terraform.<\/p>\n<p><\/p>\n<p>Et apr\u00e8s qu'un tel flocon soit apparu, tout le code Terraform que nous avions se transformait en une \u00e9norme montagne de neige. <\/p>\n<p><\/p>\n<p>Pour un d\u00e9veloppeur externe, en dehors de l'op\u00e9ration, cela n'a pas beaucoup d'importance, car il a fait une demande de tirage, sa ressource a d\u00e9marr\u00e9. Et voil\u00e0, apr\u00e8s, ce n'est plus son souci. Mais pour l'\u00e9quipe DevOps, qui veille \u00e0 ce que tout soit en ordre, il faut faire tous ces changements. Et le co\u00fbt de ces modifications augmentait consid\u00e9rablement avec chaque flocon suppl\u00e9mentaire.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Mod\u00e8les dans Terraform pour lutter contre le chaos et la routine manuelle. Maxim Kostrikine (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/d07039414027798861d1424bb2c686b6.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Il y a une histoire sur un \u00e9tudiant qui dessine \u00e0 la craie sur un tableau deux cercles parfaits pendant un s\u00e9minaire. Et l'enseignant s'\u00e9tonne de la fa\u00e7on dont il a r\u00e9ussi \u00e0 dessiner si pr\u00e9cis\u00e9ment sans compas. L'\u00e9tudiant r\u00e9pond : \u00ab C'est tr\u00e8s simple, j'ai pass\u00e9 deux ans dans l'arm\u00e9e \u00e0 tourner une hachoir \u00e0 viande \u00bb. <\/p>\n<p><\/p>\n<p>Et parmi les quatre ann\u00e9es pass\u00e9es dans ce projet, environ deux ans, je me consacre \u00e0 Terraform. Bien s\u00fbr, j'ai quelques astuces, quelques conseils pour simplifier le code Terraform, travailler avec lui comme avec un langage de programmation et r\u00e9duire la charge sur les d\u00e9veloppeurs qui doivent maintenir ce code \u00e0 jour. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Mod\u00e8les dans Terraform pour lutter contre le chaos et la routine manuelle. Maxim Kostrikine (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/9413c6adf1933482dcc822b021773df9.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>La premi\u00e8re chose que je voudrais aborder, ce sont les Symlinks. Terraform a beaucoup de code r\u00e9p\u00e9titif. Par exemple, l'appel au fournisseur se retrouve pratiquement \u00e0 chaque endroit o\u00f9 nous cr\u00e9ons un morceau d'infrastructure, c'est toujours le m\u00eame. Il est donc logique de le d\u00e9placer dans un dossier s\u00e9par\u00e9. Et partout o\u00f9 le fournisseur est n\u00e9cessaire, il faut cr\u00e9er des Symlinks vers ce fichier. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Mod\u00e8les dans Terraform pour lutter contre le chaos et la routine manuelle. Maxim Kostrikine (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/6dcf36cc8c94e7a70cf6ab1456cc1215.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Par exemple, vous avez dans la production un r\u00f4le suppos\u00e9 qui vous permet d'obtenir des droits d'acc\u00e8s \u00e0 un certain compte Amazon externe. En changeant un seul fichier, tous les autres dans l'arborescence des ressources auront les droits requis pour que Terraform sache \u00e0 quel segment Amazon s'adresser. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Mod\u00e8les dans Terraform pour lutter contre le chaos et la routine manuelle. Maxim Kostrikine (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/6df9a89ef48ae9a7adda7fb1f86b76aa.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>O\u00f9 les Symlinks ne fonctionnent-ils pas ? Comme je l'ai dit, dans Terraform, il y a des fichiers d'\u00e9tat. Et ils sont tr\u00e8s, tr\u00e8s bons. Mais le fait est que Terraform initialise le backend en premier. Et il ne peut pas utiliser dans ces param\u00e8tres des variables, elles doivent toujours \u00eatre \u00e9crites en texte. <\/p>\n<p><\/p>\n<p>En cons\u00e9quence, quand quelqu'un cr\u00e9e une nouvelle ressource, il copie une partie du code d'autres dossiers. Il peut se tromper avec la cl\u00e9 ou le bucket. Par exemple, il cr\u00e9e une chose sandbox et puis le fait en production. Il peut alors se retrouver avec le bucket en production utilis\u00e9 depuis sandbox. Bien s\u00fbr, cela sera rapidement d\u00e9couvert. Cela peut \u00eatre corrig\u00e9 d'une mani\u00e8re ou d'une autre, mais n\u00e9anmoins, c'est une perte de temps et, dans une certaine mesure, de ressources. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Mod\u00e8les dans Terraform pour lutter contre le chaos et la routine manuelle. Maxim Kostrikine (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/757294dc6a1a27fc4a5fe174cc4aa7d7.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Que pouvons-nous faire ensuite ? Avant de travailler avec Terraform, il doit \u00eatre initialis\u00e9. Lors de l'initialisation, Terraform t\u00e9l\u00e9charge tous les plugins. \u00c0 un certain moment, il a \u00e9t\u00e9 fragment\u00e9 d'un monolithe \u00e0 une architecture plus microservices. Il est donc toujours n\u00e9cessaire d'ex\u00e9cuter Terraform init pour qu'il t\u00e9l\u00e9charge tous les modules, tous les plugins.<\/p>\n<p><\/p>\n<p>Et on peut utiliser un script shell qui, d'une part, pourra r\u00e9cup\u00e9rer toutes les variables. Un script shell n'est soumis \u00e0 aucune limitation. D'autre part, les chemins. Si nous utilisons toujours le chemin pr\u00e9sent dans le d\u00e9p\u00f4t comme cl\u00e9 vers le fichier d'\u00e9tat, alors, par cons\u00e9quent, l'erreur ici sera exclue. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Mod\u00e8les dans Terraform pour lutter contre le chaos et la routine manuelle. Maxim Kostrikine (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/b70dbc6d8edb1b255c64d722a7e40680.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>D'o\u00f9 obtenir des donn\u00e9es ? D'un fichier JSON. Terraform permet d'enregistrer l'infrastructure non seulement en hcl (HashiCorp Configuration Language), mais aussi en JSON.<\/p>\n<p><\/p>\n<p>Le JSON est facilement lisible \u00e0 partir d'un script shell. Par cons\u00e9quent, on peut placer un fichier de configuration avec le bucket \u00e0 un certain endroit. Et utiliser ce bucket \u00e0 la fois dans le code Terraform et dans le script shell pour l'initialisation. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Mod\u00e8les dans Terraform pour lutter contre le chaos et la routine manuelle. Maxim Kostrikine (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/a18b92cac763003ec49af8d4a37e19d9.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Pourquoi est-il important d'avoir un bucket pour Terraform ? Parce qu'il existe quelque chose appel\u00e9 des fichiers d'\u00e9tat distants. C'est-\u00e0-dire que lorsque je d\u00e9ploie une ressource, pour dire \u00e0 Amazon : \u00ab Veuillez mettre en service une instance \u00bb, je dois sp\u00e9cifier de nombreux param\u00e8tres obligatoires. <\/p>\n<p><\/p>\n<p>Et ces identifiants sont stock\u00e9s dans un autre dossier. Et je peux dire : \u00ab Terraform, va s'il te pla\u00eet chercher dans le fichier d'\u00e9tat de cette ressource et r\u00e9cup\u00e8re-moi ces identifiants \u00bb. Ainsi, il y a une sorte de standardisation entre diff\u00e9rentes r\u00e9gions ou environnements.<\/p>\n<p><\/p>\n<p>Il n'est pas toujours possible d'utiliser un fichier d'\u00e9tat distant. Par exemple, vous avez cr\u00e9\u00e9 un VPC manuellement. Et le code Terraform qui cr\u00e9e le VPC est si diff\u00e9rent que vous devrez passer beaucoup de temps \u00e0 ajuster l'un par rapport \u00e0 l'autre, c'est pourquoi vous pouvez utiliser la fonctionnalit\u00e9 suivante. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Mod\u00e8les dans Terraform pour lutter contre le chaos et la routine manuelle. Maxim Kostrikine (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/04ffcd97e2fae323d9b4d81e5f6c751a.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>C'est-\u00e0-dire cr\u00e9er un module qui, en quelque sorte, cr\u00e9e le VPC et vous fournit des identifiants, alors qu'en r\u00e9alit\u00e9, il y a juste un fichier avec des valeurs cod\u00e9es en dur, qui peut \u00eatre utilis\u00e9 pour cr\u00e9er la m\u00eame instance.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Mod\u00e8les dans Terraform pour lutter contre le chaos et la routine manuelle. Maxim Kostrikine (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/9cd878c459f377caf5af9bf27b026187.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Il n'est pas toujours n\u00e9cessaire de conserver le fichier d'\u00e9tat dans le cloud. Par exemple, lors de tests de modules, vous pouvez utiliser l'initialisation du backend, o\u00f9 le fichier sera simplement sauvegard\u00e9 sur le disque pendant la p\u00e9riode de test.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Mod\u00e8les dans Terraform pour lutter contre le chaos et la routine manuelle. Maxim Kostrikine (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/70fee8d4105cfddacafeec00825127b5.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Maintenant, parlons un peu des tests. Que peut-on tester dans Terraform ? Probablement beaucoup de choses, mais je vais parler de ces 4 \u00e9l\u00e9ments.<\/p>\n<p><\/p>\n<p>HashiCorp a une id\u00e9e pr\u00e9cise de la fa\u00e7on de formater le code Terraform. Et Terraform fmt vous permet de formater le code que vous \u00e9ditez selon cette norme. Par cons\u00e9quent, les tests doivent obligatoirement v\u00e9rifier si le formatage correspond \u00e0 ce qu'a pr\u00e9conis\u00e9 HashiCorp, afin qu'il n'y ait pas besoin de changer la position des parenth\u00e8ses, etc. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Mod\u00e8les dans Terraform pour lutter contre le chaos et la routine manuelle. Maxim Kostrikine (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/bb99ffdd9f963f0f44ea7b5379689737.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Le suivant est Terraform validate. Il fait un peu plus que v\u00e9rifier la syntaxe - par exemple, v\u00e9rifier si toutes les parenth\u00e8ses sont appari\u00e9es. Qu'est-ce qui est important ici ? Notre infrastructure est tr\u00e8s \u00e9tendue. Elle contient beaucoup de dossiers diff\u00e9rents. Et dans chacun, il faut ex\u00e9cuter Terraform validate.<\/p>\n<p><\/p>\n<p>Par cons\u00e9quent, pour acc\u00e9l\u00e9rer les tests, nous ex\u00e9cutons plusieurs processus en parall\u00e8le, en utilisant le parall\u00e9lisme. <\/p>\n<p><\/p>\n<p>Le parall\u00e9lisme est une chose vraiment g\u00e9niale, profitez-en.<\/p>\n<p><\/p>\n<p>Mais chaque fois que Terraform s'initialise, il se rend sur HashiCorp et demande : \u00ab Quelles sont les derni\u00e8res versions des plugins ? Et ce plugin que j'ai en cache, est-ce le bon ou pas ? \u00bb. Et cela ralentissait \u00e0 chaque \u00e9tape. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Mod\u00e8les dans Terraform pour lutter contre le chaos et la routine manuelle. Maxim Kostrikine (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/836e90327c7a60c493f42f0a055e248b.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Si vous indiquez \u00e0 Terraform o\u00f9 se trouvent les plugins, il dira : \u00ab D'accord, c'est probablement la version la plus r\u00e9cente. Je ne chercherai pas ailleurs, je vais commencer \u00e0 valider votre code Terraform tout de suite \u00bb.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Mod\u00e8les dans Terraform pour lutter contre le chaos et la routine manuelle. Maxim Kostrikine (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/8ab344cf8de7087d30a1212d44691c20.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Pour remplir le dossier avec les plugins n\u00e9cessaires, nous avons un code Terraform tr\u00e8s simple qu'il suffit d'initialiser. Bien s\u00fbr, il faut mentionner tous les fournisseurs qui participent \u00e0 votre code, sinon Terraform dira : \u00ab Je ne connais pas ce fournisseur, car il n'est pas dans le cache \u00bb.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Mod\u00e8les dans Terraform pour lutter contre le chaos et la routine manuelle. Maxim Kostrikine (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/b8130753045624d38bce32ba08b56fb0.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ensuite, il y a le plan Terraform. Comme je l'ai dit, le d\u00e9veloppement est cyclique. Nous faisons le code avec des modifications. Et ensuite, nous devons savoir quelles modifications sont pr\u00e9vues pour l'infrastructure. <\/p>\n<p><\/p>\n<p>Et lorsque l'infrastructure est tr\u00e8s, tr\u00e8s grande, on peut changer un module, r\u00e9parer un environnement de test ou une r\u00e9gion sp\u00e9cifique et casser quelque chose d'\u00e0 c\u00f4t\u00e9. C'est pourquoi le plan Terraform doit \u00eatre fait pour l'ensemble de l'infrastructure et montrer les modifications pr\u00e9vues.<\/p>\n<p><\/p>\n<p>On peut le faire intelligemment. Par exemple, nous avons \u00e9crit un script en Python qui r\u00e9sout les d\u00e9pendances. Selon que le module Terraform ait \u00e9t\u00e9 modifi\u00e9, ou simplement un composant sp\u00e9cifique, il \u00e9labore des plans pour tous les dossiers d\u00e9pendants.<\/p>\n<p><\/p>\n<p>Les plans Terraform doivent \u00eatre faits sur demande. Au moins, c'est ce que nous faisons. <\/p>\n<p><\/p>\n<p>Bien s\u00fbr, il est bon de faire des tests pour chaque modification, \u00e0 chaque commit, mais les plans sont une affaire assez co\u00fbteuse. Et dans la demande de tirage, nous disons : \u00ab S'il te pla\u00eet, donne-moi les plans \u00bb. Un robot se d\u00e9clenche et envoie dans les commentaires ou en pi\u00e8ce jointe tous les plans pr\u00e9vus en fonction de vos modifications. <\/p>\n<p><\/p>\n<p>Le plan est une chose assez co\u00fbteuse. Cela prend du temps, car Terraform se rend sur Amazon et demande : \u00ab Cet instance existe-t-il encore ? Est-ce que cet autoscale a bien ces param\u00e8tres ? \u00bb. Et pour acc\u00e9l\u00e9rer cela, on peut utiliser un param\u00e8tre tel que refresh=false. Cela signifie que Terraform r\u00e9cup\u00e9rera l'\u00e9tat depuis S3. Et il croira que l'\u00e9tat correspond exactement \u00e0 ce qui se trouve sur Amazon.<\/p>\n<p><\/p>\n<p>Un tel plan Terraform s'ex\u00e9cute beaucoup plus rapidement, mais l'\u00e9tat doit correspondre \u00e0 votre infrastructure, c'est-\u00e0-dire que, quelque part, \u00e0 un moment donn\u00e9, Terraform refresh doit \u00eatre ex\u00e9cut\u00e9. Terraform refresh fait exactement cela, afin que l'\u00e9tat corresponde \u00e0 ce qui se trouve dans l'infrastructure r\u00e9elle. <\/p>\n<p><\/p>\n<p>Et il faut parler de la s\u00e9curit\u00e9. C'est par l\u00e0 qu'il faut commencer. L\u00e0 o\u00f9 vous ex\u00e9cutez Terraform, et o\u00f9 Terraform interagit avec votre infrastructure, il y a une vuln\u00e9rabilit\u00e9. Autrement dit, vous ex\u00e9cutez essentiellement du code. Et si une pull request contient un code malveillant, il peut s'ex\u00e9cuter sur l'infrastructure qui a trop d'acc\u00e8s. Donc, faites attention \u00e0 l'endroit o\u00f9 vous ex\u00e9cutez le plan Terraform.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Mod\u00e8les dans Terraform pour lutter contre le chaos et la routine manuelle. Maxim Kostrikine (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/2153cc01acf2b1f46978f837b82b317e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>La prochaine chose dont je voudrais parler est le test de user-data.<\/p>\n<p><\/p>\n<p>Qu'est-ce que le user-data ? Sur Amazon, lorsque nous cr\u00e9ons une instance, nous pouvons envoyer une sorte de message depuis l'instance \u2013 des m\u00e9tadonn\u00e9es. Lorsque l'instance d\u00e9marre, cloud-init est g\u00e9n\u00e9ralement toujours pr\u00e9sent sur ces instances. Cloud-init lit ce message et dit : \u00ab Ok, aujourd'hui je suis un load balancer \u00bb. Et en accord avec ces instructions, il effectue certaines actions.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Mod\u00e8les dans Terraform pour lutter contre le chaos et la routine manuelle. Maxim Kostrikine (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/406ac9341e102f5e0d7ca239d10675cd.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Mais, malheureusement, lorsque nous faisons un plan Terraform et un apply Terraform, le user-data ressemble \u00e0 une bouillie de chiffres. Autrement dit, il vous envoie simplement un hachage. Et tout ce que vous pouvez voir dans le plan, c'est s'il y aura des changements ou si le hachage restera le m\u00eame. <\/p>\n<p><\/p>\n<p>Et si on n'y pr\u00eate pas attention, un petit fichier texte corrompu peut \u00eatre envoy\u00e9 \u00e0 l'infrastructure r\u00e9elle sur Amazon. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Mod\u00e8les dans Terraform pour lutter contre le chaos et la routine manuelle. Maxim Kostrikine (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/cd7b56f1149d9cbebb0ad3228c0eeb5f.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Comme option, lors de l'ex\u00e9cution, vous pouvez sp\u00e9cifier non pas toute l'infrastructure, mais seulement le mod\u00e8le. Et dans le code, dire : \u00ab Veuillez m'afficher ce mod\u00e8le \u00bb. Vous pouvez ainsi obtenir une impression de ce \u00e0 quoi vos donn\u00e9es sur Amazon ressembleront.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Mod\u00e8les dans Terraform pour lutter contre le chaos et la routine manuelle. Maxim Kostrikine (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/86da779cdf7f9cacfd80a196efde47f7.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Une autre option est d'utiliser un module pour g\u00e9n\u00e9rer le user-data. Vous appliquez ce module, obtenez un fichier sur le disque, puis le comparez \u00e0 un fichier de r\u00e9f\u00e9rence. Ainsi, si un d\u00e9butant d\u00e9cide de modifier un peu le user-data, vos tests diront : \u00ab Ok, ici et l\u00e0, il y a des changements \u2013 c'est normal \u00bb.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Mod\u00e8les dans Terraform pour lutter contre le chaos et la routine manuelle. Maxim Kostrikine (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/7e69ec1b2c04710066d93ee48f872254.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>La prochaine chose dont je voudrais parler est l'automatisation du Terraform apply.<\/p>\n<p><\/p>\n<p>Il est certainement assez effrayant de faire un Terraform apply de mani\u00e8re automatis\u00e9e, car qui sait quels changements sont arriv\u00e9s et \u00e0 quel point ils pourraient \u00eatre destructeurs pour l'infrastructure en production. <\/p>\n<p><\/p>\n<p>Pour un environnement de test, tout cela est normal. Autrement dit, le job qui cr\u00e9e l'environnement de test est essentiel pour tous les d\u00e9veloppeurs. Et une expression comme \u00ab tout fonctionnait pour moi \u00bb n'est pas un m\u00e8me amusant, mais une preuve que la personne s'est donn\u00e9e la peine de d\u00e9ployer l'architecture, d'ex\u00e9cuter des tests sur cette architecture, et de v\u00e9rifier que tout est en ordre pour dire : \u00ab Ok, le code que je publie a \u00e9t\u00e9 test\u00e9. \u00bb<\/p>\n<p><\/p>\n<p>En production, dans sandbox et d'autres environnements qui sont plus critiques pour l'entreprise, vous pouvez appliquer partiellement certaines ressources de mani\u00e8re suffisamment s\u00fbre, car cela ne conduit pas \u00e0 des cons\u00e9quences fatales. Il s'agit des groupes d'autoscaling, des groupes de s\u00e9curit\u00e9, des r\u00f4les, de route53, et la liste peut \u00eatre assez longue. Mais restez attentif \u00e0 ce qui se passe et consultez les rapports sur les applications automatiques. <\/p>\n<p><\/p>\n<p>L\u00e0 o\u00f9 il est dangereux ou risqu\u00e9 d'appliquer, par exemple, lorsqu'il s'agit de ressources persistantes, comme des bases de donn\u00e9es, il est pr\u00e9f\u00e9rable de recevoir des rapports indiquant que certains morceaux de l'infrastructure ont des modifications non appliqu\u00e9es. L'ing\u00e9nieur, sous supervision, ex\u00e9cute alors des jobs pour les appliquer ou le fait depuis sa console. <\/p>\n<p><\/p>\n<p>Amazon dispose d'une fonction appel\u00e9e protection contre la terminaison. Elle peut prot\u00e9ger dans certaines situations contre des modifications ind\u00e9sirables. Autrement dit, Terraform se connecte \u00e0 Amazon et dit : \u00ab J'ai besoin de supprimer cette instance pour en cr\u00e9er une autre. \u00bb Et Amazon r\u00e9pond : \u00ab D\u00e9sol\u00e9, pas aujourd'hui. Nous avons activ\u00e9 la protection contre la terminaison. \u00bb<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Mod\u00e8les dans Terraform pour lutter contre le chaos et la routine manuelle. Maxim Kostrikine (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/9f4258d8688556829586a1e308f5a1e2.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Et la cerise sur le g\u00e2teau \u2013 c'est l'optimisation du code. Lorsque nous travaillons avec du code Terraform, nous devons transmettre un grand nombre de param\u00e8tres au module. Ce sont ces param\u00e8tres n\u00e9cessaires pour cr\u00e9er une ressource. Le code se transforme en de longues listes de param\u00e8tres \u00e0 transmettre d'un module \u00e0 l'autre, surtout lorsqu'il s'agit de modules imbriqu\u00e9s. <\/p>\n<p><\/p>\n<p>C'est tr\u00e8s difficile \u00e0 lire. Il est tr\u00e8s compliqu\u00e9 de faire une r\u00e9vision. Et il arrive souvent que certains param\u00e8tres passent en revue et ne soient pas tout \u00e0 fait ceux dont nous avons besoin. Cela co\u00fbte du temps et de l'argent de devoir les corriger plus tard.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Mod\u00e8les dans Terraform pour lutter contre le chaos et la routine manuelle. Maxim Kostrikine (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/ad7e8a91692212fda9f2561854b881c9.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>C'est pourquoi je vous propose d'utiliser une chose appel\u00e9e param\u00e8tre complexe, qui inclut un certain arbre de valeurs. Autrement dit, vous avez besoin d'un r\u00e9pertoire o\u00f9 sont indiqu\u00e9es toutes les valeurs que vous aimeriez avoir dans un environnement donn\u00e9.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Mod\u00e8les dans Terraform pour lutter contre le chaos et la routine manuelle. Maxim Kostrikine (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/909632949eb30057bf86b116239d9077.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>En invoquant ce module, il est possible d'obtenir un arbre g\u00e9n\u00e9r\u00e9 dans un module commun, c'est-\u00e0-dire dans un module commun qui fonctionne de la m\u00eame mani\u00e8re pour toute l'infrastructure.<\/p>\n<p><\/p>\n<p>Dans ce module, il est possible d'effectuer certains calculs en utilisant une fonctionnalit\u00e9 r\u00e9cente de Terraform, appel\u00e9e locals. Puis, avec un output, vous pouvez produire un param\u00e8tre complexe qui peut inclure des hachages, des tableaux, etc. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Mod\u00e8les dans Terraform pour lutter contre le chaos et la routine manuelle. Maxim Kostrikine (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/25c14e0397f8d95c301e0dfe6ae761df.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>C'est donc ici que se terminent toutes les meilleures d\u00e9couvertes que j'ai. Je voudrais raconter une anecdote sur Colomb. Quand il cherchait des financements pour son exp\u00e9dition afin de d\u00e9couvrir l'Inde (comme il le pensait alors), personne ne croyait en lui et on disait que c'\u00e9tait impossible. Alors il a dit : \u00ab Faites en sorte que l'\u0153uf ne tombe pas \u00bb. Tous les banquiers, tr\u00e8s riches et probablement intelligents, ont essay\u00e9 de poser l'\u0153uf de diverses mani\u00e8res, mais il tombait toujours. Alors Colomb a pris l'\u0153uf, a appuy\u00e9 l\u00e9g\u00e8rement dessus. La coquille s'est \u00e9cras\u00e9e et l'\u0153uf est rest\u00e9 immobile. Ils ont dit : \u00ab Oh, c\u2019est trop simple ! \u00bb. Et Colomb a r\u00e9pondu : \u00ab Oui, c\u2019est trop simple. Et quand je d\u00e9couvrirai l'Inde, tout le monde utilisera cette route commerciale \u00bb. <\/p>\n<p><\/p>\n<p>Ce que je vous ai racont\u00e9 jusqu'\u00e0 pr\u00e9sent sont probablement des choses assez simples et triviales. Et quand vous en prenez connaissance et commencez \u00e0 les utiliser, cela semble normal. Alors n'h\u00e9sitez pas. Et si pour vous ce sont des choses tout \u00e0 fait normales, au moins vous savez comment poser un \u0153uf pour qu'il ne tombe pas. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Mod\u00e8les dans Terraform pour lutter contre le chaos et la routine manuelle. Maxim Kostrikine (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/37bf83d04b99f089f2319c8d2e8aaeb4.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>En r\u00e9sum\u00e9 : <\/p>\n<p><\/p>\n<ul>\n<li>Essayez d'\u00e9viter les flocons de neige. Et moins il y a de flocons, moins vous aurez besoin de ressources pour effectuer des modifications dans toute votre grande infrastructure. <\/li>\n<li>Modifications constantes. C'est-\u00e0-dire que lorsque des modifications ont \u00e9t\u00e9 apport\u00e9es au code, il faut rapidement aligner votre infrastructure avec ces changements. Il ne doit pas y avoir de situation o\u00f9 quelqu'un revient apr\u00e8s deux ou trois mois pour voir Elasticsearch, fait un terraform plan et y d\u00e9couvre une multitude de changements qu'il n'attendait pas. Cela prendrait trop de temps pour remettre tout en ordre. <\/li>\n<li>Tests et automatisation. Plus votre code est couvert par des tests et des fonctionnalit\u00e9s, plus vous avez confiance dans le fait que vous faites tout correctement. La livraison automatis\u00e9e augmentera votre confiance de mani\u00e8re exponentielle. <\/li>\n<li>Le code pour l'environnement de test et de production doit \u00eatre pratiquement identique. Pratiquement, parce que la production est un peu diff\u00e9rente et qu'il y aura tout de m\u00eame des nuances qui d\u00e9passeront le cadre de l'environnement de test. N\u00e9anmoins, on peut en gros garantir cela. <\/li>\n<li>Et si vous avez beaucoup de code Terraform et qu'il faut beaucoup de temps pour le maintenir \u00e0 jour, il n'est jamais trop tard pour faire du refactoring et le remettre en bonne forme. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Mod\u00e8les dans Terraform pour lutter contre le chaos et la routine manuelle. Maxim Kostrikine (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/68f3946536f44eed33939b234fb3ca0d.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<ul>\n<li>Infrastructure immuable. Livraison AMI selon un calendrier. <\/li>\n<li>Structure pour Route53, lorsque vous avez beaucoup d'enregistrements et que vous souhaitez qu'ils soient dans un ordre coh\u00e9rent. <\/li>\n<li>Lutte contre les limites de taux de l'API. C'est lorsque Amazon dit : \u00ab \u00c7a y est, je ne peux plus accepter de requ\u00eates, veuillez patienter \u00bb. Et la moiti\u00e9 de la soci\u00e9t\u00e9 attend jusqu'\u00e0 ce qu'elle puisse d\u00e9ployer son infrastructure. <\/li>\n<li>Instances spot. Amazon n'est pas une d\u00e9pense bon march\u00e9 et les spots permettent d'\u00e9conomiser beaucoup. On peut m\u00eame donner toute une pr\u00e9sentation \u00e0 ce sujet. <\/li>\n<li>S\u00e9curit\u00e9 et r\u00f4les IAM. <\/li>\n<li>Recherche de ressources perdues, lorsque vous avez dans Amazon des instances d'origine douteuse qui co\u00fbtent de l'argent. M\u00eame si une instance co\u00fbte 100-150 dollars par mois, cela fait plus de 1 000 dollars par an. Trouver ces ressources est une affaire lucrative. <\/li>\n<li>Et les instances r\u00e9serv\u00e9es. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Mod\u00e8les dans Terraform pour lutter contre le chaos et la routine manuelle. Maxim Kostrikine (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/69ddbf4c726bcc15aea1a1e2d67a3fc8.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>C'est tout pour moi. Terraform est vraiment g\u00e9nial, utilisez-le. Merci !<\/p>\n<p><\/p>\n<p>Questions<\/p>\n<p><\/p>\n<p><em>Merci pour la pr\u00e9sentation ! Votre fichier d'\u00e9tat est stock\u00e9 dans S3, comment g\u00e9rez-vous le probl\u00e8me de plusieurs personnes qui pourraient acc\u00e9der \u00e0 ce fichier d'\u00e9tat et essayer de se d\u00e9ployer ?<\/em><\/p>\n<p><\/p>\n<p>Tout d'abord, nous ne sommes pas press\u00e9s. Deuxi\u00e8mement, il y a des flags pour indiquer que nous travaillons sur une certaine partie du code. Donc, m\u00eame si l'infrastructure est tr\u00e8s grande, cela ne signifie pas que quelqu'un applique constamment des changements. Et lorsque la phase active \u00e9tait en cours, cela devenait un probl\u00e8me, nos fichiers d'\u00e9tat \u00e9taient stock\u00e9s dans Git. C'\u00e9tait important, sinon quelqu'un allait cr\u00e9er un fichier d'\u00e9tat et nous devions les rassembler manuellement pour que tout puisse continuer. Maintenant, ce probl\u00e8me n'existe plus. En fait, Terraform a r\u00e9solu cette t\u00e2che. Et s'il y a des changements constants, des verrous peuvent \u00eatre utilis\u00e9s pour pr\u00e9venir ce que vous mentionnez.<\/p>\n<p><\/p>\n<p><em>Vous utilisez la version open source ou l'entreprise ?<\/em><\/p>\n<p><\/p>\n<p>Aucune version entreprise, c'est-\u00e0-dire tout ce qui peut \u00eatre t\u00e9l\u00e9charg\u00e9 gratuitement. <\/p>\n<p><\/p>\n<p><em>Je m'appelle Stanislav. Je voulais faire un petit compl\u00e9ment. Vous avez parl\u00e9 de la fonctionnalit\u00e9 d'Amazon qui permet de rendre une instance indestructible. Cela existe aussi dans Terraform, dans le bloc Life Second, on peut inscrire une interdiction de modification ou d'\u00e9limination.<\/em> <\/p>\n<p><\/p>\n<p>J'\u00e9tais limit\u00e9 par le temps. Bonne remarque. <\/p>\n<p><\/p>\n<p><em>Je voulais aussi poser deux questions. Premi\u00e8rement, vous avez parl\u00e9 des tests. Avez-vous utilis\u00e9 des outils de test ? J'ai entendu parler du plugin Test Kitchen. Peut-\u00eatre qu'il y a autre chose. Et j'aimerais \u00e9galement poser une question sur les Local Values. En quoi diff\u00e8rent-ils des Input Variables ? Et pourquoi ne puis-je pas param\u00e9trer quelque chose uniquement via les Local Values ? J'ai essay\u00e9 de comprendre ce sujet, mais je n'y suis pas parvenu.<\/em><\/p>\n<p><\/p>\n<p>Nous pouvons en discuter davantage en dehors de cette salle. Les outils de test \u2013 c'est compl\u00e8tement fait maison chez nous. Il n'y a rien l\u00e0 pour faire des tests. En fait, il existe des options o\u00f9 des tests automatis\u00e9s \u00e9l\u00e8vent l'infrastructure quelque part, v\u00e9rifient qu'elle est OK, puis tout d\u00e9truisent avec un rapport disant que votre infrastructure est toujours en bon \u00e9tat. Nous n'avons pas cela, car les stacks de tests sont lanc\u00e9s chaque jour. Et cela suffit. Et si quelque chose commence \u00e0 se casser, cela va commencer \u00e0 se casser sans que nous devions le v\u00e9rifier ailleurs. <\/p>\n<p><\/p>\n<p>\u00c0 propos des Local Values, poursuivons la conversation en dehors de la salle. <\/p>\n<p><\/p>\n<p><em>Salut ! Merci pour ta pr\u00e9sentation ! Tr\u00e8s instructif. Tu disais que vous aviez beaucoup de code r\u00e9p\u00e9titif pour d\u00e9crire votre infrastructure. N'avez-vous pas envisag\u00e9 de g\u00e9n\u00e9rer ce code ?<\/em><\/p>\n<p><\/p>\n<p>Excellente question, merci ! En fait, lorsque nous utilisons l'infrastructure comme code, nous supposons que nous regardons le code et que nous comprenons quelle infrastructure est derri\u00e8re ce code. Si le code est g\u00e9n\u00e9r\u00e9, il nous faut imaginer quel code sera g\u00e9n\u00e9r\u00e9 pour comprendre quelle infrastructure il y aura. Soit nous g\u00e9n\u00e9rons le code, nous le committons et, en substance, cela revient \u00e0 la m\u00eame chose. C'est pourquoi nous avons suivi la voie que nous avons \u00e9crite, nous l'avons obtenu. De plus, les g\u00e9n\u00e9rateurs sont apparus un peu plus tard, lorsque nous avons commenc\u00e9 \u00e0 travailler. Et il \u00e9tait d\u00e9j\u00e0 trop tard pour changer.<\/p>\n<p><\/p>\n<p><em>Avez-vous entendu parler de jsonnet ?<\/em><\/p>\n<p><\/p>\n<p>Non. <\/p>\n<p><\/p>\n<p><em>Regarde, c'est une tr\u00e8s bonne chose. Je vois un cas concret o\u00f9 je peux l'appliquer et g\u00e9n\u00e9rer une structure de donn\u00e9es.<\/em> <\/p>\n<p><\/p>\n<p>Les g\u00e9n\u00e9rateurs, c'est bien, comme dans l'anecdote sur le rasoir. C'est-\u00e0-dire qu'au d\u00e9but, les visages sont diff\u00e9rents, mais ensuite, tout le monde a le m\u00eame visage. Les g\u00e9n\u00e9rateurs sont tr\u00e8s bien accueillis. Mais chez nous, malheureusement, les visages sont un peu diff\u00e9rents. C'est un probl\u00e8me. <\/p>\n<p><\/p>\n<p><em>Regarde juste. Merci !<\/em><\/p>\n<p><\/p>\n<p><em>Je m'appelle Maxim, je viens de Sberbank. Vous avez un peu parl\u00e9 de l'essai d'adapter Terraform \u00e0 un langage de programmation. Ne serait-il pas plus simple d'utiliser Ansible ?<\/em><\/p>\n<p><\/p>\n<p>Ce sont des choses tr\u00e8s diff\u00e9rentes. On peut cr\u00e9er des ressources avec Ansible et avec Puppet, on peut cr\u00e9er des ressources sur Amazon. Mais Terraform est vraiment con\u00e7u pour cela. <\/p>\n<p><\/p>\n<p><em>Vous n'avez qu'Amazon ?<\/em><\/p>\n<p><\/p>\n<p>Ce n'est pas que nous n'avons qu'Amazon. Nous avons presque uniquement Amazon. Mais la caract\u00e9ristique cl\u00e9 est que Terraform se souvient. Avec Ansible, si vous dites : \u00ab Montez-moi 5 instances \u00bb, il va le faire, puis vous dites : \u00ab Maintenant, j'ai besoin de 3 \u00bb. Et Terraform dira : \u00ab Ok, j\u2019en supprime 2 \u00bb, alors qu'Ansible dira : \u00ab Ok, voici 3 \u00bb. Au total, cela fait 8.<\/p>\n<p><\/p>\n<p><em>Bonjour ! Merci pour votre pr\u00e9sentation ! C'\u00e9tait tr\u00e8s int\u00e9ressant d'\u00e9couter parler de Terraform. Je veux d'abord faire un petit commentaire sur le fait que Terraform n'a toujours pas de version stable, donc soyez tr\u00e8s prudent avec Terraform.<\/em><\/p>\n<p><\/p>\n<p>Mieux vaut tard que jamais. C'est-\u00e0-dire que si vous avez besoin d'une solution, vous retardez parfois ce qui n'est pas stable, etc., mais \u00e7a fonctionne et cela nous a aid\u00e9s. <\/p>\n<p><\/p>\n<p><em>J'ai une question. Vous utilisez Remote backend, vous utilisez S3. Pourquoi n'utilisez-vous pas le backend officiel ?<\/em><\/p>\n<p><\/p>\n<p>Officiel ?<\/p>\n<p><\/p>\n<p><em>Terraform Cloud.<\/em><\/p>\n<p><\/p>\n<p>Quand cela a-t-il \u00e9t\u00e9 lanc\u00e9 ?<\/p>\n<p><\/p>\n<p><em>Il y a environ 4 mois.<\/em> <\/p>\n<p><\/p>\n<p>S'il \u00e9tait apparu il y a 4 ans, j'aurais probablement r\u00e9pondu \u00e0 votre question.<\/p>\n<p><\/p>\n<p><em>Il y a d\u00e9j\u00e0 une fonction int\u00e9gr\u00e9e pour les verrous, et vous pouvez stocker le fichier d'\u00e9tat. Essayez-le. Mais je ne l'ai pas test\u00e9 non plus.<\/em><\/p>\n<p><\/p>\n<p>Nous sommes dans un grand train qui roule \u00e0 grande vitesse. Et on ne peut pas juste jeter quelques wagons. <\/p>\n<p><\/p>\n<p><em>Vous parliez de snowflakes, pourquoi n'avez-vous pas utilis\u00e9 de branche ? Pourquoi \u00e7a n'a-t-il pas march\u00e9 ?<\/em><\/p>\n<p><\/p>\n<p>Nous avons cette approche o\u00f9 toute l'infrastructure est dans un seul d\u00e9p\u00f4t. Terraform, Puppet, tous les scripts en rapport, ils sont tous dans le m\u00eame d\u00e9p\u00f4t. De cette fa\u00e7on, nous pouvons garantir que les changements incr\u00e9mentaux sont test\u00e9s un par un. Si c'\u00e9tait plein de branches, ce type de projet serait pratiquement impossible \u00e0 maintenir. Il passe six mois, et ils s'\u00e9cartent tellement que cela devient juste une punition. C'est ce dont nous voulions fuir jusqu'\u00e0 la refonte. <\/p>\n<p><\/p>\n<p><em>Donc, cela ne fonctionne pas ?<\/em><\/p>\n<p><\/p>\n<p>\u00c7a ne fonctionne pas du tout.<\/p>\n<p><\/p>\n<p>Dans la branche, j'ai coup\u00e9 le diaporama du dossier. C'est-\u00e0-dire que si nous faisons un dossier pour chaque projet de test, par exemple, l'\u00e9quipe A a son propre dossier, l'\u00e9quipe B a son propre dossier, cela ne fonctionne pas non plus. Nous avons cr\u00e9\u00e9 un code unifi\u00e9 pour l'environnement de test, qui \u00e9tait suffisamment flexible pour convenir \u00e0 tout le monde. C'est-\u00e0-dire que nous avons g\u00e9r\u00e9 un seul code. <\/p>\n<p><\/p>\n<p><em>Bonjour ! Je m'appelle Yura ! Merci pour votre pr\u00e9sentation ! J'ai une question sur les modules. Vous dites que vous utilisez des modules. Comment g\u00e9rez-vous les changements dans un module qui ne sont pas compatibles avec les modifications d'une autre personne ? Est-ce que vous versionnez les modules ou essayez-vous de cr\u00e9er une solution miracle pour r\u00e9pondre \u00e0 deux exigences ?<\/em><\/p>\n<p><\/p>\n<p>C'est un probl\u00e8me de grande ampleur. C'est ce dont nous souffrons, lorsque quelque changement apparemment inoffensif peut casser une partie de l'infrastructure. Et cela ne sera perceptible qu'apr\u00e8s un certain temps.<\/p>\n<p><\/p>\n<p><em>C'est-\u00e0-dire qu'il n'y a pas encore de solution ?<\/em><\/p>\n<p><\/p>\n<p>Vous cr\u00e9ez des modules universels. \u00c9vitez les flocons. Et tout ira bien. La seconde partie de la pr\u00e9sentation traite de la mani\u00e8re d'\u00e9viter cela.<\/p>\n<p><\/p>\n<p><em>Bonjour ! Merci pour votre pr\u00e9sentation ! Je voudrais pr\u00e9ciser quelque chose. Il y a un gros probl\u00e8me en arri\u00e8re-plan, pour lequel je suis venu. Comment Puppet et l'attribution des r\u00f4les sont-ils int\u00e9gr\u00e9s ?<\/em><\/p>\n<p><\/p>\n<p>User-data.<\/p>\n<p><\/p>\n<p><em>C'est-\u00e0-dire que vous lancez simplement un fichier et vous ex\u00e9cutez des choses en fonction de celui-ci ?<\/em><\/p>\n<p><\/p>\n<p>User-data est une note, c'est-\u00e0-dire que lorsque nous clonons une image, un Daemon se l\u00e8ve et, essayant de comprendre qui il est, lit la note disant qu'il est un \u00e9quilibreur de charge.<\/p>\n<p><\/p>\n<p><em>C'est-\u00e0-dire que c'est un processus distinct qui est confi\u00e9 ?<\/em><\/p>\n<p><\/p>\n<p>Ce n'est pas nous qui l'avons invent\u00e9. Nous l'utilisons. <\/p>\n<p><\/p>\n<p><em>Bonjour ! J'ai justement une question sur User-data. Vous avez mentionn\u00e9 qu'il y avait des probl\u00e8mes, que quelqu'un pouvait envoyer quelque chose de travers. Existe-t-il un moyen de stocker les user-data dans le m\u00eame Git, afin qu'il soit toujours clair \u00e0 quoi se r\u00e9f\u00e8re User-data ?<\/em><\/p>\n<p><\/p>\n<p>Nous g\u00e9n\u00e9rons l'User-data \u00e0 partir du template. C'est-\u00e0-dire qu'un certain nombre de variables y parviennent. Terraform g\u00e9n\u00e8re donc le r\u00e9sultat final. On ne peut pas simplement regarder le template et dire ce qui en sortira, car tous les probl\u00e8mes viennent du fait que le d\u00e9veloppeur pense qu'il transmet une cha\u00eene dans cette variable, tandis qu'un tableau arrive. Et l\u00e0, bam, quelque chose ne fonctionne pas. Si c'est une nouvelle ressource et que la personne la d\u00e9ploie, elle voit que quelque chose ne fonctionne pas, et c'est rapidement r\u00e9solu. Mais si c'est un groupe d'autoscaling qui a \u00e9t\u00e9 mis \u00e0 jour, \u00e0 un moment donn\u00e9, les instances du groupe d'autoscaling commencent \u00e0 \u00eatre remplac\u00e9es. Et pouf, quelque chose ne fonctionne pas. C'est frustrant.<\/p>\n<p><\/p>\n<p><em>Cela signifie que la seule solution est de tester ?<\/em><\/p>\n<p><\/p>\n<p>Oui, vous voyez le probl\u00e8me, vous ajoutez des \u00e9tapes de test. C'est-\u00e0-dire que l'output peut \u00e9galement \u00eatre test\u00e9. Peut-\u00eatre que ce n'est pas aussi pratique, mais on peut aussi mettre des balises \u2013 v\u00e9rifiez que l'User-data est bien en place. <\/p>\n<p><\/p>\n<p><em>Je m'appelle Timur. C'est super qu'il y ait des pr\u00e9sentations sur la bonne organisation de Terraform.<\/em><\/p>\n<p><\/p>\n<p>Je n'ai m\u00eame pas commenc\u00e9.<\/p>\n<p><\/p>\n<p><em>Je pense qu'\u00e0 la prochaine conf\u00e9rence, cela pourrait \u00eatre le cas. J'ai une question simple. Pourquoi ne hardcodez-vous pas la valeur dans un module s\u00e9par\u00e9, au lieu d'utiliser des tfvars ? Qu'est-ce qui rend un module avec des valeurs meilleur qu\u2019un tfvars ?<\/em><\/p>\n<p><\/p>\n<p>C'est-\u00e0-dire que je devrais \u00e9crire ici (diapositive : Production\/environment\/settings.tf) : domain = variable, domaine vpcnetwork, variable vpcnetwork et stvars \u2013 obtenir la m\u00eame chose ?<\/p>\n<p><\/p>\n<p><em>Nous faisons exactement comme \u00e7a. Nous faisons r\u00e9f\u00e9rence au module de source setting, par exemple.<\/em><\/p>\n<p><\/p>\n<p>En gros, c'est comme un tfvars. Le tfvars est tr\u00e8s pratique dans un environnement de test. J'ai un tfvars pour de grandes instances, pour de petites. Et j'ai juste jet\u00e9 un fichier dans le dossier. Et j'ai obtenu ce que je voulais. Quand nous d\u00e9veloppons l'infrastructure, nous voulons qu'il soit possible de voir et de tout comprendre imm\u00e9diatement. Sinon, il faut regarder ici, puis regarder dans les tfvars.<\/p>\n<p><\/p>\n<p><em>Donc, pour que tout soit au m\u00eame endroit ?<\/em><\/p>\n<p><\/p>\n<p>Oui, le tfvars est lorsque vous avez un code unique. Et il est utilis\u00e9 \u00e0 diff\u00e9rents endroits avec des nuances diff\u00e9rentes. Dans ce cas, vous jetteriez le tfvars et obteniez vos nuances. Et nous, c'est l'infrastructure comme code pur. On regarde et on comprend. <\/p>\n<p><\/p>\n<p><em>Bonjour ! Avez-vous d\u00e9j\u00e0 rencontr\u00e9 des situations o\u00f9 le fournisseur de cloud interf\u00e8re dans ce que vous avez fait avec Terraform ? Par exemple, lorsque nous modifions les m\u00e9tadonn\u00e9es. Il s'agit de cl\u00e9s ssh. Et Google ins\u00e8re constamment ses propres m\u00e9tadonn\u00e9es et ses cl\u00e9s. Terraform dit toujours qu'il y a des modifications. Apr\u00e8s chaque ex\u00e9cution, m\u00eame si rien ne change, il insiste sur le fait qu'il va mettre \u00e0 jour ce champ.<\/em><\/p>\n<p><\/p>\n<p>Avec les cl\u00e9s, oui, mais une partie de l'infrastructure est affect\u00e9e par ce probl\u00e8me, c'est-\u00e0-dire que Terraform ne peut rien changer. Nous ne pouvons rien modifier manuellement non plus. Nous devons vivre avec cela.<\/p>\n<p><\/p>\n<p><em>C'est-\u00e0-dire que vous y \u00eates confront\u00e9, mais vous n'avez rien trouv\u00e9, il continue de faire ce qu'il veut tout seul ?<\/em><\/p>\n<p><\/p>\n<p>Malheureusement, oui. <\/p>\n<p><\/p>\n<p><em>Bonjour ! Je m'appelle Stanislav Starkov. Mail.ru Group. Comment g\u00e9rez-vous le probl\u00e8me de g\u00e9n\u00e9ration de balises sur ..., comment les transmettez-vous \u00e0 l'int\u00e9rieur ? Je comprends qu'il faut passer par User \u2014 data pour indiquer le nom d'h\u00f4te, pour cibler Puppet ? Et la deuxi\u00e8me partie de la question. Comment g\u00e9rez-vous cette question dans SG, c'est-\u00e0-dire lorsque vous g\u00e9n\u00e9rez SG, des centaines d'instances similaires, comment les nommer correctement ?<\/em><\/p>\n<p><\/p>\n<p>Les instances qui sont tr\u00e8s importantes pour nous, nous leur donnons des noms appropri\u00e9s. Celles qui ne sont pas n\u00e9cessaires portent une annotation indiquant qu'il s'agit d'un groupe d'autoscaling. En th\u00e9orie, cela peut \u00eatre supprim\u00e9 pour en obtenir une nouvelle. <\/p>\n<p><\/p>\n<p>Concernant le probl\u00e8me de la balise, il n'y a pas de probl\u00e8me, mais il s'agit d'une t\u00e2che. Nous utilisons \u00e9norm\u00e9ment les balises, car l'infrastructure est vaste et co\u00fbteuse. Nous devons observer o\u00f9 vont les d\u00e9penses d'argent, donc les balises nous permettent d'analyser o\u00f9 et pourquoi de l'argent est d\u00e9pens\u00e9. Ainsi, nous pouvons suivre ce pour quoi beaucoup d'argent est d\u00e9pens\u00e9 ici. <\/p>\n<p><\/p>\n<p>De quoi portait l'autre question ?<\/p>\n<p><\/p>\n<p><em>Quand SG cr\u00e9e une centaine d'instances, comment faut-il les diff\u00e9rencier ?<\/em><\/p>\n<p><\/p>\n<p>Non, ce n'est pas n\u00e9cessaire. Chaque instance a un agent qui signale des probl\u00e8mes. Si l'agent signale, c'est qu'il sait qu'il y a un probl\u00e8me et, au minimum, l'adresse IP existe. On peut d\u00e9j\u00e0 partir de l\u00e0. D'autre part, nous utilisons Consul pour la d\u00e9couverte, l\u00e0 o\u00f9 nous n'avons pas Kubernetes. Et Consul montre aussi l'adresse IP de l'instance.<\/p>\n<p><\/p>\n<p><em>C'est-\u00e0-dire que vous vous basez sur l'adresse IP, et non sur le nom d'h\u00f4te ?<\/em><\/p>\n<p><\/p>\n<p>Il est impossible de se baser sur le nom d'h\u00f4te, il y en a beaucoup. Il y a des identifiants d'instance \u2013 AE, etc. On peut les trouver quelque part, on peut les rechercher. <\/p>\n<p><\/p>\n<p><em>Salut ! J'ai compris que Terraform est un bon outil con\u00e7u pour le cloud.<\/em> <\/p>\n<p><\/p>\n<p>Pas seulement. <\/p>\n<p><\/p>\n<p><em>C'est exactement cette question qui m'int\u00e9resse. Si vous d\u00e9cidez de migrer massivement vers Bare Metal avec tous vos instances, cela ne posera-t-il aucun probl\u00e8me ? Ou devrez-vous tout de m\u00eame utiliser d'autres produits, comme Ansible, qui a \u00e9t\u00e9 mentionn\u00e9 ici ?<\/em><\/p>\n<p><\/p>\n<p>Ansible est un peu diff\u00e9rent. C'est-\u00e0-dire qu'Ansible fonctionne une fois que l'instance est lanc\u00e9e. Alors que Terraform op\u00e8re avant le lancement de l'instance. La transition vers Bare Metal \u2013 c'est non. <\/p>\n<p><\/p>\n<p><em>Pour l'instant, non, mais un jour le business dira : \u00ab Allons-y \u00bb.<\/em><\/p>\n<p><\/p>\n<p>La migration vers un autre cloud \u2013 oui, mais il y a un petit d\u00e9tail diff\u00e9rent. Il faut r\u00e9diger le code Terraform de mani\u00e8re \u00e0 pouvoir transf\u00e9rer vers un autre cloud avec le moins de douleur possible. <\/p>\n<p><\/p>\n<p>Au d\u00e9part, l'objectif \u00e9tait que notre infrastructure soit agnostique, c'est-\u00e0-dire qu'elle puisse s'adapter \u00e0 n'importe quel cloud, mais \u00e0 un moment donn\u00e9, le business a capitul\u00e9 et a dit : \u00ab D'accord, dans les N prochaines ann\u00e9es, nous ne partirons nulle part, nous pouvons utiliser les services d'Amazon \u00bb.<\/p>\n<p><\/p>\n<p>Terraform permet de cr\u00e9er des jobs en Front-End, de configurer PagerDuty, des documents de donn\u00e9es, etc. Il a tellement de fonctionnalit\u00e9s. Il peut pratiquement contr\u00f4ler le monde entier.<\/p>\n<p><\/p>\n<p><em>Merci pour la pr\u00e9sentation ! J'utilise \u00e9galement Terraform depuis 4 ans. Au cours de la transition vers Terraform, vers l'infrastructure, vers la description d\u00e9clarative, nous avons \u00e9t\u00e9 confront\u00e9s \u00e0 des situations o\u00f9 quelqu'un faisait quelque chose manuellement, et vous tentiez de faire un plan. Et vous obteniez une erreur quelconque. Comment g\u00e9rez-vous ces probl\u00e8mes ? Comment trouvez-vous les ressources perdues qui ont \u00e9t\u00e9 sp\u00e9cifi\u00e9es ?<\/em><\/p>\n<p><\/p>\n<p>Principalement \u00e0 la main et \u00e0 l'\u0153il. Si nous voyons quelque chose d'\u00e9trange dans le rapport, nous analysons ce qui se passe, ou nous le supprimons simplement. En fait, les pull requests sont une pratique courante. <\/p>\n<p><\/p>\n<p><em>En cas d'erreur, effectuez-vous un rollback ? Avez-vous d\u00e9j\u00e0 essay\u00e9 cela ?<\/em><\/p>\n<p><\/p>\n<p>Non, c'est une d\u00e9cision humaine au moment o\u00f9 le probl\u00e8me est constat\u00e9.<\/p>\n<p>Source : <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/524712\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0431\u044b, \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 Terraform \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0443\u0434\u043e\u0431\u043d\u044b\u0435 best practices \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 AWS-\u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043e\u0439. \u0422\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u0442\u044c \u043d\u044e\u0430\u043d\u0441. \u0421\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0439 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f, \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u043f\u043e\u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438. \u041f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0447\u0442\u0438 \u043a\u043e\u043f\u0438\u044f \u0441\u0442\u0435\u043a\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0432 \u0441\u043e\u0441\u0435\u0434\u043d\u0435\u043c \u0440\u0435\u0433\u0438\u043e\u043d\u0435. \u0418 Terraform-\u043a\u043e\u0434 \u043d\u0443\u0436\u043d\u043e \u0430\u043a\u043a\u0443\u0440\u0430\u0442\u043d\u043e \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438 \u043e\u0442\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u043d\u043e\u0432\u044b\u043c \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f\u043c \u0438\u043b\u0438 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u043d\u0435\u0436\u0438\u043d\u043a\u0443. \u041c\u043e\u0439 \u0434\u043e\u043a\u043b\u0430\u0434 \u043f\u0440\u043e \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u044b \u0432 Terraform \u0434\u043b\u044f \u0431\u043e\u0440\u044c\u0431\u044b \u0441 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":98124,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-98123","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2 - aioseo.com -->\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/patterny-v-terraform-dlya-borby-s-haosom-i-ruchnoj-rutinoj-maksim-kostrikin-ixtens\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"fr_FR\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041f\u0430\u0442\u0442\u0435\u0440\u043d\u044b \u0432 Terraform \u0434\u043b\u044f \u0431\u043e\u0440\u044c\u0431\u044b \u0441 \u0445\u0430\u043e\u0441\u043e\u043c \u0438 \u0440\u0443\u0447\u043d\u043e\u0439 \u0440\u0443\u0442\u0438\u043d\u043e\u0439. \u041c\u0430\u043a\u0441\u0438\u043c \u041a\u043e\u0441\u0442\u0440\u0438\u043a\u0438\u043d (Ixtens) | ProHoster\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/patterny-v-terraform-dlya-borby-s-haosom-i-ruchnoj-rutinoj-maksim-kostrikin-ixtens\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-10-24T12:42:52+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-11-17T22:58:49+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Mod\u00e8les dans Terraform pour lutter contre le chaos et la routine manuelle. Maxim Kostrikin (Ixtens) | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/patterny-v-terraform-dlya-borby-s-haosom-i-ruchnoj-rutinoj-maksim-kostrikin-ixtens","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"fr_FR","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041f\u0430\u0442\u0442\u0435\u0440\u043d\u044b \u0432 Terraform \u0434\u043b\u044f \u0431\u043e\u0440\u044c\u0431\u044b \u0441 \u0445\u0430\u043e\u0441\u043e\u043c \u0438 \u0440\u0443\u0447\u043d\u043e\u0439 \u0440\u0443\u0442\u0438\u043d\u043e\u0439. \u041c\u0430\u043a\u0441\u0438\u043c \u041a\u043e\u0441\u0442\u0440\u0438\u043a\u0438\u043d (Ixtens) | ProHoster","og:url":"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/patterny-v-terraform-dlya-borby-s-haosom-i-ruchnoj-rutinoj-maksim-kostrikin-ixtens","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-10-24T12:42:52+00:00","article:modified_time":"2020-11-17T22:58:49+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"98123","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 10:04:35","updated":"2022-09-29 03:09:38","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts\/98123","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/comments?post=98123"}],"version-history":[{"count":1,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts\/98123\/revisions"}],"predecessor-version":[{"id":164071,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts\/98123\/revisions\/164071"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media\/98124"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media?parent=98123"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/categories?post=98123"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/tags?post=98123"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}