{"id":52367,"date":"2019-11-07T00:00:00","date_gmt":"2019-11-06T21:00:00","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blog_prohoster\/pereshel-s-terraform-na-cloudformation-i-pozhalel"},"modified":"2020-02-18T14:00:04","modified_gmt":"2020-02-18T11:00:04","slug":"pereshel-s-terraform-na-cloudformation-i-pozhalel","status":"publish","type":"post","link":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/pereshel-s-terraform-na-cloudformation-i-pozhalel","title":{"rendered":"Sono passato da Terraform a CloudFormation \u2014 e me ne sono pentito.","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Presentare l'infrastruttura come codice in un formato di testo ripetibile \u00e8 una delle migliori pratiche per i sistemi che non richiedono un'interazione visiva. Questa pratica \u00e8 conosciuta come <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Infrastructure_as_code\">Infrastructure as Code<\/a><\/noindex>, e per implementarla, specialmente in AWS, ci sono due strumenti popolari: <noindex><a rel=\"nofollow\" href=\"https:\/\/www.terraform.io\/\">Terraform<\/a><\/noindex> e <noindex><a rel=\"nofollow\" href=\"https:\/\/aws.amazon.com\/cloudformation\/\">CloudFormation<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Sono passato da Terraform a CloudFormation \u2014 e me ne sono pentito.\" src=\"\/wp-content\/uploads\/2019\/11\/e33084fb81ca06107b341eef01e69adc.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<em>Confronto tra Terraform e CloudFormation<\/em><\/p>\n<p><\/p>\n<p>Prima di arrivare a <noindex><a rel=\"nofollow\" href=\"https:\/\/www.twitch.tv\/\">Twitch<\/a><\/noindex> (ovvero <noindex><a rel=\"nofollow\" href=\"https:\/\/www.businessinsider.com\/amazon-buys-twitch-2014-8\">Amazon Jr.<\/a><\/noindex>) ho lavorato <noindex><a rel=\"nofollow\" href=\"https:\/\/www.signalfx.com\/\">in una startup<\/a><\/noindex> e per circa tre anni ho utilizzato Terraform. Nel mio nuovo posto ho continuato a utilizzare Terraform, ma poi l'azienda ha spinto per una transizione verso tutto ci\u00f2 che era simile ad Amazon, incluso CloudFormation. Ho lavorato duramente per sviluppare le migliori pratiche per entrambi, utilizzando entrambi gli strumenti in processi lavorativi molto complessi su scala organizzativa. In seguito, riflettendo attentamente sulle implicazioni del passaggio da Terraform a CloudFormation, mi sono reso conto che Terraform \u00e8 probabilmente la scelta migliore per l'organizzazione.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2 id=\"terraform-uzhasnyy\">Terraform \u00e8 terribile<\/h2>\n<p><\/p>\n<h3 id=\"beta-versiya-po\">Beta software<\/h3>\n<p><\/p>\n<p>Terraform non ha ancora rilasciato la versione 1.0, e questo \u00e8 un motivo valido per non usarlo. Da quando l'ho provato per la prima volta, \u00e8 molto cambiato, ma allora ancora <code>terraform apply<\/code> \u0447\u0430\u0441\u0442\u043e \u043b\u043e\u043c\u0430\u043b\u0441\u044f \u043f\u043e\u0441\u043b\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0439 \u0438\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0447\u0435\u0440\u0435\u0437 \u043f\u0430\u0440\u0443 \u043b\u0435\u0442 \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u0438. \u042f \u0431\u044b \u0441\u043a\u0430\u0437\u0430\u043b, \u0447\u0442\u043e &#171;\u0441\u0435\u0439\u0447\u0430\u0441-\u0442\u043e \u0432\u0441\u0435 \u043f\u043e-\u0434\u0440\u0443\u0433\u043e\u043c\u0443&#187;, \u043d\u043e\u2026 \u0442\u0430\u043a \u0432\u0440\u043e\u0434\u0435 \u0432\u0441\u0435 \u0433\u043e\u0432\u043e\u0440\u044f\u0442, \u043d\u0435\u0442? \u0415\u0441\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f, \u043d\u0435\u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u044b\u0435 \u0441 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u043c\u0438 \u0432\u0435\u0440\u0441\u0438\u044f\u043c\u0438, \u0445\u043e\u0442\u044f \u043e\u043d\u0438 \u0443\u043c\u0435\u0441\u0442\u043d\u044b, \u0438 \u0434\u0430\u0436\u0435 \u0447\u0443\u0432\u0441\u0442\u0432\u043e \u0442\u0430\u043a\u043e\u0435, \u0447\u0442\u043e \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u0438 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0438 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u0442\u0435\u043f\u0435\u0440\u044c \u0447\u0442\u043e \u043d\u0430\u0434\u043e. \u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u043a\u0430\u043a \u0431\u0443\u0434\u0442\u043e \u043f\u0440\u0430\u0432\u0434\u0430 \u0441\u0442\u0430\u043b \u043b\u0443\u0447\u0448\u0435, \u043d\u043e\u2026 :-0<\/p>\n<p><\/p>\n<p>\u0421 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b, AWS \u0445\u043e\u0440\u043e\u0448\u043e \u043f\u043e\u0441\u0442\u0430\u0440\u0430\u043b\u0430\u0441\u044c, \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044f \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u044c \u0441 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u043c\u0438 \u0432\u0435\u0440\u0441\u0438\u044f\u043c\u0438. \u0412\u0441\u0435, \u043d\u0430\u0432\u0435\u0440\u043d\u043e\u0435, \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u0438\u0445 \u0441\u0435\u0440\u0432\u0438\u0441\u044b \u0447\u0430\u0441\u0442\u043e \u0445\u043e\u0440\u043e\u0448\u0435\u043d\u044c\u043a\u043e \u0442\u0435\u0441\u0442\u0438\u0440\u0443\u044e\u0442 \u0432\u043d\u0443\u0442\u0440\u0438 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u0438 \u043b\u0438\u0448\u044c \u043f\u043e\u0442\u043e\u043c, \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u0432, \u043f\u0443\u0431\u043b\u0438\u043a\u0443\u044e\u0442. \u0422\u0430\u043a \u0447\u0442\u043e &#171;\u0445\u043e\u0440\u043e\u0448\u043e \u043f\u043e\u0441\u0442\u0430\u0440\u0430\u043b\u0438\u0441\u044c&#187; \u044d\u0442\u043e \u0435\u0449\u0435 \u0441\u043b\u0430\u0431\u043e \u0441\u043a\u0430\u0437\u0430\u043d\u043e. \u041f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u044c \u0441 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u043c\u0438 \u0432\u0435\u0440\u0441\u0438\u044f\u043c\u0438 API \u0434\u043b\u044f \u0442\u0430\u043a\u043e\u0439 \u043c\u043d\u043e\u0433\u043e\u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043d\u043e\u0439 \u0438 \u0441\u043b\u043e\u0436\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u043a\u0430\u043a AWS, \u043d\u0435\u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e \u0442\u044f\u0436\u0435\u043b\u043e. \u041b\u044e\u0431\u043e\u0439, \u043a\u043e\u043c\u0443 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c \u043e\u0431\u0449\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 API, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435 \u0442\u0430\u043a \u0436\u0435 \u0448\u0438\u0440\u043e\u043a\u043e, \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c, \u043a\u0430\u043a \u0442\u0440\u0443\u0434\u043d\u043e \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0430 \u043f\u0440\u043e\u0442\u044f\u0436\u0435\u043d\u0438\u0438 \u0441\u0442\u043e\u043b\u044c\u043a\u0438\u0445 \u043b\u0435\u0442. \u0410 \u0432\u043e\u0442 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 CloudFormation \u043d\u0430 \u043c\u043e\u0435\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u043d\u0438 \u0440\u0430\u0437\u0443 \u0441 \u0433\u043e\u0434\u0430\u043c\u0438 \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u043e\u0441\u044c.<\/p>\n<p><\/p>\n<h3 id=\"znakomsya-noga-eto-pulya\">Ehi, piede\u2026 questa \u00e8 una pallottola<\/h3>\n<p><\/p>\n<p>Per quanto ne so, rimuovere risorsa <strong>esterna<\/strong> \u0441\u0442\u0435\u043a\u0430 CloudFormation \u0438\u0437 \u0441\u0432\u043e\u0435\u0433\u043e \u0441\u0442\u0435\u043a\u0430 CF \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e. \u041f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a \u0436\u0435 \u0434\u0435\u043b\u043e \u043e\u0431\u0441\u0442\u043e\u0438\u0442 \u0438 \u0441 Terraform. \u041e\u043d \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u0432 \u0441\u0432\u043e\u0439 \u0441\u0442\u0435\u043a. \u0424\u0443\u043d\u043a\u0446\u0438\u044f, \u043c\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u043f\u043e\u0442\u0440\u044f\u0441\u0430\u044e\u0449\u0430\u044f, \u043d\u043e \u0441 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0441\u0438\u043b\u043e\u0439 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u0438 \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u044c. \u0421\u0442\u043e\u0438\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u043d\u0435\u0441\u0442\u0438 \u0440\u0435\u0441\u0443\u0440\u0441 \u0432 \u0441\u0442\u0435\u043a \u0438, \u043f\u043e\u043a\u0430 \u0442\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0448\u044c \u0441\u043e \u0441\u0432\u043e\u0438\u043c \u0441\u0442\u0435\u043a\u043e\u043c, \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0438\u043b\u0438 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u0440\u0435\u0441\u0443\u0440\u0441 \u043d\u0435\u043b\u044c\u0437\u044f. \u041e\u0434\u043d\u0430\u0436\u0434\u044b \u044d\u0442\u043e \u0430\u0443\u043a\u043d\u0443\u043b\u043e\u0441\u044c. \u041a\u0430\u043a-\u0442\u043e \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 Twitch \u043a\u0442\u043e-\u0442\u043e, \u043d\u0435 \u0437\u0430\u043c\u044b\u0448\u043b\u044f\u044f \u043d\u0438\u0447\u0435\u0433\u043e \u0434\u0443\u0440\u043d\u043e\u0433\u043e, \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043b \u0447\u044c\u044e-\u0442\u043e \u0433\u0440\u0443\u043f\u043f\u0443 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 AWS \u0432 \u0441\u0432\u043e\u0439 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0441\u0442\u0435\u043a Terraform. \u0412\u0432\u0435\u043b \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u043c\u0430\u043d\u0434 \u0438\u2026 \u0433\u0440\u0443\u043f\u043f\u0430 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 (\u0432\u043c\u0435\u0441\u0442\u0435 \u0441\u043e \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u043c \u0442\u0440\u0430\u0444\u0438\u043a\u043e\u043c) \u0438\u0441\u0447\u0435\u0437\u043b\u0430.<\/p>\n<p><\/p>\n<h2 id=\"terraform-velikiy\">Terraform \u0412\u0435\u043b\u0438\u043a\u0438\u0439<\/h2>\n<p><\/p>\n<h3 id=\"vosstanovlenie-iz-nepolnyh-sostoyaniy\">\u0412\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0438\u0437 \u043d\u0435\u043f\u043e\u043b\u043d\u044b\u0445 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439<\/h3>\n<p><\/p>\n<p>\u0418\u043d\u043e\u0433\u0434\u0430 CloudFormation \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0432 \u0434\u0440\u0443\u0433\u043e\u0435. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u043e\u043d \u043f\u043e\u0441\u0442\u0430\u0440\u0430\u0435\u0442\u0441\u044f \u0432\u0435\u0440\u043d\u0443\u0442\u044c\u0441\u044f \u043a \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u043c\u0443. \u0416\u0430\u043b\u044c, \u044d\u0442\u043e \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0438\u043c\u043e. \u041e\u0442\u043b\u0430\u0436\u0438\u0432\u0430\u0442\u044c \u043f\u043e\u0442\u043e\u043c \u0442\u043e, \u0447\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c, \u0431\u044b\u0432\u0430\u0435\u0442 \u0441\u0442\u0440\u0430\u0448\u043d\u043e\u0432\u0430\u0442\u0435\u043d\u044c\u043a\u043e \u2014 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0437\u043d\u0430\u0435\u0448\u044c, \u043e\u0431\u0440\u0430\u0434\u0443\u0435\u0442\u0441\u044f \u043b\u0438 CloudFormation, \u0447\u0442\u043e \u0435\u0433\u043e \u0432\u0437\u043b\u0430\u043c\u044b\u0432\u0430\u044e\u0442 \u2014 \u043f\u0443\u0441\u0442\u044c \u0438 \u0434\u043b\u044f \u043f\u043e\u0447\u0438\u043d\u043a\u0438. \u0410 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u0438\u043b\u0438 \u043d\u0435\u0442 \u0432\u0435\u0440\u043d\u0443\u0442\u044c\u0441\u044f \u043a \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u043c\u0443 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044e, \u043e\u043d \u0442\u043e\u043b\u043a\u043e\u043c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c \u043d\u0435 \u0443\u043c\u0435\u0435\u0442 \u0438 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0447\u0430\u0441\u0430\u043c\u0438 \u0432\u0438\u0441\u0438\u0442 \u0432 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u0438 \u0447\u0443\u0434\u0430.<\/p>\n<p><\/p>\n<p>Terraform, al contrario, tende a riprendersi dopo transizioni fallite in modo pi\u00f9 elegante e offre un set di strumenti di debug avanzato.<\/p>\n<p><\/p>\n<h3 id=\"bolee-yasnye-izmeneniya-v-sostoyaniya-dokumenta\">Cambiamenti pi\u00f9 chiari nello stato del documento<\/h3>\n<p><\/p>\n<blockquote><p>&#171;\u041b\u0430\u0434\u043d\u043e, \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u0449\u0438\u043a \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438, \u0442\u044b \u043c\u0435\u043d\u044f\u0435\u0448\u044c\u0441\u044f. \u041d\u043e \u043a\u0430\u043a?&#187;<\/p>\n<p>\u2014\u043e\u0431\u0435\u0441\u043f\u043e\u043a\u043e\u0435\u043d\u043d\u044b\u0439 \u0438\u043d\u0436\u0435\u043d\u0435\u0440, \u0433\u043e\u0442\u043e\u0432\u044b\u0439 \u043d\u0430\u0436\u0430\u0442\u044c \u043a\u043d\u043e\u043f\u043a\u0443 &#171;\u043f\u0440\u0438\u043d\u044f\u0442\u044c&#187;.<\/p><\/blockquote>\n<p>A volte ho bisogno di fare alcune manovre con il bilanciatore di carico nello stack CloudFormation \u2014 ad esempio, aggiungere un numero di porta o modificare il gruppo di sicurezza. Le modifiche in CloudFormation sono poco visibili. Io, come un nervoso, controllo il file YAML almeno dieci volte per assicurarmi di non aver cancellato nulla di necessario e di non aver aggiunto nulla di superfluo.<\/p>\n<p><\/p>\n<p>In questo senso, Terraform \u00e8 molto pi\u00f9 trasparente. A volte \u00e8 persino troppo trasparente (leggi: fastidioso). Fortunatamente, l'ultima versione ha introdotto un miglioramento nella visualizzazione delle modifiche \u2014 ora \u00e8 chiaro cosa viene cambiato.<\/p>\n<p><\/p>\n<h3 id=\"gibkost\">Flessibilit\u00e0<\/h3>\n<p><\/p>\n<blockquote><p>Scrivi software al contrario.<\/p><\/blockquote>\n<p>\u0413\u043e\u0432\u043e\u0440\u044f \u043f\u0440\u044f\u043c\u043e, \u0441\u0430\u043c\u0430\u044f \u0432\u0430\u0436\u043d\u0430\u044f \u043e\u0442\u043b\u0438\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0447\u0435\u0440\u0442\u0430 \u0434\u043e\u043b\u0433\u043e\u0436\u0438\u0432\u0443\u0449\u0435\u0433\u043e \u041f\u041e \u2014 \u044d\u0442\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c \u0430\u0434\u0430\u043f\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043a \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f\u043c. \u041b\u044e\u0431\u043e\u0435 \u041f\u041e \u043f\u0438\u0448\u0438\u0442\u0435 \u043e\u0442 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0433\u043e. \u042f \u0432\u043e\u0442 \u0447\u0430\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u043f\u0440\u043e\u043a\u0430\u043b\u044b\u0432\u0430\u043b\u0441\u044f \u043d\u0430 \u0442\u043e\u043c, \u0447\u0442\u043e \u0431\u0440\u0430\u043b &#171;\u043f\u0440\u043e\u0441\u0442\u0435\u043d\u044c\u043a\u0438\u0439&#187; \u0441\u0435\u0440\u0432\u0438\u0441, \u0430 \u043f\u043e\u0442\u043e\u043c \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u043b\u0441\u044f \u0432\u043f\u0438\u0445\u0438\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u0432 \u0435\u0434\u0438\u043d\u044b\u0439 \u0441\u0442\u0435\u043a CloudFormation \u0438\u043b\u0438 Terraform. \u0418 \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435, \u0441\u043f\u0443\u0441\u0442\u044f \u043c\u0435\u0441\u044f\u0446\u044b \u0432\u0441\u043a\u0440\u044b\u0432\u0430\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u044f \u0432\u0441\u0435 \u043f\u043e\u043d\u044f\u043b \u043d\u0435 \u0442\u0430\u043a, \u0438 \u0441\u0435\u0440\u0432\u0438\u0441-\u0442\u043e \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0439! \u0418 \u0432\u043e\u0442 \u043c\u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u043d\u0435\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0440\u0430\u0437\u0431\u0438\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0441\u0442\u0435\u043a \u043d\u0430 \u043c\u0430\u043b\u044b\u0435 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0435. \u041a\u043e\u0433\u0434\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0448\u044c \u0441 CloudFormation, \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u043e\u0441\u0441\u043e\u0437\u0434\u0430\u0432 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0441\u0442\u0435\u043a, \u0430 \u044d\u0442\u043e\u0433\u043e \u044f, \u0441\u043e \u0441\u0432\u043e\u0438\u043c\u0438 \u0411\u0414, \u043d\u0435 \u0434\u0435\u043b\u0430\u044e. Terraform \u0436\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u043b \u043f\u0440\u0435\u043f\u0430\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u0435\u043a \u0438 \u0440\u0430\u0441\u0447\u043b\u0435\u043d\u0438\u0442\u044c \u0435\u0433\u043e \u043d\u0430 \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u043d\u044f\u0442\u043d\u044b\u0435 \u043c\u0435\u043d\u044c\u0448\u0438\u0435 \u0447\u0430\u0441\u0442\u0438.<\/p>\n<p><\/p>\n<h3 id=\"moduli-v-git\">Moduli in git<\/h3>\n<p><\/p>\n<p>Condividere il codice Terraform tra molteplici stack \u00e8 molto pi\u00f9 semplice rispetto al codice CloudFormation. Con Terraform \u00e8 possibile mettere il codice in un repository git e accedervi utilizzando il controllo versione semantico. Chiunque abbia accesso a quel repository pu\u00f2 riutilizzare il codice condiviso. L'equivalente in CloudFormation \u00e8 S3, ma non ha gli stessi vantaggi e non c'\u00e8 alcun motivo per cui dovremmo rinunciare al git in favore di S3.<\/p>\n<p><\/p>\n<p>L'organizzazione \u00e8 cresciuta e la capacit\u00e0 di condividere stack comuni ha raggiunto un livello critico. Con Terraform tutto questo risulta facile e naturale, mentre CloudFormation richiede di saltare attraverso anelli prima che si possa avere qualcosa di simile.<\/p>\n<p><\/p>\n<h3 id=\"operations-as-code\">Operazioni come codice<\/h3>\n<p><\/p>\n<blockquote><p>&#171;\u0417\u0430\u0441\u043a\u0440\u0438\u043f\u0442\u0443\u0435\u043c \u0438 \u043b\u0430\u0434\u043d\u043e&#187;.<\/p>\n<p>\u2014 un ingegnere tre anni prima di inventare il 'ciclo' Terraform.<\/p><\/blockquote>\n<p>Quando si tratta di sviluppo software, Go o un programma in Java non sono semplicemente codice.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Sono passato da Terraform a CloudFormation \u2014 e me ne sono pentito.\" src=\"\/wp-content\/uploads\/2019\/11\/a5c61fd318b9b5aa62ebb69e38ca1b0e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<em>Codice come codice<\/em><\/p>\n<p><\/p>\n<p>C'\u00e8 anche l'infrastruttura su cui funziona.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Sono passato da Terraform a CloudFormation \u2014 e me ne sono pentito.\" src=\"\/wp-content\/uploads\/2019\/11\/301c0323baa18563f05503e701af069b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<em>Infrastructure as Code<\/em><\/p>\n<p><\/p>\n<p>Ma da dove viene? Come si monitora? Dove risiede il tuo codice? Serve l'autorizzazione degli sviluppatori per l'accesso?<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Sono passato da Terraform a CloudFormation \u2014 e me ne sono pentito.\" src=\"\/wp-content\/uploads\/2019\/11\/5cb0b6f720682b7bb6d5f485287b618b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<em>Operazioni come codice<\/em><\/p>\n<p><\/p>\n<blockquote><p>Essere uno sviluppatore software non significa solo scrivere codice.<\/p><\/blockquote>\n<p>Non \u00e8 solo AWS: sicuramente stai usando servizi di altri fornitori. SignalFx, PagerDuty o Github. Forse hai un server Jenkins interno per CI\/CD o un pannello di controllo Grafana interno per il monitoraggio. L'Infra as Code viene scelto per vari motivi, e ciascuno di essi \u00e8 altrettanto importante per tutto ci\u00f2 che riguarda il software.<\/p>\n<p><\/p>\n<p>\u041a\u043e\u0433\u0434\u0430 \u044f \u0440\u0430\u0431\u043e\u0442\u0430\u043b \u0432 Twitch, \u043c\u044b \u0443\u0441\u043a\u043e\u0440\u044f\u043b\u0438 \u0441\u0435\u0440\u0432\u0438\u0441\u044b \u0432\u043d\u0443\u0442\u0440\u0438 \u0441\u043c\u0435\u0448\u0430\u043d\u043d\u044b\u0445 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c \u0438 \u0441\u0438\u0441\u0442\u0435\u043c AWS Amazon&#8217;\u0430. \u041c\u044b \u0448\u0442\u0430\u043c\u043f\u043e\u0432\u0430\u043b\u0438 \u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u043b\u0438 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432, \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u044f \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0438\u0437\u0434\u0435\u0440\u0436\u043a\u0438. \u041e\u0431\u0441\u0443\u0436\u0434\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u043b\u0438 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0432 \u0442\u0430\u043a\u043e\u043c \u043a\u043b\u044e\u0447\u0435:<\/p>\n<p><\/p>\n<ul>\n<li><strong>Io<\/strong>: Cavolo, troppe operazioni per far partire un solo microservizio. Dovr\u00f2 usare questa cosa per creare un account AWS (stiamo puntando a 2 account su <strong>microservizio<\/strong>), \u043f\u043e\u0442\u043e\u043c \u044d\u0442\u0443 \u2014 \u0434\u043b\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043e\u043f\u043e\u0432\u0435\u0449\u0435\u043d\u0438\u0439, \u0435\u0449\u0435 \u044d\u0442\u0443 \u2014 \u0434\u043b\u044f \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f \u043a\u043e\u0434\u0430, \u0438 \u044d\u0442\u0443 \u2014 \u0434\u043b\u044f \u0441\u043f\u0438\u0441\u043a\u0430 \u0430\u0434\u0440\u0435\u0441\u043e\u0432 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u0439 \u043f\u043e\u0447\u0442\u044b, \u043d\u0443 \u0438 \u0432\u043e\u0442 \u044d\u0442\u0443&#8230;<\/li>\n<li><strong>Lead<\/strong>: Scriptiamo e basta.<\/li>\n<li><strong>Io<\/strong>: \u041b\u0430\u0434\u044b, \u043d\u043e \u0441\u0430\u043c \u0441\u043a\u0440\u0438\u043f\u0442 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u0441\u044f. \u041d\u0443\u0436\u0435\u043d \u0431\u0443\u0434\u0435\u0442 \u0441\u043f\u043e\u0441\u043e\u0431, \u043a\u0430\u043a \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u0447\u0442\u043e \u0432\u0441\u0435 \u044d\u0442\u0438 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0435 \u0448\u0442\u0443\u043a\u043e\u0432\u0438\u043d\u044b amazon&#8217;\u0430 \u0438\u043c\u0435\u044e\u0442 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435.<\/li>\n<li><strong>Lead<\/strong>: Non suona male. E per questo scriviamo uno script.<\/li>\n<li><strong>Io<\/strong>: Ottimo! E sicuramente lo script avr\u00e0 bisogno di parametri. Li accetter\u00e0?<\/li>\n<li><strong>Lead<\/strong>: Certo che s\u00ec, non ci sono problemi!<\/li>\n<li><strong>Io<\/strong>: Il processo potrebbe cambiare, si perder\u00e0 la retrocompatibilit\u00e0. Ci vorr\u00e0 qualche forma di controllo semantico delle versioni.<\/li>\n<li><strong>Lead<\/strong>: Ottima idea!<\/li>\n<li><strong>Io<\/strong>: Gli strumenti possono essere cambiati manualmente, all'interno dell'interfaccia utente. Avremo bisogno di un modo per controllare e correggere questo.<\/li>\n<\/ul>\n<p><\/p>\n<p><em>&#8230;3 \u0433\u043e\u0434\u0430 \u0441\u043f\u0443\u0441\u0442\u044f:<\/em><\/p>\n<p><\/p>\n<ul>\n<li><strong>Lead<\/strong>: E abbiamo finito per usare terraform.<\/li>\n<\/ul>\n<p><\/p>\n<p>La morale della favola \u00e8 che, anche se sei <strong>\u043f\u043e \u0443\u0448\u0438 \u0432\u043e \u0432\u0441\u0435\u043c amazon&#8217;\u043e\u0432\u0441\u043a\u043e\u043c<\/strong>stai comunque utilizzando qualcosa che non proviene da AWS, e questi servizi hanno uno stato che utilizza il linguaggio per la configurazione, per sincronizzare quello stato.<\/p>\n<p><\/p>\n<h3 id=\"cloudformation-lambda-vs-git-moduli-terraform\">CloudFormation lambda vs moduli git terraform<\/h3>\n<p><\/p>\n<p>lambda \u00e8 la soluzione CloudFormation per la logica degli utenti. Con lambda puoi <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.aws.amazon.com\/AWSCloudFormation\/latest\/UserGuide\/macros-example.html\">creare macro<\/a><\/noindex> o <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.aws.amazon.com\/AWSCloudFormation\/latest\/UserGuide\/walkthrough-custom-resources-lambda-lookup-amiids.html\">risorsa personalizzata<\/a><\/noindex>. \u0422\u0430\u043a\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0435\u0442 \u0432 \u0441\u0435\u043c\u0430\u043d\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0435 \u0432\u0435\u0440\u0441\u0438\u0439 \u043c\u043e\u0434\u0443\u043b\u0435\u0439 git \u0443 Terraform. \u0414\u043b\u044f \u043c\u0435\u043d\u044f \u0441\u0430\u043c\u043e\u0439 \u043d\u0430\u0441\u0443\u0449\u043d\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043e\u0439 \u0441\u0442\u0430\u043b\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u044f\u043c\u0438 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u044d\u0442\u0438\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0445 lambda (\u0430 \u044d\u0442\u043e \u0434\u0435\u0441\u044f\u0442\u043a\u0438 \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u043e\u0432 AWS). \u0414\u0440\u0443\u0433\u043e\u0439 \u043f\u043e \u0432\u0430\u0436\u043d\u043e\u0441\u0442\u0438 \u0441\u0442\u0430\u043b\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0442\u0438\u043f\u0430 &#171;\u0447\u0442\u043e \u0431\u044b\u043b\u043e \u0440\u0430\u043d\u044c\u0448\u0435 \u2014 \u043a\u0443\u0440\u0438\u0446\u0430 \u0438\u043b\u0438 \u044f\u0439\u0446\u043e?&#187;: \u043e\u043d\u0430 \u0431\u044b\u043b\u0430 \u0441\u0432\u044f\u0437\u0430\u043d\u0430 \u0441 \u043a\u043e\u0434\u043e\u043c lambda. \u0421\u0430\u043c\u0430 \u044d\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u2014 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0438 \u043a\u043e\u0434, \u0438 \u043e\u043d\u0430 \u0441\u0430\u043c\u0430 \u043d\u0443\u0436\u0434\u0430\u0435\u0442\u0441\u044f \u0432 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0435 \u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f\u0445. \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u043c \u0433\u0432\u043e\u0437\u0434\u0435\u043c \u0432 \u0433\u0440\u043e\u0431 \u0441\u0442\u0430\u043b\u0430 \u0442\u0440\u0443\u0434\u043d\u043e\u0441\u0442\u044c \u0432 \u0441\u0435\u043c\u0430\u043d\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043a\u043e\u0434\u0430 lambda; \u0435\u0449\u0435 \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441\u0442\u0435\u043a\u0430 \u0431\u0435\u0437 \u043f\u0440\u044f\u043c\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u043d\u0435 \u043c\u0435\u043d\u044f\u043b\u0438\u0441\u044c \u043c\u0435\u0436\u0434\u0443 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043c\u0438.<\/p>\n<p><\/p>\n<p>Ricordo che un giorno ho voluto creare un deploy canarino per l'ambiente Elastic Beanstalk con un bilanciatore di carico classico. La soluzione pi\u00f9 semplice sarebbe stata fare un secondo deployment per EB accanto all'ambiente di produzione, facendo un ulteriore passo: unire il gruppo di deploy canarino scalabile automaticamente con il LB del deployment nell'ambiente di produzione. E dato che Terraform utilizza <noindex><a rel=\"nofollow\" href=\"https:\/\/www.terraform.io\/docs\/providers\/aws\/r\/elastic_beanstalk_environment.html#autoscaling_groups\">ASG bean talk come output<\/a><\/noindex>, questo richiederebbe 4 righe di codice extra in Terraform. Quando ho chiesto se esisteva una soluzione comparabile in CloudFormation, mi hanno indicato un intero repository su git con un pipeline di deploy e altro: tutto ci\u00f2 per quanto avremmo potuto fare con 4 sfortunate righe di codice Terraform.<\/p>\n<p><\/p>\n<h3 id=\"on-luchshe-obnaruzhivaet-dreyf\">Rileva meglio il drift<\/h3>\n<p><\/p>\n<blockquote><p>Assicurati che la realt\u00e0 corrisponda alle aspettative.<\/p><\/blockquote>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/aws.amazon.com\/blogs\/aws\/new-cloudformation-drift-detection\/\">Rilevamento del drift<\/a><\/noindex> \u2014 \u00e8 una funzione molto potente delle operations as code, perch\u00e9 aiuta a garantire che la realt\u00e0 corrisponda alle aspettative. \u00c8 disponibile sia con CloudFormation che con Terraform. Ma man mano che lo stack cresce, la ricerca del drift in CloudFormation restituiva sempre pi\u00f9 falsi positivi.<\/p>\n<p><\/p>\n<p>Con Terraform hai hook del ciclo di vita molto pi\u00f9 avanzati per la rilevazione del drift. Ad esempio, introduci il comando <noindex><a rel=\"nofollow\" href=\"https:\/\/www.terraform.io\/docs\/configuration\/resources.html#ignore_changes\">ignore_changes<\/a><\/noindex> nel caso in cui si voglia ignorare le modifiche nella definizione di un'attivit\u00e0 specifica, senza ignorare le modifiche a tutto il deployment di ECS.<\/p>\n<p><\/p>\n<h2 id=\"cdk-i-buduschee-cloudformation\">CDK e il futuro di CloudFormation<\/h2>\n<p><\/p>\n<p>CloudFormation \u00e8 difficile da gestire su larga scala e tra infrastrutture diverse. Molti di questi problemi sono riconosciuti, e lo strumento necessita di elementi come <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.aws.amazon.com\/en_pv\/cdk\/latest\/guide\/home.html\">aws-cdk<\/a><\/noindex>, una struttura per definire l'infrastruttura cloud nel codice e gestirla tramite AWS CloudFormation. Sar\u00e0 interessante vedere cosa riserva il futuro per aws-cdk, ma avr\u00e0 difficolt\u00e0 a competere con i vantaggi di Terraform; saranno necessarie trasformazioni globali per rendere CloudFormation competitivo.<\/p>\n<p><\/p>\n<h3 id=\"chtoby-terraform-ne-razocharoval\">Affinch\u00e9 Terraform non deluda<\/h3>\n<p><\/p>\n<blockquote><p>\u042d\u0442\u043e \u0436\u0435 &#171;\u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043a\u0430\u043a \u041a\u041e\u0414&#187;, \u0430 \u043d\u0435 &#171;\u043a\u0430\u043a \u0442\u0435\u043a\u0441\u0442&#187;.<\/p><\/blockquote>\n<p>La mia prima impressione di Terraform \u00e8 stata piuttosto negativa. Credo semplicemente di non aver capito l'approccio. Quasi tutti gli ingegneri inizialmente lo percepiscono involontariamente come un formato testuale che deve essere trasformato nell'infrastruttura desiderata. NON \u00c8 COS\u00cc.<\/p>\n<p><\/p>\n<h3 id=\"propisnye-istiny-horoshey-razrabotki-po-otnosyatsya-i-k-terraform\">Le verit\u00e0 fondamentali della buona sviluppo software si applicano anche a Terraform<\/h3>\n<p><\/p>\n<p>Ho notato che molte pratiche adottate per scrivere codice di qualit\u00e0 vengono ignorate in Terraform. Hai studiato per anni per diventare un buon programmatore. Non rinunciare a quest'esperienza solo perch\u00e9 stai lavorando con Terraform. Le verit\u00e0 fondamentali di una buona sviluppo software si applicano anche a Terraform.<\/p>\n<p><\/p>\n<h3 id=\"kak-uzh-kod-i-ne-zadokumentirovat\">Come si pu\u00f2 scrivere codice senza documentazione?<\/h3>\n<p><\/p>\n<p>Ho visto enormi stack di Terraform completamente privi di documentazione. Come si pu\u00f2 scrivere codice per pagine intere senza alcuna documentazione? Aggiungi documentazione che spieghi il tuo <strong>codice<\/strong> Terraform (\u0443\u0434\u0430\u0440\u0435\u043d\u0438\u0435 \u0437\u0434\u0435\u0441\u044c \u043d\u0430 \u0441\u043b\u043e\u0432\u043e &#171;\u043a\u043e\u0434&#187;), \u043f\u043e\u0447\u0435\u043c\u0443 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437\u0434\u0435\u043b \u0442\u0430\u043a \u0432\u0430\u0436\u0435\u043d, \u0438 \u0447\u0442\u043e \u0432\u044b \u0434\u0435\u043b\u0430\u0435\u0442\u0435.<\/p>\n<p><\/p>\n<h3 id=\"kak-mozhno-razvorachivat-servisy-kotorye-nekogda-byli-odnoy-bolshoy-funkciey-main\">Come si possono implementare servizi che una volta erano tutte in un'unica funzione main()?<\/h3>\n<p><\/p>\n<p>Ho trovato stack di Terraform molto complessi presentati come un unico modulo. Perch\u00e9 non implementiamo software in questo modo? Perch\u00e9 suddividiamo grandi funzioni in parti pi\u00f9 piccole? Le stesse risposte valgono anche per Terraform. Se un modulo \u00e8 troppo grande, \u00e8 necessario suddividerlo in moduli pi\u00f9 piccoli.<\/p>\n<p><\/p>\n<h3 id=\"razve-vasha-kompaniya-ne-polzuetsya-bibliotekami\">La tua azienda non utilizza librerie?<\/h3>\n<p><\/p>\n<p>\u042f \u0432\u0438\u0434\u0435\u043b, \u043a\u0430\u043a \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u044b, \u0440\u0430\u0441\u043a\u0440\u0443\u0447\u0438\u0432\u0430\u044f \u043d\u043e\u0432\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 Terraform, \u0442\u0443\u043f\u043e \u043a\u043e\u043f\u0438-\u043f\u0435\u0439\u0441\u0442\u0438\u043b\u0438 \u0433\u0440\u043e\u043c\u0430\u0434\u043d\u044b\u0435 \u043a\u0443\u0441\u043a\u0438 \u0438\u0437 \u0434\u0440\u0443\u0433\u0438\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u0432 \u0441\u0432\u043e\u0438 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435, \u0430 \u043f\u043e\u0442\u043e\u043c \u043a\u043e\u0432\u044b\u0440\u044f\u043b\u0438 \u0438\u0445, \u043f\u043e\u043a\u0430 \u043d\u0435 \u043d\u0430\u0447\u0438\u043d\u0430\u043b\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c. \u0412\u043e\u0442 \u0432\u044b \u0443 \u0441\u0435\u0431\u044f \u0432 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u0441\u0442\u0430\u043b\u0438 \u0431\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0442\u0430\u043a \u0441 &#171;\u0431\u043e\u0435\u0432\u044b\u043c&#187; \u043a\u043e\u0434\u043e\u043c? \u041c\u044b \u0436\u0435 \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0442\u0430\u043a \u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430\u043c\u0438. \u0414\u0430, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=PAAkCSZUG1c&amp;t=9m28s\">non tutto deve essere una libreria,<\/a><\/noindex> ma dove saremmo senza librerie comuni in linea di principio?!<\/p>\n<p><\/p>\n<h3 id=\"razve-vy-ne-polzuetes-pep8-ili-gofmt\">Non usate PEP8 o gofmt?<\/h3>\n<p><\/p>\n<p>Nella maggior parte dei linguaggi esiste uno schema di formattazione standard accettato. In Python \u00e8 PEP8. In Go \u2014 gofmt. Terraform ha il suo: <code>terraform fmt<\/code>. Usatelo pure! <\/p>\n<p><\/p>\n<h3 id=\"vy-stanete-polzovatsya-react-ne-znaya-javascript\">Iniziereste a usare React senza conoscere JavaScript?<\/h3>\n<p><\/p>\n<p>I moduli Terraform possono semplificare alcune parti dell'infrastruttura complessa che state creando, ma ci\u00f2 non significa che non dovete capirci nulla. Volete usare Terraform correttamente senza comprendere le risorse? Siete destinati a fallire: il tempo passer\u00e0 e non vi abituerete mai a Terraform.<\/p>\n<p><\/p>\n<h3 id=\"vy-kodite-singltonami-ili-vnedryaya-zavisimosti\">Scrivete singleton o state iniettando dipendenze?<\/h3>\n<p><\/p>\n<p>L'iniezione delle dipendenze \u00e8 una best practice riconosciuta nello sviluppo software, particolarmente apprezzata nei singleton. Come pu\u00f2 tornare utile in Terraform? Ho incontrato moduli Terraform che dipendono dallo stato remoto. Invece di scrivere moduli che estraggono dallo stato remoto, crea un modulo che accetta parametri. Poi passa questi parametri al modulo.<\/p>\n<p><\/p>\n<h3 id=\"vashi-biblioteki-delayut-desyat-veschey-horosho-ili-odnu---otlichno\">Le tue librerie fanno dieci cose bene o una \u2013 eccellente?<\/h3>\n<p><\/p>\n<p>Le librerie funzionano meglio quando si concentrano su un compito che eseguono alla perfezione. Invece di scrivere grandi moduli Terraform che cercano di fare tutto in una volta, compila parti che svolgono bene una singola funzione. E poi combinile come necessario.<\/p>\n<p><\/p>\n<h3 id=\"kak-vy-proizvodite-izmeneniya-v-bibliotekah-bez-obratnoy-sovmestimosti\">Come apporti modifiche alle librerie senza compromettere la retrocompatibilit\u00e0?<\/h3>\n<p><\/p>\n<p>Il modulo principale di Terraform, cos\u00ec come una libreria comune, deve comunicare agli utenti le modifiche senza retrocompatibilit\u00e0. Quando si verificano tali cambiamenti nelle librerie, \u00e8 fastidioso, e lo stesso vale quando vengono apportate modifiche senza retrocompatibilit\u00e0 nei moduli di Terraform. Si raccomanda di utilizzare git tags e semver quando si usano i moduli di Terraform.<\/p>\n<p><\/p>\n<h3 id=\"proizvodstvennyy-servis-zapuschen-u-vas-na-noutbuke-ili-v-datacentre\">Il servizio di produzione \u00e8 attivo sul tuo laptop o nel data center?<\/h3>\n<p><\/p>\n<p>Hashicorp ha strumenti come <noindex><a rel=\"nofollow\" href=\"https:\/\/www.terraform.io\/docs\/cloud\/index.html\">terraform cloud<\/a><\/noindex> per eseguire il tuo terraform. Questi servizi centralizzati semplificano la gestione, l'audit e l'approvazione delle modifiche a terraform.<\/p>\n<p><\/p>\n<h3 id=\"razve-vy-ne-pishete-testy\">Non stai scrivendo test?<\/h3>\n<p><\/p>\n<p>\u0418\u043d\u0436\u0435\u043d\u0435\u0440\u044b \u043f\u0440\u0438\u0437\u043d\u0430\u044e\u0442, \u0447\u0442\u043e \u043a\u043e\u0434 \u043d\u0443\u0436\u043d\u043e \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u043d\u043e \u0441\u0430\u043c\u0438 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0447\u0430\u0441\u0442\u043e \u0437\u0430\u0431\u0438\u0432\u0430\u044e\u0442 \u043d\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438, \u0440\u0430\u0431\u043e\u0442\u0430\u044f \u0441 Terraform. \u0414\u043b\u044f \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u044d\u0442\u043e \u0447\u0440\u0435\u0432\u0430\u0442\u043e \u043a\u043e\u0432\u0430\u0440\u043d\u044b\u043c\u0438 \u043c\u043e\u043c\u0435\u043d\u0442\u0430\u043c\u0438. \u042f \u0441\u043e\u0432\u0435\u0442\u0443\u044e &#171;\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c&#187; \u0438\u043b\u0438 &#171;\u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u0440\u044b&#187; \u0441\u0442\u0435\u043a\u043e\u0432 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043c\u043e\u0434\u0443\u043b\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u0437\u0430\u0434\u0435\u043f\u043b\u043e\u0438\u0442\u044c \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0432\u043e \u0432\u0440\u0435\u043c\u044f CI\/CD.<\/p>\n<p><\/p>\n<h3 id=\"terraform-i-mikroservisy\">Terraform e microservizi<\/h3>\n<p><\/p>\n<blockquote><p>La vita e la morte delle aziende di microservizi dipendono dalla velocit\u00e0, dagli aggiornamenti e dalla creazione di nuovi stack di lavoro microservizi.<\/p><\/blockquote>\n<p>Il principale aspetto negativo associato alle architetture a microservizi, dal quale non si pu\u00f2 sfuggire, riguarda il lavoro e non il codice. Se si considera Terraform solo come uno strumento per automatizzare l'aspetto infrastrutturale delle architetture a microservizi, ci si priva dei veri vantaggi di questo sistema. Ora \u00e8 gi\u00e0 <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=HcmPi7-IVQo\">tutto \u2014 come codice<\/a><\/noindex>.<\/p>\n<p>Fonte: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/southbridge\/blog\/474546\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0432 \u0432\u0438\u0434\u0435 \u043a\u043e\u0434\u0430 \u0432 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u043c\u043e\u043c \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u0435 \u2014 \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u043b\u0443\u0447\u0448\u0430\u044f \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0430 \u0434\u043b\u044f \u0441\u0438\u0441\u0442\u0435\u043c, \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u043c\u044b\u0448\u0435\u0432\u043e\u0437\u0438\u0442\u044c. \u0417\u0430 \u044d\u0442\u043e\u0439 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u043e\u0439 \u0437\u0430\u043a\u0440\u0435\u043f\u0438\u043b\u043e\u0441\u044c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u2014 Infrastructure as Code, \u0438 \u043f\u043e\u043a\u0430 \u0447\u0442\u043e \u0434\u043b\u044f \u0435\u0435 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u0435\u043d\u0438\u044f, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0432 AWS, \u0435\u0441\u0442\u044c \u0434\u0432\u0430 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430: Terraform \u0438 CloudFormation. \u0421\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u044e \u043e\u043f\u044b\u0442 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 Terraform \u0438 CloudFormation \u0414\u043e \u043f\u0440\u0438\u0445\u043e\u0434\u0430 \u0432 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-52367","post","type-post","status-publish","format-standard","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0432 \u0432\u0438\u0434\u0435 \u043a\u043e\u0434\u0430 \u0432 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u043c\u043e\u043c \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u0435 \u2014 \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u043b\u0443\u0447\u0448\u0430\u044f \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0430 \u0434\u043b\u044f \u0441\u0438\u0441\u0442\u0435\u043c, \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u043c\u044b\u0448\u0435\u0432\u043e\u0437\u0438\u0442\u044c. \u0417\u0430 \u044d\u0442\u043e\u0439 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u043e\u0439 \u0437\u0430\u043a\u0440\u0435\u043f\u0438\u043b\u043e\u0441\u044c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u2014 Infrastructure as Code, \u0438 \u043f\u043e\u043a\u0430 \u0447\u0442\u043e \u0434\u043b\u044f \u0435\u0435 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u0435\u043d\u0438\u044f, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0432 AWS, \u0435\u0441\u0442\u044c \u0434\u0432\u0430 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430: Terraform \u0438 CloudFormation. \u0421\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u044e \u043e\u043f\u044b\u0442 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 Terraform \u0438 CloudFormation \u0414\u043e \u043f\u0440\u0438\u0445\u043e\u0434\u0430 \u0432\" \/>\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\/it\/blog\/administrirovanie\/pereshel-s-terraform-na-cloudformation-i-pozhalel\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"it_IT\" \/>\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\u0435\u0440\u0435\u0448\u0435\u043b \u0441 Terraform \u043d\u0430 CloudFormation \u2014 \u0438 \u043f\u043e\u0436\u0430\u043b\u0435\u043b | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0432 \u0432\u0438\u0434\u0435 \u043a\u043e\u0434\u0430 \u0432 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u043c\u043e\u043c \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u0435 \u2014 \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u043b\u0443\u0447\u0448\u0430\u044f \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0430 \u0434\u043b\u044f \u0441\u0438\u0441\u0442\u0435\u043c, \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u043c\u044b\u0448\u0435\u0432\u043e\u0437\u0438\u0442\u044c. \u0417\u0430 \u044d\u0442\u043e\u0439 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u043e\u0439 \u0437\u0430\u043a\u0440\u0435\u043f\u0438\u043b\u043e\u0441\u044c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u2014 Infrastructure as Code, \u0438 \u043f\u043e\u043a\u0430 \u0447\u0442\u043e \u0434\u043b\u044f \u0435\u0435 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u0435\u043d\u0438\u044f, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0432 AWS, \u0435\u0441\u0442\u044c \u0434\u0432\u0430 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430: Terraform \u0438 CloudFormation. \u0421\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u044e \u043e\u043f\u044b\u0442 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 Terraform \u0438 CloudFormation \u0414\u043e \u043f\u0440\u0438\u0445\u043e\u0434\u0430 \u0432\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/pereshel-s-terraform-na-cloudformation-i-pozhalel\" \/>\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=\"2019-11-06T21:00:00+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-02-18T11:00:04+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\udd47Sono passato da Terraform a CloudFormation \u2014 e me ne sono pentito | ProHoster","description":"Rappresentare l'infrastruttura come codice in un formato testuale ripetibile \u00e8 una pratica migliore semplice per i sistemi, da cui non si pu\u00f2 prescindere. Questa pratica \u00e8 conosciuta come Infrastructure as Code, e per implementarla, in particolare su AWS, ci sono due strumenti popolari: Terraform e CloudFormation. Confronto l'esperienza di lavoro con Terraform e CloudFormation. Prima di arrivare a","canonical_url":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/pereshel-s-terraform-na-cloudformation-i-pozhalel","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"it_IT","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\u0435\u0440\u0435\u0448\u0435\u043b \u0441 Terraform \u043d\u0430 CloudFormation \u2014 \u0438 \u043f\u043e\u0436\u0430\u043b\u0435\u043b | ProHoster","og:description":"\u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0432 \u0432\u0438\u0434\u0435 \u043a\u043e\u0434\u0430 \u0432 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u043c\u043e\u043c \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u0435 \u2014 \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u043b\u0443\u0447\u0448\u0430\u044f \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0430 \u0434\u043b\u044f \u0441\u0438\u0441\u0442\u0435\u043c, \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u043c\u044b\u0448\u0435\u0432\u043e\u0437\u0438\u0442\u044c. \u0417\u0430 \u044d\u0442\u043e\u0439 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u043e\u0439 \u0437\u0430\u043a\u0440\u0435\u043f\u0438\u043b\u043e\u0441\u044c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u2014 Infrastructure as Code, \u0438 \u043f\u043e\u043a\u0430 \u0447\u0442\u043e \u0434\u043b\u044f \u0435\u0435 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u0435\u043d\u0438\u044f, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0432 AWS, \u0435\u0441\u0442\u044c \u0434\u0432\u0430 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430: Terraform \u0438 CloudFormation. \u0421\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u044e \u043e\u043f\u044b\u0442 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 Terraform \u0438 CloudFormation \u0414\u043e \u043f\u0440\u0438\u0445\u043e\u0434\u0430 \u0432","og:url":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/pereshel-s-terraform-na-cloudformation-i-pozhalel","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":"2019-11-06T21:00:00+00:00","article:modified_time":"2020-02-18T11:00:04+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"52367","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":"2026-01-24 03:23:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 20:44:44","updated":"2026-01-24 03:23:19"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/52367","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/comments?post=52367"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/52367\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media?parent=52367"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/categories?post=52367"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/tags?post=52367"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}