{"id":37586,"date":"2019-10-31T22:18:27","date_gmt":"2019-10-31T19:18:27","guid":{"rendered":"https:\/\/prohoster.info\/blog\/infrastructure-as-code-pervoe-znakomstvo\/"},"modified":"2019-10-31T22:18:27","modified_gmt":"2019-10-31T19:18:27","slug":"infrastructure-as-code-pervoe-znakomstvo","status":"publish","type":"post","link":"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/infrastructure-as-code-pervoe-znakomstvo","title":{"rendered":"Infrastructure as code: an introduction","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Our company is currently undergoing the onboarding process for the SRE team. I joined this effort from the development side. Throughout this process, I have gained thoughts and insights that I want to share with other developers. In this reflective article, I discuss what is happening, how it is happening, and how everyone can live with it moving forward. <\/p>\n<p><img decoding=\"async\" alt=\"Infrastructure as code: an introduction\" src=\"\/wp-content\/uploads\/2019\/08\/d154a2fbbd0dd846c763db178f02702e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<blockquote><p><b>Continuation of a series of articles inspired by presentations at our internal event <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/dodopizzaio\/blog\/462033\/\">DevForum<\/a><\/noindex><\/b>: <\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/dodopizzaio\/blog\/463469\/\">1. Schr\u00f6dinger's cat without a box: the consensus problem in distributed systems.<\/a><\/noindex><br \/>\n2. Infrastructure as code. (You are here)<br \/>\n3. Generating TypeScript contracts from C# models. (In progress...)<br \/>\n4. Introduction to the Raft consensus algorithm. (In progress...)<br \/>\n\u2026<\/p><\/blockquote>\n<p>\nWe decided to form an SRE team, embodying the ideas of <noindex><a rel=\"nofollow\" href=\"https:\/\/landing.google.com\/sre\/books\/\">google sre<\/a><\/noindex>. We recruited programmers from our own developers and sent them for training for several months. <\/p>\n<p>The team faced the following learning tasks:<\/p>\n<ul>\n<li>Describe our infrastructure, mostly in Microsoft Azure, in the form of code (Terraform and everything around it). <\/li>\n<li>Teach developers to work with infrastructure. <\/li>\n<li>Prepare developers for on-call duties.<\/li>\n<\/ul>\n<p><\/p>\n<h2>Introducing the concept of Infrastructure as code<\/h2>\n<p>\nIn the conventional model (classical administration), knowledge about infrastructure exists in two places:<\/p>\n<ol>\n<li>Either as knowledge in the minds of experts.<img decoding=\"async\" alt=\"Infrastructure as code: an introduction\" src=\"\/wp-content\/uploads\/2019\/08\/2400dea0a90c24b05c275b709bbd2057.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/li>\n<li>Or this information is stored on certain machines, part of which are known to experts. But it's not certain that a newcomer (in case our entire team suddenly passes away) will be able to understand how everything works. There can be a lot of information on the machine: access permissions, cron jobs, mounted (see <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Mount_(computing)\">disk mounting<\/a><\/noindex>) disks, and simply an endless list of what might be happening. It\u2019s hard to grasp what is really going on.<img decoding=\"async\" alt=\"Infrastructure as code: an introduction\" src=\"\/wp-content\/uploads\/2019\/08\/37bafea85a641c48683c35975f67f24d.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/li>\n<\/ol>\n<p>\nIn both cases, we find ourselves trapped, becoming dependent:<\/p>\n<ul>\n<li>either on a person who is mortal, subject to illness, love, mood swings, and simply routine dismissals;<\/li>\n<li>or on a physically operating machine, which can also fail, get stolen, or present unexpected issues and inconveniences. <\/li>\n<\/ul>\n<p>\nIt clearly suggests a solution: ideally, everything should be converted into human-readable, maintainable, and well-written code. <\/p>\n<p>Thus, Infrastructure as Code (IaC) is a description of all existing infrastructure in the form of code, along with the associated tools for working with it and creating real infrastructure from it.<\/p>\n<p><b class=\"spoiler_title\">Why translate everything into code<\/b>People are not machines. They cannot remember everything. The reactions of humans and machines are different. Everything automated potentially works faster than anything done by humans. The most important thing is a single source of truth. <\/p>\n<p><b class=\"spoiler_title\">Where new SRE engineers come from<\/b>So, we've decided to hire new SRE engineers, but where do we find them? The book with the right answers (<noindex><a rel=\"nofollow\" href=\"https:\/\/landing.google.com\/sre\/books\/\">Google SRE Book<\/a><\/noindex>) tells us: from developers. After all, they work with code, and you achieve the ideal state.<\/p>\n<p>We searched long and hard for them in the job market outside our company. But we have to admit that we didn't find anyone that met our requirements. We had to sift through our own. <\/p>\n<h2>Problems with Infrastructure as Code<\/h2>\n<p>\nNow, let\u2019s look at examples of how infrastructure can be encoded in code. The code is well-written, high quality, with comments and indentation. <\/p>\n<p>Example code from Terraform.<\/p>\n<p><img decoding=\"async\" alt=\"Infrastructure as code: an introduction\" src=\"\/wp-content\/uploads\/2019\/08\/1a0bbca47e88fb12e97c0f270efba177.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nExample code from Ansible.<\/p>\n<p><img decoding=\"async\" alt=\"Infrastructure as code: an introduction\" src=\"\/wp-content\/uploads\/2019\/08\/358fad8f5944bca1b97b2d6e37b2ee5e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nGentlemen, if only it were that simple! We are in the real world, and it is always ready to surprise you, presenting surprises and problems. This is no exception here.<\/p>\n<p><b>1. The first problem is that in most cases, IaC is some kind of DSL.<\/b><\/p>\n<p>A DSL, in turn, is a description of the structure. More precisely, it specifies what you should have: JSON, YAML, modifications from some large companies that invented their own DSL (HCL is used in Terraform). <\/p>\n<p>The trouble is that it may easily lack some familiar elements such as:<\/p>\n<ul>\n<li>variables;<\/li>\n<li>conditions;<\/li>\n<li>sometimes comments are absent; for instance, in JSON, they are not provided by default;<\/li>\n<li>functions;<\/li>\n<li>and I'm not even mentioning high-level concepts like classes, inheritance, and all that.<\/li>\n<\/ul>\n<p>\n <b>2. The second problem with such code is that it is most often a heterogeneous environment<\/b>. Usually, you sit and work with C#, meaning you are using one language, one stack, one ecosystem. But here you have a vast variety of technologies. <\/p>\n<p>A quite realistic situation occurs when a bash script with Python launches a process that receives some JSON input. You analyze it, then some generator produces another 30 files. All of this is dependent on input variables from Azure Key Vault, fetched by a plugin for drone.io written in Go, and these variables pass through a YAML file generated from a jsonnet template. It\u2019s quite challenging to maintain perfectly well-documented code in such a diverse environment. <\/p>\n<p>Traditional development within a single task involves using one programming language. Here, however, we work with a multitude of languages. <\/p>\n<p><b>3. The third problem is tooling.<\/b>. We are used to powerful editors (Ms Visual Studio, Jetbrains Rider) that do everything for us, and even if we make a mistake, they will point it out. This seems normal and natural. <\/p>\n<p>But nearby, there is VSCode, which has some plugins that may or may not be supported. New versions are released and might not be supported. A simple transition to implementing a function (even if it exists) becomes a complex and non-trivial problem. A straightforward variable rename is just a replace in a project across several files. It\u2019s a stroke of luck if it replaces exactly what\u2019s needed. Of course, there\u2019s some syntax highlighting, auto-completion, and formatting available (though I couldn't get it to work in Terraform on Windows). <\/p>\n<p>At the time of writing this article, <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/mauve\/vscode-terraform\">the vscode-terraform plugin<\/a><\/noindex> had not yet been released to support version 0.12, although it has been out for 3 months.<\/p>\n<h2>It's time to forget about...<\/h2>\n<p><\/p>\n<ol>\n<li>Debugging.<\/li>\n<li>Refactoring tool.<\/li>\n<li>Auto completion.<\/li>\n<li>Error detection during compilation.<\/li>\n<\/ol>\n<p>\nIt\u2019s funny, but this actually increases development time and the number of errors that inevitably occur. <\/p>\n<p>The scariest part is that we have to focus not on how to design, organize files into folders, decompose, and create maintainable, readable code, but on how to correctly write this command, because I wrote it incorrectly. <\/p>\n<p>As a beginner, you are trying to understand Terraform, and the IDE doesn\u2019t help you at all. When there\u2019s documentation, you can look it up. But if you were learning a new programming language, the IDE would suggest that such a type exists and that one does not, at least at the level of int or string. This is often very helpful. <\/p>\n<h2>But what about the tests?<\/h2>\n<p>\nYou might ask: \"What about the tests, fellow programmers?\" Serious folks test everything in production, and it's tough. Here's an example of a unit test for a Terraform module from the site. <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.microsoft.com\/ru-ru\/azure\/terraform\/terratest-in-terraform-modules\">by Microsoft<\/a><\/noindex>. <\/p>\n<p><img decoding=\"async\" alt=\"Infrastructure as code: an introduction\" src=\"\/wp-content\/uploads\/2019\/08\/b9391409941e14f7e3cf6f8d964a2668.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nThey have good documentation. I've always liked Microsoft's approach to documentation and training. But you don't need to be Uncle Bob to realize that the code here isn\u2019t perfect. Notice the validation pushed to the right. <\/p>\n<p>The problem with the unit test is that we can check the correctness of the JSON output. I provided 5 parameters, and I received a JSON blob of 2000 lines. I can analyze what\u2019s happening here, validate the test result\u2026 <\/p>\n<p>It's difficult to analyze JSON in Go. You should write in Go because Terraform in Go is a good practice, testing in the language you write in. The organization of the code itself is quite weak. Meanwhile, it's the best library for testing. <\/p>\n<p>Microsoft itself writes its modules, testing them this way. Of course, it's Open Source. Everything I'm talking about you can come and fix. I could sit down and fix everything in a week, open source VS Code plugins, Terraform, create a plugin for Rider. Maybe write a couple of analyzers, attach linters, contribute to the testing library. I can do all that. But that's not what I should be doing. <\/p>\n<h2>Best practices for Infrastructure as Code<\/h2>\n<p>\nLet's move on. If there are no tests in IaC, if the IDE and tooling are poor, then there should at least be best practices. I simply went to Google Analytics and compared two search queries: Terraform best practices and C# best practices. <\/p>\n<p><img decoding=\"async\" alt=\"Infrastructure as code: an introduction\" src=\"\/wp-content\/uploads\/2019\/08\/3d0e8cd626596deea99324285321a0ab.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nWhat do we see? Ruthless statistics are not in our favor. In terms of available material, it\u2019s the same. In C# development, we are just swimming in materials; we have top-notch practices, books written by experts, and also books written by other experts critiquing those books. A sea of official documentation, articles, training courses, and now even open source development.<\/p>\n<p>As for the query on IaC: here you are trying to piece together information from high-load talks or HashiConf, from official documentation, and numerous issues on GitHub. How do you even distribute these modules, what to do with them? It seems like a real problem... There is a community, folks, where for any question you\u2019ll get 10 comments on GitHub. But that\u2019s not certain. <\/p>\n<p>Unfortunately, experts are just starting to emerge at the moment. They are still too few. And the community is still in its infancy. <\/p>\n<h2>Where is all this headed and what to do<\/h2>\n<p>\nYou can abandon everything and go back to C#, to the world of the rider. But no. Why would you even get into this if not to find a solution? Here are my subjective conclusions. You can argue with me in the comments; it would be interesting. <\/p>\n<p>Personally, I bet on a few things:<\/p>\n<ol>\n<li>Development in this field is progressing very rapidly. Here is a graph of requests related to DevOps.\n<p><img decoding=\"async\" alt=\"Infrastructure as code: an introduction\" src=\"\/wp-content\/uploads\/2019\/08\/068276f040f17c84a4c7eb9e11703c5c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIt may be a trending topic, but the very fact that the field is growing instills some hope. <\/p>\n<p>If something is growing this quickly, wise people will definitely emerge to advise on what to do and what not to do. The rise in popularity may lead someone to finally find the time to finish a jsonnet plugin for vscode, allowing function implementation navigation instead of searching for it through ctrl+shift+f. As everything evolves, there is more material available. The recent release of Google's book on SRE is a great example.<\/li>\n<li>There are developed methodologies and practices in regular development that we can successfully apply here. Yes, there are nuances with testing and heterogeneous environments, insufficient tooling, but a huge number of practices have been accumulated that can be useful and helpful.\n<p>A simple example: collaborative work through pair programming. It helps a lot to understand. When you have a neighbor next to you who is also trying to understand something, together you'll grasp it better.<\/p>\n<p> Understanding how refactoring is done helps even in such situations to carry it out. That is, you may not change everything at once, but change the naming first, then the layout, and then perhaps isolate a certain part. Oops, and here comments are missing. <\/li>\n<\/ol>\n<p><\/p>\n<h2>Conclusion<\/h2>\n<p>\nDespite the fact that my reflections may seem pessimistic, I look to the future with hope and sincerely believe that we (and you) will succeed.<\/p>\n<blockquote><p>The second part of the article is coming up. In it, I will talk about how we tried applying agile development practices to improve our learning process and work with the infrastructure.<\/p><\/blockquote>\n<p>Source: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/dodopizzaio\/blog\/465137\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0423 \u043d\u0430\u0441 \u0432 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u0438\u0434\u0451\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043e\u043d\u0431\u043e\u0440\u0434\u0438\u043d\u0433\u0430 SRE-\u043a\u043e\u043c\u0430\u043d\u0434\u044b. \u042f \u0437\u0430\u0448\u0451\u043b \u0432\u043e \u0432\u0441\u044e \u044d\u0442\u0443 \u0438\u0441\u0442\u043e\u0440\u0438\u044e \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438. \u0412 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0443 \u043c\u0435\u043d\u044f \u043f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c \u043c\u044b\u0441\u043b\u0438 \u0438 \u0438\u043d\u0441\u0430\u0439\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u044f \u0445\u043e\u0447\u0443 \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0441 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c\u0438. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435-\u0440\u0430\u0437\u043c\u044b\u0448\u043b\u0435\u043d\u0438\u0438 \u044f \u0433\u043e\u0432\u043e\u0440\u044e \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442, \u043a\u0430\u043a \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442, \u0438 \u043a\u0430\u043a \u0432\u0441\u0435\u043c \u0434\u0430\u043b\u044c\u0448\u0435 \u0441 \u044d\u0442\u0438\u043c \u0436\u0438\u0442\u044c. \u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u0435 \u0441\u0435\u0440\u0438\u0438 \u0441\u0442\u0430\u0442\u0435\u0439, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0445 \u043f\u043e [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":28211,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-37586","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.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0423 \u043d\u0430\u0441 \u0432 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u0438\u0434\u0451\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043e\u043d\u0431\u043e\u0440\u0434\u0438\u043d\u0433\u0430 SRE-\u043a\u043e\u043c\u0430\u043d\u0434\u044b. \u042f \u0437\u0430\u0448\u0451\u043b \u0432\u043e \u0432\u0441\u044e \u044d\u0442\u0443 \u0438\u0441\u0442\u043e\u0440\u0438\u044e \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438. \u0412 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0443 \u043c\u0435\u043d\u044f \u043f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c \u043c\u044b\u0441\u043b\u0438 \u0438 \u0438\u043d\u0441\u0430\u0439\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u044f \u0445\u043e\u0447\u0443 \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0441 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c\u0438.\" \/>\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\/en\/blog\/administrirovanie\/infrastructure-as-code-pervoe-znakomstvo\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\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\udd47Infrastructure as code: \u043f\u0435\u0440\u0432\u043e\u0435 \u0437\u043d\u0430\u043a\u043e\u043c\u0441\u0442\u0432\u043e | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0423 \u043d\u0430\u0441 \u0432 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u0438\u0434\u0451\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043e\u043d\u0431\u043e\u0440\u0434\u0438\u043d\u0433\u0430 SRE-\u043a\u043e\u043c\u0430\u043d\u0434\u044b. \u042f \u0437\u0430\u0448\u0451\u043b \u0432\u043e \u0432\u0441\u044e \u044d\u0442\u0443 \u0438\u0441\u0442\u043e\u0440\u0438\u044e \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438. \u0412 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0443 \u043c\u0435\u043d\u044f \u043f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c \u043c\u044b\u0441\u043b\u0438 \u0438 \u0438\u043d\u0441\u0430\u0439\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u044f \u0445\u043e\u0447\u0443 \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0441 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c\u0438.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/infrastructure-as-code-pervoe-znakomstvo\" \/>\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-10-31T19:18:27+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:18:27+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\udd47Infrastructure as Code: First Encounter | ProHoster","description":"We are currently undergoing the onboarding process for the SRE team. I approached this from a development perspective. Throughout the process, I had thoughts and insights that I want to share with other developers.","canonical_url":"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/infrastructure-as-code-pervoe-znakomstvo","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"en_US","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\udd47Infrastructure as code: \u043f\u0435\u0440\u0432\u043e\u0435 \u0437\u043d\u0430\u043a\u043e\u043c\u0441\u0442\u0432\u043e | ProHoster","og:description":"\u0423 \u043d\u0430\u0441 \u0432 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u0438\u0434\u0451\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043e\u043d\u0431\u043e\u0440\u0434\u0438\u043d\u0433\u0430 SRE-\u043a\u043e\u043c\u0430\u043d\u0434\u044b. \u042f \u0437\u0430\u0448\u0451\u043b \u0432\u043e \u0432\u0441\u044e \u044d\u0442\u0443 \u0438\u0441\u0442\u043e\u0440\u0438\u044e \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438. \u0412 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0443 \u043c\u0435\u043d\u044f \u043f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c \u043c\u044b\u0441\u043b\u0438 \u0438 \u0438\u043d\u0441\u0430\u0439\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u044f \u0445\u043e\u0447\u0443 \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0441 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c\u0438.","og:url":"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/infrastructure-as-code-pervoe-znakomstvo","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-10-31T19:18:27+00:00","article:modified_time":"2019-10-31T19:18:27+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"37586","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-23 18:29:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 01:24:24","updated":"2026-01-23 18:29:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/posts\/37586","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/comments?post=37586"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/posts\/37586\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/media\/28211"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/media?parent=37586"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/categories?post=37586"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/tags?post=37586"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}