{"id":405912,"date":"2024-06-29T18:36:01","date_gmt":"2024-06-29T18:36:01","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=405912"},"modified":"-0001-11-30T00:00:00","modified_gmt":"2024-06-29T18:36:01","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=405912","title":{"rendered":"<span>Terraform: \u043e\u0442 \u043d\u0435\u0437\u043d\u0430\u043d\u0438\u044f \u043a best practices<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0412\u0438\u043a\u0442\u043e\u0440, \u044f DevOps\u2011\u0438\u043d\u0436\u0435\u043d\u0435\u0440 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 <a href=\"https:\/\/nixys.ru\/?roistat=habr_article_%20post100323\">Nixys<\/a>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u0434\u0440\u0443\u0433\u0438\u043c \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f\u043c \u0432\u043d\u0435\u0434\u0440\u044f\u0442\u044c \u0432\u00a0\u0438\u0445 IT\u2011\u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u0434\u043e\u0432\u044b\u0435 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0438 DevOps, MLOps \u0438 DevSecOps.<\/p>\n<p>\u0421\u0435\u0433\u043e\u0434\u043d\u044f \u044f \u043f\u0440\u0438\u0433\u043b\u0430\u0448\u0430\u044e \u0432\u0430\u0441 \u0432\u043c\u0435\u0441\u0442\u0435 \u0441\u043e \u043c\u043d\u043e\u0439 \u043f\u0440\u043e\u0439\u0442\u0438 \u043f\u0443\u0442\u044c \u00ab\u043e\u0442 \u043d\u0435\u0437\u043d\u0430\u043d\u0438\u044f \u043a\u00a0best practices\u00bb \u0432\u00a0\u0440\u0430\u0431\u043e\u0442\u0435 \u0441\u00a0Terraform. \u042d\u0442\u043e\u0442 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d \u0434\u043b\u044f\u00a0\u0441\u0435\u0440\u0438\u0438 \u043d\u0430\u0448\u0438\u0445 \u043e\u0434\u043d\u043e\u0438\u043c\u0435\u043d\u043d\u044b\u0445 \u0432\u0438\u0434\u0435\u043e\u0440\u043e\u043b\u0438\u043a\u043e\u0432 \u043d\u0430\u00a0YouTube, \u043d\u043e\u00a0\u043c\u044b \u0440\u0435\u0448\u0438\u043b\u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0435\u0433\u043e \u0438 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u0442\u044c \u0432\u0430\u043c \u0431\u043e\u043b\u0435\u0435 \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0432\u00a0\u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435.<\/p>\n<div class=\"tm-iframe_temp\" data-src=\"https:\/\/embedd.srv.habr.com\/iframe\/640acdbf7a8d27e0261eadb1\" data-style=\"\" id=\"640acdbf7a8d27e0261eadb1\" width=\"\"><\/div>\n<p>\u041d\u0435\u00a0\u0437\u0430\u0431\u044b\u0432\u0430\u0439\u0442\u0435 \u0441\u043b\u0435\u0434\u0438\u0442\u044c \u0437\u0430\u00a0\u043d\u0430\u0448\u0438\u043c\u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f\u043c\u0438 \u043d\u0430 <a href=\"https:\/\/www.youtube.com\/@nixys_ru\">YouTube<\/a>, <a href=\"https:\/\/habr.com\/ru\/company\/nixys\/profile\/\">Habr <\/a>\u0438 \u043f\u043e\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u0439\u0442\u0435\u0441\u044c \u043d\u0430\u00a0\u043d\u0430\u0448 Telegram\u2011\u043a\u0430\u043d\u0430\u043b <a href=\"https:\/\/t.me\/devops_fm\">DevOps FM<\/a>\u00a0\u2014 \u043c\u044b \u0432\u0441\u0435\u0433\u0434\u0430 \u0440\u0430\u0434\u044b \u043d\u043e\u0432\u044b\u043c \u0434\u0440\u0443\u0437\u044c\u044f\u043c. \u041d\u0430\u0447\u043d\u0451\u043c?<\/p>\n<h2>\u0427\u0435\u043c \u043c\u043d\u0435 \u043f\u043e\u043c\u043e\u0436\u0435\u0442 Terraform? \u0422\u0430\u043a \u043b\u0438 \u043e\u043d \u043c\u043d\u0435 \u043d\u0443\u0436\u0435\u043d?<\/h2>\n<p>\u041e\u0442\u0432\u0435\u0442 \u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u044b\u0439\u00a0\u2014 \u0434\u0430! \u0415\u0441\u043b\u0438 \u0443\u00a0\u0432\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430 \u0435\u0441\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u00a0\u044d\u0442\u0438\u043c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u043c, \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u0435\u0433\u043e.<\/p>\n<p>\u041f\u043e\u0447\u0435\u043c\u0443? \u0412\u00a0\u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c, Terraform\u00a0\u2014 \u044d\u0442\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u044f. \u0410\u00a0\u0432\u0441\u0451, \u0447\u0442\u043e\u00a0\u043c\u043e\u0436\u043d\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u043d\u0430\u0434\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c. \u0414\u0430\u2011\u0434\u0430, \u0442\u0430\u0432\u0442\u043e\u043b\u043e\u0433\u0438\u044f, \u043d\u043e, \u043d\u0430\u0434\u0435\u044e\u0441\u044c, \u0442\u0430\u043a \u043b\u0443\u0447\u0448\u0435 \u0437\u0430\u043a\u0440\u0435\u043f\u0438\u0442\u0441\u044f \u043c\u044b\u0441\u043b\u044c. \u0412\u044b\u00a0\u0436\u0435 \u043d\u0435\u00a0\u0437\u0430\u0434\u0430\u0435\u0442\u0435\u0441\u044c \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u043c: \u00ab\u0430 \u0437\u0430\u0447\u0435\u043c \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u043d\u044b\u0435\u00a0\u043b\u0438\u043d\u0438\u0438 \u043d\u0430\u00a0\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u0435 \u0441\u0442\u0430\u0432\u044f\u0442\u00bb, \u0432\u0435\u0440\u043d\u043e? \u0412\u043e\u0442 \u0438 \u0437\u0434\u0435\u0441\u044c \u043f\u0440\u0438\u043d\u0446\u0438\u043f \u0442\u043e\u0442\u00a0\u0436\u0435. \u0414\u0430, \u0432\u0430\u043c \u043d\u0443\u0436\u0435\u043d \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u044d\u0442\u043e\u0439\u00a0\u043b\u0438\u043d\u0438\u0438 (\u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0442\u043e\u043b\u043a\u043e\u0432\u044b\u0439 DevOps\u2011\u0438\u043d\u0436\u0435\u043d\u0435\u0440 \u0441\u00a0\u043d\u0443\u0436\u043d\u044b\u043c\u0438 \u0441\u043a\u0438\u043b\u043b\u0430\u043c\u0438), \u043d\u043e\u00a0\u043f\u0440\u043e\u0441\u0442\u043e \u0432\u0434\u0443\u043c\u0430\u0439\u0442\u0435\u0441\u044c, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0432\u044b \u044d\u0442\u0438\u043c \u0440\u0435\u0448\u0430\u0435\u0442\u0435!<\/p>\n<ul>\n<li>\n<p><strong>\u041f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0438 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0434\u043e\u043b\u0433\u0438\u0445 \u0440\u0443\u0442\u0438\u043d\u043d\u044b\u0445 \u0437\u0430\u0434\u0430\u0447<\/strong>. \u041d\u0430\u0432\u0435\u0440\u043d\u044f\u043a\u0430 \u043f\u0435\u0440\u0435\u0434 \u0432\u0430\u043c\u0438 \u043a\u043e\u0433\u0434\u0430\u2011\u0442\u043e \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u043b\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430, \u0447\u0442\u043e\u00a0\u043d\u0443\u0436\u043d\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0440\u0435\u0434 \u0434\u043b\u044f\u00a0\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0441\u0432\u043e\u0435\u0433\u043e \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430, \u0442\u0430\u043a \u043a\u0430\u043a\u00a0\u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e \u0443\u00a0\u0432\u0430\u0441 20\u00a0\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0432 \u0441\u0440\u0430\u0436\u0430\u044e\u0442\u0441\u044f \u0437\u0430\u00a0\u0442\u043e, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0441\u0432\u043e\u0439 \u043a\u043e\u0434 \u043d\u0430\u00a0\u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0435 (\u0430 \u0432\u00a0\u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u043e\u043d\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0431\u0443\u0434\u0443\u0442 \u0436\u0434\u0430\u0442\u044c \u043f\u043e\u043a\u0430 \u043f\u043e\u0434\u00a0\u043d\u0438\u0445 \u043d\u0435\u00a0\u043d\u0430\u0441\u0442\u0440\u043e\u044f\u0442 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0435). \u0412\u044b\u00a0\u0436\u0435 \u0432\u00a0\u044d\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0432\u00a0\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435, \u043d\u0435\u043a\u043e\u043d\u043a\u0443\u0440\u0435\u043d\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c \u043d\u0430\u00a0\u0440\u044b\u043d\u043a\u0435 \u0438\u00a0\u0442.\u00a0\u0434. \u0438\u00a0\u0442.\u00a0\u043f. \u0415\u0441\u043b\u0438 \u044d\u0442\u043e \u043f\u0440\u043e\u00a0\u0432\u0430\u0441, \u0442\u043e\u0433\u0434\u0430 \u0432\u0430\u043c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e \u043d\u0443\u0436\u0435\u043d Terraform, \u0432\u0435\u0434\u044c \u043e\u043d \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0438 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b\u00a0\u2014 \u0442\u0430\u043a\u0438\u0445, \u043a\u0430\u043a\u00a0\u0441\u0435\u0440\u0432\u0435\u0440\u044b, \u0441\u0435\u0442\u0438, \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0438 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0438 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445. \u0418 \u0432\u0443\u0430\u043b\u044f\u00a0\u2014 \u0432\u0430\u043c \u043d\u0435\u00a0\u043d\u0443\u0436\u043d\u043e \u0442\u0440\u0430\u0442\u0438\u0442\u044c \u043a\u0443\u0447\u0443 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043d\u0430\u00a0\u043d\u043e\u0432\u043e\u0435 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0435. <\/p>\n<\/li>\n<li>\n<p><strong>\u0421\u043d\u0438\u0436\u0435\u043d\u0438\u0435 \u0447\u0435\u043b\u043e\u0432\u0435\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0444\u0430\u043a\u0442\u043e\u0440\u0430<\/strong>. \u0423\u00a0\u0432\u0430\u0441\u00a0\u0431\u044b\u043b\u043e \u0442\u0430\u043a\u043e\u0435, \u0447\u0442\u043e\u00a0\u0432\u00a0\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u043b\u0438 \u043e\u0448\u0438\u0431\u043a\u0438 \u043f\u043e\u00a0\u0432\u0438\u043d\u0435 \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0430? \u042d\u0442\u043e \u043c\u043e\u0436\u0435\u0442\u00a0\u0431\u044b\u0442\u044c \u0447\u0442\u043e\u00a0\u0443\u0433\u043e\u0434\u043d\u043e: \u043e\u043f\u0435\u0447\u0430\u0442\u043a\u0430 \u0432\u00a0\u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0438 \u0441\u0435\u0440\u0432\u0438\u0441\u0430 \u043f\u0440\u0438\u00a0\u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0438 \u043a\u00a0\u043d\u0435\u043c\u0443, \u0438\u043b\u0438\u00a0\u0436\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u043a\u0442\u043e\u2011\u0442\u043e \u043c\u043e\u0433 \u043f\u043e\u0442\u043e\u0440\u043e\u043f\u0438\u0442\u044c\u0441\u044f, \u043c\u0438\u0441\u043a\u043b\u0438\u043a\u043d\u0443\u0442\u044c \u0438 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u043d\u0435\u00a0\u0442\u0443 \u043c\u0430\u0448\u0438\u043d\u0443. \u0412\u043e\u0442 100% \u0447\u0442\u043e\u00a0\u0431\u044b\u043b\u043e, \u0432\u0441\u0435 \u043c\u044b \u043b\u044e\u0434\u0438. \u0422\u043e\u0433\u0434\u0430 \u043e\u043f\u0438\u0448\u0438\u0442\u0435 \u0441\u0432\u043e\u044e \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u043a\u043e\u0434\u043e\u043c, \u0432\u044b \u0441\u043d\u0438\u0437\u0438\u0442\u0435 \u0448\u0430\u043d\u0441 \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0433\u043e \u043a\u00a0\u043c\u0438\u043d\u0438\u043c\u0443\u043c\u0443. \u041d\u0435\u00a0\u0434\u043e\u00a0\u043d\u0443\u043b\u044f, \u043d\u0435\u0442, \u043d\u043e\u00a0\u043d\u0430\u00a0\u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u043e\u0432 \u043c\u0435\u043d\u044c\u0448\u0435\u00a0\u2014 \u044d\u0442\u043e \u0444\u0430\u043a\u0442.<\/p>\n<\/li>\n<li>\n<p><strong>\u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435<\/strong>. \u041e\u0445, \u043a\u043e\u0433\u0434\u0430\u2011\u043d\u0438\u0431\u0443\u0434\u044c \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u043b\u0438\u0441\u044c \u0441\u00a0\u0442\u0435\u043c, \u0447\u0442\u043e\u00a0\u043d\u0430\u00a0\u0440\u0430\u0431\u043e\u0447\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u043d\u0443\u0436\u043d\u043e \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0441\u043e\u0444\u0442? \u0418 \u043b\u0430\u0434\u043d\u043e \u0435\u0441\u043b\u0438 \u044d\u0442\u043e \u0447\u0442\u043e\u2011\u0442\u043e \u043d\u0435\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435, \u0430\u00a0\u0432\u0434\u0440\u0443\u0433 \u043d\u0430\u0434\u043e \u043f\u0440\u044f\u043c \u043a\u0443\u0431 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c, \u0434\u0430\u00a0\u0435\u0449\u0451 \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u0430\u0436\u043e\u0440\u043d\u044b\u0445 \u0432\u0435\u0440\u0441\u0438\u0439? \u0412\u00a0\u043e\u0431\u0449\u0435\u043c, Terraform \u0438 \u0442\u0443\u0442 \u043f\u043e\u043c\u043e\u0436\u0435\u0442: \u043f\u043e\u0442\u0440\u0430\u0442\u044c\u0442\u0435 \u0432\u0440\u0435\u043c\u044f \u043d\u0430\u00a0\u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0441\u0432\u043e\u0435\u0439 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0432\u00a0\u043a\u043e\u0434\u0435 \u0438 \u0432\u044b \u0437\u0430\u0431\u0443\u0434\u0435\u0442\u0435 \u044d\u0442\u0443 \u0431\u043e\u043b\u044c. \u042d\u0442\u043e \u043d\u0435\u00a0\u0441\u043d\u0438\u043c\u0435\u0442 \u0441\u00a0\u0432\u0430\u0441 \u043e\u0431\u044f\u0437\u0430\u043d\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u043e\u0434\u0443\u043c\u0430\u0442\u044c \u0432\u0441\u0435 \u043d\u044e\u0430\u043d\u0441\u044b. \u041d\u043e\u00a0\u0432\u043e\u2011\u043f\u0435\u0440\u0432\u044b\u0445, Terraform \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u0437\u0430\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0432\u0430\u0441 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u043e\u0441\u043e\u0431\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0438 \u0441\u00a0\u0442\u0430\u043a\u043e\u0439 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u043b\u0435\u0433\u0447\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c\u0441\u044f, \u0430\u00a0\u0432\u043e\u2011\u0432\u0442\u043e\u0440\u044b\u0445\u00a0\u2014 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0435 \u0434\u0432\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b, \u0438 \u0432\u044b \u043f\u043e\u0434\u043d\u044f\u043b\u0438 <strong>\u043f\u043e\u043b\u043d\u044b\u0439<\/strong> \u043a\u043b\u043e\u043d \u0441\u0432\u043e\u0435\u0439 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b\u00a0\u2014 \u043c\u043e\u0436\u0435\u0442\u0435 \u0442\u0430\u043c \u043b\u043e\u043c\u0430\u0442\u044c, \u043e\u0442\u043a\u0430\u0442\u044b\u0432\u0430\u0442\u044c, \u043f\u0435\u0440\u0435\u0434\u0435\u043b\u044b\u0432\u0430\u0442\u044c \u0432\u0441\u0451, \u0447\u0442\u043e\u00a0\u0432\u0430\u0448\u0435\u0439 \u0434\u0443\u0448\u0435 \u0443\u0433\u043e\u0434\u043d\u043e. \u0418 \u0435\u0441\u043b\u0438 \u0443\u00a0\u0432\u0430\u0441 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c\u0441\u044f, \u0441\u00a0\u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c\u044e, \u043a\u0440\u0430\u0439\u043d\u0435 \u0431\u043b\u0438\u0437\u043a\u043e\u0439 \u043a 100%, \u0432\u044b \u0431\u0435\u0437\u00a0\u043f\u0440\u043e\u0431\u043b\u0435\u043c \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u0435 \u0438 \u0441\u0432\u043e\u0439 \u043f\u0440\u043e\u0434.<\/p>\n<\/li>\n<li>\n<p><strong>\u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0438\u0437\u0430\u0446\u0438\u044f<\/strong>. \u0415\u0441\u043b\u0438 \u0443\u00a0\u0432\u0430\u0441 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0438\u0437\u00a0\u0434\u0432\u0443\u0445 \u0438 \u0431\u043e\u043b\u0435\u0435 \u0447\u0435\u043b\u043e\u0432\u0435\u043a, \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0445 \u0441\u00a0\u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043e\u0439, \u0442\u043e \u0432\u044b \u043d\u0430\u0432\u0435\u0440\u043d\u044f\u043a\u0430 \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u043b\u0438\u0441\u044c \u0441\u00a0\u0442\u0435\u043c, \u0447\u0442\u043e\u00a0\u043e\u043d\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043f\u043e\u2011\u0440\u0430\u0437\u043d\u043e\u043c\u0443. \u0414\u0430\u00a0\u0435\u0441\u0442\u044c \u043d\u043e\u0440\u043c\u044b, \u043d\u043e\u00a0\u043e\u043d\u0438 \u0440\u0430\u0437\u043d\u044f\u0442\u0441\u044f \u043e\u0442\u00a0\u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u043a\u00a0\u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438, \u0438 \u0432\u00a0\u0440\u0435\u0433\u043b\u0430\u043c\u0435\u043d\u0442\u044b \u0432\u0441\u0451 \u043d\u0435\u00a0\u0437\u0430\u0442\u043e\u043b\u043a\u0430\u0435\u0448\u044c, \u0438 \u043f\u043e\u00a0\u0438\u0442\u043e\u0433\u0443 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0435 \u0432\u0440\u043e\u0434\u0435\u00a0\u0431\u044b \u043e\u0434\u043d\u0443 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443, \u043d\u043e\u00a0\u0447\u0430\u0441\u0442\u044c \u043f\u043e\u0434\u043d\u044f\u0442\u0430 \u043e\u0434\u043d\u0438\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c, \u0447\u0430\u0441\u0442\u044c\u00a0\u2014 \u0434\u0440\u0443\u0433\u0438\u043c. \u042d\u0442\u043e \u043c\u043e\u0436\u0435\u0442\u00a0\u0431\u044b\u0442\u044c \u0447\u0442\u043e\u00a0\u0443\u0433\u043e\u0434\u043d\u043e\u00a0\u2014 \u043e\u0442\u00a0\u043d\u0435\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0438\u043c\u0451\u043d \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u0434\u043e\u00a0\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0440\u0430\u0437\u043d\u044b\u0445 \u041e\u0421 \u0434\u043b\u044f\u00a0\u043e\u0434\u043d\u043e\u0442\u0438\u043f\u043d\u044b\u0445 \u0445\u043e\u0441\u0442\u043e\u0432. \u0421\u00a0Terraform \u0432\u044b \u044d\u0442\u043e \u0440\u0435\u0448\u0430\u0435\u0442\u0435, \u0442\u0430\u043a \u0438\u043b\u0438\u00a0\u0438\u043d\u0430\u0447\u0435. \u0414\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0443\u00a0\u0432\u0430\u0441 \u043d\u0435\u0442 \u0440\u0435\u0433\u043b\u0430\u043c\u0435\u043d\u0442\u0430 \u043a\u00a0\u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044e \u043a\u043e\u0434\u0430, \u0432\u0441\u0451 \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u043e \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0447\u0442\u043e\u00a0\u0438\u043d\u0436\u0435\u043d\u0435\u0440\u0430\u043c \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043f\u043e\u00a0\u043e\u0434\u043d\u043e\u043c\u0443 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0443.<\/p>\n<\/li>\n<li>\n<p><strong>\u041e\u0447\u0435\u0432\u0438\u0434\u043d\u043e\u0441\u0442\u044c<\/strong>. \u041d\u0430\u043d\u0438\u043c\u0430\u043b\u0438 \u043d\u043e\u0432\u043e\u0433\u043e \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0430? \u0421\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0435\u043c\u0443 \u043d\u0443\u0436\u043d\u043e \u043d\u0430\u00a0\u0442\u043e, \u0447\u0442\u043e\u0431\u044b \u0432\u043b\u0438\u0442\u044c\u0441\u044f \u0432\u00a0\u0440\u0430\u0431\u043e\u0442\u0443? \u0421\u00a0\u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043e\u0439, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u0434\u043d\u044f\u0442\u0430 \u0440\u0443\u043a\u0430\u043c\u0438, \u0432\u0441\u0451 \u0435\u0449\u0451 \u0441\u043b\u043e\u0436\u043d\u0435\u0435\u00a0\u2014 \u0442\u0430\u043c \u043c\u043e\u0436\u0435\u0442\u00a0\u0431\u044b\u0442\u044c \u0441\u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0435\u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u0445 \u0432\u0435\u0449\u0435\u0439, \u0447\u0442\u043e\u00a0\u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0442\u044c \u0438\u0445 \u043c\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u0433\u0434\u0430 \u0447\u0442\u043e\u2011\u0442\u043e \u0443\u0436\u0435 \u0441\u043b\u043e\u043c\u0430\u043b\u043e\u0441\u044c, \u0438 \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u0443 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u043e\u0441\u043e\u043c \u0437\u0435\u043c\u043b\u044e \u0440\u044b\u0442\u044c \u0432\u00a0\u043f\u043e\u0438\u0441\u043a\u0430\u0445 \u043d\u0435\u0438\u0441\u043f\u0440\u0430\u0432\u043d\u043e\u0441\u0442\u0438. \u0415\u0441\u043b\u0438 \u0432\u044b \u043e\u043f\u0438\u0441\u0430\u043b\u0438 \u0432\u0441\u0451 \u0441\u00a0\u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u0434\u0430, \u044d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e\u00a0\u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435\u0442 \u043a\u0443\u0447\u0438 \u043c\u0435\u0441\u0442, \u0433\u0434\u0435 \u043c\u043e\u0436\u0435\u0442\u00a0\u0431\u044b\u0442\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d \u0442\u043e\u0442 \u0438\u043b\u0438\u00a0\u0438\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u00a0\u2014 \u0432\u0441\u0451 \u0437\u0434\u0435\u0441\u044c, \u0432\u00a0\u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442\u0430\u0445. \u0414\u0430, \u043e\u043d\u0438 \u043c\u043e\u0433\u0443\u0442\u00a0\u0431\u044b\u0442\u044c \u0441\u043b\u043e\u0436\u043d\u044b \u0438 \u0437\u0430\u043f\u0443\u0442\u0430\u043d\u043d\u044b, \u043d\u043e, \u043f\u043e\u00a0\u043a\u0440\u0430\u0439\u043d\u0435\u0439 \u043c\u0435\u0440\u0435, \u044d\u0442\u043e \u043d\u0435\u00a0\u043a\u0430\u043a\u043e\u0439\u2011\u043d\u0438\u0431\u0443\u0434\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 cron \u043d\u0430 101-\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0435 \u0445\u043e\u0434\u0438\u0442 \u0432\u00a0\u043f\u0440\u043e\u0434 \u0438 \u0437\u0430\u0431\u0438\u0432\u0430\u0435\u0442 \u0432\u0435\u0441\u044c \u043f\u0443\u043b \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439\u00a0\u2014 \u0435\u0441\u043b\u0438 \u043e\u043d \u0435\u0441\u0442\u044c, \u0442\u043e \u043e\u043f\u0438\u0441\u0430\u043d \u0432\u00a0\u043a\u043e\u0434\u0435, \u0438 \u043c\u044b \u0437\u043d\u0430\u0435\u043c \u0433\u0434\u0435 \u0435\u0433\u043e \u0438\u0441\u043a\u0430\u0442\u044c. \u0415\u0441\u0442\u044c \u043e\u0434\u0438\u043d \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u044b\u0439 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u00a0\u2014 \u044d\u0442\u043e \u043a\u043e\u0434: \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u043b\u0441\u044f \u0441\u00a0\u043d\u0438\u043c, \u0437\u043d\u0430\u0447\u0438\u0442 \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u043b\u0441\u044f \u0441\u043e \u0432\u0441\u0435\u0439 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043e\u0439.<\/p>\n<\/li>\n<li>\n<p><strong>\u0420\u0430\u0431\u043e\u0442\u0430 \u0432\u00a0\u043a\u043e\u043c\u0430\u043d\u0434\u0435<\/strong>. \u0417\u0434\u0435\u0441\u044c \u0432\u0441\u0451 \u043f\u0440\u043e\u0441\u0442\u043e\u00a0\u2014 \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f \u0432\u0435\u0440\u0441\u0438\u0439. \u0415\u0441\u043b\u0438 \u0435\u0441\u0442\u044c \u043a\u043e\u0434, \u043c\u044b \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u0441\u00a0\u043d\u0438\u043c, \u043a\u0430\u043a\u00a0\u0441\u00a0\u043a\u043e\u0434\u043e\u043c. \u0417\u0430\u043b\u0438\u0432\u0430\u0435\u043c \u0435\u0433\u043e \u0432\u00a0GitHub, GitLab \u0438\u043b\u0438\u00a0\u0433\u0434\u0435 \u0432\u044b \u043f\u0440\u0438\u0432\u044b\u043a\u043b\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c\u00a0\u2014 \u0438 \u0432\u0441\u0451, \u043c\u044b \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u043b\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u0434\u043b\u044f\u00a0\u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0432\u00a0\u043a\u043e\u043c\u0430\u043d\u0434\u0435. \u0415\u0441\u043b\u0438 \u0443\u00a0\u0432\u0430\u0441 \u0432\u0441\u0451 \u0440\u0443\u043a\u0430\u043c\u0438 \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u043b\u043e\u0441\u044c, \u0437\u0430\u0431\u0443\u0434\u044c\u0442\u0435 \u043f\u0440\u043e\u00a0\u0442\u0430\u043a\u0438\u0435 \u043f\u043b\u044e\u0448\u043a\u0438.<\/p>\n<\/li>\n<\/ul>\n<p>\u0412\u00a0\u0446\u0435\u043b\u043e\u043c, Terraform\u00a0\u2014 \u044d\u0442\u043e \u043c\u043e\u0449\u043d\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0435\u0448\u0430\u0435\u0442 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u043a\u0430\u043a\u00a0IT\u2011\u043e\u0442\u0434\u0435\u043b\u0430 \u0432\u00a0\u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438, \u0442\u0430\u043a \u0438, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0431\u0438\u0437\u043d\u0435\u0441\u0430 \u0432\u00a0\u0446\u0435\u043b\u043e\u043c.<\/p>\n<h2>\u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u043c \u043e\u0441\u043d\u043e\u0432\u044b<\/h2>\n<p>Terraform\u00a0\u2014 \u044d\u0442\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0432\u00a0\u0432\u0438\u0434\u0435 \u043a\u043e\u0434\u0430 \u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0451 \u0440\u0430\u0437\u0432\u0451\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u0435, \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044e \u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435. \u041e\u043d \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u043e\u0432\u00a0\u2014 \u0442\u0430\u043a\u0438\u0445, \u043a\u0430\u043a\u00a0AWS, Google Cloud, Azure, Yandex Cloud \u0438 \u0434\u0440\u0443\u0433\u0438\u0445.<\/p>\n<p>\u041e\u0434\u043d\u0438\u043c \u0438\u0437\u00a0\u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432 Terraform \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043e\u043f\u0438\u0441\u0430\u0442\u044c\u00a0\u0436\u0435\u043b\u0430\u0435\u043c\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0432\u00a0\u0432\u0438\u0434\u0435 \u043a\u043e\u0434\u0430, \u0438 \u0437\u0430\u0442\u0435\u043c \u043e\u043d \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u0435\u0451 \u0432\u00a0\u044d\u0442\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435, \u0430\u00a0\u0432\u044b \u043d\u0435\u00a0\u0437\u0430\u0431\u043e\u0442\u0438\u0442\u0435\u0441\u044c \u043e\u00a0\u0440\u0443\u0447\u043d\u043e\u043c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u043a\u0430\u0436\u0434\u044b\u043c \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u043c.<\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u043d\u0430\u0447\u0430\u0442\u044c \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441\u00a0\u044d\u0442\u0438\u043c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u043c, \u0432\u0430\u0436\u043d\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u0438\u00a0\u2014 \u0442\u0430\u043a\u0438\u0435, \u043a\u0430\u043a\u00a0\u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442\u044b, \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u044b \u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u044b. \u0414\u0430\u043b\u0435\u0435 \u0432\u00a0\u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0438\u0445, \u0430\u00a0\u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u044b \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u00a0Terraform. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043f\u0440\u043e\u00a0best practices, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u043c\u043e\u0433\u0443\u0442 \u0432\u0430\u043c \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0438 \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u043a\u043e\u0434.<\/p>\n<p>\u0418\u0442\u0430\u043a, Terraform \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442\u044b, \u0447\u0442\u043e\u0431\u044b \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0438\u043b\u0438\u00a0\u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c. \u041c\u0430\u043d\u0438\u0444\u0435\u0441\u0442\u044b Terraform\u00a0\u2014 \u044d\u0442\u043e \u0444\u0430\u0439\u043b\u044b \u0441\u00a0\u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435\u043c.tf, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432, \u0438\u0445 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432 \u0438 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439. \u0414\u043b\u044f\u00a0\u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442\u043e\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f HashiCorp Configuration Language (HCL). HCL \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0443\u0434\u043e\u0431\u043d\u044b\u043c \u0438 \u043f\u043e\u043d\u044f\u0442\u043d\u044b\u043c \u044f\u0437\u044b\u043a\u043e\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0440\u0435\u0441\u0443\u0440\u0441\u044b, \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043c\u0435\u0436\u0434\u0443 \u043d\u0438\u043c\u0438 \u0438 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432.<\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a\u00a0\u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442\u044b \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u044b, Terraform \u043c\u043e\u0436\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u0445 \u0434\u043b\u044f\u00a0\u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u043c\u0438 \u0432\u00a0\u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0435. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u0430\u043c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u00a0\u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043e\u0439, \u0443\u043b\u0443\u0447\u0448\u0430\u0442\u044c \u0435\u0435 \u043d\u0430\u0434\u0435\u0436\u043d\u043e\u0441\u0442\u044c \u0438 \u0441\u043d\u0438\u0436\u0430\u0442\u044c \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u044f \u0440\u0443\u0447\u043d\u044b\u0445 \u043e\u0448\u0438\u0431\u043e\u043a.<\/p>\n<p>Terraform \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0434\u043b\u044f\u00a0\u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b:<\/p>\n<ol>\n<li>\n<p>Providers: \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u044b\u00a0\u2014 \u044d\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u044b \u0434\u043b\u044f\u00a0\u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441\u00a0\u0440\u0435\u0441\u0443\u0440\u0441\u0430\u043c\u0438, \u0442\u0430\u043a\u0438\u043c\u0438, \u043a\u0430\u043a\u00a0AWS, Google Cloud, Microsoft Azure \u0438\u00a0\u0442.\u00a0\u0434.<\/p>\n<\/li>\n<\/ol>\n<ol start=\"2\">\n<li>\n<p>Resources: \u0440\u0435\u0441\u0443\u0440\u0441\u044b\u00a0\u2014 \u044d\u0442\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0441\u043e\u0437\u0434\u0430\u0442\u044c, \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0438\u043b\u0438\u00a0\u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u0430\u044f \u043c\u0430\u0448\u0438\u043d\u0430, \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u0449\u0438\u043a \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438, \u0431\u0430\u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<\/li>\n<\/ol>\n<ol start=\"3\">\n<li>\n<p>Variables: \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435\u00a0\u2014 \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0432\u00a0Terraform \u0434\u043b\u044f\u00a0\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432\u0430\u0448\u0435\u0439 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b.<\/p>\n<\/li>\n<\/ol>\n<ol start=\"4\">\n<li>\n<p>Data Sources: \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445\u00a0\u2014 \u044d\u0442\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 Terraform \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437\u00a0\u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u0432, \u0442\u0430\u043a\u0438\u0445 \u043a\u0430\u043a\u00a0API, \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u043b\u0438\u00a0\u0434\u0440\u0443\u0433\u0438\u0435 \u0441\u043b\u0443\u0436\u0431\u044b.<\/p>\n<\/li>\n<\/ol>\n<ol start=\"5\">\n<li>\n<p>Outputs: \u0432\u044b\u0432\u043e\u0434\u044b\u00a0\u2014 \u044d\u0442\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 Terraform \u0432\u044b\u0434\u0430\u0435\u0442 \u043f\u043e\u0441\u043b\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, IP\u2011\u0430\u0434\u0440\u0435\u0441\u0430, \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u044b \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u0438\u00a0\u0442.\u00a0\u0434.<\/p>\n<\/li>\n<\/ol>\n<p>\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b Terraform, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u0442\u043e\u0438\u0442 \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u044c:<\/p>\n<ol>\n<li>\n<p>\u041c\u043e\u0434\u0443\u043b\u0438. \u041f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u0434 \u0438 \u0443\u043f\u0440\u043e\u0449\u0430\u044e\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u043b\u043e\u0436\u043d\u044b\u043c\u0438 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430\u043c\u0438.<\/p>\n<\/li>\n<\/ol>\n<ol start=\"2\">\n<li>\n<p>\u0412\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f. Terraform \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c\u0438 \u0432\u0435\u0440\u0441\u0438\u044f\u043c\u0438 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f.<\/p>\n<\/li>\n<\/ol>\n<ol start=\"3\">\n<li>\n<p>\u0412\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f. Terraform \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u0439.<\/p>\n<\/li>\n<\/ol>\n<p>\u0418\u0442\u0430\u043a, \u043c\u044b \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u043c, \u0447\u0442\u043e\u00a0\u0441\u00a0\u043f\u043e\u043c\u043e\u0449\u044c\u044e Terraform \u043c\u043e\u0436\u043d\u043e \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0432\u00a0\u043a\u043e\u0434\u0435, \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u0432\u00a0\u0444\u0430\u0439\u043b\u0430\u0445, \u0447\u0442\u043e\u00a0\u043b\u043e\u0433\u0438\u0447\u043d\u043e?, \u0442\u0430\u043a \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u0441\u00a0\u0432\u0430\u043c\u0438 \u043e\u00a0\u043d\u0438\u0445.<\/p>\n<p>\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0442\u0438\u043f\u044b \u0444\u0430\u0439\u043b\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u00a0Terraform, \u0432\u043a\u043b\u044e\u0447\u0430\u044e\u0442 \u0432\u00a0\u0441\u0435\u0431\u044f:<\/p>\n<ol>\n<li>\n<p>\u0424\u0430\u0439\u043b\u044b \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 (.tf \u0444\u0430\u0439\u043b\u044b)\u00a0\u2014 \u044d\u0442\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b Terraform, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0438\u043b\u0438\u00a0\u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c.<\/p>\n<\/li>\n<\/ol>\n<ol start=\"2\">\n<li>\n<p>\u0424\u0430\u0439\u043b\u044b \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 (.tfvars \u0444\u0430\u0439\u043b\u044b)\u00a0\u2014 \u044d\u0442\u043e \u0444\u0430\u0439\u043b\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u0445\u0441\u044f \u0432\u00a0\u0444\u0430\u0439\u043b\u0430\u0445 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438.<\/p>\n<\/li>\n<\/ol>\n<p>\u0424\u0430\u0439\u043b \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f (.tfstate \u0444\u0430\u0439\u043b): \u044d\u0442\u043e \u0444\u0430\u0439\u043b, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0445\u0440\u0430\u043d\u0438\u0442 \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0432\u0430\u0448\u0435\u0439 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b. \u041e\u043d \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437, \u043a\u043e\u0433\u0434\u0430 \u0432\u044b \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0435 apply (\u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u0435\u0441\u043b\u0438 \u0432\u044b \u0447\u0442\u043e\u2011\u0442\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0438 \u0432\u00a0\u043a\u043e\u0434\u0435).<\/p>\n<p>\u0422\u0430\u043a\u0436\u0435, \u0441\u0442\u043e\u0438\u0442 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0440\u043e\u00a0\u0444\u0430\u0439\u043b \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u2011.tfstate. Terraform \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e\u00a0\u0442\u0435\u043a\u0443\u0449\u0435\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 \u0432\u0430\u0448\u0435\u0439 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0432\u00a0\u0444\u0430\u0439\u043b\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f. \u042d\u0442\u043e\u0442 \u0444\u0430\u0439\u043b \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e\u00a0\u0440\u0435\u0441\u0443\u0440\u0441\u0430\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443\u0436\u0435\u00a0\u0431\u044b\u043b\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u044b \u0432\u00a0\u0432\u0430\u0448\u0435\u0439 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435, \u0438 \u0438\u0445 \u0442\u0435\u043a\u0443\u0449\u0438\u0445 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430\u0445.<\/p>\n<p>Terraform \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u044d\u0442\u043e\u0442 \u0444\u0430\u0439\u043b, \u0447\u0442\u043e\u0431\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c, \u043a\u0430\u043a\u0438\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c, \u043a\u0430\u043a\u0438\u0435 \u0441\u043e\u0437\u0434\u0430\u0442\u044c, \u0430\u00a0\u043a\u0430\u043a\u0438\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u0434\u0430\u043b\u0438\u0442\u044c, \u043a\u043e\u0433\u0434\u0430 \u0432\u044b \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 apply. \u0413\u0440\u0443\u0431\u043e \u0433\u043e\u0432\u043e\u0440\u044f, \u043e\u043d \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 Terraform \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c, \u043a\u0430\u043a\u0438\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u043d\u0435\u0441\u0442\u0438 \u0432\u00a0\u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443, \u0447\u0442\u043e\u0431\u044b \u0435\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u043b\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u043c\u0443 \u0432\u00a0\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u0430\u0445.<\/p>\n<p>\u0424\u0430\u0439\u043b \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043c\u043e\u0436\u0435\u0442 \u0445\u0440\u0430\u043d\u0438\u0442\u044c\u0441\u044f \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e \u0438\u043b\u0438\u00a0\u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u00a0\u043e\u0431\u044a\u0435\u043a\u0442\u043d\u043e\u043c \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u0430\u043c \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043e\u0431\u0449\u0443\u044e \u043a\u043e\u043f\u0438\u044e \u0444\u0430\u0439\u043b\u0430 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0438\u043c \u0441\u00a0\u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0445\u043e\u0441\u0442\u043e\u0432.<\/p>\n<p>\u0412\u0430\u0436\u043d\u043e \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e\u00a0\u0444\u0430\u0439\u043b \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u0430\u0436\u043d\u044b\u043c \u0430\u0441\u043f\u0435\u043a\u0442\u043e\u043c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0432\u0430\u0448\u0435\u0439 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043e\u0439, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c \u0435\u0433\u043e \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0443 \u043d\u0430\u00a0\u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u00a0\u043d\u0438\u043c.<\/p>\n<p>\u0422\u0430\u043a\u0436\u0435, \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c, \u0447\u0442\u043e\u00a0\u0444\u0430\u0439\u043b \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u043e\u043d\u0444\u0438\u0434\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u043c, \u0438 \u0435\u0433\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432\u00a0\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u043c \u043c\u0435\u0441\u0442\u0435, \u0442\u0430\u043a \u043a\u0430\u043a\u00a0\u043e\u043d \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0432\u0430\u0436\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e\u00a0\u0432\u0441\u0435\u0439 \u0432\u0430\u0448\u0435\u0439 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435.<\/p>\n<p>\u041a\u0440\u043e\u043c\u0435 \u0432\u0441\u0435\u0433\u043e \u044d\u0442\u043e\u0433\u043e, \u0445\u043e\u0447\u0443 \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u044c, \u0447\u0442\u043e\u00a0\u0435\u0441\u043b\u0438 \u0432\u0430\u043c \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u0437\u0430\u043b\u0435\u0437\u0442\u044c \u0432\u00a0tfstate\u2011\u0444\u0430\u0439\u043b, \u0442\u043e, \u043a\u0430\u043a\u00a0\u0433\u043e\u0432\u043e\u0440\u0438\u0442 \u043c\u043e\u0439 \u043a\u043e\u043b\u043b\u0435\u0433\u0430: \u00ab\u0412\u044b \u0433\u0434\u0435\u2011\u0442\u043e \u0447\u0442\u043e\u2011\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u043b\u0438 \u043d\u0435\u00a0\u0442\u0430\u043a \u0432\u00a0\u044d\u0442\u043e\u0439 \u0436\u0438\u0437\u043d\u0438\u00bb ?<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u0441\u00a0\u0432\u0430\u043c\u0438 \u043e\u00a0\u0442\u043e\u043c, \u043d\u0430\u00a0\u043a\u0430\u043a\u0438\u0435 best practices \u0441\u0442\u043e\u0438\u0442 \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435:<\/p>\n<ol>\n<li>\n<p>\u041d\u0435\u00a0\u0445\u0440\u0430\u043d\u0438\u0442\u0435 \u0432\u0441\u044e \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0432\u00a0\u043e\u0434\u043d\u043e\u043c \u043c\u0435\u0441\u0442\u0435, \u0440\u0430\u0437\u0431\u0435\u0439\u0442\u0435 \u0435\u0451 \u043d\u0430\u00a0\u0447\u0430\u0441\u0442\u0438;<\/p>\n<\/li>\n<\/ol>\n<ol start=\"2\">\n<li>\n<p>\u0418\u0437\u043e\u043b\u0438\u0440\u0443\u0439\u0442\u0435 \u043d\u0435\u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0434\u0440\u0443\u0433 \u043e\u0442\u00a0\u0434\u0440\u0443\u0433\u0430. \u0420\u0430\u0437\u0434\u0435\u043b\u044f\u0439\u0442\u0435 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u0432\u043e\u044e \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443, \u0441\u0435\u0442\u044c, \u0441\u0435\u0440\u0432\u0438\u0441\u044b, \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 \u0438\u00a0\u0442.\u00a0\u0434.;<\/p>\n<\/li>\n<\/ol>\n<ol start=\"3\">\n<li>\n<p>\u041d\u0435\u00a0\u0445\u0440\u0430\u043d\u0438\u0442\u0435 \u0444\u0430\u0439\u043b \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e;<\/p>\n<\/li>\n<\/ol>\n<ol start=\"4\">\n<li>\n<p>\u0411\u043b\u043e\u043a\u0438\u0440\u0443\u0439\u0442\u0435 \u0444\u0430\u0439\u043b \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043f\u0440\u0438\u00a0\u0440\u0430\u0431\u043e\u0442\u0435;<\/p>\n<\/li>\n<\/ol>\n<ol start=\"5\">\n<li>\n<p>\u041f\u0438\u0448\u0438\u0442\u0435 \u043a\u043e\u0434 \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0442\u043e\u043c \u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e\u00a0\u0431\u044b\u043b\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u00a0\u0434\u0440\u0443\u0433\u043e\u043c \u043c\u0435\u0441\u0442\u0435, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u043c\u043e\u0434\u0443\u043b\u0438.<\/p>\n<\/li>\n<\/ol>\n<ol start=\"6\">\n<li>\n<p>\u041f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435\u0441\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c\u0438\u00a0\u2014 \u0443\u0434\u043e\u0431\u043d\u0435\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0434\u043b\u044f\u00a0\u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0435\u0439 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b.<\/p>\n<\/li>\n<\/ol>\n<ol start=\"7\">\n<li>\n<p>\u041f\u0438\u0448\u0438\u0442\u0435 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e, \u043e\u043d\u0430 \u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u0441\u044f.<\/p>\n<\/li>\n<\/ol>\n<h2>\u0427\u0443\u0442\u044c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u043c\u044b \u0437\u0434\u0435\u0441\u044c \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0438\u043b\u0438<\/h2>\n<p>\u041a\u043e\u0433\u0434\u0430 \u0432\u044b \u043f\u0438\u0448\u0438\u0442\u0435 \u043a\u043e\u0434 \u0441\u0432\u043e\u0435\u0439 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b, \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0432\u0441\u0451 \u0432 \u043e\u0434\u043d\u043e\u043c \u0444\u0430\u0439\u043b\u0435, \u043a \u043f\u0440\u0438\u043c\u0435\u0440\u0443 \u0432 \u0444\u0430\u0439\u043b\u0435 main.tf:<\/p>\n<pre><code class=\"bash\">my_project\/  \u2514\u2500\u2500 main.tf<\/code><\/pre>\n<p>\u0412 \u043d\u0451\u043c \u0431\u0443\u0434\u0435\u0442 \u0432\u0441\u0451, \u0438 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u043e\u0432, \u0438 \u0440\u0435\u0441\u0443\u0440\u0441\u044b, \u0438 data sources, \u0438 outputs:\u00a0<\/p>\n<pre><code class=\"coffeescript\">terraform {   required_providers {     yandex = {       source = \"yandex-cloud\/yandex\"     }   }   required_version = \">= 0.13\"    backend \"s3\" {     endpoint   = \"storage.yandexcloud.net\"     bucket     = \"BAKET_NAME\"     region     = \"ru-central1\"     key        = \"FILE_NAME\"     shared_credentials_file = \"storage.key\"      skip_region_validation      = true     skip_credentials_validation = true   } }  provider \"yandex\" {   service_account_key_file = \"key.json\"   cloud_id                 = \"CLOUD_ID\"   folder_id                = \"FOLDER_ID\"   zone                     = \"ru-central1-a\" }  resource \"yandex_vpc_network\" \"test-vpc\" {   name = \"nixys\" }  resource \"yandex_vpc_subnet\" \"test-subnet\" {   v4_cidr_blocks = [\"10.2.0.0\/16\"]   network_id     = yandex_vpc_network.test-vpc.id }  resource \"yandex_vpc_security_group\" \"test-sg\" {   name        = \"My security group\"   description = \"description for my security group\"   network_id  = yandex_vpc_network.test-vpc.id    labels = {     my-label = \"my-label-value\"   }    dynamic \"ingress\" {     for_each = [\"80\", \"8080\"]     content {       protocol       = \"TCP\"       description    = \"rule1 description\"       v4_cidr_blocks = [\"0.0.0.0\/0\"]       from_port      = ingress.value       to_port        = ingress.value     }   }    egress {     protocol       = \"ANY\"     description    = \"rule2 description\"     v4_cidr_blocks = [\"0.0.0.0\/0\"]     from_port      = 0     to_port        = 65535   } }  resource \"yandex_vpc_address\" \"test-ip\" {   name = \"exampleAddress\"    external_ipv4_address {     zone_id = \"ru-central1-a\"   } }  resource \"yandex_compute_instance\" \"nixys\" {   name        = \"nixys\"   platform_id = \"standard-v1\"    resources {     cores  = 2     memory = 2   }    boot_disk {     initialize_params {       image_id = \"fd83h3kff4ja27ejq0d9\"     }   }    network_interface {     subnet_id      = yandex_vpc_subnet.test-subnet.id     nat            = true     nat_ip_address = yandex_vpc_address.test-ip.external_ipv4_address.0.address   }    metadata = {     ssh-keys  = \"debian:${file(\"\/root\/.ssh\/id_rsa.pub\")}\"     user-data = \"${file(\"init.sh\")}\"   } }  output \"external_ip\" {   value = yandex_vpc_address.test-ip.external_ipv4_address.0.address }  output \"external_ip-2\" {   value = yandex_compute_instance.nixys.network_interface.0.nat_ip_address }<\/code><\/pre>\n<p>Terraform \u044d\u0442\u043e \u00ab\u043f\u0440\u043e\u0436\u0443\u0451\u0442\u00bb \u0438 \u0438\u0441\u043f\u043e\u043b\u043d\u0438\u0442 \u043a\u043e\u0434. \u0412\u0441\u0451\u00a0\u0431\u044b \u043d\u0438\u0447\u0435\u0433\u043e, \u0435\u0441\u043b\u0438 \u0432\u044b \u043e\u043f\u0438\u0441\u0430\u043b\u0438 \u043e\u0434\u0438\u043d \u0440\u0435\u0441\u0443\u0440\u0441, \u043d\u043e\u00a0\u0438\u0445 \u043c\u043e\u0436\u0435\u0442\u00a0\u0431\u044b\u0442\u044c \u0434\u0432\u0430, \u0430\u00a0\u043c\u043e\u0436\u0435\u0442 \u0438 \u043f\u0430\u0440\u0443 \u0434\u0435\u0441\u044f\u0442\u043a\u043e\u0432. \u0412\u00a0\u0442\u0430\u043a\u043e\u043c \u0444\u0430\u0439\u043b\u0435 \u0431\u0443\u0434\u0435\u0442 \u0443\u0436\u0435 \u0441\u043b\u043e\u0436\u043d\u0435\u0435 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u0438 \u0432\u043d\u043e\u0441\u0438\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432\u00a0\u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443.<\/p>\n<p>\u0425\u043e\u0440\u043e\u0448\u043e, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u0434\u00a0\u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0435\u0441\u0443\u0440\u0441 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0444\u0430\u0439\u043b, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 gitlab.tf, mongodb.tf, rebbitmq.tf \u0438\u00a0\u0442.\u00a0\u0434.:<\/p>\n<pre><code class=\"bash\">my_project\/ \u251c\u2500\u2500 k8s \u2514\u2500\u2500 network<\/code><\/pre>\n<p>\u0423\u0436\u0435 \u043b\u0443\u0447\u0448\u0435, \u0442\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u0437\u043d\u0430\u0435\u043c \u0432\u00a0\u043a\u0430\u043a\u043e\u043c \u0444\u0430\u0439\u043b\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0438\u043b\u0438\u00a0\u0434\u043e\u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440. \u041d\u043e\u00a0\u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u0435\u0449\u0451 \u043e\u0434\u043d\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u00a0\u2014 Terraform \u0432\u043e\u0441\u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0432\u0441\u0435 \u0444\u0430\u0439\u043b\u044b \u0432\u00a0\u0440\u0430\u0431\u043e\u0447\u0435\u043c \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435 \u043a\u0430\u043a\u00a0\u043e\u0434\u0438\u043d, \u0430\u00a0\u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e\u00a0\u0438 \u043f\u0440\u0438\u00a0\u0437\u0430\u043f\u0443\u0441\u043a\u0435 plan \u0438\u043b\u0438\u00a0apply \u043e\u043d \u043f\u043e\u0439\u0434\u0451\u0442 \u043f\u0435\u0440\u0435\u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0432\u0441\u044e \u0432\u0430\u0448\u0443 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443. \u042d\u0442\u043e \u0434\u043e\u043b\u0433\u043e \u0438 \u043d\u0438\u043a\u043e\u043c\u0443 \u043d\u0435\u00a0\u043d\u0443\u0436\u043d\u043e. \u041d\u0435\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043f\u0435\u0440\u0435\u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u0434\u043b\u044f\u00a0\u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 k8s, \u0435\u0441\u043b\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432\u043d\u043e\u0441\u0438\u043b\u0438\u0441\u044c \u0432\u00a0\u043f\u043e\u0434\u0441\u0435\u0442\u044c. \u041a\u0430\u043a\u043e\u0439 \u0442\u043e\u0433\u0434\u0430 \u0432\u044b\u0445\u043e\u0434? \u0412\u0441\u0451 \u043f\u0440\u043e\u0441\u0442\u043e, \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0431\u043e\u0447\u0438\u0439 \u043a\u0430\u0442\u0430\u043b\u043e\u0433 \u043f\u043e\u0434\u00a0\u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0435\u0441\u0443\u0440\u0441 \u0438\u043b\u0438\u00a0\u0441\u0432\u044f\u0437\u0430\u043d\u043d\u0443\u044e \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438 \u0433\u0440\u0443\u043f\u043f\u0443 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432:<\/p>\n<pre><code class=\"bash\">my_project\/ \u251c\u2500\u2500 k8s \u2502\u00a0\u00a0 \u2514\u2500\u2500 main.tf \u2514\u2500\u2500 network     \u2514\u2500\u2500 main.tf<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0443\u00a0\u043d\u0430\u0441 \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442\u043e\u0432 Terraform, \u043a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437\u00a0\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0441\u0432\u043e\u044e \u0447\u0430\u0441\u0442\u044c \u043e\u0431\u0449\u0435\u0439 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b, \u043d\u043e\u00a0\u0432\u0441\u0451\u00a0\u0436\u0435 \u0443\u00a0\u043d\u0430\u0441 \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0441\u00a0\u0442\u0435\u043c, \u0447\u0442\u043e\u00a0\u0432\u0441\u0451 \u0441\u0432\u0430\u043b\u0435\u043d\u043e \u0432\u00a0\u043e\u0434\u043d\u0443 \u043a\u0443\u0447\u0443. \u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0442\u043e\u0433\u043e\u00a0\u0436\u0435 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 k8s \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u043e\u0435, \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0432\u00a0\u043e\u0434\u043d\u043e\u043c \u0444\u0430\u0439\u043b\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u043d\u0435\u00a0\u0443\u0434\u043e\u0431\u043d\u043e. \u0420\u0435\u0448\u0435\u043d\u0438\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435\u00a0\u2014 \u043c\u044b \u0440\u0430\u0437\u0431\u0438\u0432\u0430\u0435\u043c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u043f\u043e\u00a0\u0442\u0438\u043f\u0443 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c\u044b\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432, \u0442.\u00a0\u0435. \u0435\u0441\u0442\u044c \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u0444\u0430\u0439\u043b main.tf, \u0433\u0434\u0435 \u043c\u044b \u043e\u0431\u044a\u044f\u0432\u0438\u043c \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430 \u0438 \u043f\u0440\u043e\u043f\u0438\u0448\u0435\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u044b \u043a\u00a0\u043e\u0431\u043b\u0430\u043a\u0443. \u0414\u0430\u043b\u0435\u0435, \u043c\u044b \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043c \u043a\u043e\u0434 \u0432\u00a0\u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b. \u0412\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u044d\u0442\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"bash\">my_project\/ \u251c\u2500\u2500 k8s \u2502\u00a0\u00a0 \u251c\u2500\u2500 cluster.tf \u2502\u00a0\u00a0 \u251c\u2500\u2500 main.tf \u2502\u00a0\u00a0 \u251c\u2500\u2500 node_group.tf \u2502\u00a0\u00a0 \u251c\u2500\u2500 service_account.tf \u2514\u2500\u2500 network     \u251c\u2500\u2500 external_ip.tf     \u251c\u2500\u2500 main.tf     \u251c\u2500\u2500 security_group.tf     \u2514\u2500\u2500 vpc.tf<\/code><\/pre>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043c\u044b \u0438 \u0440\u0430\u0437\u0434\u0435\u043b\u044f\u0435\u043c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438 \u0438 \u0441 \u043b\u0435\u0433\u043a\u043e\u0441\u0442\u044c\u044e \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c\u0441\u044f \u0432 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435, \u0435\u0441\u043b\u0438 \u0432\u0438\u0434\u0438\u043c \u0435\u0451 \u0432\u043f\u0435\u0440\u0432\u044b\u0435.<\/p>\n<p>\u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u0434\u0443\u043c\u044b\u0432\u0430\u0442\u044c \u0435\u0449\u0451 \u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043d\u044b\u0445 \u0443\u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u0439, \u043d\u043e \u0438\u043d\u043e\u0433\u0434\u0430 \u0441\u0442\u043e\u0438\u0442 \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c\u0441\u044f \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0434\u0430\u043b\u044c\u0448\u0435)<\/p>\n<h2>\u041f\u043e\u0434\u043d\u0438\u043c\u0430\u0435\u043c \u043a\u043b\u0430\u0441\u0442\u0435\u0440<\/h2>\n<p>\u0418\u0442\u0430\u043a, \u0442\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u043c, \u0447\u0442\u043e \u043a \u0447\u0435\u043c\u0443, \u0438 \u043a\u0430\u043a \u043d\u0430\u043c \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u0448\u0443 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u0435\u0440\u0435\u0439\u0434\u0451\u043c \u043a \u0434\u0435\u043b\u0443 \u0438 \u043d\u0430\u0447\u043d\u0451\u043c \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043c\u0435\u0436\u0440\u0435\u0433\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 kubernetes \u0441 \u0430\u0432\u0442\u043e\u0441\u043a\u0435\u0439\u043b\u0438\u043d\u0433\u043e\u043c worker-\u043d\u043e\u0434 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Terraform \u0432 Yandex Cloud. \u0412 \u044d\u0442\u043e\u043c \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435 \u043c\u044b \u043f\u043e\u0434\u043d\u0438\u043c\u0435\u043c \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 \u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c kube-prometheus-stack.<\/p>\n<p>\u0427\u0430\u0441\u0442\u0438 \u043f\u0440\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443 <a href=\"https:\/\/developer.hashicorp.com\/terraform\/tutorials\/aws-get-started\/install-cli\">Terraform <\/a>\u0438 <a href=\"https:\/\/cloud.yandex.ru\/docs\/cli\/operations\/install-cli\">yc <\/a>(\u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u043e\u0439 \u0443\u0442\u0438\u043b\u0438\u0442\u044b Yandex Cloud) \u044f \u0441\u043d\u043e\u0432\u0430 \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u044e, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 \u044d\u0442\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0435\u0439 \u043f\u043e \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u043d\u043d\u044b\u043c \u0441\u0441\u044b\u043b\u043a\u0430\u043c.\u00a0<\/p>\n<p>\u0422\u0430\u043a\u0436\u0435 \u044f \u043d\u0435 \u0431\u0443\u0434\u0443 \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u0441\u0435\u0440\u0432\u0438\u0441\u043d\u043e\u0433\u043e \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u0430 \u0438 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u043e\u0431\u043b\u0430\u043a\u0443, \u043e\u0431 \u044d\u0442\u043e\u043c \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u043b \u0432 \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u043c \u0440\u043e\u043b\u0438\u043a\u0435 \u2013 <a href=\"https:\/\/www.youtube.com\/watch?v=q12v5mbMnco&amp;embeds_euri=https%3A%2F%2Fembedd.srv.habr.com%2F&amp;feature=emb_imp_woyt\"><em><u>DevOps \u0441 Nixys | \u0417\u043d\u0430\u043a\u043e\u043c\u0441\u0442\u0432\u043e \u0441 Terraform &#8212; Tutorial \u0434\u043b\u044f \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0438\u0445 #1<\/u><\/em><\/a><em>.<\/em><\/p>\n<p>\u041d\u0430\u0447\u043d\u0451\u043c \u043c\u044b, \u043a\u0430\u043a \u044d\u0442\u043e \u0432\u043e\u0434\u0438\u0442\u0441\u044f, \u0441 <a href=\"https:\/\/cloud.yandex.ru\/docs\/managed-kubernetes\/operations\/kubernetes-cluster\/kubernetes-cluster-create\">\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438<\/a>. \u0421\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u0435\u0439, \u043a\u043e\u0434 \u043f\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044e \u043c\u0435\u0436\u0440\u0435\u0433\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0442\u0430\u043a:<\/p>\n<details class=\"spoiler\">\n<summary>main.tf<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"coffeescript\">locals {   cloud_id    = \"b1gq90dgh25bebiu75o\"   folder_id   = \"b1gia87mbaomkfvsleds\"   k8s_version = \"1.22\"   sa_name     = \"myaccount\" }  terraform {   required_providers {     yandex = {       source = \"yandex-cloud\/yandex\"     }   } }  provider \"yandex\" {   folder_id = local.folder_id }  resource \"yandex_kubernetes_cluster\" \"k8s-regional\" {   network_id = yandex_vpc_network.mynet.id   master {     version = local.k8s_version     regional {       region = \"ru-central1\"       location {         zone      = yandex_vpc_subnet.mysubnet-a.zone         subnet_id = yandex_vpc_subnet.mysubnet-a.id       }       location {         zone      = yandex_vpc_subnet.mysubnet-b.zone         subnet_id = yandex_vpc_subnet.mysubnet-b.id       }       location {         zone      = yandex_vpc_subnet.mysubnet-c.zone         subnet_id = yandex_vpc_subnet.mysubnet-c.id       }     }     security_group_ids = [yandex_vpc_security_group.k8s-main-sg.id]   }   service_account_id      = yandex_iam_service_account.myaccount.id   node_service_account_id = yandex_iam_service_account.myaccount.id   depends_on = [     yandex_resourcemanager_folder_iam_binding.k8s-clusters-agent,     yandex_resourcemanager_folder_iam_binding.vpc-public-admin,     yandex_resourcemanager_folder_iam_binding.images-puller   ]   kms_provider {     key_id = yandex_kms_symmetric_key.kms-key.id   } }  resource \"yandex_vpc_network\" \"mynet\" {   name = \"mynet\" }  resource \"yandex_vpc_subnet\" \"mysubnet-a\" {   v4_cidr_blocks = [\"10.5.0.0\/16\"]   zone           = \"ru-central1-a\"   network_id     = yandex_vpc_network.mynet.id }  resource \"yandex_vpc_subnet\" \"mysubnet-b\" {   v4_cidr_blocks = [\"10.6.0.0\/16\"]   zone           = \"ru-central1-b\"   network_id     = yandex_vpc_network.mynet.id }  resource \"yandex_vpc_subnet\" \"mysubnet-c\" {   v4_cidr_blocks = [\"10.7.0.0\/16\"]   zone           = \"ru-central1-c\"   network_id     = yandex_vpc_network.mynet.id }  resource \"yandex_iam_service_account\" \"myaccount\" {   name        = local.sa_name   description = \"K8S regional service account\" }  resource \"yandex_resourcemanager_folder_iam_binding\" \"k8s-clusters-agent\" {   # \u0421\u0435\u0440\u0432\u0438\u0441\u043d\u043e\u043c\u0443 \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u0443 \u043d\u0430\u0437\u043d\u0430\u0447\u0430\u0435\u0442\u0441\u044f \u0440\u043e\u043b\u044c \"k8s.clusters.agent\".   folder_id = local.folder_id   role      = \"k8s.clusters.agent\"   members = [     \"serviceAccount:${yandex_iam_service_account.myaccount.id}\"   ] }  resource \"yandex_resourcemanager_folder_iam_binding\" \"vpc-public-admin\" {   # \u0421\u0435\u0440\u0432\u0438\u0441\u043d\u043e\u043c\u0443 \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u0443 \u043d\u0430\u0437\u043d\u0430\u0447\u0430\u0435\u0442\u0441\u044f \u0440\u043e\u043b\u044c \"vpc.publicAdmin\".   folder_id = local.folder_id   role      = \"vpc.publicAdmin\"   members = [     \"serviceAccount:${yandex_iam_service_account.myaccount.id}\"   ] }  resource \"yandex_resourcemanager_folder_iam_binding\" \"images-puller\" {   # \u0421\u0435\u0440\u0432\u0438\u0441\u043d\u043e\u043c\u0443 \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u0443 \u043d\u0430\u0437\u043d\u0430\u0447\u0430\u0435\u0442\u0441\u044f \u0440\u043e\u043b\u044c \"container-registry.images.puller\".   folder_id = local.folder_id   role      = \"container-registry.images.puller\"   members = [     \"serviceAccount:${yandex_iam_service_account.myaccount.id}\"   ] }  resource \"yandex_kms_symmetric_key\" \"kms-key\" {   # \u041a\u043b\u044e\u0447 \u0434\u043b\u044f \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432\u0430\u0436\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438, \u0442\u0430\u043a\u043e\u0439 \u043a\u0430\u043a \u043f\u0430\u0440\u043e\u043b\u0438, OAuth-\u0442\u043e\u043a\u0435\u043d\u044b \u0438 SSH-\u043a\u043b\u044e\u0447\u0438.   name              = \"kms-key\"   default_algorithm = \"AES_128\"   rotation_period   = \"8760h\" # 1 \u0433\u043e\u0434. }  resource \"yandex_kms_symmetric_key_iam_binding\" \"viewer\" {   symmetric_key_id = yandex_kms_symmetric_key.kms-key.id   role             = \"viewer\"   members = [     \"serviceAccount:${yandex_iam_service_account.myaccount.id}\",   ] }  resource \"yandex_vpc_security_group\" \"k8s-main-sg\" {   name        = \"k8s-main-sg\"   description = \"\u041f\u0440\u0430\u0432\u0438\u043b\u0430 \u0433\u0440\u0443\u043f\u043f\u044b \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u044e\u0442 \u0431\u0430\u0437\u043e\u0432\u0443\u044e \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430. \u041f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u0435 \u0435\u0435 \u043a \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0443 \u0438 \u0433\u0440\u0443\u043f\u043f\u0430\u043c \u0443\u0437\u043b\u043e\u0432.\"   network_id  = yandex_vpc_network.mynet.id   ingress {     protocol          = \"TCP\"     description       = \"\u041f\u0440\u0430\u0432\u0438\u043b\u043e \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0435\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u0438 \u0441 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0430 \u0430\u0434\u0440\u0435\u0441\u043e\u0432 \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0430 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438. \u041d\u0443\u0436\u043d\u043e \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u043e\u0442\u043a\u0430\u0437\u043e\u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u0438 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0430.\"     predefined_target = \"loadbalancer_healthchecks\"     from_port         = 0     to_port           = 65535   }   ingress {     protocol          = \"ANY\"     description       = \"\u041f\u0440\u0430\u0432\u0438\u043b\u043e \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0435\u0442 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u043c\u0430\u0441\u0442\u0435\u0440-\u0443\u0437\u0435\u043b \u0438 \u0443\u0437\u0435\u043b-\u0443\u0437\u0435\u043b \u0432\u043d\u0443\u0442\u0440\u0438 \u0433\u0440\u0443\u043f\u043f\u044b \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438.\"     predefined_target = \"self_security_group\"     from_port         = 0     to_port           = 65535   }   ingress {     protocol          = \"ANY\"     description       = \"\u041f\u0440\u0430\u0432\u0438\u043b\u043e \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0435\u0442 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u043f\u043e\u0434-\u043f\u043e\u0434 \u0438 \u0441\u0435\u0440\u0432\u0438\u0441-\u0441\u0435\u0440\u0432\u0438\u0441. \u0423\u043a\u0430\u0436\u0438\u0442\u0435 \u043f\u043e\u0434\u0441\u0435\u0442\u0438 \u0432\u0430\u0448\u0435\u0433\u043e \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u0438 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432.\"     v4_cidr_blocks    = concat(yandex_vpc_subnet.mysubnet-a.v4_cidr_blocks, yandex_vpc_subnet.mysubnet-b.v4_cidr_blocks, yandex_vpc_subnet.mysubnet-c.v4_cidr_blocks)     from_port         = 0     to_port           = 65535   }   ingress {     protocol          = \"ICMP\"     description       = \"\u041f\u0440\u0430\u0432\u0438\u043b\u043e \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0435\u0442 \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u044b\u0435 ICMP-\u043f\u0430\u043a\u0435\u0442\u044b \u0438\u0437 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0445 \u043f\u043e\u0434\u0441\u0435\u0442\u0435\u0439.\"     v4_cidr_blocks    = [\"10.0.0.0\/8\", \"172.16.0.0\/12\", \"192.168.0.0\/16\"]   }   ingress {     protocol          = \"TCP\"     description       = \"\u041f\u0440\u0430\u0432\u0438\u043b\u043e \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0435\u0442 \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u0442\u0440\u0430\u0444\u0438\u043a \u0438\u0437 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430 \u043d\u0430 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u043f\u043e\u0440\u0442\u043e\u0432 NodePort. \u0414\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u0438\u043b\u0438 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u0435 \u043f\u043e\u0440\u0442\u044b \u043d\u0430 \u043d\u0443\u0436\u043d\u044b\u0435 \u0432\u0430\u043c.\"     v4_cidr_blocks    = [\"0.0.0.0\/0\"]     from_port         = 30000     to_port           = 32767   }   egress {     protocol          = \"ANY\"     description       = \"\u041f\u0440\u0430\u0432\u0438\u043b\u043e \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0435\u0442 \u0432\u0435\u0441\u044c \u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u0442\u0440\u0430\u0444\u0438\u043a. \u0423\u0437\u043b\u044b \u043c\u043e\u0433\u0443\u0442 \u0441\u0432\u044f\u0437\u0430\u0442\u044c\u0441\u044f \u0441 Yandex Container Registry, Yandex Object Storage, Docker Hub \u0438 \u0442. \u0434.\"     v4_cidr_blocks    = [\"0.0.0.0\/0\"]     from_port         = 0     to_port           = 65535   } }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0410 \u0447\u0442\u043e\u0431\u044b \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0435\u0449\u0451 \u0438 \u0433\u0440\u0443\u043f\u043f\u044b \u0443\u0437\u043b\u043e\u0432, \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u043d\u043e\u0432\u044b\u0439 \u0440\u0435\u0441\u0443\u0440\u0441:<\/p>\n<details class=\"spoiler\">\n<summary>main.tf<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"coffeescript\">resource \"yandex_kubernetes_node_group\" \"my_node_group_a\" {   cluster_id  = yandex_kubernetes_cluster.k8s-regional.id   name        = \"worker-a\"   description = \"description\"   version     = local.k8s_version   labels = {     \"key\" = \"value\"   }   instance_template {     platform_id = \"standard-v1\"     name        = \"worker-a-{instance.short_id}\"     network_interface {       nat                = true       subnet_ids         = [yandex_vpc_subnet.mysubnet-a.id]       security_group_ids = [yandex_vpc_security_group.k8s-main-sg.id]     }     resources {       memory = 2       cores  = 2     }     boot_disk {       type = \"network-hdd\"       size = 32     }     scheduling_policy {       preemptible = false     }   }   scale_policy {     auto_scale {       min     = 1       max     = 3       initial = 1     }   }   allocation_policy {     location {       zone = \"ru-central1-a\"     }   } }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u042d\u0442\u043e \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 <a href=\"https:\/\/cloud.yandex.ru\/docs\/managed-kubernetes\/operations\/node-group\/node-group-create\">\u042f\u043d\u0434\u0435\u043a\u0441\u0430<\/a> + \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 <a href=\"https:\/\/registry.tfpla.net\/providers\/yandex-cloud\/yandex\/latest\/docs\/resources\/kubernetes_node_group\">Terraform<\/a>.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0445\u043e\u0442\u0438\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u0433\u0440\u0443\u043f\u043f\u00a0\u2014 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u043f\u043e\u00a0\u043e\u0434\u043d\u043e\u0439 \u0432\u00a0\u043a\u0430\u0436\u0434\u043e\u0439 \u0437\u043e\u043d\u0435 \u0438 \u0432\u00a0\u043a\u043e\u043d\u0435\u0447\u043d\u043e\u043c \u0438\u0442\u043e\u0433\u0435, \u0441\u00a0\u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u043c\u0438 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0442\u0430\u043a\u0443\u044e \u043a\u0430\u0440\u0442\u0438\u043d\u0443:<\/p>\n<details class=\"spoiler\">\n<summary>main.tf<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"coffeescript\">locals {   cloud_id    = \"b1gq90dgh25bebiu75o\"   folder_id   = \"b1gia87mbaomkfvsleds\"   k8s_version = \"1.22\"   sa_name     = \"myaccount\" }  terraform {   required_providers {     yandex = {       source = \"yandex-cloud\/yandex\"     }   } }  provider \"yandex\" {   folder_id = local.folder_id }  resource \"yandex_kubernetes_cluster\" \"k8s-regional\" {   network_id = yandex_vpc_network.mynet.id   master {     version = local.k8s_version     regional {       region = \"ru-central1\"       location {         zone      = yandex_vpc_subnet.mysubnet-a.zone         subnet_id = yandex_vpc_subnet.mysubnet-a.id       }       location {         zone      = yandex_vpc_subnet.mysubnet-b.zone         subnet_id = yandex_vpc_subnet.mysubnet-b.id       }       location {         zone      = yandex_vpc_subnet.mysubnet-c.zone         subnet_id = yandex_vpc_subnet.mysubnet-c.id       }     }     security_group_ids = [yandex_vpc_security_group.k8s-main-sg.id]   }   service_account_id      = yandex_iam_service_account.myaccount.id   node_service_account_id = yandex_iam_service_account.myaccount.id   depends_on = [     yandex_resourcemanager_folder_iam_binding.k8s-clusters-agent,     yandex_resourcemanager_folder_iam_binding.vpc-public-admin,     yandex_resourcemanager_folder_iam_binding.images-puller   ]   kms_provider {     key_id = yandex_kms_symmetric_key.kms-key.id   } }  resource \"yandex_vpc_network\" \"mynet\" {   name = \"mynet\" }  resource \"yandex_vpc_subnet\" \"mysubnet-a\" {   v4_cidr_blocks = [\"10.5.0.0\/16\"]   zone           = \"ru-central1-a\"   network_id     = yandex_vpc_network.mynet.id }  resource \"yandex_vpc_subnet\" \"mysubnet-b\" {   v4_cidr_blocks = [\"10.6.0.0\/16\"]   zone           = \"ru-central1-b\"   network_id     = yandex_vpc_network.mynet.id }  resource \"yandex_vpc_subnet\" \"mysubnet-c\" {   v4_cidr_blocks = [\"10.7.0.0\/16\"]   zone           = \"ru-central1-c\"   network_id     = yandex_vpc_network.mynet.id }  resource \"yandex_iam_service_account\" \"myaccount\" {   name        = local.sa_name   description = \"K8S regional service account\" }  resource \"yandex_resourcemanager_folder_iam_binding\" \"k8s-clusters-agent\" {   # \u0421\u0435\u0440\u0432\u0438\u0441\u043d\u043e\u043c\u0443 \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u0443 \u043d\u0430\u0437\u043d\u0430\u0447\u0430\u0435\u0442\u0441\u044f \u0440\u043e\u043b\u044c \"k8s.clusters.agent\".   folder_id = local.folder_id   role      = \"k8s.clusters.agent\"   members = [     \"serviceAccount:${yandex_iam_service_account.myaccount.id}\"   ] }  resource \"yandex_resourcemanager_folder_iam_binding\" \"vpc-public-admin\" {   # \u0421\u0435\u0440\u0432\u0438\u0441\u043d\u043e\u043c\u0443 \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u0443 \u043d\u0430\u0437\u043d\u0430\u0447\u0430\u0435\u0442\u0441\u044f \u0440\u043e\u043b\u044c \"vpc.publicAdmin\".   folder_id = local.folder_id   role      = \"vpc.publicAdmin\"   members = [     \"serviceAccount:${yandex_iam_service_account.myaccount.id}\"   ] }  resource \"yandex_resourcemanager_folder_iam_binding\" \"images-puller\" {   # \u0421\u0435\u0440\u0432\u0438\u0441\u043d\u043e\u043c\u0443 \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u0443 \u043d\u0430\u0437\u043d\u0430\u0447\u0430\u0435\u0442\u0441\u044f \u0440\u043e\u043b\u044c \"container-registry.images.puller\".   folder_id = local.folder_id   role      = \"container-registry.images.puller\"   members = [     \"serviceAccount:${yandex_iam_service_account.myaccount.id}\"   ] }  resource \"yandex_kms_symmetric_key\" \"kms-key\" {   # \u041a\u043b\u044e\u0447 \u0434\u043b\u044f \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432\u0430\u0436\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438, \u0442\u0430\u043a\u043e\u0439 \u043a\u0430\u043a \u043f\u0430\u0440\u043e\u043b\u0438, OAuth-\u0442\u043e\u043a\u0435\u043d\u044b \u0438 SSH-\u043a\u043b\u044e\u0447\u0438.   name              = \"kms-key\"   default_algorithm = \"AES_128\"   rotation_period   = \"8760h\" # 1 \u0433\u043e\u0434. }  resource \"yandex_kms_symmetric_key_iam_binding\" \"viewer\" {   symmetric_key_id = yandex_kms_symmetric_key.kms-key.id   role             = \"viewer\"   members = [     \"serviceAccount:${yandex_iam_service_account.myaccount.id}\",   ] }  resource \"yandex_vpc_security_group\" \"k8s-main-sg\" {   name        = \"k8s-main-sg\"   description = \"\u041f\u0440\u0430\u0432\u0438\u043b\u0430 \u0433\u0440\u0443\u043f\u043f\u044b \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u044e\u0442 \u0431\u0430\u0437\u043e\u0432\u0443\u044e \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430. \u041f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u0435 \u0435\u0435 \u043a \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0443 \u0438 \u0433\u0440\u0443\u043f\u043f\u0430\u043c \u0443\u0437\u043b\u043e\u0432.\"   network_id  = yandex_vpc_network.mynet.id   ingress {     protocol          = \"TCP\"     description       = \"\u041f\u0440\u0430\u0432\u0438\u043b\u043e \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0435\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u0438 \u0441 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0430 \u0430\u0434\u0440\u0435\u0441\u043e\u0432 \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0430 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438. \u041d\u0443\u0436\u043d\u043e \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u043e\u0442\u043a\u0430\u0437\u043e\u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u0438 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0430.\"     predefined_target = \"loadbalancer_healthchecks\"     from_port         = 0     to_port           = 65535   }   ingress {     protocol          = \"ANY\"     description       = \"\u041f\u0440\u0430\u0432\u0438\u043b\u043e \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0435\u0442 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u043c\u0430\u0441\u0442\u0435\u0440-\u0443\u0437\u0435\u043b \u0438 \u0443\u0437\u0435\u043b-\u0443\u0437\u0435\u043b \u0432\u043d\u0443\u0442\u0440\u0438 \u0433\u0440\u0443\u043f\u043f\u044b \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438.\"     predefined_target = \"self_security_group\"     from_port         = 0     to_port           = 65535   }   ingress {     protocol          = \"ANY\"     description       = \"\u041f\u0440\u0430\u0432\u0438\u043b\u043e \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0435\u0442 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u043f\u043e\u0434-\u043f\u043e\u0434 \u0438 \u0441\u0435\u0440\u0432\u0438\u0441-\u0441\u0435\u0440\u0432\u0438\u0441. \u0423\u043a\u0430\u0436\u0438\u0442\u0435 \u043f\u043e\u0434\u0441\u0435\u0442\u0438 \u0432\u0430\u0448\u0435\u0433\u043e \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u0438 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432.\"     v4_cidr_blocks    = concat(yandex_vpc_subnet.mysubnet-a.v4_cidr_blocks, yandex_vpc_subnet.mysubnet-b.v4_cidr_blocks, yandex_vpc_subnet.mysubnet-c.v4_cidr_blocks)     from_port         = 0     to_port           = 65535   }   ingress {     protocol          = \"ICMP\"     description       = \"\u041f\u0440\u0430\u0432\u0438\u043b\u043e \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0435\u0442 \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u044b\u0435 ICMP-\u043f\u0430\u043a\u0435\u0442\u044b \u0438\u0437 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0445 \u043f\u043e\u0434\u0441\u0435\u0442\u0435\u0439.\"     v4_cidr_blocks    = [\"10.0.0.0\/8\", \"172.16.0.0\/12\", \"192.168.0.0\/16\"]   }   ingress {     protocol          = \"TCP\"     description       = \"\u041f\u0440\u0430\u0432\u0438\u043b\u043e \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0435\u0442 \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u0442\u0440\u0430\u0444\u0438\u043a \u0438\u0437 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430 \u043d\u0430 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u043f\u043e\u0440\u0442\u043e\u0432 NodePort. \u0414\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u0438\u043b\u0438 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u0435 \u043f\u043e\u0440\u0442\u044b \u043d\u0430 \u043d\u0443\u0436\u043d\u044b\u0435 \u0432\u0430\u043c.\"     v4_cidr_blocks    = [\"0.0.0.0\/0\"]     from_port         = 30000     to_port           = 32767   }   egress {     protocol          = \"ANY\"     description       = \"\u041f\u0440\u0430\u0432\u0438\u043b\u043e \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0435\u0442 \u0432\u0435\u0441\u044c \u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u0442\u0440\u0430\u0444\u0438\u043a. \u0423\u0437\u043b\u044b \u043c\u043e\u0433\u0443\u0442 \u0441\u0432\u044f\u0437\u0430\u0442\u044c\u0441\u044f \u0441 Yandex Container Registry, Yandex Object Storage, Docker Hub \u0438 \u0442. \u0434.\"     v4_cidr_blocks    = [\"0.0.0.0\/0\"]     from_port         = 0     to_port           = 65535   } }  resource \"yandex_kubernetes_node_group\" \"my_node_group_a\" {   cluster_id  = yandex_kubernetes_cluster.k8s-regional.id   name        = \"worker-a\"   description = \"description\"   version     = local.k8s_version   labels = {     \"key\" = \"value\"   }   instance_template {     platform_id = \"standard-v1\"     name        = \"worker-a-{instance.short_id}\"     network_interface {       nat                = true       subnet_ids         = [yandex_vpc_subnet.mysubnet-a.id]       security_group_ids = [yandex_vpc_security_group.k8s-main-sg.id]     }     resources {       memory = 2       cores  = 2     }     boot_disk {       type = \"network-hdd\"       size = 32     }     scheduling_policy {       preemptible = false     }   }   scale_policy {     auto_scale {       min     = 1       max     = 3       initial = 1     }   }   allocation_policy {     location {       zone = \"ru-central1-a\"     }   } }  resource \"yandex_kubernetes_node_group\" \"my_node_group_b\" {   cluster_id  = yandex_kubernetes_cluster.k8s-regional.id   name        = \"worker-b\"   description = \"description\"   version     = local.k8s_version   labels = {     \"key\" = \"value\"   }   instance_template {     platform_id = \"standard-v1\"     name        = \"worker-b-{instance.short_id}\"     network_interface {       nat                = true       subnet_ids         = [yandex_vpc_subnet.mysubnet-b.id]       security_group_ids = [yandex_vpc_security_group.k8s-main-sg.id]     }     resources {       memory = 2       cores  = 2     }     boot_disk {       type = \"network-hdd\"       size = 32     }     scheduling_policy {       preemptible = false     }   }   scale_policy {     auto_scale {       min     = 1       max     = 3       initial = 1     }   }   allocation_policy {     location {       zone = \"ru-central1-b\"     }   } }  resource \"yandex_kubernetes_node_group\" \"my_node_group_c\" {   cluster_id  = yandex_kubernetes_cluster.k8s-regional.id   name        = \"worker-c\"   description = \"description\"   version     = local.k8s_version   labels = {     \"key\" = \"value\"   }   instance_template {     platform_id = \"standard-v1\"     name        = \"worker-c-{instance.short_id}\"     network_interface {       nat                = true       subnet_ids         = [yandex_vpc_subnet.mysubnet-c.id]       security_group_ids = [yandex_vpc_security_group.k8s-main-sg.id]     }     resources {       memory = 2       cores  = 2     }     boot_disk {       type = \"network-hdd\"       size = 32     }     scheduling_policy {       preemptible = false     }   }   scale_policy {     auto_scale {       min     = 1       max     = 3       initial = 1     }   }   allocation_policy {     location {       zone = \"ru-central1-c\"     }   } }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0412\u00a0\u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435, \u0435\u0441\u043b\u0438 \u043d\u0435\u00a0\u043f\u0430\u0440\u0438\u0442\u044c\u0441\u044f, \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0438 \u0442\u0430\u043a. \u0412\u0441\u0451 \u0437\u0430\u0432\u0435\u0434\u0451\u0442\u0441\u044f \u0438 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c. \u041c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u043e\u0442\u043a\u0430\u0437\u043e\u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u044b\u0439 \u043a\u043b\u0430\u0441\u0442\u0435\u0440 k8s \u0441\u00a0\u0440\u0430\u0431\u043e\u0447\u0438\u043c\u0438 \u0443\u0437\u043b\u0430\u043c\u0438 \u0432\u00a0\u0440\u0430\u0437\u043d\u044b\u0445 \u0437\u043e\u043d\u0430\u0445 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u0438, \u0434\u0430\u00a0\u0435\u0449\u0451 \u0438 \u0441\u00a0\u0430\u0432\u0442\u043e\u0441\u043a\u0435\u0439\u043b\u0438\u043d\u0433\u043e\u043c. \u041d\u043e\u00a0\u0441\u043c\u043e\u0436\u0435\u043c\u00a0\u043b\u0438 \u043c\u044b \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432\u0441\u0451 \u043a\u0430\u043a\u00a0\u0435\u0441\u0442\u044c? \u041a\u043e\u043d\u0435\u0447\u043d\u043e\u00a0\u0436\u0435 \u043d\u0435\u0442, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0438\u0437\u00a0\u044d\u0442\u043e\u0433\u043e \u0444\u0440\u0430\u043d\u043a\u0435\u043d\u0448\u0442\u0435\u0439\u043d\u0430 \u0430\u043a\u043a\u0443\u0440\u0430\u0442\u043d\u044b\u0435, \u043a\u0440\u0430\u0441\u0438\u0432\u044b\u0435, \u0430\u00a0\u0433\u043b\u0430\u0432\u043d\u043e\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442\u044b, \u0441\u00a0\u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u0432\u00a0\u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u043c\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0436\u0438\u0442\u044c \u0441\u00a0\u0447\u0438\u0441\u0442\u043e\u0439 \u0441\u043e\u0432\u0435\u0441\u0442\u044c\u044e.<\/p>\n<h2>\u041f\u043e\u0433\u043d\u0430\u043b\u0438)<\/h2>\n<p>\u0420\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 my_project<em>.\u00a0<\/em><\/p>\n<pre><code class=\"bash\">mkdir ~\/my_project<\/code><\/pre>\n<p>\u0414\u043b\u044f\u00a0\u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043a\u043b\u0430\u0441\u0442\u0435\u0440 k8s \u043d\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0441\u0435\u0442\u044c, \u043f\u043e\u0434\u0441\u0435\u0442\u044c \u0438 \u0441\u0435\u0440\u0432\u0438\u0441\u043d\u044b\u0439 \u0430\u043a\u043a\u0430\u0443\u043d\u0442. \u041f\u043e\u044d\u0442\u043e\u043c\u0443, \u0432\u00a0\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441\u00a0\u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u044b\u043c\u0438 \u0440\u0430\u043d\u0435\u0435 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u044f\u043c\u0438, \u043c\u044b \u043d\u0430\u0447\u043d\u0451\u043c \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0441\u00a0\u0441\u0435\u0442\u0438 \u0438 \u0435\u0451 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u0432\u00a0\u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u043c \u0440\u0430\u0431\u043e\u0447\u0435\u043c \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435 network:<\/p>\n<pre><code class=\"bash\">mkdir ~\/my_project\/network cd ~\/my_project\/network<\/code><\/pre>\n<p>\u0414\u0430\u043b\u0435\u0435 \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0444\u0430\u0439\u043b main.tf, \u0432 \u043d\u0435\u043c \u043f\u0440\u043e\u043f\u0438\u0448\u0435\u043c \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430 \u0438 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043e\u0431\u043b\u0430\u043a\u0443:<\/p>\n<details class=\"spoiler\">\n<summary>my_project\/network\/main.tf<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"coffeescript\">terraform {   required_providers {     yandex = {       source = \"yandex-cloud\/yandex\"     }   }   required_version = \">= 0.13\"    backend \"s3\" {     endpoint   = \"storage.yandexcloud.net\"     bucket     = \"test-tfstate\"     region     = \"ru-central1\"     key        = \"my-project-network.tfstate\"     shared_credentials_file = \"storage.key\"      skip_region_validation      = true     skip_credentials_validation = true   } }  provider \"yandex\" {   service_account_key_file = \"key.json\"   cloud_id                 = \"b1gq90dgh25bebiu75o\"   folder_id                = \"b1gia87mbaomkfvsleds\"   zone                     = \"ru-central1-a\" }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0412\u0441\u0451, \u0447\u0442\u043e \u0437\u0434\u0435\u0441\u044c \u043e\u043f\u0438\u0441\u0430\u043d\u043e, \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0437\u043d\u0430\u043a\u043e\u043c\u043e \u043f\u043e \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u043c\u0443 \u0440\u043e\u043b\u0438\u043a\u0443, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u044d\u0442\u043e\u043c \u0438 \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u043a \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044e \u0441\u0435\u0442\u0438 \u0438 \u043f\u043e\u0434\u0441\u0435\u0442\u0438, \u0438\u0445 \u043c\u044b \u043e\u043f\u0438\u0448\u0435\u043c \u0432 \u0444\u0430\u0439\u043b\u0435 vpc.tf:<\/p>\n<details class=\"spoiler\">\n<summary>my_project\/network\/vpc.tf<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"go\">resource \"yandex_vpc_network\" \"network-main\" {   name = \"mynet\" }  resource \"yandex_vpc_subnet\" \"mysubnet-a\" {   v4_cidr_blocks = [\"10.5.0.0\/16\"]   zone           = \"ru-central1-a\"   network_id     = yandex_vpc_network.network-main.id }  resource \"yandex_vpc_subnet\" \"mysubnet-b\" {   v4_cidr_blocks = [\"10.6.0.0\/16\"]   zone           = \"ru-central1-b\"   network_id     = yandex_vpc_network.network-main.id }  resource \"yandex_vpc_subnet\" \"mysubnet-c\" {   v4_cidr_blocks = [\"10.7.0.0\/16\"]   zone           = \"ru-central1-c\"   network_id     = yandex_vpc_network.network-main.id }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u042d\u0442\u043e \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u042f\u043d\u0434\u0435\u043a\u0441\u0430. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043d\u0430\u00a0\u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043a\u043e\u0434\u0430 \u0432\u00a0main.tf \u0438 vpc.tf \u043f\u0440\u043e\u0432\u0435\u0434\u0451\u043c \u0440\u044f\u0434 \u0443\u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u0439. \u0414\u043b\u044f\u00a0\u043d\u0430\u0447\u0430\u043b\u0430 \u0432\u044b\u043d\u0435\u0441\u0435\u043c \u0438\u043c\u044f \u0441\u0435\u0442\u0438 \u0438 \u0435\u0449\u0451 \u043f\u0430\u0440\u0443 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0432\u00a0\u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435. \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0444\u0430\u0439\u043b\u044b terraform.tfvars \u0438 variables.tf. \u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u0448 \u0440\u0430\u0431\u043e\u0447\u0438\u0439 \u043a\u0430\u0442\u0430\u043b\u043e\u0433 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"bash\">my_project\/ \u2514\u2500\u2500 network     \u251c\u2500\u2500 main.tf     \u251c\u2500\u2500 terraform.tfvars     \u251c\u2500\u2500 variables.tf     \u2514\u2500\u2500 vpc.tf<\/code><\/pre>\n<p>\u0412 \u0444\u0430\u0439\u043b\u0435 variables.tf \u0443\u043a\u0430\u0436\u0435\u043c, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u043c \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0447\u0435\u0442\u044b\u0440\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435:<\/p>\n<details class=\"spoiler\">\n<summary>my_project\/network\/variables.tf<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"coffeescript\">#=========== main ============== variable \"cloud_id\" {   description = \"The cloud ID\"   type        = string } variable \"folder_id\" {   description = \"The folder ID\"   type        = string } variable \"default_zone\" {   description = \"The default zone\"   type        = string   default     = \"ru-cenral1-a\" }  #=========== network ============== variable \"network_name\" {   description = \"The name of main network\"   type        = string }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0422\u0443\u0442 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u043e\u044f\u0441\u043d\u0435\u043d\u0438\u0435 \u043a\u00a0\u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0438 \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0442\u0438\u043f \u0434\u0430\u043d\u043d\u044b\u0445. \u0422\u0430\u043a\u0436\u0435, \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u043e \u0434\u043b\u044f\u00a0\u044d\u0441\u0442\u0435\u0442\u0438\u0447\u043d\u043e\u0441\u0442\u0438 \u0440\u0430\u0437\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u043c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435.<\/p>\n<p>\u0414\u0430\u043b\u0435\u0435, \u0432\u00a0\u0444\u0430\u0439\u043b\u0435 terraform.tfvars \u043c\u044b \u043f\u0440\u0438\u0441\u0432\u043e\u0438\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u044d\u0442\u0438\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c:<\/p>\n<details class=\"spoiler\">\n<summary>my_project\/network\/terraform.tfvars<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"coffeescript\">#=========== main ============== cloud_id  = \"b1gq90dgh25bebiu75o\" folder_id = \"b1gia87mbaomkfvsleds\"  #=========== network ============== network_name = \"mynet\"<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0418 \u0432 \u043a\u043e\u043d\u0446\u0435 \u043a\u043e\u043d\u0446\u043e\u0432 \u043f\u0435\u0440\u0435\u043f\u0438\u0448\u0435\u043c \u0432 \u0444\u0430\u0439\u043b\u0430\u0445 main.tf \u0438 vpc.tf \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b:<\/p>\n<details class=\"spoiler\">\n<summary>my_project\/network\/main.tf<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"coffeescript\">terraform {   required_providers {     yandex = {       source = \"yandex-cloud\/yandex\"     }   }   required_version = \">= 0.13\"    backend \"s3\" {     endpoint   = \"storage.yandexcloud.net\"     bucket     = \"test-tfstate\"     region     = \"ru-central1\"     key        = \"my-project-network.tfstate\"     shared_credentials_file = \"storage.key\"      skip_region_validation      = true     skip_credentials_validation = true   } }  provider \"yandex\" {   service_account_key_file = \"key.json\"   cloud_id                 = var.cloud_id   folder_id                = var.folder_id   zone                     = var.default_zone }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>my_project\/network\/vpc.tf<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"coffeescript\">resource \"yandex_vpc_network\" \"network-main\" {   name = var.network_name }  resource \"yandex_vpc_subnet\" \"mysubnet-a\" {   v4_cidr_blocks = [\"10.5.0.0\/16\"]   zone           = \"ru-central1-a\"   network_id     = yandex_vpc_network.network-main.id }  resource \"yandex_vpc_subnet\" \"mysubnet-b\" {   v4_cidr_blocks = [\"10.6.0.0\/16\"]   zone           = \"ru-central1-b\"   network_id     = yandex_vpc_network.network-main.id }  resource \"yandex_vpc_subnet\" \"mysubnet-c\" {   v4_cidr_blocks = [\"10.7.0.0\/16\"]   zone           = \"ru-central1-c\"   network_id     = yandex_vpc_network.network-main.id }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u041e\u0442\u043b\u0438\u0447\u043d\u043e, \u0441\u00a0\u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c\u0438 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043b\u0438\u0441\u044c, \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u0435\u0440\u0435\u0439\u0434\u0451\u043c \u043a\u00a0\u0446\u0438\u043a\u043b\u0443\u00a0\u2014 \u0437\u0430\u0447\u0435\u043c \u043d\u0430\u043c \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0442\u0440\u0438 \u043f\u043e\u0434\u0441\u0435\u0442\u0438, \u043f\u043e\u00a0\u0441\u0443\u0442\u0438 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0445 \u0440\u0435\u0441\u0443\u0440\u0441\u0430, \u0435\u0441\u043b\u0438 \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u043e\u0439\u0442\u0438\u0441\u044c \u043e\u0434\u043d\u0438\u043c \u0431\u043b\u043e\u043a\u043e\u043c \u043a\u043e\u0434\u0430, \u0432\u0435\u0440\u043d\u043e? \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0432\u00a0variables.tf \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <em>subnets<\/em>, \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u0434\u0435\u0441\u044c \u043c\u044b \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0438\u043c \u043d\u0435\u00a0\u043e\u0434\u0438\u043d \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440, \u0430\u00a0\u0438\u0445 \u043d\u0430\u0431\u043e\u0440. \u0423\u00a0Terraform \u0435\u0441\u0442\u044c \u0442\u0438\u043f <em>map<\/em>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u043c \u043e\u0442\u043b\u0438\u0447\u043d\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u043f\u043e\u0434\u00a0\u0437\u0430\u0434\u0430\u0447\u0443 (\u0435\u0449\u0451\u00a0\u0431\u044b, \u0434\u043b\u044f\u00a0\u044d\u0442\u043e\u0433\u043e \u0438 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u043b\u0441\u044f):<\/p>\n<details class=\"spoiler\">\n<summary>my_project\/network\/variables.tf<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"coffeescript\">#=========== main ============== variable \"cloud_id\" {   description = \"The cloud ID\"   type        = string } variable \"folder_id\" {   description = \"The folder ID\"   type        = string } variable \"default_zone\" {   description = \"The default zone\"   type        = string   default     = \"ru-cenral1-a\" }  #=========== network ============== variable \"network_name\" {   description = \"The name of main network\"   type        = string }  #=========== subnet ============== variable \"subnets\" {   description = \"Subnets for k8s\"    type = map(list(object(     {       name = string,       zone = string,       cidr = list(string)     }))   )    validation {     condition     = alltrue([for i in keys(var.subnets) : alltrue([for j in lookup(var.subnets, i) : contains([\"ru-central1-a\", \"ru-central1-b\", \"ru-central1-c\"], j.zone)])])     error_message = \"Error! Zones not supported!\"   } }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0422\u0443\u0442\u00a0\u0436\u0435, \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0430\u0434\u0438 \u043f\u0440\u0438\u043c\u0435\u0440\u0430, \u0434\u0435\u043b\u0430\u044e \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u043d\u0430\u00a0\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0441\u0442\u044c \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0441\u00a0\u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0431\u043b\u043e\u043a\u0430 <em>validation<\/em>, \u0433\u0434\u0435 \u0432 <em>condition<\/em> \u043f\u0438\u0448\u0443 \u0443\u0441\u043b\u043e\u0432\u0438\u0435, \u0430\u00a0\u0432\u00a0\u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0435 <em>error_message<\/em> \u0442\u0435\u043a\u0441\u0442 \u043e\u0448\u0438\u0431\u043a\u0438. \u041c\u043e\u0436\u043d\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043d\u0430\u00a0\u0432\u0441\u0451 \u043f\u043e\u0434\u0440\u044f\u0434, \u043d\u043e\u00a0\u044d\u0442\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u0438 \u0442\u0440\u0443\u0434\u043e\u0435\u043c\u043a\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430. \u041e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c\u0441\u044f \u043d\u0430\u00a0\u0442\u043e\u043c, \u0447\u0442\u043e\u00a0\u043f\u0440\u043e\u0441\u0442\u043e \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u043b\u0438 \u043e\u00a0\u0442\u0430\u043a\u043e\u0439 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438.<\/p>\n<p>\u0414\u0430\u043b\u0435\u0435, \u0432\u00a0\u0444\u0430\u0439\u043b\u0435 terraform.tfvars \u043c\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u0443\u043a\u0430\u0436\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f:<\/p>\n<details class=\"spoiler\">\n<summary>my_project\/network\/terraform.tfvars<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"coffeescript\">#=========== main ============== cloud_id  = \"b1gq90dgh25bebiu75o\" folder_id = \"b1gia87mbaomkfvsleds\"  #=========== network ============== network_name = \"mynet\"  #=========== subnet ============== subnets = {   \"k8s_masters\" = [     {       name = \"k8s_master_zone_a\"       zone = \"ru-central1-a\"       cidr = [\"10.0.1.0\/28\"]     },     {       name = \"k8s_master_zone_b\"       zone = \"ru-central1-b\"       cidr = [\"10.0.2.0\/28\"]     },     {       name = \"k8s_master_zone_c\"       zone = \"ru-central1-c\"       cidr = [\"10.0.3.0\/28\"]     }   ],   \"k8s_workers\" = [     {       name = \"k8s_worker_zone_a\"       zone = \"ru-central1-a\"       cidr = [\"10.0.4.0\/28\"]     },     {       name = \"k8s_worker_zone_b\"       zone = \"ru-central1-b\"       cidr = [\"10.0.5.0\/28\"]     },     {       name = \"k8s_worker_zone_c\"       zone = \"ru-central1-c\"       cidr = [\"10.0.6.0\/28\"]     }   ], }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u041a\u0430\u043a \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u0438\u0434\u0435\u0442\u044c, \u044f \u0434\u043e\u0431\u0430\u0432\u0438\u043b \u0435\u0449\u0451 3 \u043f\u043e\u0434\u0441\u0435\u0442\u0438 \u0434\u043b\u044f \u0432\u043e\u0440\u043a\u0435\u0440-\u043d\u043e\u0434, \u0447\u0442\u043e\u0431\u044b \u0432\u0441\u0451 \u0440\u0430\u0437\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0442\u044c.<\/p>\n<p>\u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0444\u0430\u0439\u043b local.tf, \u0441\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u044b\u043c:<\/p>\n<details class=\"spoiler\">\n<summary>my_project\/network\/locals.tf<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"coffeescript\">locals {   subnet_array = flatten([for k, v in var.subnets : [for j in v : {     name = j.name     zone = j.zone     cidr = j.cidr     }   ]]) }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0412\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u0431\u0438\u0440\u0430\u0435\u0442 \u0432\u0445\u043e\u0434\u043d\u0443\u044e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e <em>var.subnets<\/em> \u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <em>flatten<\/em> \u0441\u0433\u043b\u0430\u0436\u0438\u0432\u0430\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0432 \u0435\u0434\u0438\u043d\u044b\u0439 \u043e\u0434\u043d\u043e\u043c\u0435\u0440\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432. \u041a\u0430\u0436\u0434\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0438\u0440\u0443\u044e\u0449\u0435\u043c \u0441\u043f\u0438\u0441\u043a\u0435 \u0438\u043c\u0435\u0435\u0442 \u0442\u0440\u0438 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430: <em>name<\/em>, <em>zone<\/em> \u0438 <em>cidr<\/em>. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c, \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u043a\u043b\u044e\u0447\u0430 <em>cidr<\/em> \u0432 \u0441\u043f\u0438\u0441\u043a\u0435, \u0447\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u0432\u0430\u0436\u043d\u043e. \u0412\u0435\u0434\u044c \u0434\u0430\u043b\u0435\u0435 \u0432 \u0440\u0435\u0441\u0443\u0440\u0441\u0435 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0438\u043c\u0435\u043d\u043d\u043e \u0441\u043f\u0438\u0441\u043e\u043a.<\/p>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0430\u0448 \u043a\u043e\u0434 \u0432 vpc.tf:<\/p>\n<details class=\"spoiler\">\n<summary>my_project\/network\/vpc.tf<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"coffeescript\">resource \"yandex_vpc_network\" \"network-main\" {   name = var.network_name }  resource \"yandex_vpc_subnet\" \"subnet-main\" {   for_each = {     for k, v in local.subnet_array : \"${v.name}\" => v   }   network_id = yandex_vpc_network.network-main.id   v4_cidr_blocks = each.value.cidr   zone           = each.value.zone   name           = each.value.name }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0417\u0434\u0435\u0441\u044c \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0446\u0438\u043a\u043b <em>for_each<\/em>, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0441 \u043a\u0430\u0436\u0434\u044b\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u043c \u0441\u043f\u0438\u0441\u043a\u0430 <em>local.subnet_array<\/em>. \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u043c \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u201cname\u201d.<\/p>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0441\u0435\u0439\u0447\u0430\u0441 \u0434\u043b\u044f Terraform \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043a\u0430\u043a 6 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432, \u0438 \u043e\u043d \u0441\u043e\u0437\u0434\u0430\u0441\u0442 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u043e\u0434\u0441\u0435\u0442\u0438 \u0441 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u043c \u0438\u043c\u0435\u043d\u0435\u043c.<\/p>\n<p>\u0412\u0441\u0451, \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c 6 \u043f\u043e\u0434\u0441\u0435\u0442\u0435\u0439 ?<\/p>\n<p>\u0427\u0442\u043e \u0435\u0449\u0451. \u0410, \u043d\u0443 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 IP-\u0430\u0434\u0440\u0435\u0441\u0430, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0431\u044b \u0438\u0445 \u043d\u0438 \u0431\u044b\u043b\u043e. \u0414\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u043c \u043f\u043e \u0442\u043e\u043c\u0443 \u0436\u0435 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u044e, \u0432 variables.tf \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043d\u043e\u0432\u0443\u044e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e:<\/p>\n<details class=\"spoiler\">\n<summary>my_project\/network\/variables.tf<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"coffeescript\">#=========== main ============== variable \"cloud_id\" {   description = \"The cloud ID\"   type        = string } variable \"folder_id\" {   description = \"The folder ID\"   type        = string } variable \"default_zone\" {   description = \"The default zone\"   type        = string   default     = \"ru-cenral1-a\" }  #=========== network ============== variable \"network_name\" {   description = \"The name of main network\"   type        = string }  #=========== subnet ============== variable \"subnets\" {   description = \"Subnets for k8s\"    type = map(list(object(     {       name = string,       zone = string,       cidr = list(string)     }))   )    validation {     condition     = alltrue([for i in keys(var.subnets) : alltrue([for j in lookup(var.subnets, i) : contains([\"ru-central1-a\", \"ru-central1-b\", \"ru-central1-c\"], j.zone)])])     error_message = \"Error! Zones not supported!\"   } }  #=========== external_ip ============== variable \"external_static_ips\" {   description = \"static ips\"    type = map(list(object(     {       name = string,       zone = string     }))   ) }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0432 terraform.tfvars \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f. \u0421\u0434\u0435\u043b\u0430\u044e \u043e\u0434\u0438\u043d, \u043d\u043e \u043c\u044b \u0441\u0440\u0430\u0437\u0443 \u0437\u0430\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u043c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445:<\/p>\n<details class=\"spoiler\">\n<summary>my_project\/network\/terraform.tfvars<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"coffeescript\">#=========== main ============== cloud_id  = \"b1gq90dgh25bebiu75o\" folder_id = \"b1gia87mbaomkfvsleds\"  #=========== network ============== network_name = \"mynet\"  #=========== subnet ============== subnets = {   \"k8s_masters\" = [     {       name = \"k8s_master_zone_a\"       zone = \"ru-central1-a\"       cidr = [\"10.0.1.0\/28\"]     },     {       name = \"k8s_master_zone_b\"       zone = \"ru-central1-b\"       cidr = [\"10.0.2.0\/28\"]     },     {       name = \"k8s_master_zone_c\"       zone = \"ru-central1-c\"       cidr = [\"10.0.3.0\/28\"]     }   ],   \"k8s_workers\" = [     {       name = \"k8s_worker_zone_a\"       zone = \"ru-central1-a\"       cidr = [\"10.0.4.0\/28\"]     },     {       name = \"k8s_worker_zone_b\"       zone = \"ru-central1-b\"       cidr = [\"10.0.5.0\/28\"]     },     {       name = \"k8s_worker_zone_c\"       zone = \"ru-central1-c\"       cidr = [\"10.0.6.0\/28\"]     }   ], }  #=========== external_ip ============== external_static_ips = {   ingress_lb = [     {       name = \"ingress_lb_zone_ru_central1_a\"       zone = \"ru-central1-a\"     }   ] }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0421\u043e\u0437\u0434\u0430\u0451\u043c \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u0443\u044e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e <em>external_ips_array<\/em> \u0432 locals.tf:<\/p>\n<details class=\"spoiler\">\n<summary>my_project\/network\/locals.tf<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"coffeescript\">locals {   subnet_array = flatten([for k, v in var.subnets : [for j in v : {     name = j.name     zone = j.zone     cidr = j.cidr     }   ]])   external_ips_array = flatten([for k, v in var.external_static_ips : [for j in v : {     name = j.name     zone = j.zone     }   ]]) }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u041d\u0443 \u0438, \u043d\u0430\u043a\u043e\u043d\u0435\u0446, \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0444\u0430\u0439\u043b static-ip.tf:<\/p>\n<details class=\"spoiler\">\n<summary>my_project\/network\/static-ip.tf<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"coffeescript\">resource \"yandex_vpc_address\" \"public_addr\" {   for_each = {     for v in local.external_ips_array : \"${v.name}\" => v   }   name = each.value.name   external_ipv4_address {     zone_id = each.value.zone   } }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0412\u0441\u0451 \u043a\u0430\u043a \u0438 \u0441 \u043f\u043e\u0434\u0441\u0435\u0442\u044f\u043c\u0438.<\/p>\n<p>\u0427\u0442\u043e \u0435\u0449\u0451 \u043d\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f? \u041a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435 \u0441\u0432\u044f\u0437\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u0434\u0441\u0435\u0442\u0435\u0439 \u0438 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442 \u043f\u043e\u0440\u0430 \u0437\u0430\u043d\u044f\u0442\u044c\u0441\u044f \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435\u043c security group.<\/p>\n<p>\u041f\u043e \u0443\u0436\u0435 \u0441\u043b\u043e\u0436\u0438\u0432\u0448\u0435\u0439\u0441\u044f \u0442\u0440\u0430\u0434\u0438\u0446\u0438\u0438, \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0444\u0430\u0439\u043b security-group.tf, \u0433\u0434\u0435 \u043e\u043f\u0438\u0448\u0435\u043c \u0433\u0440\u0443\u043f\u043f\u044b \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u0434\u043b\u044f \u043c\u0430\u0441\u0442\u0435\u0440\u043e\u0432 \u0438 \u0432\u043e\u0440\u043a\u0435\u0440\u043e\u0432:<\/p>\n<details class=\"spoiler\">\n<summary>my_project\/network\/security-group.tf<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"coffeescript\">resource \"yandex_vpc_security_group\" \"internal\" {   name        = \"internal\"   description = \"Managed by terraform\"   network_id  = yandex_vpc_network.mynet.id   labels = {     firewall = \"yc_internal\"   }   ingress {     protocol          = \"ANY\"     description       = \"self\"     predefined_target = \"self_security_group\"     from_port         = 0     to_port           = 65535   }   egress {     protocol          = \"ANY\"     description       = \"self\"     predefined_target = \"self_security_group\"     from_port         = 0     to_port           = 65535   } }  resource \"yandex_vpc_security_group\" \"k8s_master\" {   name        = \"k8s-master\"   description = \"Managed by terraform\"   network_id  = yandex_vpc_network.mynet.id   labels = {     firewall = \"k8s-master\"   }   ingress {     protocol       = \"TCP\"     description    = \"access to api k8s\"     v4_cidr_blocks = var.white_ips_for_master     port           = 443   }   ingress {     protocol          = \"TCP\"     description       = \"access to api k8s from Yandex lb\"     predefined_target = \"loadbalancer_healthchecks\"     from_port         = 0     to_port           = 65535   } }  resource \"yandex_vpc_security_group\" \"k8s_worker\" {   name        = \"k8s-worker\"   description = \"Managed by terraform\"   network_id  = yandex_vpc_network.mynet.id   labels = {     firewall = \"k8s-worker\"   }   ingress {     protocol       = \"ANY\"     description    = \"any connections\"     v4_cidr_blocks = [\"0.0.0.0\/0\"]     from_port      = 0     to_port        = 65535   }   egress {     protocol       = \"ANY\"     description    = \"any connections\"     v4_cidr_blocks = [\"0.0.0.0\/0\"]     from_port      = 0     to_port        = 65535   } }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u041b\u0438\u0447\u043d\u043e \u044f \u0441\u0447\u0438\u0442\u0430\u044e \u0442\u0430\u043a\u0443\u044e \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u044e \u0433\u0440\u0443\u043f\u043f \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u0431\u043e\u043b\u0435\u0435 \u0432\u0435\u0440\u043d\u043e\u0439 \u0434\u043b\u044f \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430:<\/p>\n<ul>\n<li>\n<p>\u00a0<em>internal<\/em>, \u0434\u043b\u044f \u0441\u0432\u044f\u0437\u043d\u043e\u0441\u0442\u0438 \u043c\u0430\u0441\u0442\u0435\u0440\u043e\u0432 \u0438 \u0432\u043e\u0440\u043a\u0435\u0440\u043e\u0432, \u0437\u0434\u0435\u0441\u044c \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u043e \u0432\u0441\u0451 \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u044d\u0442\u043e\u0439 \u0441\u0430\u043c\u043e\u0439 \u0433\u0440\u0443\u043f\u043f\u044b.\u00a0<\/p>\n<\/li>\n<li>\n<p>\u00a0<em>k8s_master<\/em> \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u0434 \u043c\u0430\u0441\u0442\u0435\u0440\u043e\u0432 \u0433\u0434\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0451\u043d \u0434\u043e\u0441\u0442\u0443\u043f \u043a 443 \u043f\u043e\u0440\u0442\u0443 \u043f\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439, \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0432\u0430\u0439\u0442\u043b\u0438\u0441\u0442 \u0438 \u0441\u043b\u0443\u0436\u0435\u0431\u043d\u043e\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u0434\u043b\u044f \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u043e\u0432.<\/p>\n<\/li>\n<li>\n<p>\u00a0<em>k8s_worker<\/em> \u0433\u0440\u0443\u043f\u043f\u0430 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u0434\u043b\u044f \u0432\u043e\u0440\u043a\u0435\u0440\u043e\u0432, \u0433\u0434\u0435 \u043c\u044b \u0440\u0430\u0437\u0440\u0435\u0448\u0438\u043c \u0432\u043e\u043e\u0431\u0449\u0435 \u0432\u0441\u0451.<\/p>\n<\/li>\n<\/ul>\n<p>\u00a0\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u0434\u043b\u044f \u0432\u0430\u0439\u0442\u043b\u0438\u0441\u0442\u0430 \u0438 \u043f\u0440\u043e\u043f\u0438\u0448\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u043d\u0435\u0451.<\/p>\n<details class=\"spoiler\">\n<summary>my_project\/network\/variables.tf<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"coffeescript\">#=========== main ============== variable \"cloud_id\" {   description = \"The cloud ID\"   type        = string } variable \"folder_id\" {   description = \"The folder ID\"   type        = string } variable \"default_zone\" {   description = \"The default zone\"   type        = string   default     = \"ru-cenral1-a\" }  #=========== network ============== variable \"network_name\" {   description = \"The name of main network\"   type        = string }  #=========== subnet ============== variable \"subnets\" {   description = \"Subnets for k8s\"    type = map(list(object(     {       name = string,       zone = string,       cidr = list(string)     }))   )    validation {     condition     = alltrue([for i in keys(var.subnets) : alltrue([for j in lookup(var.subnets, i) : contains([\"ru-central1-a\", \"ru-central1-b\", \"ru-central1-c\"], j.zone)])])     error_message = \"Error! Zones not supported!\"   } }  #=========== external_ip ============== variable \"external_static_ips\" {   description = \"static ips\"    type = map(list(object(     {       name = string,       zone = string     }))   ) }  #=========== security_group ============== variable \"white_ips_for_master\" {   type = list(string) }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>my_project\/network\/terraform.tfvars<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"coffeescript\">#=========== main ============== cloud_id  = \"b1gq90dgh25bebiu75o\" folder_id = \"b1gia87mbaomkfvsleds\"  #=========== network ============== network_name = \"mynet\"  #=========== subnet ============== subnets = {   \"k8s_masters\" = [     {       name = \"k8s_master_zone_a\"       zone = \"ru-central1-a\"       cidr = [\"10.0.1.0\/28\"]     },     {       name = \"k8s_master_zone_b\"       zone = \"ru-central1-b\"       cidr = [\"10.0.2.0\/28\"]     },     {       name = \"k8s_master_zone_c\"       zone = \"ru-central1-c\"       cidr = [\"10.0.3.0\/28\"]     }   ],   \"k8s_workers\" = [     {       name = \"k8s_worker_zone_a\"       zone = \"ru-central1-a\"       cidr = [\"10.0.4.0\/28\"]     },     {       name = \"k8s_worker_zone_b\"       zone = \"ru-central1-b\"       cidr = [\"10.0.5.0\/28\"]     },     {       name = \"k8s_worker_zone_c\"       zone = \"ru-central1-c\"       cidr = [\"10.0.6.0\/28\"]     }   ], }  #=========== external_ip ============== external_static_ips = {   ingress_lb = [     {       name = \"ingress_lb_zone_ru_central1_a\"       zone = \"ru-central1-a\"     }   ] }  #=========== security_group ============== white_ips_for_master = [\"0.0.0.0\/0\"]    # Add your IP [\"$YOUR_IP\/32\"]<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0421 network \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043b\u0438, \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u043c \u0441\u044e\u0434\u0430 \u043a\u043b\u044e\u0447\u0438 \u043e\u0442 \u0441\u0435\u0440\u0432\u0438\u0441\u043d\u043e\u0433\u043e \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u0430 \u0438 \u043e\u0442 \u0431\u0430\u043a\u0435\u0442\u0430. \u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u043a\u0430\u0442\u0430\u043b\u043e\u0433, \u043f\u043e\u0441\u043b\u0435 \u0432\u0441\u0435\u0445 \u043d\u0430\u0448\u0438\u0445 \u043c\u0430\u043d\u0438\u043f\u0443\u043b\u044f\u0446\u0438\u0439, \u0434\u043e\u043b\u0436\u0435\u043d \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"bash\">my_project\/ \u2514\u2500\u2500 network     \u251c\u2500\u2500 external_ip.tf     \u251c\u2500\u2500 key.json     \u251c\u2500\u2500 locals.tf     \u251c\u2500\u2500 main.tf     \u251c\u2500\u2500 outputs.tf     \u251c\u2500\u2500 security_group.tf     \u251c\u2500\u2500 storage.key     \u251c\u2500\u2500 terraform.tfvars     \u251c\u2500\u2500 variables.tf     \u2514\u2500\u2500 vpc.tf<\/code><\/pre>\n<p>\u041c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c <em>terraform init<\/em>, \u0437\u0430\u0442\u0435\u043c <em>terraform apply<\/em>.<\/p>\n<h2>\u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043a \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0443 k8s<\/h2>\n<pre><code class=\"bash\">mkdir ~\/my_project\/k8s cd ~\/my_project\/k8s<\/code><\/pre>\n<p>\u0412\u0441\u0451 \u043f\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0438: \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0444\u0430\u0439\u043b\u044b main.tf, variables.tf \u0438 terraform.tfvars, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0451\u043c \u043d\u0430\u0448\u0438 \u043a\u043b\u044e\u0447\u0438. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0435\u0449\u0451 \u0442\u0440\u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u0430 cluster.tf, node_group.tf \u0438 service_account.tf:<\/p>\n<pre><code class=\"bash\">my_project\/ \u251c\u2500\u2500 k8s \u2502   \u251c\u2500\u2500 cluster.tf \u2502   \u251c\u2500\u2500 key.json \u2502   \u251c\u2500\u2500 main.tf \u2502   \u251c\u2500\u2500 node_group.tf \u2502   \u251c\u2500\u2500 service_account.tf \u2502   \u251c\u2500\u2500 storage.key \u2502   \u251c\u2500\u2500 terraform.tfvars \u2502   \u2514\u2500\u2500 variables.tf \u2514\u2500\u2500 network     \u251c\u2500\u2500 external_ip.tf     \u251c\u2500\u2500 key.json     \u251c\u2500\u2500 locals.tf     \u251c\u2500\u2500 main.tf     \u251c\u2500\u2500 outputs.tf     \u251c\u2500\u2500 security_group.tf     \u251c\u2500\u2500 storage.key     \u251c\u2500\u2500 terraform.tfvars     \u251c\u2500\u2500 variables.tf     \u2514\u2500\u2500 vpc.tf<\/code><\/pre>\n<p>\u041f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u043c \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u0434\u043b\u044f \u0433\u0440\u0443\u043f\u043f \u0443\u0437\u043b\u043e\u0432 \u0432 node_group.tf, \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u0432 cluster.tf, \u0438 \u0432\u0441\u0451, \u0447\u0442\u043e \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043a \u0441\u0435\u0440\u0432\u0438\u0441\u043d\u044b\u043c \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u0430\u043c \u0432 service_account.tf, \u0441\u044e\u0434\u0430 \u0436\u0435 \u043f\u043e\u043b\u043e\u0436\u0438\u043c \u0438 \u043a\u043b\u044e\u0447 \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u044f.<\/p>\n<details class=\"spoiler\">\n<summary>my_project\/k8s\/cluster.tf<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"coffeescript\">resource \"yandex_kubernetes_cluster\" \"k8s-regional\" {   network_id = yandex_vpc_network.mynet.id   master {     version = local.k8s_version     regional {       region = \"ru-central1\"       location {         zone      = yandex_vpc_subnet.mysubnet-a.zone         subnet_id = yandex_vpc_subnet.mysubnet-a.id       }       location {         zone      = yandex_vpc_subnet.mysubnet-b.zone         subnet_id = yandex_vpc_subnet.mysubnet-b.id       }       location {         zone      = yandex_vpc_subnet.mysubnet-c.zone         subnet_id = yandex_vpc_subnet.mysubnet-c.id       }     }     security_group_ids = [yandex_vpc_security_group.k8s-main-sg.id]   }   service_account_id      = yandex_iam_service_account.myaccount.id   node_service_account_id = yandex_iam_service_account.myaccount.id   depends_on = [     yandex_resourcemanager_folder_iam_binding.k8s-clusters-agent,     yandex_resourcemanager_folder_iam_binding.vpc-public-admin,     yandex_resourcemanager_folder_iam_binding.images-puller   ]   kms_provider {     key_id = yandex_kms_symmetric_key.kms-key.id   } }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>my_project\/k8s\/service_account.tf<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"coffeescript\">resource \"yandex_iam_service_account\" \"myaccount\" {   name        = local.sa_name   description = \"K8S regional service account\" }  resource \"yandex_resourcemanager_folder_iam_binding\" \"k8s-clusters-agent\" {   # \u0421\u0435\u0440\u0432\u0438\u0441\u043d\u043e\u043c\u0443 \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u0443 \u043d\u0430\u0437\u043d\u0430\u0447\u0430\u0435\u0442\u0441\u044f \u0440\u043e\u043b\u044c \"k8s.clusters.agent\".   folder_id = local.folder_id   role      = \"k8s.clusters.agent\"   members = [     \"serviceAccount:${yandex_iam_service_account.myaccount.id}\"   ] }  resource \"yandex_resourcemanager_folder_iam_binding\" \"vpc-public-admin\" {   # \u0421\u0435\u0440\u0432\u0438\u0441\u043d\u043e\u043c\u0443 \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u0443 \u043d\u0430\u0437\u043d\u0430\u0447\u0430\u0435\u0442\u0441\u044f \u0440\u043e\u043b\u044c \"vpc.publicAdmin\".   folder_id = local.folder_id   role      = \"vpc.publicAdmin\"   members = [     \"serviceAccount:${yandex_iam_service_account.myaccount.id}\"   ] }  resource \"yandex_resourcemanager_folder_iam_binding\" \"images-puller\" {   # \u0421\u0435\u0440\u0432\u0438\u0441\u043d\u043e\u043c\u0443 \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u0443 \u043d\u0430\u0437\u043d\u0430\u0447\u0430\u0435\u0442\u0441\u044f \u0440\u043e\u043b\u044c \"container-registry.images.puller\".   folder_id = local.folder_id   role      = \"container-registry.images.puller\"   members = [     \"serviceAccount:${yandex_iam_service_account.myaccount.id}\"   ] }  resource \"yandex_kms_symmetric_key\" \"kms-key\" {   # \u041a\u043b\u044e\u0447 \u0434\u043b\u044f \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432\u0430\u0436\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438, \u0442\u0430\u043a\u043e\u0439 \u043a\u0430\u043a \u043f\u0430\u0440\u043e\u043b\u0438, OAuth-\u0442\u043e\u043a\u0435\u043d\u044b \u0438 SSH-\u043a\u043b\u044e\u0447\u0438.   name              = \"kms-key\"   default_algorithm = \"AES_128\"   rotation_period   = \"8760h\" # 1 \u0433\u043e\u0434. }  resource \"yandex_kms_symmetric_key_iam_binding\" \"viewer\" {   symmetric_key_id = yandex_kms_symmetric_key.kms-key.id   role             = \"viewer\"   members = [     \"serviceAccount:${yandex_iam_service_account.myaccount.id}\",   ] }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>my_project\/k8s\/node_group.tf<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"coffeescript\">resource \"yandex_kubernetes_node_group\" \"my_node_group_a\" {   cluster_id  = yandex_kubernetes_cluster.k8s-regional.id   name        = \"worker-a\"   description = \"description\"   version     = local.k8s_version   labels = {     \"key\" = \"value\"   }   instance_template {     platform_id = \"standard-v1\"     name        = \"worker-a-{instance.short_id}\"     network_interface {       nat                = true       subnet_ids         = [yandex_vpc_subnet.mysubnet-a.id]       security_group_ids = [yandex_vpc_security_group.k8s-main-sg.id]     }     resources {       memory = 2       cores  = 2     }     boot_disk {       type = \"network-hdd\"       size = 32     }     scheduling_policy {       preemptible = false     }   }   scale_policy {     auto_scale {       min     = 1       max     = 3       initial = 1     }   }   allocation_policy {     location {       zone = \"ru-central1-a\"     }   } }  resource \"yandex_kubernetes_node_group\" \"my_node_group_b\" {   cluster_id  = yandex_kubernetes_cluster.k8s-regional.id   name        = \"worker-b\"   description = \"description\"   version     = local.k8s_version   labels = {     \"key\" = \"value\"   }   instance_template {     platform_id = \"standard-v1\"     name        = \"worker-b-{instance.short_id}\"     network_interface {       nat                = true       subnet_ids         = [yandex_vpc_subnet.mysubnet-b.id]       security_group_ids = [yandex_vpc_security_group.k8s-main-sg.id]     }     resources {       memory = 2       cores  = 2     }     boot_disk {       type = \"network-hdd\"       size = 32     }     scheduling_policy {       preemptible = false     }   }   scale_policy {     auto_scale {       min     = 1       max     = 3       initial = 1     }   }   allocation_policy {     location {       zone = \"ru-central1-b\"     }   } }  resource \"yandex_kubernetes_node_group\" \"my_node_group_c\" {   cluster_id  = yandex_kubernetes_cluster.k8s-regional.id   name        = \"worker-c\"   description = \"description\"   version     = local.k8s_version   labels = {     \"key\" = \"value\"   }   instance_template {     platform_id = \"standard-v1\"     name        = \"worker-c-{instance.short_id}\"     network_interface {       nat                = true       subnet_ids         = [yandex_vpc_subnet.mysubnet-c.id]       security_group_ids = [yandex_vpc_security_group.k8s-main-sg.id]     }     resources {       memory = 2       cores  = 2     }     boot_disk {       type = \"network-hdd\"       size = 32     }     scheduling_policy {       preemptible = false     }   }   scale_policy {     auto_scale {       min     = 1       max     = 3       initial = 1     }   }   allocation_policy {     location {       zone = \"ru-central1-c\"     }   } }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0422\u0430\u043a \u0436\u0435, \u043a\u0430\u043a \u0438 \u0432 network, \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435:<\/p>\n<details class=\"spoiler\">\n<summary>my_project\/k8s\/variables.tf<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"coffeescript\">#=========== main ============== variable \"cloud_id\" {   description = \"The cloud ID\"   type        = string } variable \"folder_id\" {   description = \"The folder ID\"   type        = string } variable \"default_zone\" {   description = \"The default zone\"   type        = string   default     = \"ru-cenral1-a\" }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u041f\u0440\u0438\u0441\u0432\u043e\u0438\u043c \u0438\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f:<\/p>\n<details class=\"spoiler\">\n<summary>my_project\/k8s\/terraform.tfvars<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"coffeescript\">#=========== main ============== cloud_id  = \"b1gq90dgh25bebiu75o\" folder_id = \"b1gia87mbaomkfvsleds\"<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0418 \u043f\u0435\u0440\u0435\u043f\u0438\u0448\u0435\u043c main.tf<\/p>\n<details class=\"spoiler\">\n<summary>my_project\/k8s\/main.tf<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"coffeescript\">terraform {   required_providers {     yandex = {       source = \"yandex-cloud\/yandex\"     }   }   backend \"s3\" {     endpoint                = \"storage.yandexcloud.net\"     bucket                  = \"test-tfstate\"     region                  = \"ru-central1\"     key                     = \"my-project-k8s.tfstate\"     shared_credentials_file = \"storage.key\"      skip_region_validation      = true     skip_credentials_validation = true   } }  provider \"yandex\" {   service_account_key_file = \"key.json\"   cloud_id                 = var.cloud_id   folder_id                = var.folder_id   zone                     = var.default_zone }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u041d\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u0435\u043c \u0441\u043c\u0435\u043d\u0438\u0442\u044c \u0438\u043c\u044f \u0444\u0430\u0439\u043b\u0430 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0435 <em>key<\/em>.<\/p>\n<p>\u0418\u0442\u0430\u043a, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c. \u041d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u0441 service_account.tf, \u0443 \u043d\u0430\u0441 \u0438\u043c\u044f \u0441\u0435\u0440\u0432\u0438\u0441\u043d\u043e\u0433\u043e \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u0430 \u0431\u044b\u043b\u043e \u0437\u0430\u0434\u0430\u043d\u043e \u0447\u0435\u0440\u0435\u0437 <em>locals<\/em>, \u043c\u044b \u044d\u0442\u043e \u043f\u0435\u0440\u0435\u0434\u0435\u043b\u0430\u0435\u043c. \u041d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0438\u043c\u044f \u0441\u0435\u0440\u0432\u0438\u0441\u043d\u043e\u0433\u043e \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u0430 \u0438 \u043a\u043b\u044e\u0447\u0430 \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0437\u0430\u0434\u0430\u0442\u044c \u0447\u0435\u0440\u0435\u0437 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435, \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0441\u043e\u0437\u0434\u0430\u0451\u043c \u0438\u0445:<\/p>\n<details class=\"spoiler\">\n<summary>my_project\/k8s\/variables.tf<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"coffeescript\">#=========== main ============== variable \"cloud_id\" {   description = \"The cloud ID\"   type        = string } variable \"folder_id\" {   description = \"The folder ID\"   type        = string } variable \"default_zone\" {   description = \"The default zone\"   type        = string   default     = \"ru-cenral1-a\" }  #=========== service_account ============== variable \"service_account_name\" {   description = \"Name of service account\"   type = string   default = null }  variable \"kms_provider_key_name\" {   description = \"KMS key name.\"   type = string   default = null }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0418 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c:<\/p>\n<details class=\"spoiler\">\n<summary>my_project\/k8s\/terraform.tfvars<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"coffeescript\">#=========== main ============== cloud_id  = \"b1gq90dgh25bebiu75o\" folder_id = \"b1gia87mbaomkfvsleds\"  #=========== service_account ============== service_account_name  = \"myaccount\" kms_provider_key_name = \"kms-key\"<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u041f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c service_account.tf:<\/p>\n<details class=\"spoiler\">\n<summary>my_project\/k8s\/service_account.tf<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"coffeescript\">resource \"yandex_iam_service_account\" \"myaccount\" {   name        = var.service_account_name   description = \"K8S regional service account\" }  resource \"yandex_resourcemanager_folder_iam_binding\" \"editor\" {   # \u0421\u0435\u0440\u0432\u0438\u0441\u043d\u043e\u043c\u0443 \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u0443 \u043d\u0430\u0437\u043d\u0430\u0447\u0430\u0435\u0442\u0441\u044f \u0440\u043e\u043b\u044c \"editor\".   folder_id = var.folder_id   role      = \"editor\"   members = [     \"serviceAccount:${yandex_iam_service_account.myaccount.id}\"   ] }  resource \"yandex_resourcemanager_folder_iam_binding\" \"images-puller\" {   # \u0421\u0435\u0440\u0432\u0438\u0441\u043d\u043e\u043c\u0443 \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u0443 \u043d\u0430\u0437\u043d\u0430\u0447\u0430\u0435\u0442\u0441\u044f \u0440\u043e\u043b\u044c \"container-registry.images.puller\".   folder_id = var.folder_id   role      = \"container-registry.images.puller\"   members = [     \"serviceAccount:${yandex_iam_service_account.myaccount.id}\"   ] }  resource \"yandex_kms_symmetric_key\" \"kms-key\" {   # \u041a\u043b\u044e\u0447 \u0434\u043b\u044f \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432\u0430\u0436\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438, \u0442\u0430\u043a\u043e\u0439 \u043a\u0430\u043a \u043f\u0430\u0440\u043e\u043b\u0438, OAuth-\u0442\u043e\u043a\u0435\u043d\u044b \u0438 SSH-\u043a\u043b\u044e\u0447\u0438.   name              = var.kms_provider_key_name   default_algorithm = \"AES_128\"   rotation_period   = \"8760h\" # 1 \u0433\u043e\u0434. }  resource \"yandex_kms_symmetric_key_iam_binding\" \"viewer\" {   symmetric_key_id = yandex_kms_symmetric_key.kms-key.id   role             = \"viewer\"   members = [     \"serviceAccount:${yandex_iam_service_account.myaccount.id}\",   ] }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0427\u0442\u043e \u0436, \u0432\u043e\u0442 \u043c\u044b \u0438 \u043c\u043e\u0436\u0435\u043c, \u043d\u0430\u043a\u043e\u043d\u0435\u0446, \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u0442\u044c \u043a \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u043a\u043e\u0434\u0430 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0434\u0441\u0442\u0430\u0432\u0438\u043c \u043d\u0430\u0448\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432 cluster, \u043f\u043e\u043f\u0443\u0442\u043d\u043e \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0438\u0437 \u043d\u0438\u0445:<\/p>\n<details class=\"spoiler\">\n<summary>my_project\/k8s\/variables.tf<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"coffeescript\">#=========== main ============== variable \"cloud_id\" {   description = \"The cloud ID\"   type        = string } variable \"folder_id\" {   description = \"The folder ID\"   type        = string } variable \"default_zone\" {   description = \"The default zone\"   type        = string   default     = \"ru-cenral1-a\" }  #=========== service_account ============== variable \"service_account_name\" {   description = \"Name of service account\"   type = string   default = null }  variable \"kms_provider_key_name\" {   description = \"KMS key name.\"   type = string   default = null }   #=========== cluster ============== variable \"cluster_name\" {   description = \"Name of a specific Kubernetes cluster.\"   type        = string   default     = null }  variable \"network_policy_provider\" {   description = \"Network policy provider for the cluster. Possible values: CALICO.\"   type = string   default = \"CALICO\" }  variable \"master_version\" {   description = \"Version of Kubernetes that will be used for master.\"   type = string   default = null }  variable \"master_public_ip\" {   description = \"Boolean flag. When true, Kubernetes master will have a visible ipv4 address.\"   type = bool   default = true }  variable \"master_region\" {   description = \"Name of region where cluster will be created. Required for regional cluster, not used for zonal cluster.\"   type = string   default = null }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u041a\u0430\u043a \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u0438\u0434\u0435\u0442\u044c, \u0443 \u0434\u0432\u0443\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e <em>master_public_ip<\/em> \u0438 <em>network_policy_provider<\/em>, \u0443\u0436\u0435 \u0437\u0430\u0434\u0430\u043d\u043e \u0434\u0435\u0444\u043e\u043b\u0442\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435. \u041d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0432 terraform.tfvars \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435:<\/p>\n<details class=\"spoiler\">\n<summary>my_project\/k8s\/terraform.tfvars<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"coffeescript\">#=========== main ============== cloud_id  = \"b1gq90dgh25bebiu75o\" folder_id = \"b1gia87mbaomkfvsleds\"  #=========== service_account ============== service_account_name  = \"myaccount\" kms_provider_key_name = \"kms-key\"  #=========== cluster ============== cluster_name   = \"cluster\" master_version = \"1.22\" master_region  = \"ru-central1\"<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0412\u043e\u0442 \u043c\u044b \u0438 \u0434\u043e\u0448\u043b\u0438 \u0434\u043e \u0432\u0430\u0436\u043d\u0435\u0439\u0448\u0435\u0433\u043e \u043c\u043e\u043c\u0435\u043d\u0442\u0430 &#8212; \u043d\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c id \u0441\u0435\u0442\u0438, \u043d\u043e \u0435\u0451 \u043c\u044b \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u043b\u0438 \u0434\u0440\u0443\u0433\u0438\u043c \u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442\u043e\u043c Terraform&#8217;\u0430, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442, \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442\u0430 Terraform \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0435 \u0442\u0430\u043c \u0440\u0435\u0441\u0443\u0440\u0441\u044b. \u043a\u0430\u043a \u0436\u0435 \u0431\u044b\u0442\u044c?<\/p>\n<p>\u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043a\u0430\u043a\u0438\u0435-\u043b\u0438\u0431\u043e \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437\u0432\u043d\u0435, \u0435\u0441\u0442\u044c <em>data sources<\/em>. \u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <em>data<\/em> \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0442\u0435\u0440\u0440\u0430\u0444\u043e\u0440\u043c \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a, \u043e\u0442\u043a\u0443\u0434\u0430 \u0435\u043c\u0443 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0432\u0437\u044f\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435.\u00a0<\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0444\u0430\u0439\u043b data.tf:<\/p>\n<details class=\"spoiler\">\n<summary>my_project\/k8s\/data.tf<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"coffeescript\">data \"yandex_vpc_network\" \"network\" {   name = \"mynet\" }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0434\u0430\u043d\u043d\u044b\u0445 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u043e:\u00a0 <em>data<\/em>, \u0438 \u043f\u0440\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u043e\u0442\u043a\u0443\u0434\u0430 \u0431\u0440\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435, \u0430 \u043d\u0443\u0436\u043d\u0430 \u043d\u0430\u043c \u0441\u0435\u0442\u044c \u0441 \u0438\u043c\u0435\u043d\u0435\u043c <em>mynet<\/em>.<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u043c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0441\u043e\u0441\u043b\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u044d\u0442\u043e\u0442 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0432 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u0440\u0435\u0441\u0443\u0440\u0441\u0430, \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0432 \u0447\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043e\u0442\u0442\u0443\u0434\u0430 \u0437\u0430\u0431\u0440\u0430\u0442\u044c &#8212; <em>data.yandex_vpc_network.mynet.id<\/em>:<\/p>\n<pre><code class=\"coffeescript\">resource \"yandex_kubernetes_cluster\" \"k8s-regional\" {\u00a0  network_id = data.yandex_vpc_network.mynet.id [...] }<\/code><\/pre>\n<p>\u041c\u043e\u0436\u0435\u043c \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0442\u0430\u043a, \u043d\u043e \u0447\u0442\u043e, \u0435\u0441\u043b\u0438 \u0438\u043c\u044f \u0441\u0435\u0442\u0438 \u043f\u043e\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f? \u041f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u043b\u0438 \u043c\u044b \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u0441\u0435\u0442\u0438, \u043d\u0430\u043c \u0436\u0435 \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0438 \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435 k8s \u0432 data.tf \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440, \u0430 \u0432\u0435\u0434\u044c \u043c\u044b \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u043a\u043e\u0434 \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u043b\u0430\u0437\u0438\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b. \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0432\u044b\u043d\u0435\u0441\u0442\u0438 \u044d\u0442\u043e\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0438 \u043c\u0435\u043d\u044f\u0442\u044c \u0435\u0433\u043e \u0442\u0430\u043c &#8212; \u0441\u043a\u0430\u0436\u0435\u0442\u0435 \u0432\u044b. \u0410 \u0447\u0442\u043e, \u0435\u0441\u043b\u0438 \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435 \u0437\u0430\u043c\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430\u0434 \u0442\u0435\u043c, \u043a\u0430\u043a \u043d\u0430\u0437\u0432\u0430\u043d \u0440\u0435\u0441\u0443\u0440\u0441? \u0427\u0442\u043e, \u0435\u0441\u043b\u0438 \u043c\u044b \u0443\u043a\u0430\u0436\u0435\u043c id \u0441\u0435\u0442\u0438 \u0442\u0430\u043a, \u0447\u0442\u043e \u043d\u0430\u043c \u043d\u0438\u0433\u0434\u0435 \u043d\u0435 \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u043d\u0438\u0447\u0435\u0433\u043e \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u043f\u0440\u0438 \u043b\u044e\u0431\u044b\u0445 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f\u0445 \u0432 \u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442\u0435 network? \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u043e\u0442\u0432\u0435\u0442\u0438\u0442\u044c \u043d\u0430 \u043e\u0434\u0438\u043d \u0432\u043e\u043f\u0440\u043e\u0441 &#8212; \u0430 \u0433\u0434\u0435 \u0435\u0449\u0451 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0434\u0430\u043d\u043d\u044b\u0435 \u043e \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0445 \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u0445 \u043b\u044e\u0431\u043e\u0433\u043e \u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442\u0430? \u0412\u0435\u0440\u043d\u043e, \u0432 \u0444\u0430\u0439\u043b\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f. \u0412\u043e\u0442 \u043c\u044b \u0438 \u0443\u043a\u0430\u0436\u0435\u043c Terraform&#8217;\u0443 \u0441\u0445\u043e\u0434\u0438\u0442\u044c \u0438 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u043e\u0439 tfstate \u0444\u0430\u0439\u043b.<\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0434\u0440\u0443\u0433\u043e\u0439 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u0432 \u043d\u0435\u043c \u0443\u043a\u0430\u0436\u0435\u043c \u043f\u0443\u0442\u044c \u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u044b \u043a \u0447\u0443\u0436\u043e\u043c\u0443 \u0444\u0430\u0439\u043b\u0443 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f.\u00a0<\/p>\n<details class=\"spoiler\">\n<summary>my_project\/k8s\/data.tf<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"coffeescript\">data \"terraform_remote_state\" \"network\" {   backend = \"s3\"   config = {     endpoint                = \"storage.yandexcloud.net\"     bucket                  = var.network_backet_name     region                  = \"ru-central1\"     key                     = var.network_state_key     shared_credentials_file = \"storage.key\"      skip_region_validation      = true     skip_credentials_validation = true   }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u041a\u0430\u043a \u0432\u0438\u0434\u0438\u0442\u0435, \u0437\u0434\u0435\u0441\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0438\u0445 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c. \u0418 \u043f\u0440\u0438\u0441\u0432\u043e\u0438\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f &#8212; \u0438\u0445 \u043c\u044b \u0432\u043e\u0437\u044c\u043c\u0451\u043c \u0438\u0437 main.tf \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435 network. \u0420\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0438\u043b \u044f \u0438\u0445 \u043f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0434\u043b\u044f main.<\/p>\n<details class=\"spoiler\">\n<summary>my_project\/k8s\/variables.tf<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"coffeescript\">#=========== main ============== variable \"cloud_id\" {   description = \"The cloud ID\"   type        = string } variable \"folder_id\" {   description = \"The folder ID\"   type        = string } variable \"default_zone\" {   description = \"The default zone\"   type        = string   default     = \"ru-cenral1-a\" }  #=========== terraform_remote_state ============== variable \"network_state_key\" {   description = \"The key of state for the network.\"   type        = string   default     = null }  variable \"network_bucket_name\" {   description = \"The name of bucket for the network.\"   type        = string   default     = null }  #=========== service_account ============== variable \"service_account_name\" {   description = \"Name of service account\"   type = string   default = null }  variable \"kms_provider_key_name\" {   description = \"KMS key name.\"   type = string   default = null }   #=========== cluster ============== variable \"cluster_name\" {   description = \"Name of a specific Kubernetes cluster.\"   type        = string   default     = null }  variable \"network_policy_provider\" {   description = \"Network policy provider for the cluster. Possible values: CALICO.\"   type = string   default = \"CALICO\" }  variable \"master_version\" {   description = \"Version of Kubernetes that will be used for master.\"   type = string   default = null }  variable \"master_public_ip\" {   description = \"Boolean flag. When true, Kubernetes master will have a visible ipv4 address.\"   type = bool   default = true }  variable \"master_region\" {   description = \"Name of region where cluster will be created. Required for regional cluster, not used for zonal cluster.\"   type = string   default = null }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>my_project\/k8s\/terraform.tfvars<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"coffeescript\">#=========== main ============== cloud_id  = \"b1gq90dgh25bebiu75o\" folder_id = \"b1gia87mbaomkfvsleds\"  #=========== terraform_remote_state ============== network_state_key = \"my-project-network.tfstate\" network_bucket_name = \"test-tfstate\"  #=========== service_account ============== service_account_name  = \"myaccount\" kms_provider_key_name = \"kms-key\"  #=========== cluster ============== cluster_name   = \"cluster\" master_version = \"1.22\" master_region  = \"ru-central1\"<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0447\u0438\u0442\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u043e\u0439 \u0444\u0430\u0439\u043b \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0438 \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u043e\u0442\u0442\u0443\u0434\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u043e\u0434\u043d\u0430\u043a\u043e, \u0438\u0445 \u0442\u0430\u043c \u043f\u043e\u043a\u0430 \u043d\u0435\u0442. \u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u0438 \u043f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0432\u0435\u0440\u043d\u0443\u0442\u044c\u0441\u044f \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433 network \u0438 \u043e\u0444\u043e\u0440\u043c\u0438\u0442\u044c <em>outputs<\/em>. \u0418\u0442\u0430\u043a, \u0441\u043e\u0437\u0434\u0430\u0451\u043c outputs.tf \u0438 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0442\u043e, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u043c \u0432\u044b\u0432\u0435\u0441\u0442\u0438:<\/p>\n<details class=\"spoiler\">\n<summary>my_project\/network\/outputs.tf<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"coffeescript\">output \"network_id\" {   value = yandex_vpc_network.mynet.id }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0410 \u043d\u0443\u0436\u043d\u043e \u043d\u0430\u043c id \u0441\u0435\u0442\u0438. \u0412\u043e\u0442 \u0438 \u0432\u0441\u0451. <strong>\u041e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0435 <em>terraform apply<\/em>, \u0447\u0442\u043e\u0431\u044b \u0434\u0430\u043d\u043d\u044b\u0435 \u0437\u0430\u043f\u0438\u0441\u0430\u043b\u0438\u0441\u044c \u0432 \u0444\u0430\u0439\u043b \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f.<\/strong><\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c, \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u043c \u0441\u043e\u0441\u043b\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u043a\u0430\u043a\u043e\u0439-\u043b\u0438\u0431\u043e \u0440\u0435\u0441\u0443\u0440\u0441 \u0438\u0437 network, \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e <em>data.terraform_remote_state.network.outputs<\/em>. \u0438 \u0438\u043c\u044f \u0442\u043e\u0433\u043e output\u2019\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u043c \u043d\u0443\u0436\u0435\u043d.<\/p>\n<p>\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<pre><code class=\"coffeescript\">resource \"yandex_kubernetes_cluster\" \"k8s-regional\" {\u00a0  network_id = data.terraform_remote_state.network.outputs.network_id [...] }<\/code><\/pre>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c <em>locals<\/em>, \u0447\u0442\u043e\u0431\u044b \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c \u0441\u0435\u0431\u0435 \u0436\u0438\u0437\u043d\u044c. \u0418\u0442\u0430\u043a, \u0441\u043e\u0437\u0434\u0430\u0451\u043c \u0444\u0430\u0439\u043b locals.tf \u0442\u0443\u0442 \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e:<\/p>\n<details class=\"spoiler\">\n<summary>my_project\/k8s\/locals.tf<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"coffeescript\">locals {   network_output = data.terraform_remote_state.network.outputs }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u0435\u043c \u0432\u0441\u0435\u0433\u0434\u0430 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u043e:<\/p>\n<pre><code class=\"coffeescript\">resource \"yandex_kubernetes_cluster\" \"k8s-regional\" {\u00a0  network_id = local.network_output.network_id [...] }<\/code><\/pre>\n<p>\u0414\u0443\u043c\u0430\u044e \u0442\u0430\u043a \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0443\u0434\u043e\u0431\u043d\u0435\u0435.<\/p>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0434\u043b\u044f \u0433\u0440\u0443\u043f\u043f \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u0442\u043e\u0436\u0435 \u0432\u044b\u0432\u0435\u0434\u0435\u043c id, \u0442.\u043a. \u043e\u043d\u0438 \u043d\u0430\u043c \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u044f\u0442\u0441\u044f:<\/p>\n<details class=\"spoiler\">\n<summary>my_project\/network\/outputs.tf<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"coffeescript\">output \"network_id\" {   value = yandex_vpc_network.mynet.id }  output \"sg_internal\" {   value = yandex_vpc_security_group.internal.id }  output \"sg_k8s_master\" {   value = yandex_vpc_security_group.k8s_master.id }  output \"sg_k8s_worker\" {   value = yandex_vpc_security_group.k8s_worker.id }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u041d\u043e \u0442\u0430\u043a\u0436\u0435 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u044b \u0437\u043e\u043d\u044b \u0438 id \u043f\u043e\u0434\u0441\u0435\u0442\u0435\u0439. \u0417\u0434\u0435\u0441\u044c \u0443\u0436\u0435 \u0441\u043b\u043e\u0436\u043d\u0435\u0435, \u0432\u0435\u0434\u044c \u043c\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u044d\u0442\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0442\u0430\u043a \u0436\u0435, \u043a\u0430\u043a \u0438 \u0434\u043b\u044f \u0434\u0440\u0443\u0433\u0438\u0445, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043f\u043e\u0434\u0441\u0435\u0442\u0438 \u0443 \u043d\u0430\u0441 \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u0446\u0438\u043a\u043b\u043e\u043c \u0432 network \u0438 \u043f\u0438\u0441\u0430\u0442\u044c output \u043f\u043e\u0434 \u043a\u0430\u0436\u0434\u0443\u044e \u043f\u043e\u0434\u0441\u0435\u0442\u044c \u043c\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u043c.\u00a0<\/p>\n<p>\u0414\u043b\u044f \u043d\u0430\u0448\u0435\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u043c\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c output, \u043d\u043e \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u0435:<\/p>\n<details class=\"spoiler\">\n<summary>my_project\/network\/outputs.tf<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"coffeescript\">output \"network_id\" {   value = yandex_vpc_network.mynet.id }  output \"sg_internal\" {   value = yandex_vpc_security_group.internal.id }  output \"sg_k8s_master\" {   value = yandex_vpc_security_group.k8s_master.id }  output \"sg_k8s_worker\" {   value = yandex_vpc_security_group.k8s_worker.id }  output \"k8s_masters_subnet_info\" {   value = [for k, v in var.subnets[\"k8s_masters\"] : zipmap([\"subnet_id\", \"zone\"], [yandex_vpc_subnet.subnet-main[v.name].id, yandex_vpc_subnet.subnet-main[v.name].zone])] }  output \"k8s_workers_subnet_info\" {   value = [for k, v in var.subnets[\"k8s_workers\"] : zipmap([\"subnet_id\", \"zone\"], [yandex_vpc_subnet.subnet-main[v.name].id, yandex_vpc_subnet.subnet-main[v.name].zone])] }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u041a\u0430\u043a\u00a0\u0432\u044b \u043f\u043e\u043c\u043d\u0438\u0442\u0435, \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u043b\u0438 6\u00a0\u043f\u043e\u0434\u0441\u0435\u0442\u0435\u0439, \u0442\u0440\u0438 \u043f\u043e\u0434\u00a0\u043c\u0430\u0441\u0442\u0435\u0440\u043e\u0432 \u0438 \u0442\u0440\u0438 \u043f\u043e\u0434\u00a0\u0432\u043e\u0440\u043a\u0435\u0440\u043e\u0432, \u0432\u043e\u0442 \u044f \u0438 \u0445\u043e\u0447\u0443 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0438\u0445 <em>id<\/em> \u0438 <em>zone<\/em> \u0440\u0430\u0437\u043d\u044b\u043c\u0438 output\u00bb\u0430\u043c\u0438: \u043f\u0435\u0440\u0432\u044b\u0439\u00a0\u2014 \u043f\u043e\u0434\u00a0\u043d\u0430\u0448\u0438 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u043b\u044f\u00a0\u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430, \u0430\u00a0\u0432\u0442\u043e\u0440\u043e\u0439\u00a0\u2014 \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0434\u043b\u044f\u00a0\u0432\u043e\u0440\u043a\u0435\u0440\u043e\u0432. <\/p>\n<p>\u0417\u0434\u0435\u0441\u044c \u043c\u044b \u0444\u0438\u043b\u044c\u0442\u0440\u0443\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <em>subnets<\/em>, \u0447\u0442\u043e\u0431\u044b \u0431\u0440\u0430\u043b\u0430\u0441\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u00a0\u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u043c \u043f\u043e\u0434\u0441\u0435\u0442\u044f\u043c(\u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0434\u043b\u044f\u00a0\u043c\u0430\u0441\u0442\u0435\u0440\u043e\u0432). \u0414\u0430\u043b\u0435\u0435 \u0441\u00a0\u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <em>zipmap<\/em> \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u0451\u043c \u0441\u043f\u0438\u0441\u043e\u043a, \u0433\u0434\u0435 \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0435\u043c \u043a\u043b\u044e\u0447\u0430\u043c <em>subnet_id<\/em> \u0438 <em>zone<\/em> \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b \u0438\u0437\u00a0\u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439, \u0438 \u0442\u0430\u043a \u0434\u043b\u044f\u00a0\u043a\u0430\u0436\u0434\u043e\u0439 \u043f\u043e\u0434\u0441\u0435\u0442\u0438 \u0432 <em>k8s_masters<\/em>.<\/p>\n<p>\u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e \u0438 \u0434\u043b\u044f\u00a0\u043f\u043e\u0434\u0441\u0435\u0442\u0435\u0439 \u0432 <em>k8s_workers<\/em>. <\/p>\n<p>\u041f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c <em>terraform apply<\/em>.<\/p>\n<p>\u041e\u043a\u0435\u0439, \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u043d\u0430\u00a0\u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435, \u0430\u00a0ID \u0433\u0440\u0443\u043f\u043f \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u0434\u0432\u0435, <em>internal<\/em> \u0438 <em>k8s_master<\/em> \u0438\u0437\u00a0output\u00bb\u043e\u0432 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e \u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442\u0430:<\/p>\n<details class=\"spoiler\">\n<summary>my_project\/k8s\/cluster.tf<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"coffeescript\">resource \"yandex_kubernetes_cluster\" \"k8s-regional\" {   network_id              = local.network_output.network_id   network_policy_provider = var.network_policy_provider   service_account_id      = yandex_iam_service_account.myaccount.id   node_service_account_id = yandex_iam_service_account.myaccount.id   master {     version   = var.master_version     public_ip = var.master_public_ip     regional {       region = var.master_region       dynamic \"location\" {         for_each = local.network_output.k8s_masters_subnet_info         content {           zone      = location.value[\"zone\"]           subnet_id = location.value[\"subnet_id\"]         }       }     }     security_group_ids = [local.network_output.sg_internal, local.network_output.sg_k8s_master]   }     kms_provider {     key_id = yandex_kms_symmetric_key.kms-key.id   }   depends_on = [     yandex_resourcemanager_folder_iam_binding.editor,     yandex_resourcemanager_folder_iam_binding.images-puller   ] }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0414\u043b\u044f\u00a0\u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u043e\u0434\u0441\u0435\u0442\u0438 \u0438 \u0437\u043e\u043d\u044b, \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c <em>dynamic<\/em> \u0431\u043b\u043e\u043a \u0441\u00a0\u0446\u0438\u043a\u043b\u043e\u043c <em>for_each<\/em>, \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c, \u043e\u0442\u043a\u0443\u0434\u0430 \u0431\u0443\u0434\u0435\u043c \u0431\u0440\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f (\u0430 \u0431\u0435\u0440\u0435\u043c \u043c\u044b \u0438\u0445 \u0438\u0437\u00a0\u043d\u0430\u0448\u0435\u0433\u043e \u043d\u043e\u0432\u043e\u0433\u043e output\u00bba). \u0414\u0430\u043b\u0435\u0435 \u043c\u044b \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c content, \u0438 \u0441\u044e\u0434\u0430 \u043f\u0438\u0448\u0435\u043c \u0442\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0443\u0436\u043d\u044b \u044d\u0442\u043e\u043c\u0443 \u0431\u043b\u043e\u043a\u0443, \u0430\u00a0\u043d\u0443\u0436\u043d\u044b \u0437\u043e\u043d\u0430 \u0438 ID, \u0442\u0435\u043f\u0435\u0440\u044c \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u043e\u0442\u043a\u0443\u0434\u0430 \u0431\u0440\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0430\u00a0\u0438\u0445 \u043c\u044b \u0431\u0435\u0440\u0435\u043c \u0438\u0437\u00a0\u0442\u043e\u0433\u043e \u0446\u0438\u043a\u043b\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u043b\u0438, \u0442.\u00a0\u0435. <em>location.value<\/em> \u0438 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u043a\u0430\u043a\u043e\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u043d\u0443\u0436\u0435\u043d.<\/p>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c <em>terraform init<\/em> \u0438 <em>terraform apply<\/em> \u0432\u00a0\u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435 k8s.<\/p>\n<p>\u041d\u0443 \u0432\u043e\u0442, \u0443\u00a0\u043d\u0430\u0441 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u043f\u043e\u0434\u043d\u044f\u0442\u044c \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0441\u00a0\u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0434\u0432\u0443\u0445 \u0440\u0430\u0437\u043d\u044b\u0445 \u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442\u043e\u0432 Terraform. \u0411\u0435\u0436\u0438\u043c \u0432\u00a0\u042f\u043d\u0434\u0435\u043a\u0441 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c\u00a0\u2014 \u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u043d\u0430\u00a0\u043c\u0435\u0441\u0442\u0435. \u041d\u0430\u043c \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0440\u0435\u0448\u0438\u0442\u044c, \u043a\u0430\u043a\u00a0\u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0433\u0440\u0443\u043f\u043f\u044b \u0443\u0437\u043b\u043e\u0432. \u041e\u043d\u0438 \u0443\u00a0\u043d\u0430\u0441 \u0442\u0430\u043a\u00a0\u0436\u0435, \u043a\u0430\u043a\u00a0\u0438 \u043f\u043e\u0434\u0441\u0435\u0442\u0438 \u0434\u043e\u00a0\u044d\u0442\u043e\u0433\u043e, \u0443\u043a\u0430\u0437\u0430\u043d\u044b \u0442\u0440\u0435\u043c\u044f \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u043c\u0438. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c. \u041a\u0430\u043a\u00a0\u0432\u044b \u043d\u0430\u0432\u0435\u0440\u043d\u043e\u0435 \u0443\u0436\u0435 \u0434\u043e\u0433\u0430\u0434\u0430\u043b\u0438\u0441\u044c, \u0434\u0435\u043b\u0430\u0442\u044c \u043c\u044b \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u043c \u0447\u0435\u0440\u0435\u0437 \u0442\u043e\u0442\u00a0\u0436\u0435 <em>for_each<\/em>. \u041d\u043e\u00a0\u0441\u043d\u0430\u0447\u0430\u043b\u0430, \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e:<\/p>\n<details class=\"spoiler\">\n<summary>my_project\/k8s\/variables.tf<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"coffeescript\">#=========== main ============== variable \"cloud_id\" {   description = \"The cloud ID\"   type        = string } variable \"folder_id\" {   description = \"The folder ID\"   type        = string } variable \"default_zone\" {   description = \"The default zone\"   type        = string   default     = \"ru-cenral1-a\" }  #=========== terraform_remote_state ============== variable \"network_state_key\" {   description = \"The key of state for the network.\"   type        = string   default     = null }  variable \"network_bucket_name\" {   description = \"The name of bucket for the network.\"   type        = string   default     = null }  #=========== service_account ============== variable \"service_account_name\" {   description = \"Name of service account\"   type = string   default = null }  variable \"kms_provider_key_name\" {   description = \"KMS key name.\"   type = string   default = null }  #=========== cluster ============== variable \"cluster_name\" {   description = \"Name of a specific Kubernetes cluster.\"   type        = string   default     = null }  variable \"network_policy_provider\" {   description = \"Network policy provider for the cluster. Possible values: CALICO.\"   type = string   default = \"CALICO\" }  variable \"master_version\" {   description = \"Version of Kubernetes that will be used for master.\"   type = string   default = null }  variable \"master_public_ip\" {   description = \"Boolean flag. When true, Kubernetes master will have a visible ipv4 address.\"   type = bool   default = true }  variable \"master_region\" {   description = \"Name of region where cluster will be created. Required for regional cluster, not used for zonal cluster.\"   type = string   default = null }  #=========== node_groups ============== variable \"node_groups\" {   description = \"Parameters of Kubernetes node groups.\"   default = {} }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0418 \u043f\u0440\u0438\u0441\u0432\u043e\u0438\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u044d\u0442\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0432 terraform.tfvars:<\/p>\n<details class=\"spoiler\">\n<summary>my_project\/k8s\/terraform.tfvars<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"coffeescript\">#=========== main ============== cloud_id  = \"b1gq90dgh25bebiu75o\" folder_id = \"b1gia87mbaomkfvsleds\"  #=========== terraform_remote_state ============== network_state_key = \"my-project-network.tfstate\" network_bucket_name = \"test-tfstate\"  #=========== service_account ============== service_account_name  = \"myaccount\" kms_provider_key_name = \"kms-key\"  #=========== cluster ============== cluster_name   = \"cluster\" master_version = \"1.22\" master_region  = \"ru-central1\"  #=========== node_groups ============== node_groups = {   node-group-a = {     platform_id    = \"standard-v1\",     name           = \"worker-a-{instance.short_id}\",     cores          = 2,     memory         = 2,     boot_disk_type = \"network-ssd\",     boot_disk_size = 32,     zone           = \"ru-central1-a\",     auto_scale = {       min     = 1,       max     = 3,       initial = 1     }   }   node-group-b = {     platform_id    = \"standard-v1\",     name           = \"worker-b-{instance.short_id}\",     cores          = 2,     memory         = 2,     boot_disk_type = \"network-ssd\",     boot_disk_size = 32,     zone           = \"ru-central1-b\",     fixed_scale = {       size     = 1     }   }   node-group-c = {     platform_id    = \"standard-v1\",     name           = \"worker-c-{instance.short_id}\",     cores          = 2,     memory         = 2,     boot_disk_type = \"network-ssd\",     boot_disk_size = 32,     zone           = \"ru-central1-c\",     fixed_scale = {       size     = 1     }   } }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0422\u0443\u0442 \u043c\u044b \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u0432\u0441\u0451 \u0442\u043e, \u0447\u0442\u043e\u00a0\u0445\u043e\u0442\u0438\u043c \u0432\u0438\u0434\u0435\u0442\u044c \u0432\u00a0\u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u0445 \u0440\u0435\u0441\u0443\u0440\u0441\u0430, \u0433\u043b\u0430\u0432\u043d\u043e\u0435 \u043f\u043e\u0442\u043e\u043c \u044d\u0442\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u043f\u0440\u0438\u0441\u0432\u043e\u0438\u0442\u044c. \u041a\u0430\u043a\u00a0\u0432\u044b \u043c\u043e\u0433\u043b\u0438 \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0431\u043b\u043e\u043a\u0438 \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f, \u0430\u00a0\u0438\u043c\u0435\u043d\u043d\u043e \u0434\u043b\u044f <em>node\u2011group\u2011a<\/em> \u0443\u043a\u0430\u0437\u0430\u043d <em>auto_scale<\/em>, \u0430\u00a0\u0434\u043b\u044f\u00a0\u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u0433\u0440\u0443\u043f\u043f <em>fixed_scale<\/em>. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u044f \u0445\u043e\u0447\u0443 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043c\u0435\u043d\u044f\u0442\u044c \u0442\u0438\u043f \u0433\u0440\u0443\u043f\u043f \u0447\u0435\u0440\u0435\u0437 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435.<\/p>\n<p>\u0422\u0430\u043a\u0436\u0435, \u0432 <em>yandex_kubernetes_node_group<\/em> \u043d\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0443\u043a\u0430\u0437\u0430\u0442\u044c id \u043f\u043e\u0434\u0441\u0435\u0442\u0435\u0439. \u0412\u0441\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u043c \u043e\u00a0\u043d\u0430\u0448\u0435\u043c \u0440\u0430\u043d\u0435\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u043e\u043c output\u00bb\u0435\u00a0\u2014 <em>k8s_workers_subnet_info<\/em>, \u043d\u043e\u00a0\u0442\u0430\u043c \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0441\u044f \u043d\u0435\u00a0\u0442\u043e\u043b\u044c\u043a\u043e id, \u043d\u043e\u00a0\u0438 \u0437\u043e\u043d\u0430. \u0412\u00a0\u0447\u0435\u043c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430?\u00a0\u2014 \u0441\u043f\u0440\u043e\u0441\u0438\u0442\u0435 \u0432\u044b. \u0412\u0435\u0434\u044c \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c output, \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u0432\u044b\u0434\u0430\u0432\u0430\u043b \u0442\u043e\u043b\u044c\u043a\u043e id. \u041d\u043e\u00a0\u043d\u0435\u0442, \u0432\u00a0\u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0443\u00a0\u043d\u0430\u0441 \u043f\u0440\u043e\u043f\u0430\u0434\u0451\u0442 \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0430 \u043a\u00a0\u0437\u043e\u043d\u0435, \u0432\u0435\u0434\u044c \u043c\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u043d\u0430\u0431\u043e\u0440 id, \u0438 \u043f\u043e\u043d\u044f\u0442\u044c \u043a\u0430\u043a\u043e\u0439 \u0438\u0437\u00a0\u043d\u0438\u0445 \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0438\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u0439 \u0437\u043e\u043d\u0435 \u043d\u0435\u00a0\u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f. \u0414\u0430, \u043e\u043d\u0438 \u0443\u00a0\u043d\u0430\u0441 \u0441\u0435\u0439\u0447\u0430\u0441 \u043f\u043e\u00a0\u043f\u043e\u0440\u044f\u0434\u043a\u0443, \u043f\u0435\u0440\u0432\u044b\u0439 id \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043a\u00a0\u0437\u043e\u043d\u0435 <em>ru\u2011cenral1-a<\/em>, \u0432\u0442\u043e\u0440\u043e\u0439\u00a0\u2014 \u043a <em>b<\/em> \u0438 \u0442\u0440\u0435\u0442\u0438\u0439\u00a0\u2014 \u043a <em>c<\/em>. \u041d\u043e\u00a0\u044d\u0442\u043e \u043c\u044b \u0432\u00a0\u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442\u0435 network \u043d\u0430\u0448\u0435\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0442\u0430\u043a \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u00a0\u043f\u043e\u0440\u044f\u0434\u043a\u0443 \u0443\u043a\u0430\u0437\u0430\u043b\u0438, \u0430\u00a0\u0432\u043e\u0442 \u0435\u0441\u043b\u0438 \u0438\u0445 \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c \u043c\u0435\u0441\u0442\u0430\u043c\u0438, \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u043f\u0443\u0442\u0430\u043d\u0438\u0446\u0443 \u0441\u00a0\u0442\u0430\u043a\u0438\u043c \u043f\u043e\u0434\u0445\u043e\u0434\u043e\u043c, \u0438 \u043f\u043e\u0434\u043d\u0438\u043c\u0435\u0442\u0441\u044f \u0443\u00a0\u043d\u0430\u0441, \u043a\u00a0\u043f\u0440\u0438\u043c\u0435\u0440\u0443, \u0433\u0440\u0443\u043f\u043f\u0430 \u0441\u00a0\u0438\u043c\u0435\u043d\u0435\u043c <em>node\u2011group\u2011a<\/em> \u0432\u00a0\u0437\u043e\u043d\u0435 <em>b<\/em>. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 output \u043c\u044b \u043d\u0435\u00a0\u0442\u0440\u043e\u0433\u0430\u0435\u043c, \u0430\u00a0\u0441\u0434\u0435\u043b\u0430\u0435\u043c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0447\u0435\u0440\u0435\u0437 locals:<\/p>\n<details class=\"spoiler\">\n<summary>my_project\/k8s\/locals.tf<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"coffeescript\">locals {   network_output = data.terraform_remote_state.network.outputs   worker_subnet_list = zipmap([for subnet in local.network_output.k8s_workers_subnet_info : subnet.zone], [for subnet in local.network_output.k8s_workers_subnet_info : subnet.subnet_id]) }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0421\u043e\u0437\u0434\u0430\u0451\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e <em>worker_subnet_list<\/em>, \u0442\u0443\u0442 \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0441\u043f\u0438\u0441\u043e\u043a, \u0433\u0434\u0435 \u043a\u0430\u0436\u0434\u043e\u0439 \u0437\u043e\u043d\u0435 \u043f\u0440\u0438\u0441\u0432\u043e\u0438\u0442\u0441\u044f <em>id<\/em>.<\/p>\n<p>\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u0441\u044f \u043a \u043d\u0430\u0448\u0435\u043c\u0443 \u0440\u0435\u0441\u0443\u0440\u0441\u0443 \u0432 \u0444\u0430\u0439\u043b node_group.tf:<\/p>\n<details class=\"spoiler\">\n<summary>my_project\/k8s\/node_group.tf<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"coffeescript\">resource \"yandex_kubernetes_node_group\" \"my_node_groups\" {   for_each    = var.node_groups   cluster_id  = yandex_kubernetes_cluster.k8s-regional.id   name        = each.key   description = lookup(each.value, \"description\", null)   version     = lookup(each.value, \"version\", var.master_version)   labels = lookup(each.value, \"labels\", null)   instance_template {     platform_id = lookup(each.value, \"platform_id\", null)     name        = lookup(each.value, \"name\", null)     network_interface {       nat                = lookup(each.value, \"nat\", true)       subnet_ids         = [lookup(local.worker_subnet_list, each.value[\"zone\"])]       security_group_ids = [local.network_output.sg_internal, local.network_output.sg_k8s_worker]     }     resources {       memory = lookup(each.value, \"memory\", 2)       cores  = lookup(each.value, \"cores\", 2)     }     boot_disk {       type = lookup(each.value, \"boot_disk_type\", \"network-hdd\")       size = lookup(each.value, \"boot_disk_size\", 64)     }     scheduling_policy {       preemptible = lookup(each.value, \"preemptible\", false)     }   }   scale_policy {     dynamic \"fixed_scale\" {       for_each = flatten([lookup(each.value, \"fixed_scale\", can(each.value[\"auto_scale\"]) ? [] : [{ size = 1 }])])        content {         size = fixed_scale.value.size       }     }     dynamic \"auto_scale\" {       for_each = flatten([lookup(each.value, \"auto_scale\", [])])       content {         min     = auto_scale.value.min         max     = auto_scale.value.max         initial = auto_scale.value.initial       }     }   }   allocation_policy {     location {       zone = each.value[\"zone\"]     }   } }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<ul>\n<li>\n<p>\u041a\u043e\u043d\u0435\u0447\u043d\u043e\u00a0\u0436\u0435, \u043c\u0435\u043d\u044f\u0435\u043c \u0438\u043c\u044f \u0440\u0435\u0441\u0443\u0440\u0441\u0430 \u0432\u00a0Terraform&#8217;\u0435.<\/p>\n<\/li>\n<li>\n<p>\u041e\u0431\u044a\u044f\u0432\u043b\u044f\u0435\u043c, \u0447\u0442\u043e\u00a0\u0445\u043e\u0442\u0438\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <em>for_each<\/em> \u0438 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u043e\u0442\u043a\u0443\u0434\u0430 \u0446\u0438\u043a\u043b\u0443 \u0431\u0440\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f (\u0430 \u043b\u0435\u0436\u0430\u0442 \u043e\u043d\u0438 \u0432\u00a0\u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <em>node_groups<\/em>).<\/p>\n<\/li>\n<li>\n<p><em>name<\/em>, \u0431\u0435\u0440\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0438\u0437\u00a0each.key, \u044d\u0442\u043e \u0443\u00a0\u043d\u0430\u0441 \u0438\u043c\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u0430: <em>node\u2011group\u2011a<\/em>, <em>node\u2011group\u2011b<\/em> \u0438 <em>node\u2011group\u2011c<\/em>. <\/p>\n<\/li>\n<li>\n<p>\u0414\u0430\u043b\u0435\u0435 \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c, \u043d\u043e\u00a0\u0434\u0435\u043b\u0430\u0435\u043c \u043c\u044b \u044d\u0442\u043e \u043f\u043e\u00a0\u0443\u0441\u043b\u043e\u0432\u0438\u044e, \u0434\u043b\u044f\u00a0\u044d\u0442\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044f <em>lookup<\/em>, \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u0443\u00a0\u043d\u0435\u0451 \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442, \u043c\u044b \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u0433\u0434\u0435 \u0438\u0441\u043a\u0430\u0442\u044c, \u0447\u0442\u043e\u00a0\u0438\u0441\u043a\u0430\u0442\u044c, \u0438 \u0447\u0442\u043e\u00a0\u043f\u0440\u0438\u0441\u0432\u043e\u0438\u0442\u044c \u0435\u0441\u043b\u0438 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435\u00a0\u043d\u0430\u0448\u043b\u0430 (\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u00a0\u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e).<\/p>\n<\/li>\n<li>\n<p><em>subnet_ids<\/em> \u0441\u0442\u0430\u0432\u0438\u043c \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a <em>local<\/em>.<em>worker_subnet_list<\/em>, \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u0447\u0442\u043e\u00a0\u0431\u0440\u0430\u0442\u044c, \u0430\u00a0\u0437\u0430\u0431\u0438\u0440\u0430\u0442\u044c \u043c\u044b \u0431\u0443\u0434\u0435\u043c id \u0442\u043e\u0439 \u0437\u043e\u043d\u044b, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0443\u043a\u0430\u0437\u0430\u043d\u0430 \u0432\u00a0\u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <em>node_groups<\/em>, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u0442\u0430\u0432\u0438\u043c <em>each.value[\u00abzone\u00bb]<\/em>. \u0414\u0435\u0444\u043e\u043b\u0442\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0443\u0431\u0438\u0440\u0430\u0435\u043c, \u0442.\u043a. \u0441\u044e\u0434\u0430 \u043c\u044b \u043f\u043e\u00a0\u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435\u00a0\u0441\u043c\u043e\u0436\u0435\u043c \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c. <\/p>\n<\/li>\n<li>\n<p><em>security_group_ids<\/em>\u00a0\u2014 \u0433\u0440\u0443\u043f\u043f\u044b \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u043c\u044b \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u0431\u0435\u0437\u00a0\u0432\u0441\u044f\u043a\u0438\u0445 \u0443\u0441\u043b\u043e\u0432\u0438\u0439, \u043f\u0440\u043e\u0441\u0442\u043e \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u043d\u0443\u0436\u043d\u044b\u0435 output\u00bb\u044b. <\/p>\n<\/li>\n<li>\n<p><em>scale_policy<\/em>\u00a0\u2014 \u043a\u0430\u043a\u00a0\u044f \u0443\u0436\u0435 \u0433\u043e\u0432\u043e\u0440\u0438\u043b, \u043d\u0443\u0436\u043d\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0432\u044b\u0431\u043e\u0440\u0430,\u00a0\u043b\u0438\u0431\u043e \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u0433\u0440\u0443\u043f\u043f\u0430 \u0443\u0437\u043b\u043e\u0432,\u00a0\u043b\u0438\u0431\u043e \u0441\u00a0\u0430\u0432\u0442\u043e\u0441\u043a\u0435\u0439\u043b\u0438\u043d\u0433\u043e\u043c\u00a0\u2014 \u0434\u043b\u044f\u00a0\u044d\u0442\u043e\u0433\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0434\u0432\u0430 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 dynamic \u0431\u043b\u043e\u043a\u0430, \u0432\u00a0\u043d\u0438\u0445 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0446\u0438\u043a\u043b, \u043d\u043e, \u043f\u0440\u043e\u0441\u0442\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043d\u0435\u00a0\u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f, \u0443\u00a0\u043d\u0430\u0441 \u0432\u00a0\u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0434\u043b\u044f\u00a0\u044d\u0442\u0438\u0445 \u0431\u043b\u043e\u043a\u043e\u0432, \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u0442\u0430\u0449\u0438\u0442\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u043d\u0443\u0436\u043d\u043e \u044d\u0442\u043e\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u0432\u044b\u0442\u0430\u0449\u0438\u0442\u044c \u0438\u0437\u00a0\u0434\u0440\u0443\u0433\u043e\u0433\u043e, \u0434\u043b\u044f\u00a0\u044d\u0442\u043e\u0433\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 <em>flatten<\/em>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u0442 \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0435 \u0441\u043f\u0438\u0441\u043a\u0438. \u0410\u00a0\u0434\u0430\u043b\u0435\u0435 \u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <em>lookup<\/em>\u00a0\u2014 \u043e\u0442\u043b\u0438\u0447\u0438\u0435\u00a0\u043b\u0438\u0448\u044c \u0432\u00a0\u0442\u043e\u043c, \u0447\u0442\u043e\u00a0\u0434\u043b\u044f\u00a0\u0431\u043b\u043e\u043a\u0430 <em>fixed_scale<\/em> \u043d\u0430\u00a0\u043c\u0435\u0441\u0442\u0435 \u0434\u0435\u0444\u043e\u043b\u0442\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043c\u044b \u0441\u0442\u0430\u0432\u0438\u043c \u0443\u0441\u043b\u043e\u0432\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 <em>auto_scale<\/em> \u0438 \u0435\u0441\u043b\u0438 \u043e\u043d \u0435\u0441\u0442\u044c, \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u044d\u0442\u043e\u0442 \u0431\u043b\u043e\u043a <em>fixed_scale<\/em> \u0431\u0435\u0437\u00a0\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0430\u00a0\u0435\u0441\u043b\u0438 \u043d\u0435\u0442, \u0442\u043e \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043e\u0434\u0438\u043d \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0443\u0437\u0435\u043b. <\/p>\n<\/li>\n<li>\n<p>\u0412 <em>content<\/em> \u0434\u043b\u044f\u00a0\u044d\u0442\u0438\u0445 \u0431\u043b\u043e\u043a\u043e\u0432 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0438\u0437\u00a0\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430: \u0434\u043b\u044f <em>auto_scale\u00a0\u2014 auto_scale.value.<\/em>\u0447\u0442\u043e_\u0431\u0435\u0440\u0435\u043c, \u0434\u043b\u044f <em>fixed_scale\u00a0\u2014 fixed_scale<\/em>.<em>value.size<\/em><\/p>\n<\/li>\n<li>\n<p><em>allocation policy:<\/em> \u0431\u0435\u0437\u00a0\u0432\u0441\u044f\u043a\u0438\u0445 lookup\u00bb\u043e\u0432 \u0441\u0441\u044b\u043b\u0430\u0435\u043c\u0441\u044f \u043d\u0430\u00a0\u043d\u0443\u0436\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435.<\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u043e\u043b\u0443\u0447\u0438\u0432\u0448\u0430\u044f\u0441\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u0434\u043e\u043b\u0436\u043d\u0430 \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u0442\u044c \u0434\u043b\u044f\u00a0\u043d\u0430\u0441 \u0440\u0435\u0433\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0442\u0435\u0440 Kubernetes, \u0441\u00a0\u0430\u0432\u0442\u043e\u0441\u043a\u0435\u0439\u043b\u0438\u043d\u0433\u043e\u043c \u043d\u043e\u0434 \u0432\u00a0\u0437\u043e\u043d\u0435 <em>ru\u2011central1-a<\/em>, \u0430\u00a0\u0432\u00a0\u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u0437\u043e\u043d\u0430\u0445 \u0441 1\u00a0\u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043d\u043e\u0434\u043e\u0439. <\/p>\n<p>\u041e\u0434\u043d\u0430\u043a\u043e, \u0432\u00a0\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0438 \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0433\u043e \u0441\u0442\u0435\u043d\u0434\u0430 \u044f \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u0441\u044f \u0441\u00a0\u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043e\u0439, \u0447\u0442\u043e\u00a0\u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u043b\u0430\u0441\u044c \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0430 \u0441\u00a0\u044d\u0442\u0438\u043c \u043a\u043e\u0434\u043e\u043c, \u0430\u00a0\u0443\u0436\u0435 \u043d\u0430\u00a0\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0434\u0435\u043d\u044c\u00a0\u2014 \u043d\u0435\u0442. \u0412\u0441\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0443\u0437\u043b\u044b \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u043b\u0438\u0441\u044c, \u043d\u043e\u00a0\u043d\u0435\u00a0\u0438\u043c\u0435\u043b\u0438 \u0441\u0432\u044f\u0437\u0438 \u0441\u00a0\u043c\u0430\u0441\u0442\u0435\u0440\u0430\u043c\u0438. \u041f\u043e\u0441\u043b\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438, \u044f \u043f\u043e\u043d\u044f\u043b, \u0447\u0442\u043e\u00a0\u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0434\u043b\u044f\u00a0\u0433\u0440\u0443\u043f\u043f\u044b \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u043d\u0435\u00a0\u043e\u0442\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442 \u0442\u0430\u043a, \u043a\u0430\u043a\u00a0\u044d\u0442\u043e \u0437\u0430\u0434\u0443\u043c\u0430\u043d\u043e. \u041f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c \u0433\u0440\u0443\u043f\u043f\u0443 internal:<\/p>\n<details class=\"spoiler\">\n<summary>my_project\/network\/security-group.tf<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"coffeescript\">resource \"yandex_vpc_security_group\" \"internal\" {   name        = \"internal\"   description = \"Managed by terraform\"   network_id  = yandex_vpc_network.mynet.id   labels = {     firewall = \"yc_internal\"   }   ingress {     protocol          = \"ANY\"     description       = \"self\"     predefined_target = \"self_security_group\"     from_port         = 0     to_port           = 65535   }   ingress {     protocol       = \"ANY\"     description    = \"\u041f\u0440\u0430\u0432\u0438\u043b\u043e \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0435\u0442 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u043f\u043e\u0434-\u043f\u043e\u0434 \u0438 \u0441\u0435\u0440\u0432\u0438\u0441-\u0441\u0435\u0440\u0432\u0438\u0441. \u0423\u043a\u0430\u0436\u0438\u0442\u0435 \u043f\u043e\u0434\u0441\u0435\u0442\u0438 \u0432\u0430\u0448\u0435\u0433\u043e \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u0438 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432. P.s. \u041f\u0440\u0430\u0432\u0438\u043b\u043e \u0438\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u043e \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0430 self_security_group \u043d\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u0443\u0435\u0442 \u043a\u0430\u043a \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u043e \u043c\u0435\u0436\u0434\u0443 \u043c\u0430\u0448\u0438\u043d\u0430\u043c\u0438 \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u0440\u0435\u0433\u0438\u043e\u043d\u0430\u0445.\"     v4_cidr_blocks = flatten([for v in concat(var.subnets[\"k8s_masters\"], var.subnets[\"k8s_workers\"]) : v.cidr])     from_port      = 0     to_port        = 65535   }    egress {     protocol          = \"ANY\"     description       = \"self\"     predefined_target = \"self_security_group\"     from_port         = 0     to_port           = 65535   } }  resource \"yandex_vpc_security_group\" \"k8s_master\" {   name        = \"k8s-master\"   description = \"Managed by terraform\"   network_id  = yandex_vpc_network.mynet.id   labels = {     firewall = \"k8s-master\"   }   ingress {     protocol       = \"TCP\"     description    = \"access to api k8s\"     v4_cidr_blocks = var.white_ips_for_master     port           = 443   }   ingress {     protocol          = \"TCP\"     description       = \"access to api k8s from Yandex lb\"     predefined_target = \"loadbalancer_healthchecks\"     from_port         = 0     to_port           = 65535   } }  resource \"yandex_vpc_security_group\" \"k8s_worker\" {   name        = \"k8s-worker\"   description = \"Managed by terraform\"   network_id  = yandex_vpc_network.mynet.id   labels = {     firewall = \"k8s-worker\"   }   ingress {     protocol       = \"ANY\"     description    = \"any connections\"     v4_cidr_blocks = [\"0.0.0.0\/0\"]     from_port      = 0     to_port        = 65535   }   egress {     protocol       = \"ANY\"     description    = \"any connections\"     v4_cidr_blocks = [\"0.0.0.0\/0\"]     from_port      = 0     to_port        = 65535   } } <\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u041f\u043e\u044f\u0441\u043d\u044e \u0441\u0432\u043e\u044e \u043c\u044b\u0441\u043b\u044c. \u041f\u0440\u0430\u0432\u0438\u043b\u043e, \u0433\u0434\u0435 \u043c\u044b \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c <em>predefined_target = \u00abself_security_group\u00bb<\/em>, \u0434\u043e\u043b\u0436\u043d\u043e \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0442\u044c \u0432\u0441\u0451 \u0432\u00a0\u0440\u0430\u043c\u043a\u0430\u0445 \u044d\u0442\u043e\u0439 \u0441\u0430\u043c\u043e\u0439 \u0433\u0440\u0443\u043f\u043f\u044b, \u0442.\u00a0\u0435. \u0445\u043e\u0441\u0442\u044b, \u043a\u00a0\u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u043d\u0430 \u0433\u0440\u0443\u043f\u043f\u0430 <em>internal<\/em> (\u0430 \u0432\u00a0\u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e \u0432\u0441\u0435 \u043c\u0430\u0441\u0442\u0435\u0440\u044b \u0438 \u0432\u043e\u0440\u043a\u0435\u0440\u044b), \u0434\u043e\u043b\u0436\u043d\u044b \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e \u043e\u0431\u0449\u0430\u0442\u044c\u0441\u044f \u0434\u0440\u0443\u0433 \u0441\u00a0\u0434\u0440\u0443\u0433\u043e\u043c. \u041d\u043e\u00a0\u044d\u0442\u043e\u0433\u043e \u043d\u0435\u00a0\u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442\u00a0\u2014 \u043f\u043e\u00a0\u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e\u0442\u00a0\u0442\u0435\u0445\u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438, \u043e\u043d\u0438 \u043f\u0435\u0440\u0435\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0440\u0430\u0431\u043e\u0442\u044b \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u0430, \u0438 \u043f\u043e\u043a\u0430 \u043e\u043d\u043e \u043c\u043e\u0436\u0435\u0442 \u00ab\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0435\u043e\u0436\u0438\u0434\u0430\u0435\u043c\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043a\u043e\u0433\u0434\u0430 \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442\u044b \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0432\u00a0\u0440\u0430\u0437\u043d\u044b\u0445 \u0437\u043e\u043d\u0430\u0445\u00bb. \u041f\u043e\u044d\u0442\u043e\u043c\u0443, \u043c\u043d\u0435 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0434\u0440\u0443\u0433\u043e\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f \u0432\u0441\u0435\u043c \u0443\u0437\u043b\u0430\u043c, \u043d\u0430\u0445\u043e\u0434\u044f\u0449\u0438\u043c\u0441\u044f \u0432\u00a0\u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0445 \u0432\u00a0\u043d\u0435\u0439 \u043f\u043e\u0434\u0441\u0435\u0442\u044f\u0445. <\/p>\n<p>\u041a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043f\u0440\u0430\u0432\u0438\u043b\u043e:\u00a0<\/p>\n<ol>\n<li>\n<p>\u041d\u0430\u043c \u043d\u0443\u0436\u043d\u044b cidr \u043d\u0430\u0448\u0438\u0445 \u043f\u043e\u0434\u0441\u0435\u0442\u0435\u0439, \u043e\u043d\u0438 \u0443\u00a0\u043d\u0430\u0441 \u0432\u00a0\u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <em>subnets<\/em>. \u041e\u0434\u043d\u0430\u043a\u043e, \u043d\u0430\u043c \u043d\u0435\u00a0\u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0441\u043e \u0432\u0441\u0435\u0445 \u043f\u043e\u0434\u0441\u0435\u0442\u0435\u0439, \u043c\u044b\u00a0\u0436\u0435 \u043c\u043e\u0436\u0435\u043c \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0438 \u0434\u0440\u0443\u0433\u0438\u0445, \u043d\u0435\u00a0\u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f\u00a0\u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u0438 \u0432\u043e\u0440\u043a\u0435\u0440\u043e\u0432, \u043a\u0430\u043a\u00a0\u0441\u0435\u0439\u0447\u0430\u0441,\u00a0\u2014 \u0443\u00a0\u043d\u0430\u0441 \u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u044f\u0432\u0438\u0442\u044c\u0441\u044f \u0434\u0440\u0443\u0433\u0438\u0435 \u043f\u043e\u0434\u0441\u0435\u0442\u0438, \u0438 \u043c\u044b \u043d\u0435\u00a0\u043c\u043e\u0436\u0435\u043c \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442\u044c \u0442\u0440\u0430\u0444\u0438\u043a\u0443 \u0441\u00a0\u0434\u0440\u0443\u0433\u0438\u0445 \u0445\u043e\u0441\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435\u00a0\u043e\u0442\u043d\u043e\u0441\u044f\u0442\u0441\u044f \u043a\u00a0\u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0443, \u0445\u043e\u0434\u0438\u0442\u044c \u043a\u00a0\u043d\u0435\u043c\u0443. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u0442\u0444\u0438\u043b\u044c\u0442\u0440\u0443\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u043e, \u0447\u0442\u043e\u00a0\u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043a\u00a0\u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0443,\u00a0\u2014 \u044d\u0442\u043e \u043c\u0430\u0441\u0442\u0435\u0440\u044b \u0438 \u0432\u043e\u0440\u043a\u0435\u0440\u044b:<\/p>\n<\/li>\n<\/ol>\n<pre><code class=\"coffeescript\">[(var.subnets[\"k8s_masters\"], var.subnets[\"k8s_workers\"])]\u00a0<\/code><\/pre>\n<ol start=\"2\">\n<li>\n<p>\u041d\u043e, \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u0434\u0432\u0430 \u0441\u043f\u0438\u0441\u043a\u0430. \u041d\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430, \u0432\u044b\u0437\u043e\u0432\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e concat, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u0435\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u043f\u0438\u0441\u043a\u043e\u0432 \u0432 \u043e\u0434\u0438\u043d:\u00a0<\/p>\n<\/li>\n<\/ol>\n<pre><code class=\"coffeescript\">concat(var.subnets[\"k8s_masters\"], var.subnets[\"k8s_workers\"])\u00a0<\/code><\/pre>\n<ol start=\"3\">\n<li>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c, \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u0442\u0430\u0449\u0438\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e <em>cidr<\/em>, \u0430 \u0443 \u043d\u0430\u0441 \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u043f\u043e\u043c\u0438\u043c\u043e \u044d\u0442\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430 \u0435\u0449\u0451 <em>name<\/em> \u0438 <em>zone<\/em>, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u0443\u0441\u043b\u043e\u0432\u0438\u0435, \u0447\u0442\u043e \u0432 \u0441\u043f\u0438\u0441\u043e\u043a \u043c\u044b \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043a\u043b\u044e\u0447\u0430 <em>cidr<\/em>:<\/p>\n<\/li>\n<\/ol>\n<pre><code class=\"coffeescript\">[for v in concat(var.subnets[\"k8s_masters\"], var.subnets[\"k8s_workers\"]) : v.cidr]<\/code><\/pre>\n<ol start=\"4\">\n<li>\n<p>\u041c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u043d\u0443\u0436\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b, \u043d\u043e, <em>cidr<\/em> \u0443 \u043d\u0430\u0441 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439, \u043a\u0430\u043a \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a, \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <em>flatten<\/em> \u043c\u044b \u0432\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u043c \u044d\u0442\u043e\u0442 \u0441\u043f\u0438\u0441\u043e\u043a:<\/p>\n<\/li>\n<\/ol>\n<pre><code class=\"coffeescript\">flatten([for v in concat(var.subnets[\"k8s_masters\"], var.subnets[\"k8s_workers\"]) : v.cidr])<\/code><\/pre>\n<p>\u0412\u043e\u0442 \u0442\u0435\u043f\u0435\u0440\u044c, \u043c\u043e\u0436\u0435\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c <em>terraform apply<\/em> \u0438 \u043b\u044e\u0431\u0443\u0435\u043c\u0441\u044f \u043d\u0430\u00a0\u043d\u0430\u0448\u0443 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443. ?<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0435\u0441\u0442\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0432\u00a0\u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0435 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432, \u043a\u0430\u043a\u00a0\u0434\u043e\u0441\u0442\u0443\u043f \u043f\u043e\u00a0ssh \u043a\u00a0\u0432\u043e\u0440\u043a\u0435\u0440\u2011\u043d\u043e\u0434\u0430\u043c, \u0432\u044b \u044d\u0442\u043e \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0443\u0436\u0435 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e, \u043f\u043e\u0447\u0438\u0442\u0430\u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e.<\/p>\n<h2>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h2>\n<p>\u041c\u043e\u0436\u043d\u043e\u00a0\u0431\u044b\u043b\u043e \u0435\u0449\u0451 \u043c\u043d\u043e\u0433\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u043e\u043f\u0438\u0441\u0430\u0442\u044c, \u043d\u043e\u00a0\u0446\u0435\u043b\u044c \u0441\u0442\u0430\u0442\u044c\u0438 \u0432\u00a0\u0434\u0440\u0443\u0433\u043e\u043c\u00a0\u2014 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0440\u0430\u0437\u043d\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u043f\u043e\u00a0\u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044e \u043a\u043e\u0434\u0430 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0438 \u043d\u0430\u0443\u0447\u0438\u0442\u044c \u0441\u043f\u043e\u0441\u043e\u0431\u0430\u043c \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u00a0\u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\u043c\u0438 Terraform\u00bb\u0430. \u041d\u0430\u0434\u0435\u044e\u0441\u044c \u0432\u0430\u043c \u044d\u0442\u043e \u043f\u043e\u043c\u043e\u0433\u043b\u043e. <\/p>\n<p>\u0421\u0430\u043c\u044b\u0435 \u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435, \u043d\u0430\u0432\u0435\u0440\u043d\u043e\u0435, \u0437\u0430\u043c\u0435\u0442\u0438\u043b\u0438, \u0447\u0442\u043e\u00a0\u044f \u0433\u043e\u0432\u043e\u0440\u0438\u043b \u043e\u00a0\u0442\u043e\u043c, \u0447\u0442\u043e\u00a0\u043d\u0435\u00a0\u043d\u0443\u0436\u043d\u043e \u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0435\u0441\u0443\u0440\u0441\u044b, \u0435\u0441\u043b\u0438 \u0438\u0445 \u043c\u043e\u0436\u043d\u043e \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u043e\u0434\u043d\u0438\u043c \u0431\u043b\u043e\u043a\u043e\u043c, \u043d\u043e\u00a0\u043f\u0440\u0438\u00a0\u044d\u0442\u043e\u043c, \u0441\u0430\u043c \u0441\u043e\u0437\u0434\u0430\u043b \u043f\u043e\u0434\u0440\u044f\u0434 \u0442\u0440\u0438 \u0433\u0440\u0443\u043f\u043f\u044b \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438. \u0422\u0430\u043a \u0432\u043e\u0442, \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u0432\u0430\u043c \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0432\u00a0\u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445, \u043a\u0430\u043a\u00a0\u0431\u044b \u0432\u044b \u043e\u043f\u0438\u0441\u0430\u043b\u0438 \u044d\u0442\u0438 \u0440\u0435\u0441\u0443\u0440\u0441\u044b. <\/p>\n<p>\u0421\u043f\u0430\u0441\u0438\u0431\u043e, \u0447\u0442\u043e\u00a0\u0434\u043e\u0447\u0438\u0442\u0430\u043b\u0438 \u0434\u043e\u00a0\u043a\u043e\u043d\u0446\u0430. \u041f\u043e\u0441\u0442\u0430\u0440\u0430\u0435\u043c\u0441\u044f \u0432\u044b\u043b\u043e\u0436\u0438\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u0447\u0430\u0441\u0442\u044c, \u043a\u0430\u043a\u00a0\u043c\u043e\u0436\u043d\u043e \u0441\u043a\u043e\u0440\u0435\u0435. \u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044e \u0432\u0441\u0435\u0445 \u0437\u0430\u00a0\u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0434\u043e\u00a0\u0441\u043a\u043e\u0440\u043e\u0433\u043e!)<\/p>\n<\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/721404\/\"> https:\/\/habr.com\/ru\/articles\/721404\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0412\u0438\u043a\u0442\u043e\u0440, \u044f DevOps\u2011\u0438\u043d\u0436\u0435\u043d\u0435\u0440 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 <a href=\"https:\/\/nixys.ru\/?roistat=habr_article_%20post100323\">Nixys<\/a>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u0434\u0440\u0443\u0433\u0438\u043c \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f\u043c \u0432\u043d\u0435\u0434\u0440\u044f\u0442\u044c \u0432\u00a0\u0438\u0445 IT\u2011\u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u0434\u043e\u0432\u044b\u0435 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0438 DevOps, MLOps \u0438 DevSecOps.<\/p>\n<p>\u0421\u0435\u0433\u043e\u0434\u043d\u044f \u044f \u043f\u0440\u0438\u0433\u043b\u0430\u0448\u0430\u044e \u0432\u0430\u0441 \u0432\u043c\u0435\u0441\u0442\u0435 \u0441\u043e \u043c\u043d\u043e\u0439 \u043f\u0440\u043e\u0439\u0442\u0438 \u043f\u0443\u0442\u044c \u00ab\u043e\u0442 \u043d\u0435\u0437\u043d\u0430\u043d\u0438\u044f \u043a\u00a0best practices\u00bb \u0432\u00a0\u0440\u0430\u0431\u043e\u0442\u0435 \u0441\u00a0Terraform. \u042d\u0442\u043e\u0442 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d \u0434\u043b\u044f\u00a0\u0441\u0435\u0440\u0438\u0438 \u043d\u0430\u0448\u0438\u0445 \u043e\u0434\u043d\u043e\u0438\u043c\u0435\u043d\u043d\u044b\u0445 \u0432\u0438\u0434\u0435\u043e\u0440\u043e\u043b\u0438\u043a\u043e\u0432 \u043d\u0430\u00a0YouTube, \u043d\u043e\u00a0\u043c\u044b \u0440\u0435\u0448\u0438\u043b\u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0435\u0433\u043e \u0438 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u0442\u044c \u0432\u0430\u043c \u0431\u043e\u043b\u0435\u0435 \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0432\u00a0\u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435.<\/p>\n<div class=\"tm-iframe_temp\" data-src=\"https:\/\/embedd.srv.habr.com\/iframe\/640acdbf7a8d27e0261eadb1\" data-style=\"\" id=\"640acdbf7a8d27e0261eadb1\" width=\"\"><\/div>\n<p>\u041d\u0435\u00a0\u0437\u0430\u0431\u044b\u0432\u0430\u0439\u0442\u0435 \u0441\u043b\u0435\u0434\u0438\u0442\u044c \u0437\u0430\u00a0\u043d\u0430\u0448\u0438\u043c\u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f\u043c\u0438 \u043d\u0430 <a href=\"https:\/\/www.youtube.com\/@nixys_ru\">YouTube<\/a>, <a href=\"https:\/\/habr.com\/ru\/company\/nixys\/profile\/\">Habr <\/a>\u0438 \u043f\u043e\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u0439\u0442\u0435\u0441\u044c \u043d\u0430\u00a0\u043d\u0430\u0448 Telegram\u2011\u043a\u0430\u043d\u0430\u043b <a href=\"https:\/\/t.me\/devops_fm\">DevOps FM<\/a>\u00a0\u2014 \u043c\u044b \u0432\u0441\u0435\u0433\u0434\u0430 \u0440\u0430\u0434\u044b \u043d\u043e\u0432\u044b\u043c \u0434\u0440\u0443\u0437\u044c\u044f\u043c. \u041d\u0430\u0447\u043d\u0451\u043c?<\/p>\n<h2>\u0427\u0435\u043c \u043c\u043d\u0435 \u043f\u043e\u043c\u043e\u0436\u0435\u0442 Terraform? \u0422\u0430\u043a \u043b\u0438 \u043e\u043d \u043c\u043d\u0435 \u043d\u0443\u0436\u0435\u043d?<\/h2>\n<p>\u041e\u0442\u0432\u0435\u0442 \u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u044b\u0439\u00a0\u2014 \u0434\u0430! \u0415\u0441\u043b\u0438 \u0443\u00a0\u0432\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430 \u0435\u0441\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u00a0\u044d\u0442\u0438\u043c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u043c, \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u0435\u0433\u043e.<\/p>\n<p>\u041f\u043e\u0447\u0435\u043c\u0443? \u0412\u00a0\u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c, Terraform\u00a0\u2014 \u044d\u0442\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u044f. \u0410\u00a0\u0432\u0441\u0451, \u0447\u0442\u043e\u00a0\u043c\u043e\u0436\u043d\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u043d\u0430\u0434\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c. \u0414\u0430\u2011\u0434\u0430, \u0442\u0430\u0432\u0442\u043e\u043b\u043e\u0433\u0438\u044f, \u043d\u043e, \u043d\u0430\u0434\u0435\u044e\u0441\u044c, \u0442\u0430\u043a \u043b\u0443\u0447\u0448\u0435 \u0437\u0430\u043a\u0440\u0435\u043f\u0438\u0442\u0441\u044f \u043c\u044b\u0441\u043b\u044c. \u0412\u044b\u00a0\u0436\u0435 \u043d\u0435\u00a0\u0437\u0430\u0434\u0430\u0435\u0442\u0435\u0441\u044c \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u043c: \u00ab\u0430 \u0437\u0430\u0447\u0435\u043c \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u043d\u044b\u0435\u00a0\u043b\u0438\u043d\u0438\u0438 \u043d\u0430\u00a0\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u0435 \u0441\u0442\u0430\u0432\u044f\u0442\u00bb, \u0432\u0435\u0440\u043d\u043e? \u0412\u043e\u0442 \u0438 \u0437\u0434\u0435\u0441\u044c \u043f\u0440\u0438\u043d\u0446\u0438\u043f \u0442\u043e\u0442\u00a0\u0436\u0435. \u0414\u0430, \u0432\u0430\u043c \u043d\u0443\u0436\u0435\u043d \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u044d\u0442\u043e\u0439\u00a0\u043b\u0438\u043d\u0438\u0438 (\u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0442\u043e\u043b\u043a\u043e\u0432\u044b\u0439 DevOps\u2011\u0438\u043d\u0436\u0435\u043d\u0435\u0440 \u0441\u00a0\u043d\u0443\u0436\u043d\u044b\u043c\u0438 \u0441\u043a\u0438\u043b\u043b\u0430\u043c\u0438), \u043d\u043e\u00a0\u043f\u0440\u043e\u0441\u0442\u043e \u0432\u0434\u0443\u043c\u0430\u0439\u0442\u0435\u0441\u044c, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0432\u044b \u044d\u0442\u0438\u043c \u0440\u0435\u0448\u0430\u0435\u0442\u0435!<\/p>\n<ul>\n<li>\n<p><strong>\u041f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0438 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0434\u043e\u043b\u0433\u0438\u0445 \u0440\u0443\u0442\u0438\u043d\u043d\u044b\u0445 \u0437\u0430\u0434\u0430\u0447<\/strong>. \u041d\u0430\u0432\u0435\u0440\u043d\u044f\u043a\u0430 \u043f\u0435\u0440\u0435\u0434 \u0432\u0430\u043c\u0438 \u043a\u043e\u0433\u0434\u0430\u2011\u0442\u043e \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u043b\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430, \u0447\u0442\u043e\u00a0\u043d\u0443\u0436\u043d\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0440\u0435\u0434 \u0434\u043b\u044f\u00a0\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0441\u0432\u043e\u0435\u0433\u043e \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430, \u0442\u0430\u043a \u043a\u0430\u043a\u00a0\u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e \u0443\u00a0\u0432\u0430\u0441 20\u00a0\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0432 \u0441\u0440\u0430\u0436\u0430\u044e\u0442\u0441\u044f \u0437\u0430\u00a0\u0442\u043e, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0441\u0432\u043e\u0439 \u043a\u043e\u0434 \u043d\u0430\u00a0\u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0435 (\u0430 \u0432\u00a0\u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u043e\u043d\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0431\u0443\u0434\u0443\u0442 \u0436\u0434\u0430\u0442\u044c \u043f\u043e\u043a\u0430 \u043f\u043e\u0434\u00a0\u043d\u0438\u0445 \u043d\u0435\u00a0\u043d\u0430\u0441\u0442\u0440\u043e\u044f\u0442 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0435). \u0412\u044b\u00a0\u0436\u0435 \u0432\u00a0\u044d\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0432\u00a0\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435, \u043d\u0435\u043a\u043e\u043d\u043a\u0443\u0440\u0435\u043d\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c \u043d\u0430\u00a0\u0440\u044b\u043d\u043a\u0435 \u0438\u00a0\u0442.\u00a0\u0434. \u0438\u00a0\u0442.\u00a0\u043f. \u0415\u0441\u043b\u0438 \u044d\u0442\u043e \u043f\u0440\u043e\u00a0\u0432\u0430\u0441, \u0442\u043e\u0433\u0434\u0430 \u0432\u0430\u043c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e \u043d\u0443\u0436\u0435\u043d Terraform, \u0432\u0435\u0434\u044c \u043e\u043d \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0438 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b\u00a0\u2014 \u0442\u0430\u043a\u0438\u0445, \u043a\u0430\u043a\u00a0\u0441\u0435\u0440\u0432\u0435\u0440\u044b, \u0441\u0435\u0442\u0438, \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0438 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0438 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445. \u0418 \u0432\u0443\u0430\u043b\u044f\u00a0\u2014 \u0432\u0430\u043c \u043d\u0435\u00a0\u043d\u0443\u0436\u043d\u043e \u0442\u0440\u0430\u0442\u0438\u0442\u044c \u043a\u0443\u0447\u0443 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043d\u0430\u00a0\u043d\u043e\u0432\u043e\u0435 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0435. <\/p>\n<\/li>\n<li>\n<p><strong>\u0421\u043d\u0438\u0436\u0435\u043d\u0438\u0435 \u0447\u0435\u043b\u043e\u0432\u0435\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0444\u0430\u043a\u0442\u043e\u0440\u0430<\/strong>. \u0423\u00a0\u0432\u0430\u0441\u00a0\u0431\u044b\u043b\u043e \u0442\u0430\u043a\u043e\u0435, \u0447\u0442\u043e\u00a0\u0432\u00a0\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u043b\u0438 \u043e\u0448\u0438\u0431\u043a\u0438 \u043f\u043e\u00a0\u0432\u0438\u043d\u0435 \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0430? \u042d\u0442\u043e \u043c\u043e\u0436\u0435\u0442\u00a0\u0431\u044b\u0442\u044c \u0447\u0442\u043e\u00a0\u0443\u0433\u043e\u0434\u043d\u043e: \u043e\u043f\u0435\u0447\u0430\u0442\u043a\u0430 \u0432\u00a0\u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0438 \u0441\u0435\u0440\u0432\u0438\u0441\u0430 \u043f\u0440\u0438\u00a0\u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0438 \u043a\u00a0\u043d\u0435\u043c\u0443, \u0438\u043b\u0438\u00a0\u0436\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u043a\u0442\u043e\u2011\u0442\u043e \u043c\u043e\u0433 \u043f\u043e\u0442\u043e\u0440\u043e\u043f\u0438\u0442\u044c\u0441\u044f, \u043c\u0438\u0441\u043a\u043b\u0438\u043a\u043d\u0443\u0442\u044c \u0438 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u043d\u0435\u00a0\u0442\u0443 \u043c\u0430\u0448\u0438\u043d\u0443. \u0412\u043e\u0442 100% \u0447\u0442\u043e\u00a0\u0431\u044b\u043b\u043e, \u0432\u0441\u0435 \u043c\u044b \u043b\u044e\u0434\u0438. \u0422\u043e\u0433\u0434\u0430 \u043e\u043f\u0438\u0448\u0438\u0442\u0435 \u0441\u0432\u043e\u044e \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u043a\u043e\u0434\u043e\u043c, \u0432\u044b \u0441\u043d\u0438\u0437\u0438\u0442\u0435 \u0448\u0430\u043d\u0441 \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0433\u043e \u043a\u00a0\u043c\u0438\u043d\u0438\u043c\u0443\u043c\u0443. \u041d\u0435\u00a0\u0434\u043e\u00a0\u043d\u0443\u043b\u044f, \u043d\u0435\u0442, \u043d\u043e\u00a0\u043d\u0430\u00a0\u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u043e\u0432 \u043c\u0435\u043d\u044c\u0448\u0435\u00a0\u2014 \u044d\u0442\u043e \u0444\u0430\u043a\u0442.<\/p>\n<\/li>\n<li>\n<p><strong>\u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435<\/strong>. \u041e\u0445, \u043a\u043e\u0433\u0434\u0430\u2011\u043d\u0438\u0431\u0443\u0434\u044c \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u043b\u0438\u0441\u044c \u0441\u00a0\u0442\u0435\u043c, \u0447\u0442\u043e\u00a0\u043d\u0430\u00a0\u0440\u0430\u0431\u043e\u0447\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u043d\u0443\u0436\u043d\u043e \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0441\u043e\u0444\u0442? \u0418 \u043b\u0430\u0434\u043d\u043e \u0435\u0441\u043b\u0438 \u044d\u0442\u043e \u0447\u0442\u043e\u2011\u0442\u043e \u043d\u0435\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435, \u0430\u00a0\u0432\u0434\u0440\u0443\u0433 \u043d\u0430\u0434\u043e \u043f\u0440\u044f\u043c \u043a\u0443\u0431 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c, \u0434\u0430\u00a0\u0435\u0449\u0451 \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u0430\u0436\u043e\u0440\u043d\u044b\u0445 \u0432\u0435\u0440\u0441\u0438\u0439? \u0412\u00a0\u043e\u0431\u0449\u0435\u043c, Terraform \u0438 \u0442\u0443\u0442 \u043f\u043e\u043c\u043e\u0436\u0435\u0442: \u043f\u043e\u0442\u0440\u0430\u0442\u044c\u0442\u0435 \u0432\u0440\u0435\u043c\u044f \u043d\u0430\u00a0\u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0441\u0432\u043e\u0435\u0439 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0432\u00a0\u043a\u043e\u0434\u0435 \u0438 \u0432\u044b \u0437\u0430\u0431\u0443\u0434\u0435\u0442\u0435 \u044d\u0442\u0443 \u0431\u043e\u043b\u044c. \u042d\u0442\u043e \u043d\u0435\u00a0\u0441\u043d\u0438\u043c\u0435\u0442 \u0441\u00a0\u0432\u0430\u0441 \u043e\u0431\u044f\u0437\u0430\u043d\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u043e\u0434\u0443\u043c\u0430\u0442\u044c \u0432\u0441\u0435 \u043d\u044e\u0430\u043d\u0441\u044b. \u041d\u043e\u00a0\u0432\u043e\u2011\u043f\u0435\u0440\u0432\u044b\u0445, Terraform \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u0437\u0430\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0432\u0430\u0441 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u043e\u0441\u043e\u0431\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0438 \u0441\u00a0\u0442\u0430\u043a\u043e\u0439 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u043b\u0435\u0433\u0447\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c\u0441\u044f, \u0430\u00a0\u0432\u043e\u2011\u0432\u0442\u043e\u0440\u044b\u0445\u00a0\u2014 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0435 \u0434\u0432\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b, \u0438 \u0432\u044b \u043f\u043e\u0434\u043d\u044f\u043b\u0438 <strong>\u043f\u043e\u043b\u043d\u044b\u0439<\/strong> \u043a\u043b\u043e\u043d \u0441\u0432\u043e\u0435\u0439 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b\u00a0\u2014 \u043c\u043e\u0436\u0435\u0442\u0435 \u0442\u0430\u043c \u043b\u043e\u043c\u0430\u0442\u044c, \u043e\u0442\u043a\u0430\u0442\u044b\u0432\u0430\u0442\u044c, \u043f\u0435\u0440\u0435\u0434\u0435\u043b\u044b\u0432\u0430\u0442\u044c \u0432\u0441\u0451, \u0447\u0442\u043e\u00a0\u0432\u0430\u0448\u0435\u0439 \u0434\u0443\u0448\u0435 \u0443\u0433\u043e\u0434\u043d\u043e. \u0418 \u0435\u0441\u043b\u0438 \u0443\u00a0\u0432\u0430\u0441 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c\u0441\u044f, \u0441\u00a0\u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c\u044e, \u043a\u0440\u0430\u0439\u043d\u0435 \u0431\u043b\u0438\u0437\u043a\u043e\u0439 \u043a 100%, \u0432\u044b \u0431\u0435\u0437\u00a0\u043f\u0440\u043e\u0431\u043b\u0435\u043c \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u0435 \u0438 \u0441\u0432\u043e\u0439 \u043f\u0440\u043e\u0434.<\/p>\n<\/li>\n<li>\n<p><strong>\u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0438\u0437\u0430\u0446\u0438\u044f<\/strong>. \u0415\u0441\u043b\u0438 \u0443\u00a0\u0432\u0430\u0441 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0438\u0437\u00a0\u0434\u0432\u0443\u0445 \u0438 \u0431\u043e\u043b\u0435\u0435 \u0447\u0435\u043b\u043e\u0432\u0435\u043a, \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0445 \u0441\u00a0\u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043e\u0439, \u0442\u043e \u0432\u044b \u043d\u0430\u0432\u0435\u0440\u043d\u044f\u043a\u0430 \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u043b\u0438\u0441\u044c \u0441\u00a0\u0442\u0435\u043c, \u0447\u0442\u043e\u00a0\u043e\u043d\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043f\u043e\u2011\u0440\u0430\u0437\u043d\u043e\u043c\u0443. \u0414\u0430\u00a0\u0435\u0441\u0442\u044c \u043d\u043e\u0440\u043c\u044b, \u043d\u043e\u00a0\u043e\u043d\u0438 \u0440\u0430\u0437\u043d\u044f\u0442\u0441\u044f \u043e\u0442\u00a0\u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u043a\u00a0\u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438, \u0438 \u0432\u00a0\u0440\u0435\u0433\u043b\u0430\u043c\u0435\u043d\u0442\u044b \u0432\u0441\u0451 \u043d\u0435\u00a0\u0437\u0430\u0442\u043e\u043b\u043a\u0430\u0435\u0448\u044c, \u0438 \u043f\u043e\u00a0\u0438\u0442\u043e\u0433\u0443 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0435 \u0432\u0440\u043e\u0434\u0435\u00a0\u0431\u044b \u043e\u0434\u043d\u0443 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443, \u043d\u043e\u00a0\u0447\u0430\u0441\u0442\u044c \u043f\u043e\u0434\u043d\u044f\u0442\u0430 \u043e\u0434\u043d\u0438\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c, \u0447\u0430\u0441\u0442\u044c\u00a0\u2014 \u0434\u0440\u0443\u0433\u0438\u043c. \u042d\u0442\u043e \u043c\u043e\u0436\u0435\u0442\u00a0\u0431\u044b\u0442\u044c \u0447\u0442\u043e\u00a0\u0443\u0433\u043e\u0434\u043d\u043e\u00a0\u2014 \u043e\u0442\u00a0\u043d\u0435\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0438\u043c\u0451\u043d \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u0434\u043e\u00a0\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0440\u0430\u0437\u043d\u044b\u0445 \u041e\u0421 \u0434\u043b\u044f\u00a0\u043e\u0434\u043d\u043e\u0442\u0438\u043f\u043d\u044b\u0445 \u0445\u043e\u0441\u0442\u043e\u0432. \u0421\u00a0Terraform \u0432\u044b \u044d\u0442\u043e \u0440\u0435\u0448\u0430\u0435\u0442\u0435, \u0442\u0430\u043a \u0438\u043b\u0438\u00a0\u0438\u043d\u0430\u0447\u0435. \u0414\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0443\u00a0\u0432\u0430\u0441 \u043d\u0435\u0442 \u0440\u0435\u0433\u043b\u0430\u043c\u0435\u043d\u0442\u0430 \u043a\u00a0\u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044e \u043a\u043e\u0434\u0430, \u0432\u0441\u0451 \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u043e \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0447\u0442\u043e\u00a0\u0438\u043d\u0436\u0435\u043d\u0435\u0440\u0430\u043c \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043f\u043e\u00a0\u043e\u0434\u043d\u043e\u043c\u0443 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0443.<\/p>\n<\/li>\n<li>\n<p><strong>\u041e\u0447\u0435\u0432\u0438\u0434\u043d\u043e\u0441\u0442\u044c<\/strong>. \u041d\u0430\u043d\u0438\u043c\u0430\u043b\u0438 \u043d\u043e\u0432\u043e\u0433\u043e \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0430? \u0421\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0435\u043c\u0443 \u043d\u0443\u0436\u043d\u043e \u043d\u0430\u00a0\u0442\u043e, \u0447\u0442\u043e\u0431\u044b \u0432\u043b\u0438\u0442\u044c\u0441\u044f \u0432\u00a0\u0440\u0430\u0431\u043e\u0442\u0443? \u0421\u00a0\u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043e\u0439, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u0434\u043d\u044f\u0442\u0430 \u0440\u0443\u043a\u0430\u043c\u0438, \u0432\u0441\u0451 \u0435\u0449\u0451 \u0441\u043b\u043e\u0436\u043d\u0435\u0435\u00a0\u2014 \u0442\u0430\u043c \u043c\u043e\u0436\u0435\u0442\u00a0\u0431\u044b\u0442\u044c \u0441\u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0435\u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u0445 \u0432\u0435\u0449\u0435\u0439, \u0447\u0442\u043e\u00a0\u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0442\u044c \u0438\u0445 \u043c\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u0433\u0434\u0430 \u0447\u0442\u043e\u2011\u0442\u043e \u0443\u0436\u0435 \u0441\u043b\u043e\u043c\u0430\u043b\u043e\u0441\u044c, \u0438 \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u0443 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u043e\u0441\u043e\u043c \u0437\u0435\u043c\u043b\u044e \u0440\u044b\u0442\u044c \u0432\u00a0\u043f\u043e\u0438\u0441\u043a\u0430\u0445 \u043d\u0435\u0438\u0441\u043f\u0440\u0430\u0432\u043d\u043e\u0441\u0442\u0438. \u0415\u0441\u043b\u0438 \u0432\u044b \u043e\u043f\u0438\u0441\u0430\u043b\u0438 \u0432\u0441\u0451 \u0441\u00a0\u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u0434\u0430, \u044d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e\u00a0\u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435\u0442 \u043a\u0443\u0447\u0438 \u043c\u0435\u0441\u0442, \u0433\u0434\u0435 \u043c\u043e\u0436\u0435\u0442\u00a0\u0431\u044b\u0442\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d \u0442\u043e\u0442 \u0438\u043b\u0438\u00a0\u0438\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u00a0\u2014 \u0432\u0441\u0451 \u0437\u0434\u0435\u0441\u044c, \u0432\u00a0\u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442\u0430\u0445. \u0414\u0430, \u043e\u043d\u0438 \u043c\u043e\u0433\u0443\u0442\u00a0\u0431\u044b\u0442\u044c \u0441\u043b\u043e\u0436\u043d\u044b \u0438 \u0437\u0430\u043f\u0443\u0442\u0430\u043d\u043d\u044b, \u043d\u043e, \u043f\u043e\u00a0\u043a\u0440\u0430\u0439\u043d\u0435\u0439 \u043c\u0435\u0440\u0435, \u044d\u0442\u043e \u043d\u0435\u00a0\u043a\u0430\u043a\u043e\u0439\u2011\u043d\u0438\u0431\u0443\u0434\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 cron \u043d\u0430 101-\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0435 \u0445\u043e\u0434\u0438\u0442 \u0432\u00a0\u043f\u0440\u043e\u0434 \u0438 \u0437\u0430\u0431\u0438\u0432\u0430\u0435\u0442 \u0432\u0435\u0441\u044c \u043f\u0443\u043b \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439\u00a0\u2014 \u0435\u0441\u043b\u0438 \u043e\u043d \u0435\u0441\u0442\u044c, \u0442\u043e \u043e\u043f\u0438\u0441\u0430\u043d \u0432\u00a0\u043a\u043e\u0434\u0435, \u0438 \u043c\u044b \u0437\u043d\u0430\u0435\u043c \u0433\u0434\u0435 \u0435\u0433\u043e \u0438\u0441\u043a\u0430\u0442\u044c. \u0415\u0441\u0442\u044c \u043e\u0434\u0438\u043d \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u044b\u0439 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u00a0\u2014 \u044d\u0442\u043e \u043a\u043e\u0434: \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u043b\u0441\u044f \u0441\u00a0\u043d\u0438\u043c, \u0437\u043d\u0430\u0447\u0438\u0442 \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u043b\u0441\u044f \u0441\u043e \u0432\u0441\u0435\u0439 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043e\u0439.<\/p>\n<\/li>\n<li>\n<p><strong>\u0420\u0430\u0431\u043e\u0442\u0430 \u0432\u00a0\u043a\u043e\u043c\u0430\u043d\u0434\u0435<\/strong>. \u0417\u0434\u0435\u0441\u044c \u0432\u0441\u0451 \u043f\u0440\u043e\u0441\u0442\u043e\u00a0\u2014 \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f \u0432\u0435\u0440\u0441\u0438\u0439. \u0415\u0441\u043b\u0438 \u0435\u0441\u0442\u044c \u043a\u043e\u0434, \u043c\u044b \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u0441\u00a0\u043d\u0438\u043c, \u043a\u0430\u043a\u00a0\u0441\u00a0\u043a\u043e\u0434\u043e\u043c. \u0417\u0430\u043b\u0438\u0432\u0430\u0435\u043c \u0435\u0433\u043e \u0432\u00a0GitHub, GitLab \u0438\u043b\u0438\u00a0\u0433\u0434\u0435 \u0432\u044b \u043f\u0440\u0438\u0432\u044b\u043a\u043b\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c\u00a0\u2014 \u0438 \u0432\u0441\u0451, \u043c\u044b \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u043b\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u0434\u043b\u044f\u00a0\u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0432\u00a0\u043a\u043e\u043c\u0430\u043d\u0434\u0435. \u0415\u0441\u043b\u0438 \u0443\u00a0\u0432\u0430\u0441 \u0432\u0441\u0451 \u0440\u0443\u043a\u0430\u043c\u0438 \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u043b\u043e\u0441\u044c, \u0437\u0430\u0431\u0443\u0434\u044c\u0442\u0435 \u043f\u0440\u043e\u00a0\u0442\u0430\u043a\u0438\u0435 \u043f\u043b\u044e\u0448\u043a\u0438.<\/p>\n<\/li>\n<\/ul>\n<p>\u0412\u00a0\u0446\u0435\u043b\u043e\u043c, Terraform\u00a0\u2014 \u044d\u0442\u043e \u043c\u043e\u0449\u043d\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0435\u0448\u0430\u0435\u0442 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u043a\u0430\u043a\u00a0IT\u2011\u043e\u0442\u0434\u0435\u043b\u0430 \u0432\u00a0\u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438, \u0442\u0430\u043a \u0438, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0431\u0438\u0437\u043d\u0435\u0441\u0430 \u0432\u00a0\u0446\u0435\u043b\u043e\u043c.<\/p>\n<h2>\u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u043c \u043e\u0441\u043d\u043e\u0432\u044b<\/h2>\n<p>Terraform\u00a0\u2014 \u044d\u0442\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0432\u00a0\u0432\u0438\u0434\u0435 \u043a\u043e\u0434\u0430 \u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0451 \u0440\u0430\u0437\u0432\u0451\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u0435, \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044e \u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435. \u041e\u043d \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u043e\u0432\u00a0\u2014 \u0442\u0430\u043a\u0438\u0445, \u043a\u0430\u043a\u00a0AWS, Google Cloud, Azure, Yandex Cloud \u0438 \u0434\u0440\u0443\u0433\u0438\u0445.<\/p>\n<p>\u041e\u0434\u043d\u0438\u043c \u0438\u0437\u00a0\u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432 Terraform \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043e\u043f\u0438\u0441\u0430\u0442\u044c\u00a0\u0436\u0435\u043b\u0430\u0435\u043c\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0432\u00a0\u0432\u0438\u0434\u0435 \u043a\u043e\u0434\u0430, \u0438 \u0437\u0430\u0442\u0435\u043c \u043e\u043d \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u0435\u0451 \u0432\u00a0\u044d\u0442\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435, \u0430\u00a0\u0432\u044b \u043d\u0435\u00a0\u0437\u0430\u0431\u043e\u0442\u0438\u0442\u0435\u0441\u044c \u043e\u00a0\u0440\u0443\u0447\u043d\u043e\u043c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u043a\u0430\u0436\u0434\u044b\u043c \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u043c.<\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u043d\u0430\u0447\u0430\u0442\u044c \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441\u00a0\u044d\u0442\u0438\u043c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u043c, \u0432\u0430\u0436\u043d\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u0438\u00a0\u2014 \u0442\u0430\u043a\u0438\u0435, \u043a\u0430\u043a\u00a0\u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442\u044b, \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u044b \u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u044b. \u0414\u0430\u043b\u0435\u0435 \u0432\u00a0\u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0438\u0445, \u0430\u00a0\u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u044b \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u00a0Terraform. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043f\u0440\u043e\u00a0best practices, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u043c\u043e\u0433\u0443\u0442 \u0432\u0430\u043c \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0438 \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u043a\u043e\u0434.<\/p>\n<p>\u0418\u0442\u0430\u043a, Terraform \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442\u044b, \u0447\u0442\u043e\u0431\u044b \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0438\u043b\u0438\u00a0\u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c. \u041c\u0430\u043d\u0438\u0444\u0435\u0441\u0442\u044b Terraform\u00a0\u2014 \u044d\u0442\u043e \u0444\u0430\u0439\u043b\u044b \u0441\u00a0\u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435\u043c.tf, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432, \u0438\u0445 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432 \u0438 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439. \u0414\u043b\u044f\u00a0\u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442\u043e\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f HashiCorp Configuration Language (HCL). HCL \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0443\u0434\u043e\u0431\u043d\u044b\u043c \u0438 \u043f\u043e\u043d\u044f\u0442\u043d\u044b\u043c \u044f\u0437\u044b\u043a\u043e\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0440\u0435\u0441\u0443\u0440\u0441\u044b, \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043c\u0435\u0436\u0434\u0443 \u043d\u0438\u043c\u0438 \u0438 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432.<\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a\u00a0\u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442\u044b \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u044b, Terraform \u043c\u043e\u0436\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u0445 \u0434\u043b\u044f\u00a0\u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u043c\u0438 \u0432\u00a0\u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0435. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u0430\u043c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u00a0\u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043e\u0439, \u0443\u043b\u0443\u0447\u0448\u0430\u0442\u044c \u0435\u0435 \u043d\u0430\u0434\u0435\u0436\u043d\u043e\u0441\u0442\u044c \u0438 \u0441\u043d\u0438\u0436\u0430\u0442\u044c \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u044f \u0440\u0443\u0447\u043d\u044b\u0445 \u043e\u0448\u0438\u0431\u043e\u043a.<\/p>\n<p>Terraform \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0434\u043b\u044f\u00a0\u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b:<\/p>\n<ol>\n<li>\n<p>Providers: \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u044b\u00a0\u2014 \u044d\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u044b \u0434\u043b\u044f\u00a0\u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441\u00a0\u0440\u0435\u0441\u0443\u0440\u0441\u0430\u043c\u0438, \u0442\u0430\u043a\u0438\u043c\u0438, \u043a\u0430\u043a\u00a0AWS, Google Cloud, Microsoft Azure \u0438\u00a0\u0442.\u00a0\u0434.<\/p>\n<\/li>\n<\/ol>\n<ol start=\"2\">\n<li>\n<p>Resources: \u0440\u0435\u0441\u0443\u0440\u0441\u044b\u00a0\u2014 \u044d\u0442\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0441\u043e\u0437\u0434\u0430\u0442\u044c, \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0438\u043b\u0438\u00a0\u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u0430\u044f \u043c\u0430\u0448\u0438\u043d\u0430, \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u0449\u0438\u043a \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438, \u0431\u0430\u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<\/li>\n<\/ol>\n<ol start=\"3\">\n<li>\n<p>Variables: \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435\u00a0\u2014 \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0432\u00a0Terraform \u0434\u043b\u044f\u00a0\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432\u0430\u0448\u0435\u0439 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b.<\/p>\n<\/li>\n<\/ol>\n<ol start=\"4\">\n<li>\n<p>Data Sources: \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445\u00a0\u2014 \u044d\u0442\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 Terraform \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437\u00a0\u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u0432, \u0442\u0430\u043a\u0438\u0445 \u043a\u0430\u043a\u00a0API, \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u043b\u0438\u00a0\u0434\u0440\u0443\u0433\u0438\u0435 \u0441\u043b\u0443\u0436\u0431\u044b.<\/p>\n<\/li>\n<\/ol>\n<ol start=\"5\">\n<li>\n<p>Outputs: \u0432\u044b\u0432\u043e\u0434\u044b\u00a0\u2014 \u044d\u0442\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 Terraform \u0432\u044b\u0434\u0430\u0435\u0442 \u043f\u043e\u0441\u043b\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, IP\u2011\u0430\u0434\u0440\u0435\u0441\u0430, \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u044b \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u0438\u00a0\u0442.\u00a0\u0434.<\/p>\n<\/li>\n<\/ol>\n<p>\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b Terraform, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u0442\u043e\u0438\u0442 \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u044c:<\/p>\n<ol>\n<li>\n<p>\u041c\u043e\u0434\u0443\u043b\u0438. \u041f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u0434 \u0438 \u0443\u043f\u0440\u043e\u0449\u0430\u044e\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u043b\u043e\u0436\u043d\u044b\u043c\u0438 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430\u043c\u0438.<\/p>\n<\/li>\n<\/ol>\n<ol start=\"2\">\n<li>\n<p>\u0412\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f. Terraform \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c\u0438 \u0432\u0435\u0440\u0441\u0438\u044f\u043c\u0438 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f.<\/p>\n<\/li>\n<\/ol>\n<ol start=\"3\">\n<li>\n<p>\u0412\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f. Terraform \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u0439.<\/p>\n<\/li>\n<\/ol>\n<p>\u0418\u0442\u0430\u043a, \u043c\u044b \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u043c, \u0447\u0442\u043e\u00a0\u0441\u00a0\u043f\u043e\u043c\u043e\u0449\u044c\u044e Terraform \u043c\u043e\u0436\u043d\u043e \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0432\u00a0\u043a\u043e\u0434\u0435, \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u0432\u00a0\u0444\u0430\u0439\u043b\u0430\u0445, \u0447\u0442\u043e\u00a0\u043b\u043e\u0433\u0438\u0447\u043d\u043e?, \u0442\u0430\u043a \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u0441\u00a0\u0432\u0430\u043c\u0438 \u043e\u00a0\u043d\u0438\u0445.<\/p>\n<p>\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0442\u0438\u043f\u044b \u0444\u0430\u0439\u043b\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u00a0Terraform, \u0432\u043a\u043b\u044e\u0447\u0430\u044e\u0442 \u0432\u00a0\u0441\u0435\u0431\u044f:<\/p>\n<ol>\n<li>\n<p>\u0424\u0430\u0439\u043b\u044b \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 (.tf \u0444\u0430\u0439\u043b\u044b)\u00a0\u2014 \u044d\u0442\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b Terraform, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0438\u043b\u0438\u00a0\u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c.<\/p>\n<\/li>\n<\/ol>\n<ol start=\"2\">\n<li>\n<p>\u0424\u0430\u0439\u043b\u044b \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 (.tfvars \u0444\u0430\u0439\u043b\u044b)\u00a0\u2014 \u044d\u0442\u043e \u0444\u0430\u0439\u043b\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u0445\u0441\u044f \u0432\u00a0\u0444\u0430\u0439\u043b\u0430\u0445 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438.<\/p>\n<\/li>\n<\/ol>\n<p>\u0424\u0430\u0439\u043b \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f (.tfstate \u0444\u0430\u0439\u043b): \u044d\u0442\u043e \u0444\u0430\u0439\u043b, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0445\u0440\u0430\u043d\u0438\u0442 \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0432\u0430\u0448\u0435\u0439 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b. \u041e\u043d \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437, \u043a\u043e\u0433\u0434\u0430 \u0432\u044b \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0435 apply (\u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u0435\u0441\u043b\u0438 \u0432\u044b \u0447\u0442\u043e\u2011\u0442\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0438 \u0432\u00a0\u043a\u043e\u0434\u0435).<\/p>\n<p>\u0422\u0430\u043a\u0436\u0435, \u0441\u0442\u043e\u0438\u0442 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0440\u043e\u00a0\u0444\u0430\u0439\u043b \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u2011.tfstate. Terraform \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e\u00a0\u0442\u0435\u043a\u0443\u0449\u0435\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 \u0432\u0430\u0448\u0435\u0439 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0432\u00a0\u0444\u0430\u0439\u043b\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f. \u042d\u0442\u043e\u0442 \u0444\u0430\u0439\u043b \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e\u00a0\u0440\u0435\u0441\u0443\u0440\u0441\u0430\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443\u0436\u0435\u00a0\u0431\u044b\u043b\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u044b \u0432\u00a0\u0432\u0430\u0448\u0435\u0439 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435, \u0438 \u0438\u0445 \u0442\u0435\u043a\u0443\u0449\u0438\u0445 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430\u0445.<\/p>\n<p>Terraform \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u044d\u0442\u043e\u0442 \u0444\u0430\u0439\u043b, \u0447\u0442\u043e\u0431\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c, \u043a\u0430\u043a\u0438\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c, \u043a\u0430\u043a\u0438\u0435 \u0441\u043e\u0437\u0434\u0430\u0442\u044c, \u0430\u00a0\u043a\u0430\u043a\u0438\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u0434\u0430\u043b\u0438\u0442\u044c, \u043a\u043e\u0433\u0434\u0430 \u0432\u044b \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 apply. \u0413\u0440\u0443\u0431\u043e \u0433\u043e\u0432\u043e\u0440\u044f, \u043e\u043d \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 Terraform \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c, \u043a\u0430\u043a\u0438\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u043d\u0435\u0441\u0442\u0438 \u0432\u00a0\u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443, \u0447\u0442\u043e\u0431\u044b \u0435\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u043b\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u043c\u0443 \u0432\u00a0\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u0430\u0445.<\/p>\n<p>\u0424\u0430\u0439\u043b \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043c\u043e\u0436\u0435\u0442 \u0445\u0440\u0430\u043d\u0438\u0442\u044c\u0441\u044f \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e \u0438\u043b\u0438\u00a0\u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u00a0\u043e\u0431\u044a\u0435\u043a\u0442\u043d\u043e\u043c \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u0430\u043c \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043e\u0431\u0449\u0443\u044e \u043a\u043e\u043f\u0438\u044e \u0444\u0430\u0439\u043b\u0430 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0438\u043c \u0441\u00a0\u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0445\u043e\u0441\u0442\u043e\u0432.<\/p>\n<p>\u0412\u0430\u0436\u043d\u043e \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e\u00a0\u0444\u0430\u0439\u043b \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u0430\u0436\u043d\u044b\u043c \u0430\u0441\u043f\u0435\u043a\u0442\u043e\u043c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0432\u0430\u0448\u0435\u0439 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043e\u0439, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c \u0435\u0433\u043e \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0443 \u043d\u0430\u00a0\u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u00a0\u043d\u0438\u043c.<\/p>\n<p>\u0422\u0430\u043a\u0436\u0435, \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c, \u0447\u0442\u043e\u00a0\u0444\u0430\u0439\u043b \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u043e\u043d\u0444\u0438\u0434\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u043c, \u0438 \u0435\u0433\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432\u00a0\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u043c \u043c\u0435\u0441\u0442\u0435, \u0442\u0430\u043a \u043a\u0430\u043a\u00a0\u043e\u043d \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0432\u0430\u0436\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e\u00a0\u0432\u0441\u0435\u0439 \u0432\u0430\u0448\u0435\u0439 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435.<\/p>\n<p>\u041a\u0440\u043e\u043c\u0435 \u0432\u0441\u0435\u0433\u043e \u044d\u0442\u043e\u0433\u043e, \u0445\u043e\u0447\u0443 \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u044c, \u0447\u0442\u043e\u00a0\u0435\u0441\u043b\u0438 \u0432\u0430\u043c \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u0437\u0430\u043b\u0435\u0437\u0442\u044c \u0432\u00a0tfstate\u2011\u0444\u0430\u0439\u043b, \u0442\u043e, \u043a\u0430\u043a\u00a0\u0433\u043e\u0432\u043e\u0440\u0438\u0442 \u043c\u043e\u0439 \u043a\u043e\u043b\u043b\u0435\u0433\u0430: \u00ab\u0412\u044b \u0433\u0434\u0435\u2011\u0442\u043e \u0447\u0442\u043e\u2011\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u043b\u0438 \u043d\u0435\u00a0\u0442\u0430\u043a \u0432\u00a0\u044d\u0442\u043e\u0439 \u0436\u0438\u0437\u043d\u0438\u00bb ?<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u0441\u00a0\u0432\u0430\u043c\u0438 \u043e\u00a0\u0442\u043e\u043c, \u043d\u0430\u00a0\u043a\u0430\u043a\u0438\u0435 best practices \u0441\u0442\u043e\u0438\u0442 \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435:<\/p>\n<ol>\n<li>\n<p>\u041d\u0435\u00a0\u0445\u0440\u0430\u043d\u0438\u0442\u0435 \u0432\u0441\u044e \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0432\u00a0\u043e\u0434\u043d\u043e\u043c \u043c\u0435\u0441\u0442\u0435, \u0440\u0430\u0437\u0431\u0435\u0439\u0442\u0435 \u0435\u0451 \u043d\u0430\u00a0\u0447\u0430\u0441\u0442\u0438;<\/p>\n<\/li>\n<\/ol>\n<ol start=\"2\">\n<li>\n<p>\u0418\u0437\u043e\u043b\u0438\u0440\u0443\u0439\u0442\u0435 \u043d\u0435\u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0434\u0440\u0443\u0433 \u043e\u0442\u00a0\u0434\u0440\u0443\u0433\u0430. \u0420\u0430\u0437\u0434\u0435\u043b\u044f\u0439\u0442\u0435 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u0432\u043e\u044e \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443, \u0441\u0435\u0442\u044c, \u0441\u0435\u0440\u0432\u0438\u0441\u044b, \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 \u0438\u00a0\u0442.\u00a0\u0434.;<\/p>\n<\/li>\n<\/ol>\n<ol start=\"3\">\n<li>\n<p>\u041d\u0435\u00a0\u0445\u0440\u0430\u043d\u0438\u0442\u0435 \u0444\u0430\u0439\u043b \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e;<\/p>\n<\/li>\n<\/ol>\n<ol start=\"4\">\n<li>\n<p>\u0411\u043b\u043e\u043a\u0438\u0440<\/p>\n<\/li>\n<\/ol>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-405912","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/405912","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=405912"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/405912\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=405912"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=405912"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=405912"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}