{"id":337076,"date":"2022-08-15T21:00:08","date_gmt":"2022-08-15T21:00:08","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=337076"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=337076","title":{"rendered":"<span>\u0411\u043e\u043b\u044c\u0448\u043e\u0439 \u0433\u0430\u0439\u0434. \u041f\u0438\u0448\u0435\u043c \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u044b \u043d\u0430 Java \u0438 Spring Boot, \u0437\u0430\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u043c \u0432 Docker, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043d\u0430 EKS, \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043c \u043d\u0430 Grafana<\/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<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/kk\/ei\/os\/kkeiosa0qnulfugn6dbxx7k03je.png\" width=\"auto\" height=\"auto\" data-src=\"https:\/\/habrastorage.org\/webt\/kk\/ei\/os\/kkeiosa0qnulfugn6dbxx7k03je.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0422\u0443\u0442\u043e\u0440\u0438\u0430\u043b\u044b \u0434\u0435\u043b\u044f\u0442\u0441\u044f \u043d\u0430 \u0434\u0432\u0435 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438: \u043b\u0438\u0431\u043e &#171;\u043a\u0430\u043a \u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u0432\u0443&#187;, \u043b\u0438\u0431\u043e \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u0440\u0430\u0441\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u0442\u044b\u0441\u044f\u0447\u0438 \u0448\u0430\u0433\u043e\u0432 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 &#171;\u043d\u0430\u043f\u0438\u0448\u0438 \u0442\u0443\u0442\u043e\u0440\u0438\u0430\u043b \u0434\u043b\u044f \u0434\u0443\u0440\u0430\u043a\u0430 &#8212; \u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u0443\u0440\u0430\u043a \u0437\u0430\u0445\u043e\u0447\u0435\u0442 \u0435\u0433\u043e \u0447\u0438\u0442\u0430\u0442\u044c&#187;.<\/p>\n<p>\u041a \u043a\u0430\u043a\u043e\u0439 \u0438\u0437 \u0434\u0432\u0443\u0445 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0439 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u044d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u2014 \u0440\u0435\u0448\u0430\u0442\u044c \u0432\u0430\u043c.<\/p>\n<p>\u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0432\u044b \u0443\u0432\u0438\u0434\u0438\u0442\u0435 \u043f\u043e\u0448\u0430\u0433\u043e\u0432\u043e\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 cloud-native \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u0430 \u043d\u0430 Amazon AWS, \u043f\u0440\u0438\u0433\u043e\u0434\u043d\u043e\u0435 \u0434\u043b\u044f &#171;\u0447\u0442\u0435\u043d\u0438\u044f \u0441 \u043b\u0438\u0441\u0442\u0430&#187;. \u0427\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u044f\u0442\u044c, \u0447\u0442\u043e \u0437\u0434\u0435\u0441\u044c \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442, \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0440\u0430\u0437\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442 &#8212; \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043e\u0431\u043b\u0430\u0434\u0430\u0442\u044c \u0436\u0438\u0432\u044b\u043c \u0432\u043e\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435\u043c \u0438 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0442\u0435\u043a\u0441\u0442 \u043f\u043e \u0434\u0438\u0430\u0433\u043e\u043d\u0430\u043b\u0438. \u0415\u0441\u043b\u0438 \u0436\u0435 \u0432\u044b \u0432\u0441\u0451-\u0442\u0430\u043a\u0438 \u0437\u0430\u0445\u043e\u0442\u0438\u0442\u0435 \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c \u0448\u0430\u0433\u0438, \u0432\u0430\u043c \u0431\u0443\u0434\u0443\u0442 \u0436\u0438\u0437\u043d\u0435\u043d\u043d\u043e \u043d\u0443\u0436\u043d\u044b \u0437\u043d\u0430\u043d\u0438\u044f \u0432\u0438\u0434\u0430, \u043a\u0430\u043a \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043a\u043b\u0430\u0441\u0441\u044b \u0432 IDE \u0438 \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 Spring.<\/p>\n<p>\u0412\u043d\u0430\u0447\u0430\u043b\u0435 \u043c\u044b \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u043f\u0430\u0440\u0443 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u043d\u0430 Spring Boot, \u0434\u043e\u043a\u0435\u0440\u0438\u0437\u0443\u0435\u043c \u0438\u0445, \u0437\u0430\u043b\u044c\u0451\u043c \u0432 AWS, \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u043c \u043a\u0440\u0430\u0441\u0438\u0432\u044b\u0435 \u0434\u043e\u043c\u0435\u043d\u043d\u044b\u0435 \u0438\u043c\u0435\u043d\u0430 \u0438 HTTPS, \u043f\u0440\u0438\u043a\u0440\u0443\u0442\u0438\u043c \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433, Prometheus \u0438 Grafana. \u042d\u0442\u043e \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043f\u0443\u0442\u0435\u0448\u0435\u0441\u0442\u0432\u0438\u0435 \u043f\u043e \u0432\u0441\u0435\u043c \u043a\u0440\u0443\u0433\u0430\u043c \u0430\u0434\u0430, \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0432\u044b \u043d\u0435 \u0432\u0435\u0440\u043d\u0435\u0442\u0435\u0441\u044c \u043f\u0440\u0435\u0436\u043d\u0438\u043c.<\/p>\n<p>\u0422\u0435\u043a\u0441\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 <a href=\"https:\/\/bell-sw.com\/announcements\/2022\/06\/20\/creating-java-microservices-with-spring-boot-and-liberica-jdk\/\" rel=\"noopener noreferrer nofollow\">\u0442\u0435\u043a\u0441\u0442\u043e\u0432<\/a> \u0438 \u0434\u0435\u043c\u043e-\u043f\u0440\u043e\u0435\u043a\u0442\u0430 <a href=\"https:\/\/github.com\/kamaruzzaman\/microservice-customer\" rel=\"noopener noreferrer nofollow\">microservice-customer<\/a> \u0437\u0430 \u0430\u0432\u0442\u043e\u0440\u0441\u0442\u0432\u043e\u043c <a href=\"https:\/\/github.com\/kamaruzzaman\" rel=\"noopener noreferrer nofollow\">@kamaruzzaman<\/a>. \u0415\u0441\u043b\u0438 \u0432\u044b \u043f\u043e\u0442\u0435\u0440\u044f\u043b\u0438 \u043d\u0438\u0442\u044c \u043f\u043e\u0432\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u044f, \u0432\u0441\u0435\u0433\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0439\u0442\u0438 \u043d\u0430 GitHub \u0438 \u043d\u0430\u0439\u0442\u0438 \u0432\u0435\u0441\u044c \u043a\u043e\u0434 \u0432 \u043f\u0440\u0438\u0433\u043e\u0434\u043d\u043e\u043c \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0432\u0438\u0434\u0435.<\/p>\n<p>\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u0432\u0430\u0436\u043d\u0430\u044f \u043e\u0433\u043e\u0432\u043e\u0440\u043a\u0430. \u0412 \u044d\u0442\u043e\u043c \u0433\u0430\u0439\u0434\u0435 \u0431\u0443\u0434\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438 Amazon \u0438 \u043e\u0431\u044b\u0447\u043d\u044b\u0435 \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432\u044b OpenJDK. \u0410\u0432\u0442\u043e\u0440 \u043e\u0441\u043e\u0437\u043d\u0430\u0435\u0442, \u0447\u0442\u043e \u043c\u044b \u0436\u0438\u0432\u0451\u043c \u0432 \u0420\u043e\u0441\u0441\u0438\u0438, \u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0432\u043c\u0435\u0441\u0442\u043e Amazon \u043a\u0443\u0434\u0430 \u043b\u0443\u0447\u0448\u0435 \u043f\u043e\u0434\u043e\u0439\u0434\u0435\u0442 \u0447\u0442\u043e-\u0442\u043e \u0432\u0440\u043e\u0434\u0435 <a href=\"https:\/\/sbercloud.ru\/ru\" rel=\"noopener noreferrer nofollow\">SberCloud<\/a> \u0438\u043b\u0438 <a href=\"https:\/\/cloud.mts.ru\/\" rel=\"noopener noreferrer nofollow\">MTS Cloud<\/a>, \u0430 \u0432\u043c\u0435\u0441\u0442\u043e \u043e\u0431\u044b\u0447\u043d\u043e\u0433\u043e OpenJDK &#8212; <a href=\"https:\/\/axiomjdk.ru\/\" rel=\"noopener noreferrer nofollow\">Axiom JDK<\/a> \u0441 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0435\u0439 \u043f\u043e \u0424\u0421\u0422\u042d\u041a. \u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0440\u043e\u0441\u0441\u0438\u0439\u0441\u043a\u0438\u0445 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0439 &#8212; \u0442\u0435\u043c\u0430 \u0434\u043b\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438. \u0415\u0441\u043b\u0438 \u0432\u044b \u0437\u0430\u0445\u043e\u0442\u0438\u0442\u0435 \u0442\u0430\u043a\u043e\u0432\u0443\u044e \u043f\u043e\u0441\u043b\u0435 \u0447\u0442\u0435\u043d\u0438\u044f \u044d\u0442\u043e\u0433\u043e \u0433\u0430\u0439\u0434\u0430 &#8212; \u043e\u0442\u043c\u0435\u0442\u044c\u0442\u0435\u0441\u044c \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445.<\/p>\n<h3>\u0427\u0430\u0441\u0442\u044c 1. \u041f\u0438\u0448\u0435\u043c \u043a\u043e\u0434 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432<\/h3>\n<h4>\u0412\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438<\/h4>\n<p>\u041a\u0430\u043a\u0443\u044e \u0432\u044b\u0431\u0440\u0430\u0442\u044c Java? \u041c\u043d\u043e\u0433\u0438\u0435 \u0432\u0441\u0451 \u0435\u0449\u0451 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 Oracle JDK \u0438 \u043d\u0435 \u043e\u0441\u043e\u0437\u043d\u0430\u043b\u0438, \u0447\u0442\u043e \u043e\u043d \u0438\u043c\u0435\u0435\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u043e\u043d\u043d\u044b\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b. \u041a \u0441\u0447\u0430\u0441\u0442\u044c\u044e, \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0445 \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432\u043e\u0432 OpenJDK, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u0438 \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c. \u0412\u0441\u0435 \u043e\u043d\u0438 \u043d\u0430 100% \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u044b \u0441\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043e\u043c, \u0438 \u0432\u0441\u0451 \u0442\u0430\u043a\u043e\u0435 \u043f\u0440\u043e\u0447\u0435\u0435, \u0442.\u0435. \u0433\u043e\u0434\u044f\u0442\u0441\u044f \u0434\u043b\u044f \u0441\u0435\u0440\u044c\u0435\u0437\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u0435\u043d\u0430. \u0412\u0435\u0440\u0441\u0438\u044e Java \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u0441\u043c\u044b\u0441\u043b\u0430 \u0431\u0440\u0430\u0442\u044c \u043d\u0438\u0436\u0435 11 \u2014 \u043d\u043e\u0432\u044b\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 \u043a\u0443\u0434\u0430 \u043b\u0443\u0447\u0448\u0435 \u0433\u043e\u0434\u044f\u0442\u0441\u044f \u0434\u043b\u044f \u043e\u0431\u043b\u0430\u0447\u043d\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f.<\/p>\n<p>\u041a\u0430\u043a\u0438\u0435 \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0438? \u0421\u0435\u0439\u0447\u0430\u0441 \u0435\u0441\u0442\u044c \u043a\u0443\u0447\u0430 \u043e\u0442\u043b\u0438\u0447\u043d\u044b\u0445 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u0441\u0442\u044b\u0434\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u043f\u0440\u043e\u0434\u0435 &#8212; Spring (Pivotal), MicroProfile (Eclipse), Quarkus (RedHat), Micronaut (Object Computing), \u0438 \u0434\u0440\u0443\u0433\u0438\u0435.<\/p>\n<p>\u0418\u043c\u0445\u043e, \u0440\u044b\u043d\u043e\u043a \u0441\u0435\u0439\u0447\u0430\u0441 \u0443\u0441\u0442\u0440\u043e\u0435\u043d \u0442\u0430\u043a, \u0447\u0442\u043e Spring \u0437\u0430\u0434\u043e\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043b \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u0432\u0441\u0435\u0445. \u0415\u0441\u043b\u0438 Quarkus \u0438 Micronaut \u0432\u043e\u0441\u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0442\u0441\u044f \u043a\u0430\u043a \u0441\u043c\u0435\u043b\u044b\u0435 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u044b, \u0442\u043e Spring \u0434\u0430\u0432\u043d\u043e \u0437\u0430\u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u043e\u0432\u0430\u043b \u0441\u0435\u0431\u044f \u043a\u0430\u043a &#171;\u0434\u0435\u0444\u043e\u043b\u0442\u043d\u0430\u044f&#187; Java-\u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044f, \u0441 \u0442\u0435\u0445 \u0441\u0430\u043c\u044b\u0445 \u043f\u043e\u0440 \u043a\u0430\u043a JavaEE \u043d\u0430\u0447\u0430\u043b\u0430 \u0442\u0440\u0435\u0449\u0430\u0442\u044c \u043f\u043e \u0448\u0432\u0430\u043c. \u041c\u043e\u0436\u043d\u043e \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u044d\u0442\u043e Spring-\u0448\u043e\u0432\u0438\u043d\u0438\u0437\u043c\u043e\u043c, \u043d\u043e \u043f\u0438\u0441\u0430\u0442\u044c \u0442\u0443\u0442\u043e\u0440\u0438\u0430\u043b \u0441\u0440\u0430\u0437\u0443 \u043f\u043e \u0432\u0441\u0435\u043c\u0443 \u0437\u043e\u043e\u043f\u0430\u0440\u043a\u0443 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0439 &#8212; \u0437\u0430\u0434\u0430\u0447\u0430 \u043d\u0435\u043f\u043e\u0441\u0438\u043b\u044c\u043d\u0430\u044f.<\/p>\n<p>\u041d\u0430\u0432\u0435\u0440\u043d\u043e\u0435, \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0433\u0440\u0443\u0441\u0442\u043d\u043e \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442 \u0438\u0437 \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u0435\u0444\u043e\u043b\u0442\u043d\u044b\u0445 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0439, \u043d\u043e \u0445\u0435\u0439 &#8212; \u0438\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u043e \u043e\u0431\u044b\u0447\u043d\u043e \u0438 \u043d\u0443\u0436\u043d\u043e \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0439 \u0436\u0438\u0437\u043d\u0438. \u0427\u0442\u043e-\u0442\u043e, \u0447\u0442\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0438 \u043d\u0435 \u0441\u043b\u043e\u043c\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u043f\u043e\u043b\u043f\u0443\u0442\u0438.<\/p>\n<h4>\u0413\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u0430<\/h4>\n<p>\u041e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441\u0432\u043e\u044e \u043a\u043e\u043f\u0438\u044e \u0410\u043c\u0430\u0437\u043e\u043d\u0430 \u0438\u043b\u0438 \u041d\u0435\u0442\u0444\u043b\u0438\u043a\u0441\u0430 \u0431\u044b\u043b\u043e \u0431\u044b \u044d\u043f\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0435\u0439, \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u043d\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0435\u0439 \u043f\u043e\u0434 \u0444\u043e\u0440\u043c\u0430\u0442 \u0425\u0430\u0431\u0440\u0430. \u0412\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u043c\u044b \u0441\u043e\u0431\u0435\u0440\u0435\u043c \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043c\u0430\u0433\u0430\u0437\u0438\u043d\u0447\u0438\u043a \u043d\u0430 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043d\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435. \u0411\u044d\u043a\u0435\u043d\u0434 \u0431\u0443\u0434\u0435\u0442 \u0431\u0435\u0437 \u0444\u0440\u043e\u043d\u0442\u0435\u043d\u0434\u0430, \u043a\u0430\u043a \u044d\u0442\u043e \u043c\u043e\u0434\u043d\u043e \u0441\u0435\u0439\u0447\u0430\u0441 \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c &#8212; headless. \u042d\u0442\u043e \u043e\u0442\u043b\u0438\u0447\u043d\u043e\u0435 \u0441\u043b\u043e\u0432\u043e \u0434\u043b\u044f \u043e\u043f\u0440\u0430\u0432\u0434\u0430\u043d\u0438\u044f \u0441\u0432\u043e\u0435\u0439 \u043b\u0435\u043d\u0438, \u0437\u0430\u043f\u043e\u043c\u043d\u0438\u0442\u0435 \u0438 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u0439\u0442\u0435. \u0412 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430, \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0431\u0443\u0434\u0435\u043c \u0447\u0435\u0440\u0435\u0437 HTTP API, \u0442\u043e \u0435\u0441\u0442\u044c, \u0447\u0435\u0440\u0435\u0437 curl \u0438\u043b\u0438 Postman.<\/p>\n<p>\u041c\u044b \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u044b Customer \u0438 Order, \u0438 \u043a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 \u043d\u0438\u0445 \u0431\u0443\u0434\u0435\u0442 \u0434\u0435\u043b\u0430\u0442\u044c \u043e\u0434\u043d\u0443 \u0441\u0432\u043e\u044e \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0443\u044e \u0437\u0430\u0434\u0430\u0447\u0443, \u043a\u0430\u043a \u0438 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u043e \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 \u043a\u0430\u043d\u043e\u043d\u0430\u043c\u0438 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043d\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b, \u0434\u0430 \u0438 \u0445\u043e\u0440\u043e\u0448\u0435\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b \u0432\u043e\u043e\u0431\u0449\u0435 (single responsibility principle).<\/p>\n<p>\u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043f\u0440\u043e\u0435\u043a\u0442 Spring Boot \u0441 \u043d\u0443\u0436\u043d\u044b\u043c\u0438 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044f\u043c\u0438. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0435\u0441\u0442\u044c \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0430\u044f \u0434\u043b\u044f Spring \u0432\u0435\u0431-\u0443\u0442\u0438\u043b\u0438\u0442\u0430 <a href=\"https:\/\/start.spring.io\/\" rel=\"noopener noreferrer nofollow\">Spring Initializr<\/a>.<\/p>\n<p>\u0427\u0442\u043e \u043d\u0430\u043c \u0432\u0430\u0436\u043d\u043e:<\/p>\n<ul>\n<li>\n<p>Project: Gradle \u0438\u043b\u0438 Maven (\u043b\u0443\u0447\u0448\u0435 Gradle)<\/p>\n<\/li>\n<li>\n<p>Language: Java<\/p>\n<\/li>\n<li>\n<p>Spring Boot: 2.4.2 (\u043d\u0443 \u0438\u043b\u0438 \u043a\u0430\u043a\u0430\u044f \u0442\u0430\u043c \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430, \u043e\u043d\u0438 \u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f)<\/p>\n<\/li>\n<li>\n<p>Project Metadata: \u043b\u044e\u0431\u044b\u0435 \u043a\u0430\u043a\u0438\u0435 \u043f\u043e\u043d\u0440\u0430\u0432\u044f\u0442\u0441\u044f<\/p>\n<\/li>\n<li>\n<p>Packaging: JAR<\/p>\n<\/li>\n<li>\n<p>Java: 11<\/p>\n<\/li>\n<li>\n<p>Dependencies: <\/p>\n<ul>\n<li>\n<p>Lombok<\/p>\n<\/li>\n<li>\n<p>Spring Web<\/p>\n<\/li>\n<li>\n<p>Spring Configuration Processor<\/p>\n<\/li>\n<li>\n<p>Spring Boot DevTools<\/p>\n<\/li>\n<li>\n<p>Spring Data MongoDB<\/p>\n<\/li>\n<li>\n<p>Validation<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/kj\/qh\/pf\/kjqhpfzxtnxdvx2hj4aivo2a19c.png\" width=\"auto\" height=\"auto\" data-src=\"https:\/\/habrastorage.org\/webt\/kj\/qh\/pf\/kjqhpfzxtnxdvx2hj4aivo2a19c.png\"\/><figcaption><\/figcaption><\/figure>\n<h4>\u041c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441 Order<\/h4>\n<h4>\u0421\u0443\u0449\u043d\u043e\u0441\u0442\u044c Order<\/h4>\n<p>\u041f\u0440\u043e\u0435\u043a\u0442 \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0430\u043a\u0435\u0442\u043e\u0432, \u043a\u0430\u043a \u0438 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u043e \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 Domain-Driven Design. \u041a\u043b\u0430\u0441\u0441\u044b \u0434\u043e\u043c\u0435\u043d\u0430 &#8212; \u044d\u0442\u043e POJO (\u043f\u0440\u043e\u0441\u0442\u044b\u0435 Java-\u043e\u0431\u044a\u0435\u043a\u0442\u044b), \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u043c\u0435\u0441\u0442\u0435 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 API \u043c\u043e\u0434\u0435\u043b\u0438 \u0434\u0430\u043d\u043d\u044b\u0445. \u042d\u0442\u0438 POJO \u043c\u043e\u0433\u0443\u0442 \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 MongoDB: \u0438\u0445 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u043b\u0435\u043f\u0438\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u043b\u043e\u0451\u0432 DTO (data transfer objects) \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u043c\u0430\u043f\u0438\u0442\u044c \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 REST \u043d\u0430 \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<p>\u0412\u043e\u0442 \u043a\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 POJO \u0434\u043b\u044f \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u0430 Order:<\/p>\n<pre><code class=\"java\">@Document(collection = \"order\") @Getter @Setter @ToString @NoArgsConstructor public class Order implements Serializable {     private static final long serialVersionUID = 1L;     @Id    private String id;     @NotBlank    @Field(\"customer_id\")    private String customerId;     @Field(\"created_at\")    @CreatedDate    private Instant createdAt;     @Field(\"updated_at\")    @LastModifiedDate    private Instant updatedAt;     @Version    public Integer version;     @Field(\"status\")    private OrderStatus status = OrderStatus.CREATED;     @Field(\"payment_status\")    private Boolean paymentStatus = Boolean.FALSE;     @NotNull    @Field(\"payment_method\")    private PaymentType paymentMethod;     @NotNull    @Field(\"payment_details\")    private String paymentDetails;     @Field(\"shipping_address\")    private Address shippingAddress;     @Field(\"products\")    @NotEmpty    private Set&lt;@Valid Product> products; <\/code><\/pre>\n<p>\u042f \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u0441\u0440\u0430\u0437\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <a href=\"https:\/\/projectlombok.org\/\" rel=\"noopener noreferrer nofollow\">Lombok<\/a> , \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u043f\u0438\u0441\u0430\u0442\u044c \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u0448\u0430\u0431\u043b\u043e\u043d\u043d\u044b\u0439 \u043a\u043e\u0434, \u0437\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0442\u0430\u043a \u0445\u0435\u0439\u0442\u044f\u0442 Java. \u0413\u0435\u0442\u0442\u0435\u0440\u044b, \u0441\u0435\u0442\u0442\u0435\u0440\u044b, toString, hashCode, equals. \u041c\u044b \u0436\u0435 \u0445\u043e\u0442\u0438\u043c, \u0447\u0442\u043e\u0431\u044b \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u044b \u0443 \u043d\u0430\u0441 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438\u0441\u044c \u043c\u043e\u0434\u043d\u044b\u0435 \u0438 \u043c\u043e\u043b\u043e\u0434\u0435\u0436\u043d\u044b\u0435? \u0412 \u043b\u044e\u0431\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u044f \u0440\u0435\u0448\u0438\u043b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Lombok, \u0442\u0443\u0442\u043e\u0440\u0438\u0430\u043b \u2014 \u043d\u0435 \u043c\u0435\u0441\u0442\u043e \u0434\u043b\u044f \u0434\u0435\u043c\u043e\u043a\u0440\u0430\u0442\u0438\u0438 \ud83d\ude42<\/p>\n<p>\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u0443\u0434\u0438\u0442 \u0437\u0430\u043a\u0430\u0437\u043e\u0432 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0439 <code>@CreatedDate<\/code>, <code>@LastModifiedDate<\/code> \u0438 <code>@Version<\/code>.<\/p>\n<p>\u041c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441 Order \u0443 \u043d\u0430\u0441 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0432\u0441\u0435\u0433\u043e \u0438\u0437 \u043e\u0434\u043d\u043e\u0439 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438, \u0438 \u0432\u0441\u0435 \u0435\u0435 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 (\u043f\u0440\u043e\u0434\u0443\u043a\u0442\u044b, \u0430\u0434\u0440\u0435\u0441\u0430, \u0438\u0442\u043f) \u0441\u0442\u043e\u0438\u0442 \u0432\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043f\u0440\u044f\u043c\u043e \u0432 \u044d\u0442\u0443 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044e, \u0430 \u043d\u0435 \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e.<\/p>\n<h4>\u0420\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439<\/h4>\n<p>\u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u044f \u0432\u044b\u0431\u0440\u0430\u043b MongoDB. \u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043f\u043e\u0432\u0435\u0440\u0438\u0435, \u0447\u0442\u043e Mongo &#8212; \u0443\u0436\u0430\u0441\u043d\u0430\u044f \u0431\u0430\u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0445, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043d\u0438 \u043d\u0430 \u0447\u0442\u043e \u043d\u0435 \u0433\u043e\u0434\u043d\u0430. \u0418\u0440\u043e\u043d\u0438\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043e\u043d\u0430 \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0434\u043b\u044f \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0445 \u0442\u0443\u0442\u043e\u0440\u0438\u0430\u043b\u043e\u0432. Deal with it.<\/p>\n<p>\u0412 MongoDB \u0435\u0441\u0442\u044c \u0434\u0432\u0430 \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0431\u0430\u0437\u043e\u0439. \u041f\u0435\u0440\u0432\u044b\u0439 &#8212; \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Java Driver, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439, \u043d\u0438\u0437\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u044b\u0439 API \u0431\u0430\u0437\u044b. \u0412\u0442\u043e\u0440\u043e\u0439 \u0438 \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 &#8212; \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Spring Data MongoDB. Spring Data &#8212; \u044d\u0442\u043e \u043f\u0440\u043e\u0435\u043a\u0442 \u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u0442\u0438\u0432\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0430 Spring, \u0446\u0435\u043b\u044c\u044e \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0443\u043d\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430\u043c (SQL, NoSQL, \u0438 \u0442.\u043f.).  \u0418 \u043e\u043d\u0430 \u0442\u043e\u0436\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0438\u0434\u0435\u044e Domain-Driven Design. \u0412 \u044d\u0442\u043e\u0439 \u0434\u0435\u043c\u043a\u0435, \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Spring Data MongoDB \u0447\u0442\u043e\u0431\u044b \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0438 \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u0442\u0435\u043a\u0441\u0442\u0430.<\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435\u043c \u0437\u0430\u043a\u0430\u0437\u043e\u0432 \u0432 \u0431\u0430\u0437\u0443, \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0432\u0441\u0435\u0433\u043e \u043e\u0434\u0438\u043d \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441:<\/p>\n<pre><code class=\"java\">@Repository public interface OrderRepository extends MongoRepository&lt;Order, String> { } <\/code><\/pre>\n<h4>\u041a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u044b<\/h4>\n<p>\u041d\u0430\u0448\u0430 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043d\u0430\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043d\u0430\u0440\u0443\u0436\u0443 API, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043a\u043b\u0438\u0435\u043d\u0442 \u0438\u043b\u0438 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u0434\u0440\u0443\u0433\u043e\u0439 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441 \u043c\u043e\u0436\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0447\u0442\u043e\u0431\u044b \u043e\u0431\u0449\u0430\u0442\u044c\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e REST. Spring MVC \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043f\u0430\u0442\u0442\u0435\u0440\u043d \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u043d\u0430\u0440\u0443\u0436\u0443 REST API, \u0438 \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u044d\u0442\u043e \u0431\u0443\u043a\u0432\u0430\u043b\u044c\u043d\u043e \u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u0440\u043e\u0447\u0435\u043a.<\/p>\n<p>\u0414\u043b\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439, \u0445\u043e\u0440\u043e\u0448\u0430\u044f \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0430 &#8212; \u0437\u0430\u0432\u043e\u0434\u0438\u0442\u044c \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442 <code>\/health<\/code> , \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u0447\u0442\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b\u043e\u0441\u044c \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432 Kubernetes, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0441\u044b\u043b\u0430\u0442\u044c heartbeat-\u0437\u0430\u043f\u0440\u043e\u0441\u044b.<\/p>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430, \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043a\u043b\u0430\u0441\u0441 <code>Health<\/code>:<\/p>\n<pre><code class=\"java\">@Data @NoArgsConstructor @EqualsAndHashCode @ToString public class Health {    private HealthStatus status; } <\/code><\/pre>\n<p>\u0418 \u0434\u043e\u043f\u043e\u043b\u043d\u044f\u044e\u0449\u0438\u0439 \u0435\u0433\u043e \u043a\u043b\u0430\u0441\u0441 <code>HealthStatus<\/code>:<\/p>\n<pre><code class=\"java\">@RestController @RequestMapping(\"\/api\/v1\") public class HealthStatus {    private final Logger log = LoggerFactory.getLogger(HealthResource.class);     @GetMapping(            value = \"\/health\",            produces = \"application\/json\")    public ResponseEntity&lt;Health> getHealth() {        log.debug(\"REST request to get the Health Status\");        final var health = new Health();        health.setStatus(HealthStatus.UP);        return ResponseEntity.ok().body(health);    } } <\/code><\/pre>\n<p>\u0414\u043b\u044f \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u0430 Order, \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442\u044b \u0441\u0435\u0440\u0432\u0438\u0441\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044e\u0442\u0441\u044f \u0432 \u043a\u043b\u0430\u0441\u0441\u0435  <code>OrderResource<\/code> , \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 REST API \u0434\u043b\u044f \u0432\u0441\u0435\u0445 CRUD \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439, \u043e\u0442\u043d\u043e\u0441\u044f\u0449\u0438\u0445\u0441\u044f \u043a \u0437\u0430\u043a\u0430\u0437\u0430\u043c. \u0414\u043b\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u044b, \u0441\u0435\u0439\u0447\u0430\u0441 \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u043c\u0435\u0442\u043e\u0434, createOrder (POST request).<\/p>\n<pre><code class=\"java\">@RestController @RequestMapping(\"\/api\/v1\") public class OrderResource {    private final Logger log = LoggerFactory.getLogger(OrderResource.class);     private static final String ENTITY_NAME = \"order\";     @Value(\"${spring.application.name}\")    private String applicationName;     private final OrderRepository orderRepository;     private final OrderService orderService;     public OrderResource(OrderRepository orderRepository, OrderService orderService) {        this.orderRepository = orderRepository;        this.orderService = orderService;    }     @PostMapping(\"\/orders\")    @Transactional    public ResponseEntity&lt;Order> createOrder(@Valid @RequestBody Order order) throws URISyntaxException {        log.debug(\"REST request to save Order : {}\", order);        if (order.getId() != null) {            throw new ResponseStatusException(HttpStatus.CONFLICT, \"A new order cannot already have an ID\");        }        final var result = orderRepository.save(order);        orderService.createOrder(result);         HttpHeaders headers = new HttpHeaders();        String message = String.format(\"A new %s is created with identifier %s\", ENTITY_NAME, result.getId().toString());        headers.add(\"X-\" + applicationName + \"-alert\", message);        headers.add(\"X-\" + applicationName + \"-params\", result.getId().toString());        return ResponseEntity.created(new URI(\"\/api\/orders\/\" + result.getId())).headers(headers).body(result);    }  } <\/code><\/pre>\n<p>\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0448\u0442\u0440\u0438\u0445 \u2014 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0444\u0430\u0439\u043b\u044b \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 (application.yml, index.html) \u0438 \u043e\u0434\u0438\u043d \u043a\u043b\u0430\u0441\u0441 <code>ApplicationConfiguration<\/code>.<\/p>\n<pre><code class=\"java\">@Configuration public class ApplicationConfiguration {    @Bean    public RestTemplate restTemplate(RestTemplateBuilder builder) {        return builder.build();    } } <\/code><\/pre>\n<p>index.html:<\/p>\n<pre><code>&lt;!DOCTYPE html> &lt;html lang=\"en\">   &lt;head>      &lt;meta charset=\"UTF-8\">      &lt;title>Order Microservice&lt;\/title>   &lt;\/head>   &lt;body>     &lt;h1>Welcome to the Order Microservice&lt;\/h1>     &lt;p> Current Time:        &lt;script> document.write(new Date().toLocaleTimeString()); &lt;\/script>     &lt;\/p>     &lt;p>The order endpoints are &lt;a href=\"\/order\/api\/v1\/orders\">here&lt;\/a>&lt;\/p>   &lt;\/body> &lt;\/html> <\/code><\/pre>\n<p>application.yml \u0432 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 src\/main\/resources:<\/p>\n<pre><code class=\"yaml\">spring:  application:    name: microservice-order     microservice-customer:      url: https:\/\/customer.microservicesdemo.net\/customer\/api\/v1\/   data:    mongodb:      uri: mongodb+srv:\/\/mkmongouser:Secret_Password@cluster0.yu4x6.mongodb.net      database: order  server:  port: 8080  servlet:    context-path: \/order <\/code><\/pre>\n<p>application.yml \u0432 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 src\/main\/local:<\/p>\n<pre><code class=\"yaml\">spring:  application:    name: microservice-order    microservice-customer:      url: http:\/\/localhost:8080\/customer\/api\/v1\/   devtools:    restart:      enabled: true   data:    mongodb:      uri: mongodb:\/\/localhost:27017      database: order  server:  port: 8080  servlet:    context-path: \/order <\/code><\/pre>\n<h4>\u041c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441 Customer<\/h4>\n<p>\u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u043a\u043b\u0430\u0441\u0441\u044b <code>ApplicationConfiguration<\/code>, <code>Health<\/code>, <code>HealthStatus<\/code> \u0438 <code>HealthResource<\/code> \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u0438\u0434\u0435\u043d\u0442\u0438\u0447\u043d\u044b \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u043c\u0443 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u0443 Order, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0438\u0445 \u043c\u043e\u0436\u043d\u043e \u0438 \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043a\u043e\u043f\u0438\u043f\u0430\u0441\u0442\u0438\u0442\u044c.<\/p>\n<p>\u0410 \u0432\u043e\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0435\u0439 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u043e\u0439:<\/p>\n<pre><code class=\"java\">@Document(collection = \"customer\") @Data @NoArgsConstructor public class Customer implements Serializable {     private static final long serialVersionUID = 1L;     @Id    private String id;    @Field(\"orders\")    private Set&lt;Order> orders = new HashSet&lt;>();     public Customer addOrder(Order order) {        this.orders.add(order);        return this;    } } <\/code><\/pre>\n<pre><code class=\"java\">@Getter @Setter @ToString @NoArgsConstructor public class Order implements Serializable {     private static final long serialVersionUID = 1L;     @Id    @NotBlank    private String id;     @NotBlank    private String customerId;     @Override    public boolean equals(Object o) {        if (this == o) return true;        if (o == null || getClass() != o.getClass()) return false;        Order order = (Order) o;        return id.equals(order.id);    }     @Override    public int hashCode() {        return Objects.hash(id);    } } <\/code><\/pre>\n<p>\u0414\u0430\u043b\u044c\u0448\u0435 \u043d\u0443\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c <code>CustomerRepository<\/code> \u043f\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0438 \u0441 <code>OrderRepository<\/code>:<\/p>\n<pre><code class=\"java\">@Repository public interface CustomerRepository extends MongoRepository&lt;Customer, String> { } <\/code><\/pre>\n<p>\u042d\u043d\u0434\u043f\u043e\u0438\u043d\u0442\u044b \u0441\u0435\u0440\u0432\u0438\u0441\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044e\u0442\u0441\u044f \u0432 \u043a\u043b\u0430\u0441\u0441\u0435 <code>CustomerResource<\/code>, \u0438 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 REST API \u0434\u043b\u044f \u0432\u0441\u0435\u0445 CRUD \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u0441 \u043a\u043b\u0438\u0435\u043d\u0442\u0430\u043c\u0438.<\/p>\n<pre><code class=\"java\">@RestController @RequestMapping(\"\/api\/v1\") public class CustomerResource {     private final Logger log = LoggerFactory.getLogger(CustomerResource.class);     private static final String ENTITY_NAME = \"customer\";     @Value(\"${spring.application.name}\")    private String applicationName;     private final CustomerRepository customerRepository;     public CustomerResource(CustomerRepository customerRepository) {        this.customerRepository = customerRepository;    }     @PostMapping(\"\/customers\")    public ResponseEntity&lt;Customer> createCustomer(@Valid @RequestBody Customer customer) throws URISyntaxException {        log.debug(\"REST request to save Customer : {}\", customer);        if (customer.getId() != null) {            throw new ResponseStatusException(HttpStatus.CONFLICT, \"A new customer cannot already have an ID\");        }        final var result = customerRepository.save(customer);         HttpHeaders headers = new HttpHeaders();        String message = String.format(\"A new %s is created with identifier %s\", ENTITY_NAME, customer.getId());        headers.add(\"X-\" + applicationName + \"-alert\", message);        headers.add(\"X-\" + applicationName + \"-params\", customer.getId());        return ResponseEntity.created(new URI(\"\/api\/customers\/\" + result.getId())).headers(headers).body(result);    } } <\/code><\/pre>\n<p>\u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c <code>CustomerOrderResource<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0438\u0442 REST API \u0434\u043b\u044f \u0441\u0432\u044f\u0437\u0438 \u043c\u0435\u0436\u0434\u0443 Customer \u0438 Order.<\/p>\n<pre><code class=\"java\">@RestController @RequestMapping(\"\/api\/v1\") public class CustomerOrderResource {     private final Logger log = LoggerFactory.getLogger(CustomerOrderResource.class);     private static final String ENTITY_NAME = \"order\";     @Value(\"${spring.application.name}\")    private String applicationName;     private final CustomerRepository customerRepository;     public CustomerOrderResource(CustomerRepository customerRepository) {        this.customerRepository = customerRepository;    }     @PostMapping(\"\/customerOrders\/{customerId}\")    public ResponseEntity&lt;Order> createOrder(@PathVariable String customerId, @Valid @RequestBody Order order) {        log.debug(\"REST request to save Order : {} for Customer ID: {}\", order, customerId);        if (customerId.isBlank()) {            throw new ResponseStatusException(                    HttpStatus.NOT_FOUND, \"No Customer: \" + ENTITY_NAME);        }        final Optional&lt;Customer> customerOptional = customerRepository.findById(customerId);        if (customerOptional.isPresent()) {            final var customer = customerOptional.get();            customer.addOrder(order);            customerRepository.save(customer);            return ResponseEntity.ok()                    .body(order);        } else {            throw new ResponseStatusException(HttpStatus.BAD_REQUEST, \"Invalid Customer: \" + ENTITY_NAME);        }    } } <\/code><\/pre>\n<p>\u041d\u0443 \u0438 \u0442\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u043e, \u0444\u0430\u0439\u043b\u044b \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438:<\/p>\n<p>index.html:<\/p>\n<pre><code>&lt;html lang=\"en\">   &lt;head>      &lt;meta charset=\"UTF-8\">      &lt;title>Customer Microservice&lt;\/title>   &lt;\/head>   &lt;body>      &lt;h1>Welcome to the Customer Microservice&lt;\/h1>      &lt;p> Current Time:          &lt;script> document.write(new Date().toLocaleTimeString()); &lt;\/script>      &lt;\/p>      &lt;p>The customer endpoints are &lt;a href=\"\/customer\/api\/v1\/customers\">here&lt;\/a>&lt;\/p>      &lt;p>The customer-order endpoints are &lt;a href=\"\/customer\/api\/v1\/customerOrders\">here&lt;\/a>&lt;\/p>   &lt;\/body> &lt;\/html> <\/code><\/pre>\n<p>application.yml \u0432 src\/main\/local:<\/p>\n<pre><code class=\"yaml\">spring:  application:    name: microservice-customer   devtools:    restart:      enabled: true  data:    mongodb:      uri: mongodb:\/\/localhost:27017      database: customer  server:  port: 8080  servlet:    context-path: \/customer <\/code><\/pre>\n<p>application.yml \u0432 src\/main\/resources:<\/p>\n<pre><code class=\"yaml\">spring:  application:    name: microservice-customer   data:    mongodb:      uri: mongodb+srv:\/\/mkmongouser:Secret_Password@cluster0.yu4x6.mongodb.net      database: customer  server:  port: 8080  servlet:    context-path: \/customer <\/code><\/pre>\n<h4>\u0421\u0435\u0440\u0432\u0438\u0441\u044b<\/h4>\n<p>\u0412 Spring \u043f\u0440\u0438\u043d\u044f\u0442\u043e \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0431\u0438\u0437\u043d\u0435\u0441-\u043b\u043e\u0433\u0438\u043a\u0443 \u0432\u043d\u0443\u0442\u0440\u0438 \u0441\u0435\u0440\u0432\u0438\u0441\u043d\u043e\u0433\u043e \u0441\u043b\u043e\u044f. \u041b\u043e\u0433\u0438\u043a\u0443 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 Customer \u0438 Order \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c \u0432 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441 Order \u0432 \u0442\u0430\u043a\u043e\u043c \u0432\u0438\u0434\u0435:<\/p>\n<pre><code class=\"java\">@Service @Slf4j public class OrderService {     private final Logger log = LoggerFactory.getLogger(OrderService.class);     @Autowired    RestTemplate restTemplate;     @Autowired    ObjectMapper objectMapper;     @Value(\"${spring.application.microservice-customer.url}\")    private String customerBaseUrl;     private static final String CUSTOMER_ORDER_URL = \"customerOrders\/\";     public void createOrder(Order order) {        final var url = customerBaseUrl + CUSTOMER_ORDER_URL + order.getCustomerId();        final var headers = new HttpHeaders();        headers.setContentType(MediaType.APPLICATION_JSON);         log.info(\"Order Request URL: {}\", url);        try {            final var request = new HttpEntity&lt;>(order, headers);            final var responseEntity = restTemplate.postForEntity(url, request, Order.class);            if (responseEntity.getStatusCode().isError()) {                log.error(\"For Order ID: {}, error response: {} is received to create Order in Customer Microservice\",                        order.getId(),                        responseEntity.getStatusCode().getReasonPhrase());                throw new ResponseStatusException(HttpStatus.INTERNAL_SERVER_ERROR, String.format(\"For Order UUID: %s, Customer Microservice Message: %s\", order.getId(), responseEntity.getStatusCodeValue()));            }            if (responseEntity.hasBody()) {                log.error(\"Order From Response: {}\", responseEntity.getBody().getId());            }        } catch (Exception e) {            log.error(\"For Order ID: {}, cannot create Order in Customer Microservice for reason: {}\", order.getId(), ExceptionUtils.getRootCauseMessage(e));            throw new ResponseStatusException(HttpStatus.BAD_REQUEST, String.format(\"For Order UUID: %s, Customer Microservice Response: %d\", order.getId(), ExceptionUtils.getRootCauseMessage(e)));        }    } } <\/code><\/pre>\n<h4>\u041f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u0435 \u0438\u0442\u043e\u0433\u0438 \u043f\u0435\u0440\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438<\/h4>\n<p>\u0427\u0442\u043e \u043c\u044b \u0441\u0435\u0439\u0447\u0430\u0441 \u0438\u043c\u0435\u0435\u043c \u043d\u0430 \u0440\u0443\u043a\u0430\u0445? \u041c\u044b \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u043e\u0441\u043e\u0437\u043d\u0430\u043b\u0438, \u0447\u0435\u043c \u0431\u0443\u0434\u0435\u043c \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c\u0441\u044f (\u0434\u0435\u043b\u0430\u0442\u044c \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441 \u043d\u0430 Spring Boot \u0438 Mongo), \u043d\u0430\u043f\u0438\u0441\u0430\u043b\u0438 \u0431\u0430\u0437\u043e\u0432\u044b\u0435 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 (Controller, Service, Repository, Entity). \u041a\u043e\u0434 \u0434\u043e\u043b\u0436\u0435\u043d \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0431\u0435\u0437 \u043e\u0448\u0438\u0431\u043e\u043a.<\/p>\n<h3>\u0427\u0430\u0441\u0442\u044c 2. \u041a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u044f \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432<\/h3>\n<h4>\u0418\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 Cloud-Native<\/h4>\n<p>\u041f\u0440\u0435\u043b\u0435\u0441\u0442\u044c \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043d\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u044b \u043c\u043e\u0436\u043d\u043e \u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0440\u0430\u0437\u0443 \u043d\u0430 \u043c\u043d\u043e\u0433\u0438\u0445 \u044f\u0437\u044b\u043a\u0430\u0445 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0440\u0430\u0437\u043d\u043e\u0448\u0435\u0440\u0441\u0442\u043d\u044b\u0445 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044f\u0445, \u0434\u0430\u0436\u0435 \u0432\u043d\u0443\u0442\u0440\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430. \u0421\u0442\u0440\u043e\u0433\u043e \u0433\u043e\u0432\u043e\u0440\u044f, \u043e\u0431\u0441\u0443\u0436\u0434\u0430\u044f \u043e\u0431\u043b\u0430\u0447\u043d\u0443\u044e \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443, \u043d\u0443\u0436\u043d\u043e \u0432\u0441\u0435\u0433\u0434\u0430 \u0437\u0430\u0434\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u043c: \u0430 \u043a\u0430\u043a \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043f\u0438\u0441\u0430\u0442\u044c \u0432 \u043d\u0435\u0439 \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u044f\u0437\u044b\u043a\u0430\u0445 \u0441\u0440\u0430\u0437\u0443?  \u0422\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435, \u043c\u043d\u043e\u0433\u043e\u044f\u0437\u044b\u0447\u043d\u044b\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u044b \u0432\u0441\u0451 \u0435\u0449\u0451 \u043d\u0435 \u0441\u0442\u0430\u043b\u0438 \u0437\u043e\u043b\u043e\u0442\u044b\u043c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043e\u043c \u0438\u043d\u0434\u0443\u0441\u0442\u0440\u0438\u0438 (\u0445\u043e\u0442\u044f \u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u0432 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0445 \u043a\u043e\u043d\u0442\u043e\u0440\u0430\u0445 \u0442\u0438\u043f\u0430 Netflix). \u041f\u043e\u044d\u0442\u043e\u043c\u0443, \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u044b \u0431\u0443\u0434\u0435\u043c \u0437\u0434\u0435\u0441\u044c \u0438 \u0434\u0430\u043b\u044c\u0448\u0435 \u0441\u0447\u0438\u0442\u0430\u0442\u044c, \u0447\u0442\u043e \u043f\u0438\u0448\u0435\u043c \u0432\u0441\u0451 \u043d\u0430 Java.<\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043d\u0430\u0448\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432 \u043e\u0431\u043b\u0430\u043a\u0435, \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0443\u0447\u0430\u0441\u0442\u0432\u0443\u044e\u0442 Docker \u0438 Kubernetes. Docker \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0443\u043f\u0430\u043a\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0438 \u0432\u0441\u044e \u0435\u0433\u043e \u0443\u0439\u043c\u0443 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440. \u042d\u0442\u043e\u0442 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u0441\u0440\u0435\u0434\u0430\u0445, \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044f \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u0443\u044e \u0438 \u0438\u0437\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0443\u044e \u0441\u0440\u0435\u0434\u0443 \u0432\u043d\u0443\u0442\u0440\u0438 \u043d\u0435\u0433\u043e.<\/p>\n<p>\u0414\u0440\u0443\u0433\u0438\u0435 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0430 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432:<\/p>\n<ul>\n<li>\n<p>\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0447\u0430\u0441\u0442\u0438\u0447\u043d\u043e\u0433\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u0443\u0447\u0430\u0441\u0442\u043a\u043e\u0432 \u043a\u043e\u0434\u0430, \u0431\u0435\u0437 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c \u0432\u0441\u0451 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435;<\/p>\n<\/li>\n<li>\n<p>\u041c\u043d\u043e\u0433\u043e\u0441\u043b\u043e\u0439\u043d\u044b\u0435 \u043e\u0431\u0440\u0430\u0437\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043d\u043e\u0432\u044b\u0445 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432;<\/p>\n<\/li>\n<li>\n<p>\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u0435;<\/p>\n<\/li>\n<li>\n<p>\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043e\u0442\u043a\u0430\u0442\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u043e \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u043e\u0431\u0440\u0430\u0437\u0430.<\/p>\n<\/li>\n<\/ul>\n<p>\u041c\u0438\u043d\u0443\u0442\u043a\u0430 \u0440\u0435\u043a\u043b\u0430\u043c\u044b \u0437\u0430\u043a\u043e\u043d\u0447\u0435\u043d\u0430. \u0412 \u044d\u0442\u043e\u0442 \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u043e\u043d\u044f\u0442\u044c, \u0447\u0442\u043e Docker \u2014 \u044d\u0442\u043e \u0445\u043e\u0440\u043e\u0448\u043e, \u0430 \u0435\u0441\u043b\u0438 \u043d\u0435 \u043f\u043e\u043d\u044f\u043b\u0438 \u2014 \u0437\u0430\u043a\u0440\u044b\u0442\u044c \u0441\u0442\u0430\u0442\u044c\u044e, \u043e\u0442\u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u0439 \u0436\u0435\u0441\u0442\u043a\u0438\u0439 \u0434\u0438\u0441\u043a \u0438 \u043f\u043e\u0439\u0442\u0438 \u043c\u0435\u0441\u0442\u0438 \u043a\u0440\u044b\u0448\u0438.<\/p>\n<p><a href=\"https:\/\/spring.io\/blog\/2020\/08\/14\/creating-efficient-docker-images-with-spring-boot-2-3\" rel=\"noopener noreferrer nofollow\">Spring Boot \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 Cloud-Native Buildpack<\/a> , \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u0434\u043e\u043a\u0435\u0440\u043d\u044b\u0439 \u043e\u0431\u0440\u0430\u0437 \u0438\u0437 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 Spring Boot. \u0415\u0441\u043b\u0438 \u0432\u044b \u0436\u0438\u0432\u0435\u0442\u0435 \u0432 \u044d\u043a\u043e\u0441\u0438\u0441\u0442\u0435\u043c\u0435 Spring, \u0442\u043e \u0432\u0430\u0448\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0443\u0436\u0435 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0430 \u043f\u043e\u043b\u043f\u0443\u0442\u0438 \u0432 \u043e\u0431\u043b\u0430\u043a\u043e.<\/p>\n<p>\u041e\u0434\u0438\u043d \u0438\u0437 \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432 \u0440\u0430\u0437\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f Spring Boot \u0438\u043b\u0438 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u044b \u0432 AWS \u2014 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0434\u043e\u043a\u0435\u0440\u043d\u044b\u0435 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 OCI, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Amazon ECR \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043e\u0431\u043b\u0430\u0447\u043d\u043e\u0433\u043e \u0434\u043e\u043a\u0435\u0440\u043d\u043e\u0433\u043e \u0440\u0435\u0435\u0441\u0442\u0440\u0430, Amazon EKS \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043e\u0431\u043b\u0430\u0447\u043d\u043e\u0433\u043e Kubernetes.<\/p>\n<p>\u0414\u0440\u0443\u0433\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u2014 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c AWS Elastic Beanstalk, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 Platform as a Service (PaaS) \u0434\u043b\u044f \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u0432\u0435\u0431-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0432 \u043e\u0431\u043b\u0430\u043a\u0435 AWS, \u0442\u0430\u043a \u0447\u0442\u043e \u044d\u0442\u043e \u043b\u0435\u0433\u043a\u043e \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c. \u0412 \u044d\u0442\u043e\u043c \u0433\u0430\u0439\u0434\u0435 \u043c\u044b \u043e\u0431 \u044d\u0442\u043e\u043c \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c \u043d\u0435 \u0441\u0442\u0430\u043d\u0435\u043c.<\/p>\n<p>\u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u0432 \u043a\u043e\u0440\u043e\u0442\u043a\u043e\u0439 \u0434\u0435\u043c\u043a\u0435 \u043d\u0435 \u0437\u0430\u0442\u0440\u043e\u043d\u0443\u0442\u044c \u0432\u0441\u0435\u0445 \u0430\u0441\u043f\u0435\u043a\u0442\u043e\u0432 \u0436\u0438\u0437\u043d\u0438 \u0432 \u043e\u0431\u043b\u0430\u043a\u0430\u0445, \u0442\u0438\u043f\u0430 CI\/CD, \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e JavaEE \u043f\u043e\u0434\u0445\u043e\u0434\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e MicroProfile, \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c, \u0438 \u0442\u043e\u043c\u0443 \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0433\u043e. \u0412 \u0433\u043e\u043b\u043e\u0432\u0435 \u0432\u0441\u0451 \u044d\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0434\u0435\u0440\u0436\u0430\u0442\u044c, \u043d\u043e \u0441\u0435\u0439\u0447\u0430\u0441 \u0441\u043a\u043e\u043d\u0446\u0435\u043d\u0442\u0440\u0438\u0440\u0443\u0435\u043c\u0441\u044f \u043d\u0430 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u0438.<\/p>\n<h4>\u041a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u044f<\/h4>\n<p>\u0412\u043d\u0430\u0447\u0430\u043b\u0435 \u043d\u0443\u0436\u043d\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c Docker \u043d\u0430 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440. \u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u044d\u0442\u043e\u0442 \u0441\u0438\u043b\u044c\u043d\u043e \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0440\u0430\u0437\u043d\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445 \u0438 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u0448\u0430\u0433\u043e\u0432, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u0432\u0435\u0442\u0430\u043c \u0438\u0437 <a href=\"https:\/\/docs.docker.com\/get-docker\/\" rel=\"noopener noreferrer nofollow\">\u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438<\/a>.<\/p>\n<p>\u041c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u044b \u0434\u043b\u044f \u0443\u043f\u0430\u043a\u043e\u0432\u043a\u0438 \u0443 \u043d\u0430\u0441 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c. \u0422\u0435\u043f\u0435\u0440\u044c, \u043a\u0430\u043a \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043e\u0431\u0440\u0430\u0437\u044b Docker? \u0422\u0435\u043e\u0440\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438, \u043c\u043e\u0436\u043d\u043e <a href=\"https:\/\/docs.docker.com\/engine\/reference\/builder\/\" rel=\"noopener noreferrer nofollow\">\u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0432\u043e\u0439 Dockerfile<\/a>. \u041c\u0438\u043d\u0443\u0441 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u043d\u0435\u043f\u043b\u043e\u0445\u043e \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u0432 Docker \u0438 \u043f\u0440\u043e\u0447\u0438\u0445 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043d\u044b\u0445 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044f\u0445. \u041d\u043e \u043c\u044b \u043d\u0435 \u0445\u043e\u0442\u0438\u043c \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f, \u0445\u043e\u0442\u0438\u043c \u0440\u0430\u0437-\u0434\u0432\u0430 \u0438 \u0432 \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u0435\u043d. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c <a href=\"https:\/\/buildpacks.io\/\" rel=\"noopener noreferrer nofollow\">Cloud Native Buildpacks<\/a> , \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443\u043c\u0435\u044e\u0442 \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u0432  <a href=\"https:\/\/buildpacks.io\/features\/\" rel=\"noopener noreferrer nofollow\">OCI-\u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u044b\u0435 Docker-\u043e\u0431\u0440\u0430\u0437\u044b \u0431\u0435\u0437 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043f\u0438\u0441\u0430\u0442\u044c Dockerfile \u0432\u0440\u0443\u0447\u043d\u0443\u044e<\/a>.<\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u043e\u0431\u0440\u0430\u0437 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u0430 Customer, \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0439\u0442\u0438 \u0432 \u0435\u0433\u043e \u043a\u043e\u0440\u043d\u0435\u0432\u0443\u044e \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0443:<\/p>\n<pre><code>.\/mvnw spring-boot:build-image <\/code><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u0432\u0430\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f Gradle, \u0442\u043e \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0431\u0443\u0434\u0435\u0442 \u0434\u0440\u0443\u0433\u0430\u044f:<\/p>\n<pre><code>.\/gradlew bootBuildImage <\/code><\/pre>\n<p>\u042d\u0442\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442 \u043e\u0431\u0440\u0430\u0437 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0444\u0430\u0439\u043b\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 Spring. \u0412 \u043d\u0430\u0448\u0435\u0439 \u0434\u0435\u043c\u043a\u0435, \u043e\u0431\u0440\u0430\u0437 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u0430 Customer \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u043a\u0430\u043a-\u0442\u043e \u0442\u0430\u043a: <code>docker.io\/library\/microservice-customer:1.0.0<\/code><\/p>\n<p>\u0422\u043e\u0447\u043d\u043e \u0442\u0430\u043a\u0439 \u0436\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0438 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441 Order: <code>docker.io\/library\/microservice-order:1.0.0<\/code><\/p>\n<p>\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0438\u0445 \u043c\u043e\u0436\u043d\u043e, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0432 \u044d\u0442\u043e \u0438\u043c\u044f:<\/p>\n<pre><code>docker run -d -p 8080:8080 docker.io\/library\/microservice-customer:1.0.0 <\/code><\/pre>\n<p>\u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u0447\u0442\u043e \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b\u0441\u044f, \u043c\u043e\u0436\u043d\u043e \u043d\u0430 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u043c \u0430\u0434\u0440\u0435\u0441\u0435: <a href=\"http:\/\/localhost:8080\/\" rel=\"noopener noreferrer nofollow\">http:\/\/localhost:8080<\/a>.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b\u0441\u044f, \u0432\u044b \u0443\u0432\u0438\u0434\u0438\u0442\u0435 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u044d\u0442\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u0438. \u0412 \u0432\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u0434\u0440\u0443\u0433\u043e\u0439, \u0432\u0441\u0435 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u044b \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b:<\/p>\n<pre><code>c1c3925595047ff5744507dd0abc05b1063f7dc884c3e2a4c9864633a2780d2b <\/code><\/pre>\n<p>\u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043b\u043e\u0433\u0438 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 \u043c\u043e\u0436\u043d\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u044b:<\/p>\n<pre><code>docker logs c1c3925595047ff5744507dd0abc05b1063f7dc884c3e2a4c9864633a2780d2b <\/code><\/pre>\n<p>\u0418 \u0432\u044b \u0443\u0432\u0438\u0434\u0438\u0442\u0435 \u0442\u0430\u043c \u043d\u0435\u0447\u0442\u043e \u0432\u0440\u043e\u0434\u0435:<\/p>\n<pre><code>2021-03-03 22:01:21.116  INFO 1 --- [ngodb.net:27017] org.mongodb.driver.cluster           : Setting max set version to 2 from replica set primary clustermicroservice-shard-00-01.fzatn.mongodb.net:27017 2021-03-03 22:01:21.116  INFO 1 --- [ngodb.net:27017] org.mongodb.driver.cluster           : Discovered replica set primary clustermicroservice-shard-00-01.fzatn.mongodb.net:27017 2021-03-03 22:01:21.184  INFO 1 --- [       main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor' 2021-03-03 22:01:21.240  INFO 1 --- [       main] o.s.b.a.w.s.WelcomePageHandlerMapping: Adding welcome page: class path resource [static\/index.html] 2021-03-03 22:01:21.383  INFO 1 --- [       main] o.s.b.w.embedded.tomcat.TomcatWebServer <\/code><\/pre>\n<p>\u0412\u0430\u0436\u043d\u043e \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u0444\u043e\u0440\u0432\u0430\u0440\u0434\u0438\u043d\u0433 \u043f\u043e\u0440\u0442\u043e\u0432  (-p 8080) \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043d\u0430\u043c \u0441\u043e\u0435\u0434\u0438\u043d\u044f\u0442\u044c\u0441\u044f \u0441 \u043d\u0430\u0448\u0438\u043c\u0438 \u0441\u0435\u0440\u0432\u0438\u0441\u0430\u043c\u0438 \u0441\u043d\u0430\u0440\u0443\u0436\u0438 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 &#8212; \u0441 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430. \u041c\u043e\u0436\u043d\u043e \u0432\u043f\u0438\u0441\u0430\u0442\u044c \u0442\u0443\u0434\u0430 \u0438 \u0434\u0440\u0443\u0433\u0443\u044e \u0446\u0438\u0444\u0440\u0443, 8080 \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u043c\u0435\u0435\u0442 \u043a\u0430\u043a\u043e\u0435-\u0442\u043e \u0440\u0438\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u0434\u0436\u0430\u0432\u0438\u0441\u0442\u043e\u0432.<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0441\u0442\u0430\u0442\u0443\u0441 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 \u0447\u0435\u0440\u0435\u0437 GET \u0437\u0430\u043f\u0440\u043e\u0441. \u0421\u0434\u0435\u043b\u0430\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441 \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u0430\u043c\u0438, \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u044b \u043f\u0443\u0441\u0442\u044c \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 curl \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u0438:<\/p>\n<pre><code> curl --location --request GET 'http:\/\/localhost:8080\/customer\/api\/v1\/health' <\/code><\/pre>\n<p>\u0412\u043e\u0442 \u0442\u0430\u043a\u043e\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043c\u044b \u043e\u0436\u0438\u0434\u0430\u0435\u043c:<\/p>\n<pre><code>&lt; {\"status\":\"UP\"} <\/code><\/pre>\n<p>\u0427\u0442\u043e\u0431\u044b \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440, \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c <code>docker stop<\/code>  \u0441 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0435\u043c \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0430 \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430:<\/p>\n<pre><code>docker stop c1c3925595047ff5744507dd0abc05b1063f7dc884c3e2a4c9864633a2780d2b <\/code><\/pre>\n<h4>\u041f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u0435 \u0438\u0442\u043e\u0433\u0438 \u0432\u0442\u043e\u0440\u043e\u0439 \u0447\u0430\u0441\u0442\u0438<\/h4>\n<p>\u041c\u044b \u0441\u043e\u0437\u0434\u0430\u043b\u0438 \u0434\u0432\u0430 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u0430, \u043d\u0430\u0443\u0447\u0438\u043b\u0438\u0441\u044c \u0443\u043f\u0430\u043a\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0438\u0445 \u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043d\u0430 \u0441\u0432\u043e\u0435\u043c \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u043c \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0435. \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0432\u043e\u043f\u0440\u043e\u0441 &#8212; \u043a\u0430\u043a \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0438\u0445 \u0432 \u043e\u0431\u043b\u0430\u043a\u0435?<\/p>\n<h3>\u0427\u0430\u0441\u0442\u044c 3. \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u044b \u0432 \u043e\u0431\u043b\u0430\u043a\u0435<\/h3>\n<h4>\u0420\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u0435 \u043d\u0430 Amazon AWS<\/h4>\n<p>\u0414\u043b\u044f \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 \u043c\u044b \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f <a href=\"https:\/\/aws.amazon.com\/ecr\/\" rel=\"noopener noreferrer nofollow\">Amazon ECR<\/a>. \u042d\u0442\u043e Docker Registry, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0445\u0440\u0430\u043d\u0438\u0442\u044c, \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u0442\u044c \u0438 \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u0442\u044c \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b \u0432 \u043e\u0431\u043b\u0430\u043a\u0435 AWS.<\/p>\n<p>\u0412\u043d\u0430\u0447\u0430\u043b\u0435, \u043d\u0443\u0436\u043d\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0443\u0442\u0438\u043b\u0438\u0442\u044b \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 AWS CLI \u043d\u0430 \u0432\u0430\u0448\u0435\u043c \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0435. \u041a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0435 \u0448\u0430\u0433\u0438 \u043e\u043f\u0438\u0441\u0430\u043d\u044b <a href=\"https:\/\/docs.aws.amazon.com\/cli\/latest\/userguide\/install-cliv2.html\" rel=\"noopener noreferrer nofollow\">\u0432 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438<\/a>. \u042f \u043d\u0435 \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043b \u0438\u0445 \u0432 \u044d\u0442\u0443 \u0441\u0442\u0430\u0442\u044c\u044e \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0438\u0437 \u0433\u0443\u043c\u0430\u043d\u0438\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0441\u043e\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439: \u043f\u0430\u0440\u0430 \u0442\u0430\u043a\u0438\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439, \u0438 \u0425\u0430\u0431\u0440 \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u0442\u0441\u044f \u0432 \u0447\u0435\u0440\u0442\u043e\u0432 \u0438\u043d\u0441\u0442\u0430\u043b\u043b\u044f\u0442\u043e\u0440.<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c, \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u0430 \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 \u0432 ECR. \u0412\u0430\u0436\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u0438\u043c\u044f \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f \u0432 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u043b\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044e \u0438\u043c\u0435\u043d\u0438 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043d\u043e\u0433\u043e \u043e\u0431\u0440\u0430\u0437\u0430.<\/p>\n<pre><code>aws ecr create-repository --repository-name microservice-customer <\/code><\/pre>\n<p>\u042d\u0442\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0441\u043e\u0437\u0434\u0430\u0441\u0442 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 \u0434\u043b\u044f \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u0430 Order, \u0438 \u0434\u043e\u043b\u0436\u043d\u0430 \u0440\u0430\u0441\u043f\u0435\u0447\u0430\u0442\u0430\u0442\u044c \u0432\u043e\u0442 \u0442\u0430\u043a\u043e\u0439 \u0432\u044b\u0445\u043b\u043e\u043f:<\/p>\n<pre><code class=\"json\">{ \"repository\": {     \"repositoryArn\": \"arn:aws:ecr:eu-central-1:877546708265:repository\/microservice-customer\",     \"registryId\": \"877546708265\",     \"repositoryName\": \"microservice-customer\",     \"repositoryUri\": \"877546708265.dkr.ecr.eu-central-1.amazonaws.com\/microservice-customer\",     \"createdAt\": \"2021-03-04T00:18:33+01:00\",     \"imageTagMutability\": \"MUTABLE\",     \"imageScanningConfiguration\": {         \"scanOnPush\": false     },     \"encryptionConfiguration\": {         \"encryptionType\": \"AES256\"     } } } <\/code><\/pre>\n<p>\u041a \u043d\u0430\u0448\u0435\u043c\u0443 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e \u043b\u0435\u0436\u0430\u0449\u0435\u043c\u0443 \u043e\u0431\u0440\u0430\u0437\u0443 \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u0442\u044c \u0442\u044d\u0433, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043e\u043f\u0438\u0441\u0430\u043d \u0440\u0435\u0435\u0441\u0442\u0440 ECR \u0438 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439.  \u0412\u043d\u0430\u0447\u0430\u043b\u0435 \u043d\u0443\u0436\u043d\u043e \u0432\u0437\u044f\u0442\u044c \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0434\u043e\u043a\u0435\u0440\u043d\u043e\u0433\u043e \u043e\u0431\u0440\u0430\u0437\u0430 \u0434\u043b\u044f \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u0430 Order, \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043e \u043d\u0451\u043c \u043f\u043e\u043b\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e:<\/p>\n<pre><code>docker image ls microservice-customer:1.0.0 <\/code><\/pre>\n<p>\u041e\u0436\u0438\u0434\u0430\u0435\u043c\u044b\u0439 \u0432\u044b\u0445\u043b\u043e\u043f:<\/p>\n<pre><code>REPOSITORYTAGIMAGE IDCREATED        SIZE microservice-customer1.0.0652da8e2130b    41 years ago    274MB <\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c, \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0442\u044d\u0433, \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044f ECR \u0438 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439:<\/p>\n<pre><code>docker tag 652da8e2130b 877546708265.dkr.ecr.eu-central-1.amazonaws.com\/microservice-customer:1.0.0 <\/code><\/pre>\n<p>\u0414\u043b\u044f \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u043e\u0431\u0440\u0430\u0437\u0430 \u0432 ECR, \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u043b\u043e\u0433\u0438\u043d\u0438\u0442\u044c\u0441\u044f. \u042d\u0442\u043e\u0442 \u043b\u043e\u0433\u0438\u043d \u043f\u0440\u043e\u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f 12 \u0447\u0430\u0441\u043e\u0432, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0437\u0430\u0439\u0442\u0438 \u0437\u0430\u043d\u043e\u0432\u043e.<\/p>\n<pre><code>aws ecr get-login-password --region eu-central-1 | docker login --username AWS --password-stdin 877546708265.dkr.ecr.eu-central-1.amazonaws.com <\/code><\/pre>\n<p>\u041e\u0436\u0438\u0434\u0430\u0435\u043c\u044b\u0439 \u0432\u044b\u0445\u043b\u043e\u043f:<\/p>\n<pre><code>WARNING! Your password will be stored unencrypted in \/home\/$USER_NAME\/.docker\/config.json. Configure a credential helper to remove this warning. See https:\/\/docs.docker.com\/engine\/reference\/commandline\/login\/#credentials-store  Login Succeeded <\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0448\u0438\u0442\u044c \u043e\u0431\u0440\u0430\u0437 \u0432 AWS ECR:<\/p>\n<pre><code>docker push 877546708265.dkr.ecr.eu-central-1.amazonaws.com\/microservice-order:1.0.0 <\/code><\/pre>\n<p>\u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0442\u043e\u0433\u043e, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0431\u044b\u0441\u0442\u0440\u044b\u0439 \u0443 \u0432\u0430\u0441 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442. \u042d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043d\u044f\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u0438\u043d\u0443\u0442, \u0437\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u0432\u0441\u043a\u0438\u043f\u044f\u0442\u0438\u0442\u044c \u0447\u0430\u044e \u0438 \u043f\u043e\u0435\u0441\u0442\u044c.<\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438, \u043d\u0435\u043f\u043b\u043e\u0445\u043e \u0441\u0445\u043e\u0434\u0438\u0442\u044c \u0432 \u0432\u0435\u0431-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u0447\u0442\u043e \u0432\u0441\u0451 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c:<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/fy\/yo\/xv\/fyyoxvwrukkgm6u4fsmpkkjgvry.png\" width=\"auto\" height=\"auto\" data-src=\"https:\/\/habrastorage.org\/webt\/fy\/yo\/xv\/fyyoxvwrukkgm6u4fsmpkkjgvry.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041d\u043e \u0441\u0430\u043c\u0430\u044f \u0433\u043b\u0430\u0432\u043d\u0430\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430, \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435, \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u043d\u0435 \u0433\u043b\u0430\u0437\u0430\u043c\u0438. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0437\u0430\u043f\u0443\u043b\u043b\u0438\u0442\u044c \u043e\u0431\u0440\u0430\u0437:<\/p>\n<pre><code>docker pull 877546708265.dkr.ecr.eu-central-1.amazonaws.com\/microservice-customer:1.0.0 <\/code><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u0432\u0441\u044f \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0435 \u0448\u0430\u0433\u0438 \u0431\u044b\u043b\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u044b \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e, \u043c\u044b \u0443\u0432\u0438\u0434\u0438\u043c \u0434\u043e\u043b\u0433\u043e\u0436\u0434\u0430\u043d\u043d\u044b\u0439 \u043e\u0442\u0432\u0435\u0442:<\/p>\n<pre><code>1.0.0: Pulling from microservice-customer Digest: sha256:555b582b3353f9657ee6f28b35923c8d43b5b5d4ab486db896539da51b4f971a Status: Image is up to date for 877546708265.dkr.ecr.eu-central-1.amazonaws.com\/microservice-customer:1.0.0 877546708265.dkr.ecr.eu-central-1.amazonaws.com\/microservice-customer:1.0.0 <\/code><\/pre>\n<h4>\u0420\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u0435 \u043d\u0430 EKS<\/h4>\n<p>\u041d\u0430\u0448\u0438\u043c \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u0430\u043c \u043d\u0443\u0436\u043d\u0430 \u0431\u0430\u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0445, \u0431\u0435\u0437 \u043d\u0438\u0445 \u043e\u043d\u0438 \u043d\u0435 \u0437\u0430\u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442. \u041f\u043e\u044d\u0442\u043e\u043c\u0443, \u043d\u0443\u0436\u043d\u043e \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043d\u0430 \u0410\u043c\u0430\u0437\u043e\u043d\u0435 \u043a\u043b\u0430\u0441\u0442\u0435\u0440 MongoDB. \u0417\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0439\u0442\u0435\u0441\u044c \u043d\u0430 <a href=\"https:\/\/www.mongodb.com\/cloud\/atlas\/register.\" rel=\"noopener noreferrer nofollow\">MongoDB Atlas<\/a>. \u041f\u043e\u0441\u043b\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438, \u0441\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u0439 Shared cluster, \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 cloud provider (AWS) \u0438 \u043a\u0430\u043a\u043e\u0439-\u043d\u0438\u0431\u0443\u0434\u044c \u0440\u0435\u0433\u0438\u043e\u043d \u043f\u043e\u0431\u043b\u0438\u0436\u0435, \u0438 \u0436\u043c\u0438\u0442\u0435 \u043a\u043d\u043e\u043f\u043a\u0443 &#171;Create Cluster&#187;. \u0415\u0441\u043b\u0438 \u043d\u0435 \u0437\u043d\u0430\u0435\u0442\u0435, \u043a\u0430\u043a\u043e\u0439 \u0440\u0435\u0433\u0438\u043e\u043d \u0432\u044b\u0431\u0440\u0430\u0442\u044c &#8212; \u0431\u0435\u0440\u0438\u0442\u0435 \u0424\u0440\u0430\u043d\u043a\u0444\u0443\u0440\u0442, \u043d\u0435 \u043e\u0448\u0438\u0431\u0451\u0442\u0435\u0441\u044c. \u0414\u0430\u043b\u044c\u0448\u0435 \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f, \u0443\u043a\u0430\u0437\u0430\u0432 \u043b\u043e\u0433\u0438\u043d \u0438 \u043f\u0430\u0440\u043e\u043b\u044c. \u041a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u0441\u043e\u0437\u0434\u0430\u0441\u0442\u0441\u044f, \u0432\u044b \u0443\u0432\u0438\u0434\u0438\u0442\u0435 \u0442\u0430\u043a\u043e\u0435:<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/5p\/xe\/ei\/5pxeeib_ruexhhtxvhfmks8wcck.png\" width=\"auto\" height=\"auto\" data-src=\"https:\/\/habrastorage.org\/webt\/5p\/xe\/ei\/5pxeeib_ruexhhtxvhfmks8wcck.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c, \u043d\u0443\u0436\u043d\u043e \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u0440\u043e\u0447\u043a\u0443 \u0434\u043b\u044f \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u0441 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u043e\u043c, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u044b \u043f\u0440\u043e\u043f\u0438\u0448\u0435\u043c \u0432 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u044b. \u041d\u0430\u0436\u043c\u0438\u0442\u0435 \u043a\u043d\u043e\u043f\u043a\u0443 &#171;Connect&#187;, \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 &#171;Connect your application&#187;. \u0412\u0430\u0436\u043d\u043e: \u0441\u0442\u0440\u043e\u043a\u0430 \u0434\u043b\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0432\u0430\u0448\u0435\u0433\u043e \u044f\u0437\u044b\u043a\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u0432\u0435\u0440\u0441\u0438\u0438 MongoDB. \u0422\u0430\u043c \u0431\u0443\u0434\u0443\u0442 \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438, \u0438\u0445 \u0432\u0441\u0435 \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c.<\/p>\n<h4>\u0420\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u0435 Docker-\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430<\/h4>\n<p>Kubernetes (\u0438\u043b\u0438, \u0434\u043b\u044f \u043a\u0440\u0430\u0442\u043a\u043e\u0441\u0442\u0438, \u041a\u0443\u0431) \u2014 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442 \u0438\u043d\u0434\u0443\u0441\u0442\u0440\u0438\u0438 \u0434\u043b\u044f \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u043e\u0439 \u043e\u0440\u043a\u0435\u0441\u0442\u0440\u0430\u0446\u0438\u0438. \u041e\u043d \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d \u0432 Google, \u0432\u044b\u043b\u043e\u0436\u0435\u043d \u0432 \u043e\u043f\u0435\u043d\u0441\u043e\u0440\u0441, \u0438 \u0441\u0435\u0439\u0447\u0430\u0441 \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432\u0441\u0435\u043c \u043c\u0438\u0440\u043e\u043c. \u041e\u043d \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u0432 \u0440\u0430\u0437\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u0438, \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u043c\u0438.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0432\u0430\u0441 \u044d\u0442\u043e \u0437\u0430\u0447\u0435\u043c-\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442, \u0442\u043e <a href=\"https:\/\/docs.docker.com\/desktop\/kubernetes\/\" rel=\"noopener noreferrer nofollow\">Kubernetes \u043e\u0442\u043b\u0438\u0447\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430 Docker Desktop<\/a>, \u0443 \u043d\u0435\u0433\u043e \u0432 \u043f\u043e\u0441\u0442\u0430\u0432\u043a\u0435 \u0435\u0441\u0442\u044c \u0441\u0435\u0440\u0432\u0435\u0440 \u0438 \u043a\u043b\u0438\u0435\u043d\u0442. \u041d\u0435 \u0442\u043e \u0447\u0442\u043e\u0431\u044b \u044d\u0442\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0434\u0435\u043b\u0430\u0442\u044c.<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/0i\/yc\/m_\/0iycm_fqzjgrdvmxpkpdn5ysdwo.png\" width=\"auto\" height=\"auto\" data-src=\"https:\/\/habrastorage.org\/webt\/0i\/yc\/m_\/0iycm_fqzjgrdvmxpkpdn5ysdwo.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, Kubernetes \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043a\u0443\u0447\u0443 \u0441\u0438\u0441\u0430\u0434\u043c\u0438\u043d\u0441\u043a\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b. \u0415\u0441\u043b\u0438 \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438 \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0430\u0434\u043c\u0438\u043d\u0441\u043a\u0443\u044e \u0440\u0430\u0431\u043e\u0442\u0443 \u0430\u0434\u043c\u0438\u043d\u0430\u043c, \u043b\u0443\u0447\u0448\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0431\u043b\u0430\u0447\u043d\u044b\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f, \u0442. \u0435. Managed Kubernetes. \u0414\u043b\u044f cloud-native \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438, \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f <a href=\"https:\/\/aws.amazon.com\/eks\" rel=\"noopener noreferrer nofollow\">Amazon Elastic Kubernetes Service<\/a> (EKS). \u041e\u043d \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0438 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043a\u0430\u043a \u0432 \u043e\u0431\u043b\u0430\u043a\u0435 AWS Cloud, \u0442\u0430\u043a \u0438 on-perm \u043d\u0430 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u043c \u0436\u0435\u043b\u0435\u0437\u0435.<\/p>\n<p>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0435 \u0443\u0442\u0438\u043b\u0438\u0442\u044b \u0434\u043b\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438:  <a href=\"https:\/\/docs.aws.amazon.com\/eks\/latest\/userguide\/eksctl.html\" rel=\"noopener noreferrer nofollow\">eksctl<\/a> \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u043e\u043c EKS, \u0438 <a href=\"https:\/\/kubernetes.io\/docs\/tasks\/tools\/install-kubectl\/\" rel=\"noopener noreferrer nofollow\">kubectl<\/a> \u0434\u043b\u044f Kubernetes.<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043a\u043b\u0430\u0441\u0442\u0435\u0440 EKS, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0443 <code>eksctl<\/code>:<\/p>\n<pre><code>eksctl create cluster \\ --name microservices \\ --region eu-central-1 \\ --node-type t2.small \\ --nodes 2 <\/code><\/pre>\n<p>\u042d\u0442\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u0434\u0432\u0430 \u0432\u043e\u0440\u043a\u0435\u0440\u0430 \u0442\u0438\u043f\u0430 &#171;t2.small&#187; \u0432 \u0440\u0435\u0433\u0438\u043e\u043d\u0435 &#171;eu-central-1&#187;, \u0441 \u0438\u043c\u0435\u043d\u0435\u043c &#171;microservice&#187;.<\/p>\n<p>\u0413\u0434\u0435-\u0442\u043e \u0442\u0430\u043c \u0433\u043b\u0443\u0431\u043e\u043a\u043e \u0432 \u043a\u0438\u0448\u043a\u0430\u0445, \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430, eksctl \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 CloudFormation. \u042d\u0442\u043e \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u043c\u0438\u043d\u0443\u0442 10-15, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u044b \u0441\u043d\u043e\u0432\u0430 \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u0441\u043a\u0438\u043f\u044f\u0442\u0438\u0442\u044c \u0447\u0430\u044e \u0438 \u043f\u043e\u0435\u0441\u0442\u044c. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043e\u0431\u043b\u0430\u043a\u0430, \u0432\u044b \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0443\u043c\u0440\u0451\u0442\u0435 \u0441 \u0433\u043e\u043b\u043e\u0434\u0443 \u043d\u0430 \u0440\u0430\u0431\u043e\u0447\u0435\u043c \u043c\u0435\u0441\u0442\u0435. \u0412 \u043b\u044e\u0431\u043e\u043c, \u0441\u043b\u0443\u0447\u0430\u0435, \u0432\u043e\u0442 \u0442\u0430\u043a\u043e\u0439 \u0432 \u043a\u043e\u043d\u0446\u0435 \u043a\u043e\u043d\u0446\u043e\u0432 \u0432\u0430\u0441 \u0436\u0434\u0435\u0442 \u0432\u044b\u0445\u043b\u043e\u043f:<\/p>\n<pre><code>[\u2714]  saved kubeconfig as \"\/home\/&lt;user>\/.kube\/config\" [\u2139]  no tasks [\u2714]  all EKS cluster resources for \"microservices\" have been created [\u2139]  adding identity \"arn:aws:iam::877546708265:role\/eksctl-microservices-nodegroup-ng-NodeInstanceRole-9PQCLZR7NSYS\" to auth ConfigMap [\u2139]  nodegroup \"ng-3e8fb16c\" has 0 node(s) [\u2139]  waiting for at least 2 node(s) to become ready in \"ng-3e8fb16c\" [\u2139]  nodegroup \"ng-3e8fb16c\" has 2 node(s) [\u2139]  node \"ip-192-168-77-195.eu-central-1.compute.internal\" is ready [\u2139]  node \"ip-192-168-9-13.eu-central-1.compute.internal\" is ready [\u2139]  kubectl command should work with \"\/home\/&lt;user>\/.kube\/config\", try 'kubectl get nodes' [\u2714]  EKS cluster \"microservices\" in \"eu-central-1\" region is ready <\/code><\/pre>\n<p>\u041f\u043e \u0432\u044b\u0445\u043b\u043e\u043f\u0443 \u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u0443 \u043d\u0430\u0441 \u0441\u043e\u0437\u0434\u0430\u043b\u043e\u0441\u044c \u0434\u0432\u0435 \u043d\u043e\u0434\u044b \u0438 \u043e\u0434\u043d\u0430 \u0433\u0440\u0443\u043f\u043f\u0430. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043a\u043e\u043d\u0444\u0438\u0433 \u0442\u0435\u043f\u0435\u0440\u044c \u043b\u0435\u0436\u0438\u0442 \u0432  <code>.\/.kube\/config<\/code>. \u0415\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c minikube \u0438\u043b\u0438 microk8s, \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u0442 <code>.\/.kube\/config<\/code> \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 <code>--kubeconfig<\/code>:<\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u043f\u0440\u043e\u0448\u043b\u0430 \u0446\u0435\u043b\u0430\u044f \u0432\u0435\u0447\u043d\u043e\u0441\u0442\u044c \u0438 \u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u0441\u043e\u0437\u0434\u0430\u043b\u0441\u044f, \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0435\u0433\u043e \u0441\u0442\u0430\u0442\u0443\u0441 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439:<\/p>\n<pre><code>kubectl get nodes --kubeconfig ~\/.kube\/config <\/code><\/pre>\n<p>\u041e\u0436\u0438\u0434\u0430\u0435\u043c\u044b\u0439 \u0432\u044b\u0445\u043b\u043e\u043f:<\/p>\n<pre><code>NAME                                          STATUSROLESAGEVERSION ip-192-168-77-195.eu-central-1.compute.internalReady&lt;none>10mv1.18.9-eks-d1db3c ip-192-168-9-13.eu-central-1.compute.internal Ready&lt;none>10mv1.18.9-eks-d1db3c <\/code><\/pre>\n<p>\u0414\u0432\u0438\u0433\u0430\u0435\u043c\u0441\u044f \u0434\u0430\u043b\u044c\u0448\u0435. \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043a\u043e\u043d\u0444\u0438\u0433 \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f:<\/p>\n<pre><code class=\"yaml\">apiVersion: apps\/v1 kind: Deployment metadata:  name: microservice-deployment  labels:   app: microservice-customer spec:  replicas: 1  selector:   matchLabels:    app: microservice-customer  template:   metadata:    labels:     app: microservice-customer   spec:    containers:     - name: microservice-customer-container      image: 877546708265.dkr.ecr.eu-central-1.amazonaws.com\/microservice-customer:1.0.0      ports:       - containerPort: 8080 <\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c, \u0441\u043a\u043e\u0440\u043c\u0438\u043c \u0435\u0433\u043e kubectl, \u0447\u0442\u043e\u0431\u044b \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432 Kubernetes:<\/p>\n<pre><code>kubectl apply -f eks-deployment.yaml --kubeconfig ~\/.kube\/config <\/code><\/pre>\n<p>\u041e\u0436\u0438\u0434\u0430\u0435\u043c\u044b\u0439 \u0432\u044b\u0445\u043b\u043e\u043f:<\/p>\n<pre><code>deployment.apps\/microservice-deployment created <\/code><\/pre>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u043c, \u0447\u0442\u043e \u0432\u0441\u0451 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b\u043e\u0441\u044c:<\/p>\n<pre><code>kubectl get pods --kubeconfig ~\/.kube\/config <\/code><\/pre>\n<p>\u041e\u0436\u0438\u0434\u0430\u0435\u043c\u044b\u0439 \u0432\u044b\u0445\u043b\u043e\u043f:<\/p>\n<pre><code>NAME                                      READY  STATUS          RESTARTS      AGE microservice-deployment-597bd7749b-wcfsz   1\/1  Running  0      13m <\/code><\/pre>\n<p>\u0414\u043b\u044f \u043f\u0443\u0449\u0435\u0439 \u0443\u0432\u0435\u0440\u0435\u043d\u043d\u043e\u0441\u0442\u0438, \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043b\u043e\u0433 \u043f\u043e\u0434\u0430:<\/p>\n<pre><code>kubectl logs microservice-deployment-597bd7749b-wcfsz --kubeconfig ~\/.kube\/config <\/code><\/pre>\n<p>\u041e\u0436\u0438\u0434\u0430\u0435\u043c\u044b\u0439 \u0432\u044b\u0445\u043b\u043e\u043f:<\/p>\n<pre><code>2021-03-04 00:09:50.848  INFO 1 --- [ngodb.net:27017] org.mongodb.driver.cluster           : Discovered replica set primary clustermicroservice-shard-00-01.fzatn.mongodb.net:27017 2021-03-04 00:09:52.778  INFO 1 --- [       main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor' 2021-03-04 00:09:53.088  INFO 1 --- [       main] o.s.b.a.w.s.WelcomePageHandlerMapping: Adding welcome page: class path resource [static\/index.html] 2021-03-04 00:09:53.547  INFO 1 --- [       main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path '\/customer' 2021-03-04 00:09:54.602  INFO 1 --- [       main] o.m.m.customer.CustomerApplication <\/code><\/pre>\n<p>\u041f\u043e \u043b\u043e\u0433\u0443 \u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b\u0441\u044f \u043d\u0430 \u043f\u043e\u0440\u0442\u0443 8080, \u043d\u043e \u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043b\u0441\u044f \u043a MongoDB Atlas.<\/p>\n<p>\u041d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u043b\u0441\u044f \u0432 EKS, \u0441\u043d\u0430\u0440\u0443\u0436\u0438 \u0434\u043e \u043d\u0435\u0433\u043e \u0434\u043e\u0441\u0442\u0443\u0447\u0430\u0442\u044c\u0441\u044f \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e. \u041d\u0443\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c Kubernetes Service Controller, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b\u0441\u0442\u0430\u0432\u0438\u0442 \u043d\u0430\u0440\u0443\u0436\u0443 IP-\u0430\u0434\u0440\u0435\u0441, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043a \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044b\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u043c \u043c\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c\u0441\u044f \u0438\u0437 \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u043c\u0438\u0440\u0430. \u0412\u043e\u0442 \u043a\u0430\u043a \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0441\u0435\u0440\u0432\u0438\u0441:<\/p>\n<pre><code>apiVersion: v1 kind: Service metadata:  name: microservice-customer-service spec:  #Creating a service of type load balancer. Load balancer gets created but takes time to reflect  type: LoadBalancer  selector:   app: microservice-customer  ports:   - protocol: TCP    port: 80    targetPort: 8080 <\/code><\/pre>\n<p>\u0417\u0430\u043c\u0435\u0442\u044c\u0442\u0435, \u0447\u0442\u043e <code>targetPort<\/code> \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0442\u044c \u0441\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c <code>containerPort<\/code>, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043e \u0432 \u0444\u0430\u0439\u043b\u0435 \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f (\u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0440\u0438\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0435 8080).<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0441\u0435\u0440\u0432\u0438\u0441 \u0432 AWS:<\/p>\n<pre><code>kubectl apply -f eks-service.yaml --kubeconfig ~\/.kube\/config <\/code><\/pre>\n<p>\u041e\u0436\u0438\u0434\u0430\u0435\u043c\u044b\u0439 \u0432\u044b\u0445\u043b\u043e\u043f:<\/p>\n<pre><code>service\/microservice-customer-service created <\/code><\/pre>\n<p>\u0421\u0435\u0440\u0432\u0438\u0441 \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u043d \u043a Elastic Load Balancer (ELB) \u0432 AWS. \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u0447\u0442\u043e \u043b\u0435\u0436\u0438\u0442 \u043d\u0430 \u0432\u043d\u0435\u0448\u043d\u0435\u043c IP-\u0430\u0434\u0440\u0435\u0441\u0435:<\/p>\n<pre><code>kubectl get svc  --kubeconfig ~\/.kube\/config <\/code><\/pre>\n<pre><code>NAME                            TYPE            CLUSTER-IPEXTERNAL-IP                                PORT(S)  AGE Kubernetes                      ClusterIP10.100.0.1&lt;none>                                        443\/TCP39m microservice-customer-serviceLoadBalancer10.100.94.75aa62f80b9596a4fa6835d80a506227d6-1183908486.eu-central-1.elb.amazonaws.com80:32248\/TCP21s <\/code><\/pre>\n<p>\u0421\u0443\u0434\u044f \u043f\u043e \u0432\u044b\u0445\u043b\u043e\u043f\u0443, \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u0449\u0438\u043a \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432\u043e\u0442 \u043d\u0430 \u044d\u0442\u043e\u043c \u0432\u043d\u0435\u0448\u043d\u0435\u043c \u0430\u0434\u0440\u0435\u0441\u0435: <code>aa62f80b9596a4fa6835d80a506227d6-1183908486.eu-central-1.elb.amazonaws.com<\/code><\/p>\n<p>\u041a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435, \u043c\u043e\u0436\u043d\u043e \u0441\u0445\u043e\u0434\u0438\u0442\u044c \u0438 \u0432 \u0432\u0435\u0431-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441:<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/yh\/xd\/px\/yhxdpx8v3-guadvzejze3nvkoty.png\" width=\"auto\" height=\"auto\" data-src=\"https:\/\/habrastorage.org\/webt\/yh\/xd\/px\/yhxdpx8v3-guadvzejze3nvkoty.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0417\u0430\u043c\u0435\u0442\u044c\u0442\u0435, \u0447\u0442\u043e DNS \u0438\u043c\u044f \u0432 ELB \u2014 \u0442\u043e\u0447\u043d\u043e \u0442\u0430\u043a\u043e\u0435 \u0436\u0435, \u043a\u0430\u043a \u0443 \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e IP-\u0430\u0434\u0440\u0435\u0441\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u0440\u0430\u043d\u0435\u0435.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u044d\u0442\u043e\u0442 \u0430\u0434\u0440\u0435\u0441 \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435, \u0442\u043e \u043c\u044b \u0443\u0432\u0438\u0434\u0438\u043c \u0432\u0435\u0431-\u0441\u0442\u0440\u0430\u043d\u0438\u0447\u043a\u0443 \u043d\u0430\u0448\u0435\u0433\u043e \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u0430:<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/t8\/tr\/4m\/t8tr4mmco9iphnizepgaq6hcipo.png\" width=\"auto\" height=\"auto\" data-src=\"https:\/\/habrastorage.org\/webt\/t8\/tr\/4m\/t8tr4mmco9iphnizepgaq6hcipo.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e, \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441 Order. \u041f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c \u0448\u0430\u0433\u0438, \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0435 \u0432\u044b\u0448\u0435: \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0434\u043e\u043a\u0435\u0440\u043d\u044b\u0439 \u043e\u0431\u0440\u0430\u0437, \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0432 ECR, \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0432 EKS.<\/p>\n<p>\u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u0432\u043d\u0430\u0447\u0430\u043b\u0435, \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u043f\u0438\u0441\u0430\u0442\u044c \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u0430 Customer \u0432 <code>application.yml<\/code> \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u0430 Order:<\/p>\n<pre><code>spring:  application:   name: microservice-order    microservice-customer:    url: http:\/\/aa62f80b9596a4fa6835d80a506227d6-1183908486.eu-central-1.elb.amazonaws.com\/customer\/api\/v1\/   data:   mongodb:    uri: mongodb+srv:\/\/mkmongouser:&lt;Password>@clustermicroservice.fzatn.mongodb.net    database: order  server:  port: 8080  servlet:   context-path: \/order <\/code><\/pre>\n<p>\u0412\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0448\u0430\u0433\u0438 \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u0442\u0435 \u0436\u0435 \u0441\u0430\u043c\u044b\u0435.<\/p>\n<h4>\u0418\u0437\u0431\u0430\u0432\u043b\u044f\u0435\u043c\u0441\u044f \u043e\u0442 \u043e\u0431\u043b\u0430\u0447\u043d\u044b\u0445 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432<\/h4>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Amazon ECS \u0434\u0430\u043b\u0435\u043a\u043e \u043d\u0435 \u0434\u0435\u0448\u0435\u0432\u043e. \u0422\u0430\u043c \u0438 \u0441\u0430\u043c\u0430 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 EKS (\u043c\u0430\u0441\u0442\u0435\u0440-\u0443\u0437\u0435\u043b), \u0438 \u0432\u043e\u0440\u043a\u0435\u0440\u044b, \u0438 \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0438, \u0438 \u0433\u0440\u0443\u043f\u043f\u0430 \u0443\u0437\u043b\u043e\u0432. \u0412 \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u0435\u043d\u0435 \u043e\u043d\u0438 \u043a\u0440\u0443\u0442\u0438\u043b\u0438\u0441\u044c \u0431\u044b \u043a\u0440\u0443\u0433\u043b\u043e\u0441\u0443\u0442\u043e\u0447\u043d\u043e, \u043d\u043e \u0435\u0441\u043b\u0438 \u0432\u044b \u0438\u0437\u0443\u0447\u0430\u0435\u0442\u0435 \u0432\u043e\u043f\u0440\u043e\u0441 \u043f\u043e \u0442\u0443\u0442\u043e\u0440\u0438\u0430\u043b\u0430\u043c, \u0441\u0442\u043e\u0438\u0442 \u0432\u043e\u0432\u0440\u0435\u043c\u044f \u0438\u0437\u0431\u0430\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u043e\u0442 \u043d\u0435\u043d\u0443\u0436\u043d\u043e\u0433\u043e \u0431\u0430\u043b\u043b\u0430\u0441\u0442\u0430.<\/p>\n<p>\u041a \u0441\u0447\u0430\u0441\u0442\u044c\u044e, \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u044d\u0442\u043e \u043f\u0440\u0435\u0434\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e:<\/p>\n<pre><code>eksctl delete cluster --name microservices <\/code><\/pre>\n<p><a href=\"https:\/\/www.youtube.com\/watch?v=Adgx9wt63NY\" rel=\"noopener noreferrer nofollow\">Burn, mazafaka, burn.<\/a><\/p>\n<h4>\u041f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u0435 \u0438\u0442\u043e\u0433\u0438 \u0442\u0440\u0435\u0442\u044c\u0435\u0439 \u0447\u0430\u0441\u0442\u0438<\/h4>\n<p>\u041c\u0438\u0441\u0441\u0438\u044f \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430: \u043c\u044b \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u043b\u0438 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b \u0432 Kubernetes \u0438 EKS.<\/p>\n<p>\u041d\u043e \u044d\u0442\u043e \u0435\u0449\u0451 \u043d\u0435 \u043f\u0440\u0435\u0434\u0435\u043b \u043c\u0435\u0447\u0442\u0430\u043d\u0438\u0439. \u0423 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u0443\u0440\u043e\u0434\u043b\u0438\u0432\u044b\u0435 DNS \u0438\u043c\u0435\u043d\u0430, \u0442\u0440\u0430\u0444\u0438\u043a \u0445\u043e\u0434\u0438\u0442 \u0431\u0435\u0437 HTTPS, \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0438\u043a\u0430\u043a\u043e\u0433\u043e \u043d\u0435\u0442. \u042d\u0442\u043e \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u0445\u043e\u0436\u0435 \u043d\u0430 \u043f\u0440\u043e\u0434.<\/p>\n<h3>\u0427\u0430\u0441\u0442\u044c 4. \u0411\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c, \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 \u0438 \u043a\u0440\u0430\u0441\u0438\u0432\u044b\u0435 \u0438\u043c\u0435\u043d\u0430<\/h3>\n<h4>\u0414\u043e\u043c\u0435\u043d\u043d\u044b\u0435 \u0438\u043c\u0435\u043d\u0430<\/h4>\n<p>Amazon Route 53 \u2014 \u044d\u0442\u043e \u0432\u044b\u0441\u043e\u043a\u043e\u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u044b\u0439, \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u043c\u044b\u0439 \u043e\u0431\u043b\u0430\u0447\u043d\u044b\u0439 DNS. \u0412 \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043a \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044f\u043c DNS-\u0440\u043e\u0443\u0442\u0438\u043d\u0433\u0430, \u043e\u043d \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u043e\u043c\u0435\u043d\u044b \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0436\u0438\u0432\u043e\u0441\u0442\u044c \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432.<\/p>\n<p>\u041a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435, \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u0434\u0440\u0443\u0433\u043e\u0439 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440 DNS. \u0412 \u044d\u0442\u043e\u043c \u0433\u0430\u0439\u0434\u0435 \u043c\u044b \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u0438\u043c\u0435\u043d\u043d\u043e Amazon Route 53, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0438 \u0443\u0434\u043e\u0431\u043d\u043e.<\/p>\n<p>\u0412\u043d\u0430\u0447\u0430\u043b\u0435, \u043e\u0442\u043a\u0440\u043e\u0439\u0442\u0435 \u0432\u043a\u043b\u0430\u0434\u043a\u0443 &#171;Route 53&#8243; \u0438 \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u201cRegister domain&#187;:<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/ol\/d9\/gm\/old9gmqzcjere0naml-7mpnsmam.png\" width=\"auto\" height=\"auto\" data-src=\"https:\/\/habrastorage.org\/webt\/ol\/d9\/gm\/old9gmqzcjere0naml-7mpnsmam.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0438\u043c\u044f \u201cmicroservicesdemo\u201d. \u0421\u0440\u0430\u0437\u0443 \u043f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u044e\u0442\u0441\u044f \u0434\u0440\u0443\u0433\u0438\u0435 \u0434\u043e\u043c\u0435\u043d\u044b \u0441 \u0438\u043c\u0435\u043d\u0435\u043c \u201cmicroservicesdemo\u201d. \u041d\u0430 \u043c\u043e\u043c\u0435\u043d\u0442 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438, <a href=\"http:\/\/microservicesdemo.net\" rel=\"noopener noreferrer nofollow\">microservicesdemo.net<\/a> \u0431\u044b\u043b\u043e \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e \u0438 \u0441\u0442\u043e\u0438\u043b\u043e \u043e\u043a\u043e\u043b\u043e 11 \u0430\u043c\u0435\u0440\u0438\u043a\u0430\u043d\u0441\u043a\u0438\u0445 USD \u0432 \u0433\u043e\u0434.<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/lp\/-t\/lp\/lp-tlpujkqzfk1sigafzkucezgw.png\" width=\"auto\" height=\"auto\" data-src=\"https:\/\/habrastorage.org\/webt\/lp\/-t\/lp\/lp-tlpujkqzfk1sigafzkucezgw.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0414\u0430\u043b\u044c\u0448\u0435 \u0432\u0430\u043c \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e\u0442 \u0432\u043f\u0438\u0441\u0430\u0442\u044c \u0440\u0430\u0437\u043d\u044b\u0435 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0441\u0432\u0435\u0434\u0435\u043d\u0438\u044f, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0434\u043b\u044f \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438. \u0421\u0440\u0430\u0437\u0443 \u043f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e, \u0434\u043e\u043c\u0435\u043d \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044e.<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/4n\/th\/8i\/4nth8ic59fxn9gidtbjjgdsgb8o.png\" width=\"auto\" height=\"auto\" data-src=\"https:\/\/habrastorage.org\/webt\/4n\/th\/8i\/4nth8ic59fxn9gidtbjjgdsgb8o.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0438\u043c\u0435\u043d\u0438, Route 53 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442 DNS \u0434\u043b\u044f \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0434\u043e\u043c\u0435\u043d\u0430. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f &#171;Hosted zone&#187;, \u0441 \u0442\u0430\u043a\u0438\u043c \u0436\u0435 \u0438\u043c\u0435\u043d\u0435\u043c, \u043a\u0430\u043a \u0438 \u0443 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0434\u043e\u043c\u0435\u043d\u0430.<\/p>\n<p>\u041d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0434\u0432\u0430 \u0441\u0443\u0431\u0434\u043e\u043c\u0435\u043d\u0430 \u0434\u043b\u044f \u0434\u0432\u0443\u0445 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432, \u0442\u0440\u0430\u0444\u0438\u043a \u0441 \u043d\u0438\u0445 \u043d\u0443\u0436\u043d\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043d\u0430 \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u0449\u0438\u043a. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0440\u0435\u043a\u043e\u0440\u0434\u044b \u0432\u043d\u0443\u0442\u0440\u0438 &#171;Hosted zone&#187;:<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/qe\/gj\/h0\/qegjh0yomlkr7vjahe6wx9a-hnk.png\" width=\"auto\" height=\"auto\" data-src=\"https:\/\/habrastorage.org\/webt\/qe\/gj\/h0\/qegjh0yomlkr7vjahe6wx9a-hnk.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0412 \u043f\u043e\u043b\u0435 \u201dRouting policy\u201d \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u201cSimple routing\u201d.<\/p>\n<p>\u0412 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 \u201cConfigure record\u201d, \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u201cSimple record\u201d \u0434\u043b\u044f \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u0430 Customer, \u0441\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0442\u044c \u0435\u0433\u043e \u0434\u043e\u043c\u0435\u043d\u043d\u043e\u0435 \u0438\u043c\u044f, \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0442\u0440\u0430\u0444\u0438\u043a \u043d\u0430 \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u0449\u0438\u043a:<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/fu\/qu\/sg\/fuqusg1uylzbic_yet9nv7e2jxe.png\" width=\"auto\" height=\"auto\" data-src=\"https:\/\/habrastorage.org\/webt\/fu\/qu\/sg\/fuqusg1uylzbic_yet9nv7e2jxe.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0412 \u043d\u0430\u0433\u0440\u0430\u0434\u0443 \u0437\u0430 \u0441\u0442\u0430\u0440\u0430\u043d\u0438\u044f, \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441 Customer \u0442\u0435\u043f\u0435\u0440\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u043f\u043e \u043d\u043e\u0432\u043e\u043c\u0443 \u0438\u043c\u0435\u043d\u0438:<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/ds\/uy\/os\/dsuyosy3e32lpangj7lbe1tnjxw.png\" width=\"auto\" height=\"auto\" data-src=\"https:\/\/habrastorage.org\/webt\/ds\/uy\/os\/dsuyosy3e32lpangj7lbe1tnjxw.png\"\/><figcaption><\/figcaption><\/figure>\n<p>Route 53 DNS Service \u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0442\u0440\u0430\u0444\u0438\u043a \u0441 \u0441\u0443\u0431\u0434\u043e\u043c\u0435\u043d\u043e\u0432 \u043d\u0430 \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u0449\u0438\u043a.<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c, \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c \u0432\u0441\u0435 \u0442\u0435 \u0436\u0435 \u0441\u0430\u043c\u044b\u0435 \u0448\u0430\u0433\u0438 \u0438 \u0441\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441 Order.<\/p>\n<h4>\u0411\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c (HTTPS)<\/h4>\n<p>\u0414\u043b\u044f \u043b\u044e\u0431\u043e\u0433\u043e \u0431\u043e\u043b\u0435\u0435-\u043c\u0435\u043d\u0435\u0435 \u044d\u043d\u0442\u0435\u0440\u043f\u0440\u0430\u0439\u0437\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0442\u0440\u0430\u0444\u0438\u043a \u0445\u043e\u0434\u0438\u0442 \u0447\u0435\u0440\u0435\u0437 TLS 1.2+. \u0412\u0435\u0441\u044c \u0442\u0440\u0430\u0444\u0438\u043a \u043c\u0435\u0436\u0434\u0443 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043e\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0438 \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u043e\u043c &#8212; \u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u0443\u0435\u0442\u0441\u044f TLS (\u0442\u043e\u0447\u043d\u0435\u0435, \u0448\u0438\u0444\u0440\u0443\u0435\u0442\u0441\u044f \u0438 \u0434\u0435\u0448\u0438\u0444\u0440\u0443\u0435\u0442\u0441\u044f \u043f\u043e HTTPS). \u0417\u0430\u043c\u0435\u0442\u044c\u0442\u0435, \u0447\u0442\u043e \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u043e\u043c \u0438 \u043f\u043e\u0434\u0430\u043c\u0438 \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e:<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/0r\/ji\/jz\/0rjijzm2010ukdicpg2nskjo8-s.png\" width=\"auto\" height=\"auto\" data-src=\"https:\/\/habrastorage.org\/webt\/0r\/ji\/jz\/0rjijzm2010ukdicpg2nskjo8-s.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0427\u0442\u043e\u0431\u044b \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u0430\u043c\u0438 SSL\/TLS \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c Amazon Certificate Manager, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u0438 \u0437\u0430\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043d\u0430 \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0435.<\/p>\n<p>\u041e\u0442\u043a\u0440\u043e\u0439\u0442\u0435 Amazon Certificate Manager \u0438 \u043d\u0430\u0439\u0434\u0438\u0442\u0435 \u0440\u0430\u0437\u0434\u0435\u043b \u0441 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u043c\u0438 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u0430\u043c\u0438:<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/om\/rs\/-p\/omrs-pnnkfah_fpywna37ttpnbi.png\" width=\"auto\" height=\"auto\" data-src=\"https:\/\/habrastorage.org\/webt\/om\/rs\/-p\/omrs-pnnkfah_fpywna37ttpnbi.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0414\u0430\u043b\u044c\u0448\u0435 \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0438\u0442\u044c \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442:<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/qp\/da\/lc\/qpdalcju0bxsqnx9fbvfytefbu0.png\" width=\"auto\" height=\"auto\" data-src=\"https:\/\/habrastorage.org\/webt\/qp\/da\/lc\/qpdalcju0bxsqnx9fbvfytefbu0.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u0434\u043e\u043c\u0435\u043d:<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/bw\/k4\/bj\/bwk4bjdyo598zzmv7m5ms26lca8.png\" width=\"auto\" height=\"auto\" data-src=\"https:\/\/habrastorage.org\/webt\/bw\/k4\/bj\/bwk4bjdyo598zzmv7m5ms26lca8.png\"\/><figcaption><\/figcaption><\/figure>\n<p>AWS \u0445\u043e\u0447\u0435\u0442 \u0443\u0434\u043e\u0441\u0442\u043e\u0432\u0435\u0440\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0434\u043e\u043c\u0435\u043d \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0438\u0442 \u0438\u043c\u0435\u043d\u043d\u043e \u043d\u0430\u043c. \u0421\u0430\u043c\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0435 \u2014 \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u201cDNS validation\u201d, \u0440\u0430\u0437 \u0443\u0436 \u043c\u044b \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u043a\u043e\u043f\u0430\u0435\u043c\u0441\u044f \u0432 \u0430\u0434\u043c\u0438\u043d\u043a\u0435 DNS.<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/dz\/lu\/ma\/dzlumawaa9crhmotzmybtwiq1xs.png\" width=\"auto\" height=\"auto\" data-src=\"https:\/\/habrastorage.org\/webt\/dz\/lu\/ma\/dzlumawaa9crhmotzmybtwiq1xs.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u0432\u0438\u0434\u0438\u043c DNS-\u0437\u0430\u043f\u0438\u0441\u044c CNAME, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u0434\u043e\u043c\u0435\u043d\u0430.<\/p>\n<p>\u041c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438, \u043f\u0440\u043e\u0436\u0430\u0432 \u043a\u043d\u043e\u043f\u043a\u0443 \u201cCreate record in Route 53\u201d. (\u0426\u0435\u043d\u0438\u0442\u0435\u043b\u0438 \u043c\u043e\u0433\u0443\u0442 \u043c\u0443\u0447\u0438\u0442\u044c\u0441\u044f \u0441 \u043a\u043e\u043d\u0444\u0438\u0433\u043e\u043c DNS \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e).<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/dv\/eg\/vu\/dvegvuboi5aumofh18aqd8-os3q.png\" width=\"auto\" height=\"auto\" data-src=\"https:\/\/habrastorage.org\/webt\/dv\/eg\/vu\/dvegvuboi5aumofh18aqd8-os3q.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442 \u043f\u043e\u044f\u0432\u0438\u0442\u0441\u044f, \u043c\u044b \u0443\u0432\u0438\u0434\u0438\u043c \u0432\u043e\u0442 \u0442\u0430\u043a\u043e\u0439 \u044d\u043a\u0440\u0430\u043d:<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/3t\/yu\/1o\/3tyu1o4grc0cwuxgv81uqc0dqyk.png\" width=\"auto\" height=\"auto\" data-src=\"https:\/\/habrastorage.org\/webt\/3t\/yu\/1o\/3tyu1o4grc0cwuxgv81uqc0dqyk.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0427\u0442\u043e \u043c\u044b \u0437\u0434\u0435\u0441\u044c \u0432\u0438\u0434\u0438\u043c? \u0421\u0442\u0430\u0442\u0443\u0441 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u0430 \u2014 &#171;issued&#187;, \u0442\u043e \u0435\u0441\u0442\u044c \u043e\u043d \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u0432\u044b\u0434\u0430\u043d AWS. \u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 &#171;no&#187; \u0432 \u043f\u043e\u043b\u0435 &#171;in use&#187;, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043c\u044b \u0435\u0449\u0435 \u043d\u0435 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u0430.<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c, \u043d\u0443\u0436\u043d\u043e \u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c SSL\/TLS \u043d\u0430 \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0435. \u0415\u0449\u0435 \u0440\u0430\u0437 \u043d\u0430\u043f\u043e\u043c\u043d\u044e, \u0447\u0442\u043e \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 \u0431\u0430\u043b\u0430\u043d\u0441\u0435\u0440\u043e\u043c \u0438 \u043f\u043e\u0434\u0430\u043c\u0438 \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043e \u043d\u0435 \u0431\u0443\u0434\u0435\u0442.<\/p>\n<p>\u0412\u043d\u0430\u0447\u0430\u043b\u0435 \u043d\u0443\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c Load Balancer Service \u201ceks-service-tls.yaml\u201d \u0432 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u201csrc\/main\/k8s\u201d:<\/p>\n<pre><code class=\"yaml\">apiVersion: v1 kind: Service metadata:  name: microservice-customer-service  annotations:    service.beta.kubernetes.io\/aws-load-balancer-ssl-cert: arn:aws:acm:eu-central-1:877546708265:certificate\/113c4264-84bd-46e0-906f-a7b1bf1e0626    service.beta.kubernetes.io\/aws-load-balancer-backend-protocol: http spec:  #Creating a service of type load balancer. Load balancer gets created but takes time to reflect  type: LoadBalancer  selector:    app: microservice-customer  ports:    - protocol: TCP      port: 443      targetPort: 8080 <\/code><\/pre>\n<p>\u041f\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044e \u0441 \u043a\u043e\u043d\u0444\u0438\u0433\u043e\u043c \u0438\u0437 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0447\u0430\u0441\u0442\u0438, \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f.<\/p>\n<p>\u0410\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044f\u043c\u0438 \u043c\u044b \u0441\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u044b, \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0442\u043e \u0432\u044b\u0434\u0430\u043d\u043d\u044b\u0435 \u0432 ACM:<\/p>\n<pre><code class=\"yaml\">annotations:    service.beta.kubernetes.io\/aws-load-balancer-ssl-cert: arn:aws:acm:eu-central-1:877546708265:certificate\/113c4264-84bd-46e0-906f-a7b1bf1e0626    service.beta.kubernetes.io\/aws-load-balancer-backend-protocol: http <\/code><\/pre>\n<p>\u0415\u0449\u0451, \u043c\u044b \u044f\u0432\u043d\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043b\u0438, \u0447\u0442\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u043e\u043c \u043d\u0430 \u0431\u044d\u043a\u0435\u043d\u0434\u0435 \u0431\u0443\u0434\u0435\u0442 http. \u0427\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u201cX-Forwarded-Proto\u201d \u043c\u044b \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0438 \u201c<a href=\"http:\/\/service.beta.kubernetes.io\/aws-load-balancer-backend-protocol%E2%80%9D\" rel=\"noopener noreferrer nofollow\">service.beta.kubernetes.io\/aws-load-balancer-backend-protocol\u201d<\/a> \u0432 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435  &#171;http&#187;.<\/p>\n<p>\u041d\u0443 \u0438 \u043f\u043e\u0440\u0442 \u043f\u043e\u043c\u0435\u043d\u044f\u043b\u0438 \u043d\u0430 \u201c443\u201d, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e https.<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0439\u0442\u0438 \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0447\u043a\u0443 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u0430 Customer \u043f\u0440\u044f\u043c\u043e \u0438\u0437 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430: <a href=\"https:\/\/customer.microservicesdemo.net\/customer\" rel=\"noopener noreferrer nofollow\">https:\/\/customer.microservicesdemo.net\/customer<\/a><\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/ay\/gg\/n1\/ayggn1invdskhe1noeqtfdruf4m.png\" width=\"auto\" height=\"auto\" data-src=\"https:\/\/habrastorage.org\/webt\/ay\/gg\/n1\/ayggn1invdskhe1noeqtfdruf4m.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041d\u0430 \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442\u0435 \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0437\u043d\u0430\u0447\u043e\u043a &#171;\u0437\u0430\u043c\u043a\u0430&#187; \u0440\u044f\u0434\u043e\u043c \u0441 URL, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0437\u0430\u0449\u0438\u0449\u0435\u043d\u043d\u043e\u0435 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435. \u0415\u0441\u043b\u0438 \u0449\u0435\u043b\u043a\u043d\u0443\u0442\u044c \u043f\u043e &#171;\u0437\u0430\u043c\u043a\u0443&#187;, \u0442\u043e \u043c\u044b \u0443\u0432\u0438\u0434\u0438\u043c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0442\u043e \u0432\u044b\u0434\u0430\u043d\u043d\u043e\u043c \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u0435 SSL\/TLS (\u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0442\u043e, \u0447\u0442\u043e \u043e\u043d \u0432\u044b\u0434\u0430\u043d Amazon, \u0434\u0430\u0442\u0430 \u0432\u044b\u0434\u0430\u0447\u0438 &#8212; \u0441\u0435\u0439\u0447\u0430\u0441, \u0438 \u0442\u043e\u043c\u0443 \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0435).<\/p>\n<p>\u0412\u0441\u0435 \u0442\u0435 \u0436\u0435 \u0441\u0430\u043c\u044b\u0435 \u0448\u0430\u0433\u0438 \u043d\u0443\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0434\u043b\u044f \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u0430 Order.<\/p>\n<h4>\u041b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0447\u0435\u0440\u0435\u0437 Fluent Bit<\/h4>\n<p>\u041b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u2014 \u043d\u0435\u043e\u0442\u044a\u0435\u043c\u043b\u0435\u043c\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438 \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u0438. \u0414\u043b\u044f \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u0435\u043d\u0430 \u0436\u0435 \u043e\u043d\u043e \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e. \u0412 \u0445\u043e\u0434\u0435 \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u044b \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u0438 \u043e \u0432\u0441\u0435\u0445 \u0432\u0430\u0436\u043d\u044b\u0445 \u0441\u043e\u0431\u044b\u0442\u0438\u044f\u0445. \u041f\u0440\u0438\u043c\u0435\u0440\u044b, \u0437\u0430\u0447\u0435\u043c \u044d\u0442\u043e \u043d\u0443\u0436\u043d\u043e:<\/p>\n<ul>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0441\u043b\u043e\u043c\u0430\u043b\u043e\u0441\u044c, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u0440\u043e\u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043b\u043e\u0433\u0438 \u0438 \u043d\u0430\u0439\u0442\u0438 \u043a\u043e\u0440\u0435\u043d\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b;<\/p>\n<\/li>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u0437\u0430\u043a\u0440\u0430\u043b\u0441\u044f \u0431\u0430\u0433, \u043f\u043e \u043b\u043e\u0433\u0430\u043c \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443;<\/p>\n<\/li>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u043e\u043d\u044f\u0442\u044c, \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435.<\/p>\n<\/li>\n<\/ul>\n<p>\u0412 \u043d\u0430\u0448\u0435\u043c \u0434\u0435\u043c\u043e-\u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u043c\u044b \u0442\u043e\u0436\u0435 \u043f\u0438\u0448\u0435\u043c \u043b\u043e\u0433\u0438. \u041d\u043e \u043a\u0430\u043a \u0438\u0445 \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0438 \u043f\u0440\u043e\u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c?<\/p>\n<p>\u0415\u0441\u0442\u044c \u043c\u043d\u043e\u0433\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043b\u043e\u0433\u0438 \u043d\u0430\u0440\u0443\u0436\u0443. \u0418\u0445 \u043c\u043e\u0436\u0435\u043d\u043e \u043f\u0438\u0441\u0430\u0442\u044c \u0432 \u0444\u0430\u0439\u043b\u044b, \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0445 API, \u0432\u044b\u043b\u0438\u0432\u0430\u0442\u044c \u0432 STDOUT \u043d\u0430 \u043a\u043e\u043d\u0441\u043e\u043b\u044c, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u043a\u043e\u043b\u043b\u0435\u043a\u0442\u043e\u0440\u044b&#8230;<\/p>\n<p>\u0421\u043e\u0433\u043b\u0430\u0441\u043d\u043e <a href=\"https:\/\/12factor.net\/logs\" rel=\"noopener noreferrer nofollow\">\u0438\u0434\u0435\u044f\u043c twelve factor apps<\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0437\u043e\u043b\u043e\u0442\u044b\u043c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043e\u043c \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438, \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 <strong>\u043d\u0435<\/strong> \u0434\u043e\u043b\u0436\u043d\u043e \u0441\u0430\u043c\u043e \u043f\u0438\u0441\u0430\u0442\u044c \u0432 \u0444\u0430\u0439\u043b\u044b \u0438\u043b\u0438 \u043a\u043e\u043b\u043b\u0435\u043a\u0442\u043e\u0440\u044b. \u0412\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e, \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442 \u043b\u043e\u0433\u0438 \u0432 \u043d\u0435\u0431\u0443\u0444\u0435\u0440\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0439 STDOUT, \u043a\u0430\u043a \u0432 \u043f\u043e\u0442\u043e\u043a \u0438\u0432\u0435\u043d\u0442\u043e\u0432. \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043d\u0430 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u0435, \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u044b \u0438\u043c\u0435\u044e\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0432\u0438\u0434\u0435\u0442\u044c \u044d\u0442\u043e\u0442 \u043f\u043e\u0442\u043e\u043a \u0438\u0432\u0435\u043d\u0442\u043e\u0432 \u043f\u0440\u044f\u043c\u043e \u0432 \u0441\u0432\u043e\u0435\u0439 \u043a\u043e\u043d\u0441\u043e\u043b\u0438.<\/p>\n<p>\u041d\u0430 \u0441\u0442\u0435\u0439\u0434\u0436\u0438\u043d\u0433\u0435 \u0438\u043b\u0438 \u043f\u0440\u043e\u0434\u0435, \u043b\u043e\u0433\u0438 \u0441\u043e\u0431\u0438\u0440\u0430\u044e\u0442\u0441\u044f \u0441\u0440\u0435\u0434\u043e\u0439 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f. \u0420\u043e\u0443\u0442\u0435\u0440\u044b \u0438 \u043a\u043e\u043b\u043b\u0435\u043a\u0442\u043e\u0440\u044b \u043b\u043e\u0433\u043e\u0432 \u0441\u043e\u0431\u0438\u0440\u0430\u044e\u0442 \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0442 \u0438\u0445 \u0432 \u043a\u0430\u043a\u043e\u0435-\u0442\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0435 \u043c\u0435\u0441\u0442\u043e \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0433\u043e \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u043b\u0438 \u0444\u0430\u0439\u043b), \u0433\u0434\u0435 \u0438\u0445 \u043c\u043e\u0436\u043d\u043e \u0441\u043a\u043b\u0430\u0434\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438 \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c.<\/p>\n<p>\u0412 \u043d\u0430\u0448\u0435\u043c \u0434\u0435\u043c\u043e-\u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0438\u0437 \u0434\u0432\u0443\u0445 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432, \u043c\u044b \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u0435\u043c \u043f\u0443\u0442\u044f\u043c\u0438 \u201c12 factor apps logging\u201d: \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c \u043b\u043e\u0433 \u043a\u0430\u043a \u043f\u043e\u0442\u043e\u043a \u0441\u043e\u0431\u044b\u0442\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0439\u043c\u0430\u044e\u0442 \u043f\u043e\u0434\u044b Kubernetes, \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u043c \u0435\u0433\u043e \u0432 \u043a\u043e\u043b\u043b\u0435\u043a\u0442\u043e\u0440 \u0438 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440, \u0430 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043c\u0435\u0441\u0442\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u0443\u043f\u043e\u043a\u043e\u0435\u043d\u0438\u044f \u0437\u0430\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c Amazon Cloud Watch.<\/p>\n<p>\u041d\u0430 \u0440\u044b\u043d\u043a\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043a\u0443\u0447\u0430 \u0440\u0430\u0437\u043d\u044b\u0445 \u043a\u043e\u043b\u043b\u0435\u043a\u0442\u043e\u0440\u043e\u0432 \u043b\u043e\u0433\u043e\u0432. \u0427\u0430\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0432\u0435\u043d\u0434\u043e\u0440-\u043d\u0435\u0439\u0442\u0440\u0430\u043b\u044c\u043d\u044b\u0439 Fluentd. \u041e\u043d \u0437\u0430\u0441\u043b\u0443\u0436\u0438\u043b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u0443\u044e \u0441\u043b\u0430\u0432\u0443 \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u0433\u043e\u0434\u044b, \u0438\u0437-\u0437\u0430 \u0441\u0432\u043e\u0438\u0445 \u043b\u0451\u0433\u043a\u0438\u0445, \u043d\u043e \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0445 \u0444\u0438\u0447\u0435\u0439. \u0411\u043e\u043b\u0435\u0435 \u0442\u043e\u0433\u043e, Fluent Bit, \u0432 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d \u0438\u043c\u0435\u043d\u043d\u043e \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430\u043c\u0438.<\/p>\n<p>\u0414\u043b\u044f \u043d\u0430\u0448\u0435\u0433\u043e \u0434\u0435\u043c\u043e-\u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u043c\u044b \u0437\u0430\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c Fluent Bit, \u0447\u0442\u043e\u0431\u044b \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u043f\u043e\u0434\u043e\u0432. \u0414\u043b\u044f \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u0441\u044f Amazon CloudWatch Container Insights. \u0412\u043e\u0442 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u0430\u044f \u0441\u0445\u0435\u043c\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432:<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/dr\/dw\/9h\/drdw9hgt3jrmk6twvg49jwm6xzw.png\" width=\"auto\" height=\"auto\" data-src=\"https:\/\/habrastorage.org\/webt\/dr\/dw\/9h\/drdw9hgt3jrmk6twvg49jwm6xzw.png\"\/><figcaption><\/figcaption><\/figure>\n<p>Fluent Bit \u2014 \u044d\u0442\u043e \u043e\u043f\u0435\u043d\u0441\u043e\u0440\u0441\u043d\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 \u0438 \u0444\u043e\u0440\u0432\u0430\u0440\u0434\u0435\u0440 \u043b\u043e\u0433\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u0432\u0441\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u0438 \u043b\u043e\u0433\u0438) \u0438\u0437 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u0432, \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432\u0430\u0442\u044c \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0438\u0445 \u043f\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f\u043c, \u0432\u043a\u043b\u044e\u0447\u0430\u044f CloudWatch. \u042d\u0442\u043e \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043d\u044b\u0445 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0439, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435, \u0434\u043b\u044f Kubernetes. \u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 Fluent Bit \u0441\u043e\u0437\u0434\u0430\u043d\u0430 \u0441 \u0440\u0430\u0441\u0447\u0435\u0442\u043e\u043c \u043d\u0430 \u0432\u044b\u0441\u043e\u043a\u0443\u044e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043e\u043d\u0430 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0430 \u043d\u0430 \u0421\u0438 \u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0432\u044b\u0441\u043e\u043a\u043e\u0439 \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u043d\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c\u044e, \u043d\u0435 \u0442\u0440\u0430\u0442\u044f \u043d\u0430 \u044d\u0442\u043e \u0438\u0437\u043b\u0438\u0448\u043d\u0438\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 \u0438 \u043f\u0430\u043c\u044f\u0442\u0438.<\/p>\n<p>\u0412 \u043d\u0430\u0448\u0435\u043c \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435 EKS \u0435\u0441\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0442\u0438\u043f\u044b \u043b\u043e\u0433\u043e\u0432:<\/p>\n<ul>\n<li>\n<p>Application logs \u2014 \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c \u0438 \u043b\u0435\u0436\u0430\u0442 \u0432 \/var\/log\/containers\/*.log<\/p>\n<\/li>\n<li>\n<p>Host logs \u2014 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0435 \u043b\u043e\u0433\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u0445\u043e\u0441\u0442\u043e\u0432\u044b\u043c\u0438 \u043d\u043e\u0434\u0430\u043c\u0438 EKS \u0438 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0432 \u0444\u0430\u0439\u043b\u0430\u0445 <code>\/var\/log\/messages,\/var\/log\/dmesg,\/var\/log\/secure<\/code><\/p>\n<\/li>\n<li>\n<p>Data Plane logs \u2014 \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\u043c\u0438 EKS Data Plane<\/p>\n<\/li>\n<\/ul>\n<p>\u0412 Kubernetes \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u044f DaemonSet: \u0432\u0441\u0435 \u043d\u043e\u0434\u044b \u0434\u0435\u0440\u0436\u0430\u0442 \u043f\u043e \u043a\u043e\u043f\u0438\u0438 \u043f\u043e\u0434\u0430. \u042d\u0442\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u0434\u043b\u044f \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u043d\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439, \u0442\u0430\u043a\u0438\u0445 \u043a\u0430\u043a \u0441\u0431\u043e\u0440 \u043b\u043e\u0433\u043e\u0432 \u0438 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 \u0443\u0437\u043b\u043e\u0432, \u043f\u0440\u0438 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043f\u043e\u0434\u044b \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043a \u043d\u043e\u0432\u044b\u043c \u0443\u0437\u043b\u0430\u043c.<\/p>\n<p>\u041a\u0441\u0442\u0430\u0442\u0438 \u0433\u043e\u0432\u043e\u0440\u044f, DaemonSet \u2014 \u043e\u0442\u043b\u0438\u0447\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u043e\u0433\u0434\u0430 \u0441\u0442\u043e\u0438\u0442 \u0432\u0441\u043f\u043e\u043c\u043d\u0438\u0442\u044c \u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0435 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043d\u044b\u0445 \u043e\u0431\u0440\u0430\u0437\u043e\u0432. \u041f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u0430\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043e\u0431\u0440\u0430\u0437\u043e\u0432 \u0436\u0440\u0451\u0442 \u0442\u0440\u0430\u0444\u0438\u043a \u043a\u0430\u043a \u043d\u0435 \u0432 \u0441\u0435\u0431\u044f. \u041d\u043e \u043a \u0441\u0447\u0430\u0441\u0442\u044c\u044e, \u043e\u0431\u0440\u0430\u0437\u044b, \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c\u044b\u0435 \u0432 Spring Boot, \u0441\u043e\u0431\u0438\u0440\u0430\u044e\u0442\u0441\u044f \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 Alpine Linux \u0438 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432\u043e\u0432 OpenJDK, \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0438\u043c \u0431\u044b\u0442\u044c \u043e\u0447\u0435\u043d\u044c \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u043c\u0438. \u0411\u0430\u0437\u043e\u0432\u044b\u0439 \u043e\u0431\u0440\u0430\u0437 \u0432\u0435\u0441\u0438\u0442 \u043d\u0430 \u0434\u0438\u0441\u043a\u0435 \u043c\u0435\u043d\u044c\u0448\u0435 100 \u043c\u0435\u0433\u0430\u0431\u0430\u0439\u0442.<\/p>\n<p>\u041d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c Fluent Bit \u043a\u0430\u043a DaemonSet, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0441\u044b\u043b\u0430\u0442\u044c \u043b\u043e\u0433\u0438 \u0432 AWS CloudWatch.<\/p>\n<p>\u0412\u043d\u0430\u0447\u0430\u043b\u0435 \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c IAM \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0434\u043b\u044f Kubernetes-\u0432\u043e\u0440\u043a\u0435\u0440\u043e\u0432, \u0447\u0442\u043e\u0431\u044b \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u0438 \u043b\u043e\u0433\u0438 \u0443\u043b\u0435\u0442\u0430\u043b\u0438 \u0432 CloudWatch. \u042d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0438 \u0432 IAM h\u043e\u043b\u0438 \u0432\u043e\u0440\u043a\u0435\u0440\u043e\u0432. \u0417\u0430\u043c\u0435\u0442\u044c\u0442\u0435, \u0447\u0442\u043e \u044d\u0442\u043e \u0437\u0430\u0434\u0430\u0447\u0430 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430, \u0438 \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u0440\u043e\u0432\u043d\u043e \u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u043f\u0440\u0438 \u0435\u0433\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438. \u0417\u0430\u043d\u0438\u043c\u0430\u0442\u044c\u0441\u044f \u044d\u0442\u0438\u043c \u043a\u0430\u0436\u0434\u044b\u0439 \u0434\u0435\u043d\u044c, \u043a \u0441\u0447\u0430\u0441\u0442\u044c\u044e, \u043d\u0435 \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f. \u0412\u043d\u0430\u0447\u0430\u043b\u0435, \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c IAM \u0440\u043e\u043b\u0438 \u0432\u043e\u0440\u043a\u0435\u0440\u043e\u0432 (\u0438\u043d\u0441\u0442\u0430\u043d\u0441\u043e\u0432 EC2):<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/fv\/0r\/to\/fv0rtoh2_87eqd8x3lc2b592lyw.png\" width=\"auto\" height=\"auto\" data-src=\"https:\/\/habrastorage.org\/webt\/fv\/0r\/to\/fv0rtoh2_87eqd8x3lc2b592lyw.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0414\u0430\u043b\u0435\u0435, \u043f\u0440\u0438\u0430\u0442\u0442\u0430\u0447\u0438\u0442\u044c \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0443 \u201cCloudWatchAgentServerPolicy\u201d \u0432 IAM \u0440\u043e\u043b\u0438:<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/hw\/xd\/_2\/hwxd_22j-lgtypilscj4cdcppao.png\" width=\"auto\" height=\"auto\" data-src=\"https:\/\/habrastorage.org\/webt\/hw\/xd\/_2\/hwxd_22j-lgtypilscj4cdcppao.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0414\u0430\u043b\u0435\u0435, \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u0435\u0439\u043c\u0441\u043f\u0435\u0439\u0441 \u201camazon-cloudwatch\u201d:<\/p>\n<pre><code>kubectl apply -f https:\/\/raw.githubusercontent.com\/aws-samples\/amazon-cloudwatch-container-insights\/latest\/k8s-deployment-manifest-templates\/deployment-mode\/daemonset\/container-insights-monitoring\/cloudwatch-namespace.yaml --kubeconfig ~\/.kube\/config <\/code><\/pre>\n<p>\u0414\u0430\u043b\u0435\u0435, \u0441\u043e\u0437\u0434\u0430\u0442\u044c ConfigMap \u0441 \u0438\u043c\u0435\u043d\u0435\u043c \u201cfluent-bit-cluster-info\u201d:<\/p>\n<pre><code>ClusterName=microservices RegionName=eu-central-1 FluentBitHttpPort='2020' FluentBitReadFromHead='Off' [[ ${FluentBitReadFromHead} = 'On' ]] &amp;&amp; FluentBitReadFromTail='Off'|| FluentBitReadFromTail='On' [[ -z ${FluentBitHttpPort} ]] &amp;&amp; FluentBitHttpServer='Off' || FluentBitHttpServer='On' kubectl create configmap fluent-bit-cluster-info \\ --from-literal=cluster.name=${ClusterName} \\ --from-literal=http.server=${FluentBitHttpServer} \\ --from-literal=http.port=${FluentBitHttpPort} \\ --from-literal=read.head=${FluentBitReadFromHead} \\ --from-literal=read.tail=${FluentBitReadFromTail} \\ --from-literal=logs.region=${RegionName} -n amazon-cloudwatch \\ --kubeconfig ~\/.kube\/config <\/code><\/pre>\n<p>\u0417\u0434\u0435\u0441\u044c \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u044b \u0434\u0435\u0444\u043e\u043b\u0442\u043d\u044b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 FluentBitHttpServer. \u0412 \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435, Fluent Bit \u0447\u0438\u0442\u0430\u0435\u0442 \u043b\u043e\u0433\u0438 \u0438\u0437 tail, \u0438 \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u0441\u043b\u0435 \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u0437\u0430\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0432\u0435\u0436\u0438\u0435 \u043b\u043e\u0433\u0438.<\/p>\n<p>\u0414\u0430\u043b\u044c\u0448\u0435, \u043d\u0443\u0436\u043d\u043e \u0441\u043a\u0430\u0447\u0430\u0442\u044c \u0438 \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c Fluent Bit DaemonSet:<\/p>\n<pre><code>kubectl apply -f https:\/\/raw.githubusercontent.com\/aws-samples\/amazon-cloudwatch-container-insights\/latest\/k8s-deployment-manifest-templates\/deployment-mode\/daemonset\/container-insights-monitoring\/fluent-bit\/fluent-bit.yaml --kubeconfig ~\/.kube\/config <\/code><\/pre>\n<p>\u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u0438\u0445 \u0448\u0430\u0433\u043e\u0432, \u0432 \u0432\u0430\u0448\u0435\u043c \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435 \u043f\u043e\u044f\u0432\u044f\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b:<\/p>\n<ol>\n<li>\n<p>\u0421\u0435\u0440\u0432\u0438\u0441-\u0430\u043a\u043a\u0430\u0443\u043d\u0442 \u0441 \u0438\u043c\u0435\u043d\u0435\u043c Fluent-Bit \u0432 \u043d\u0435\u0439\u043c\u0441\u043f\u0435\u0439\u0441\u0435 amazon-cloudwatch. \u041e\u043d \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 Fluent Bit daemonSet;<\/p>\n<\/li>\n<li>\n<p>\u041a\u043b\u0430\u0441\u0442\u0435\u0440\u043d\u0430\u044f \u0440\u043e\u043b\u044c \u0441 \u0438\u043c\u0435\u043d\u0435\u043c Fluent-Bit-role \u0432 \u043d\u0435\u0439\u043c\u0441\u043f\u0435\u0439\u0441\u0435 amazon-cloudwatch. \u041e\u043d\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0443\u0447\u0435\u0442\u043a\u0435 Fluent-Bit \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0438 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u043b\u043e\u0433\u0438 \u043f\u043e\u0434\u043e\u0432;<\/p>\n<\/li>\n<li>\n<p>ConfigMap \u0441 \u0438\u043c\u0435\u043d\u0435\u043c Fluent-Bit-config \u0432 \u043d\u0435\u0439\u043c\u0441\u043f\u0435\u0439\u0441\u0435 amazon-cloudwatch. \u0412 \u043d\u0435\u043c \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f Fluent Bit.<\/p>\n<\/li>\n<\/ol>\n<p>\u0414\u0430\u043b\u044c\u0448\u0435, \u043d\u0443\u0436\u043d\u043e \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u0447\u0442\u043e \u0443 \u043d\u0430\u0441 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b\u043e\u0441\u044c:<\/p>\n<pre><code>kubectl get pods -n amazon-cloudwatch --kubeconfig ~\/.kube\/config <\/code><\/pre>\n<p>\u0412 \u0441\u043f\u0438\u0441\u043a\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u043f\u043e\u0434\u044b \u0441 \u0438\u043c\u0435\u043d\u0435\u043c, \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0438\u043c\u0441\u044f \u043d\u0430 \u201cfluent-bit-\u201d, \u043f\u043e \u0448\u0442\u0443\u043a\u0435 \u043d\u0430 \u0443\u0437\u0435\u043b. \u041e\u0436\u0438\u0434\u0430\u0435\u043c\u044b\u0439 \u0432\u044b\u0445\u043b\u043e\u043f \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<pre><code>NAME READY STATUS RESTARTS AGE  fluent-bit-8xdlg 1\/1 Running 0 11m  fluent-bit-rmbw6 1\/1 Running 0 11m <\/code><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u0437\u0430\u0439\u0442\u0438 \u0432 \u0432\u0435\u0431-\u043a\u043e\u043d\u0441\u043e\u043b\u044c AWS, \u043d\u0430\u0448 DaemonSet \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043a\u0430\u043a-\u0442\u043e \u0442\u0430\u043a:<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/az\/dw\/yr\/azdwyr8zbvuegp7ozfus4ee5h6m.png\" width=\"auto\" height=\"auto\" data-src=\"https:\/\/habrastorage.org\/webt\/az\/dw\/yr\/azdwyr8zbvuegp7ozfus4ee5h6m.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0415\u0441\u043b\u0438 \u043f\u0440\u043e\u0439\u0442\u0438 \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c CloudWatch, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u043b\u0438 \u043c\u044b \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u043b\u0438 Fluent Bit. \u0412\u0430\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u0447\u0442\u043e \u0440\u0435\u0433\u0438\u043e\u043d CloudWatch Console \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442 \u0441 \u0440\u0435\u0433\u0438\u043e\u043d\u043e\u043c \u0432\u0430\u0448\u0435\u0433\u043e \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 EKS (\u0432 \u044d\u0442\u043e\u043c \u0433\u0430\u0439\u0434\u0435, \u0447\u0443\u0442\u044c \u0432\u044b\u0448\u0435 \u043f\u043e \u0442\u0435\u043a\u0441\u0442\u0443 \u043c\u044b \u0432\u044b\u0431\u0438\u0440\u0430\u043b\u0438 eu-central-1). \u0412 \u043b\u043e\u0433\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u043e\u044f\u0432\u0438\u0442\u044c\u0441\u044f \u0442\u0440\u0438 \u0433\u0440\u0443\u043f\u043f\u044b:<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/9n\/by\/gv\/9nbygvtwjijbag1-rexxyhbzr3w.png\" width=\"auto\" height=\"auto\" data-src=\"https:\/\/habrastorage.org\/webt\/9n\/by\/gv\/9nbygvtwjijbag1-rexxyhbzr3w.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0433\u0440\u0443\u043f\u043f\u0443 <code>\/aws\/containerinsights\/microservices\/application<\/code>, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0441\u043b\u043e\u0436\u0435\u043d\u044b \u0432\u0441\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u043e\u0442 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432.<\/p>\n<p>\u041b\u043e\u0433 \u043c\u043e\u0436\u043d\u043e \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432\u0430\u0442\u044c \u0438 \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432 \u0430\u0433\u0433\u0440\u0435\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c \u0432\u0438\u0434\u0435. \u0412 \u043d\u0430\u0448\u0435\u043c \u0434\u0435\u043c\u043e-\u043f\u0440\u043e\u0435\u043a\u0442\u0435, \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0437\u0430\u043a\u0430\u0437\u0430 \u0441 \u043d\u0435\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c customer ID \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u201c500 Internal Server Error\u201d. \u0412\u0441\u0435 \u0442\u0430\u043a\u0438\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u043b\u0435\u0433\u043a\u043e \u043b\u043e\u0432\u044f\u0442\u0441\u044f \u0432 \u043b\u043e\u0433\u0430\u0445:<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/yv\/lj\/vw\/yvljvwcfnfovznay1o6ptoztwmc.png\" width=\"auto\" height=\"auto\" data-src=\"https:\/\/habrastorage.org\/webt\/yv\/lj\/vw\/yvljvwcfnfovznay1o6ptoztwmc.png\"\/><figcaption><\/figcaption><\/figure>\n<h4>\u041c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 \u0447\u0435\u0440\u0435\u0437 CloudWatch Container Insights<\/h4>\n<p>\u041c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u043d\u0430 \u043f\u0440\u043e\u0434\u0435 \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 \u0432\u0430\u0436\u0435\u043d, \u0447\u0435\u043c \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435. \u0414\u043b\u044f \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 Kubernetes \u0441\u043e\u0437\u0434\u0430\u043b\u0438 \u043a\u0443\u0447\u0443 \u0432\u0441\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432. Amazon CloudWatch \u2014 \u044d\u0442\u043e &#171;\u0440\u043e\u0434\u043d\u043e\u0439&#187; \u0441\u043f\u043e\u0441\u043e\u0431 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u0442\u044c \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u044b EC2. Amazon CloudWatch \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u0435\u0440\u0432\u0438\u0441 Container Insights, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u0442\u044c, \u0442\u0440\u0430\u0431\u043b\u043e\u0448\u0443\u0442\u0438\u0442\u044c \u0438 \u0441\u043b\u0435\u0434\u0438\u0442\u044c \u0437\u0430 AWS Elastic Kubernetes Service (EKS) \u0438 AWS Elastic Container Service (ECS).<\/p>\n<p>\u0414\u0430\u0448\u0431\u043e\u0440\u0434\u0430 Container Insights \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442:<\/p>\n<ul>\n<li>\n<p>\u0423\u0442\u0438\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 \u0438 \u043f\u0430\u043c\u044f\u0442\u0438<\/p>\n<\/li>\n<li>\n<p>\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0437\u0430\u0434\u0430\u0447 \u0438 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432<\/p>\n<\/li>\n<li>\n<p>R\/W \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430<\/p>\n<\/li>\n<li>\n<p>Rx\/Tx \u0441\u0435\u0442\u0438<\/p>\n<\/li>\n<li>\n<p>\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432<\/p>\n<\/li>\n<\/ul>\n<p>\u0427\u0442\u043e\u0431\u044b \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c CloudWatch Container Insights, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435 EKS \u0430\u0433\u0435\u043d\u0442 CloudWatch \u0434\u043b\u044f FluentBit:<\/p>\n<pre><code>ClusterName=microservices RegionName=eu-central-1 FluentBitHttpPort='2020' FluentBitReadFromHead='Off' [[ ${FluentBitReadFromHead} = 'On' ]] &amp;&amp; FluentBitReadFromTail='Off'|| FluentBitReadFromTail='On' [[ -z ${FluentBitHttpPort} ]] &amp;&amp; FluentBitHttpServer='Off' || FluentBitHttpServer='On' curl https:\/\/raw.githubusercontent.com\/aws-samples\/amazon-cloudwatch-container-insights\/latest\/k8s-deployment-manifest-templates\/deployment-mode\/daemonset\/container-insights-monitoring\/quickstart\/cwagent-fluent-bit-quickstart.yaml | sed 's\/\/'${ClusterName}'\/;s\/\/'${RegionName}'\/;s\/\/\"'${FluentBitHttpServer}'\"\/;s\/\/\"'${FluentBitHttpPort}'\"\/;s\/\/\"'${FluentBitReadFromHead}'\"\/;s\/\/\"'${FluentBitReadFromTail}'\"\/' | kubectl apply -f - --kubeconfig ~\/.kube\/config <\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0439\u0442\u0438 \u0432 \u0434\u0430\u0448\u0431\u043e\u0440\u0434\u0443 CloudWatch Container Insights \u0438 \u043f\u043e\u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0442\u044c \u0437\u0430 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u043e\u0439 \u043d\u0430 \u043d\u0430\u0448 \u043a\u043b\u0430\u0441\u0442\u0435\u0440 EKS:<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/xh\/r_\/g_\/xhr_g_uwjvjndp8sckb7px_s8pg.png\" width=\"auto\" height=\"auto\" data-src=\"https:\/\/habrastorage.org\/webt\/xh\/r_\/g_\/xhr_g_uwjvjndp8sckb7px_s8pg.png\"\/><figcaption><\/figcaption><\/figure>\n<h4>\u041f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u0435 \u0438\u0442\u043e\u0433\u0438 \u0447\u0435\u0442\u0432\u0435\u0440\u0442\u043e\u0439 \u0447\u0430\u0441\u0442\u0438<\/h4>\n<p>\u0427\u0442\u043e \u043c\u044b \u0438\u043c\u0435\u0435\u043c \u043d\u0430 \u0440\u0443\u043a\u0430\u0445? \u041c\u044b \u043d\u0430\u043f\u0438\u0441\u0430\u043b\u0438 \u043f\u0430\u0440\u0443 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432, \u043e\u043f\u0430\u043a\u0435\u0442\u0438\u043b\u0438 \u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440, \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b\u0438 \u043d\u0430 AWS, \u043f\u0440\u0438\u043a\u0440\u0443\u0442\u0438\u043b\u0438 \u043a\u0440\u0430\u0441\u0438\u0432\u044b\u0435 \u0434\u043e\u043c\u0435\u043d\u043d\u044b\u0435 \u0438\u043c\u0435\u043d\u0430 \u0438 \u043b\u043e\u0433\u0438. \u0422\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435, CloudWatch Container Insights \u2014 \u044d\u0442\u043e \u043d\u0435 \u043f\u0440\u0435\u0434\u0435\u043b \u043c\u0435\u0447\u0442\u0430\u043d\u0438\u0439, \u0438 \u043d\u0430\u0448 \u0440\u0430\u0441\u0441\u043a\u0430\u0437 \u0431\u044b\u043b \u0431\u044b \u043d\u0435\u043f\u043e\u043b\u043e\u043d \u0431\u0435\u0437 \u0435\u0449\u0451 \u043e\u0434\u043d\u043e\u0439, \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u0447\u0430\u0441\u0442\u0438.<\/p>\n<h3>\u0427\u0430\u0441\u0442\u044c 5. \u041c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 \u0432 Prometheus<\/h3>\n<p>\u041a\u043e\u0433\u0434\u0430 \u0432\u044b \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0435 Java-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 (\u0438\u043b\u0438 \u0434\u0430\u0436\u0435, \u043b\u044e\u0431\u043e\u0435 JVM-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435) \u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0435, \u0442\u043e \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043e\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u0430 JVM. (\u041a\u0430\u043f\u0438\u0442\u0430\u043d \u041e\u0447\u0435\u0432\u0438\u0434\u043d\u043e\u0441\u0442\u044c \u043e\u0442\u0434\u0430\u0435\u0442 \u0447\u0435\u0441\u0442\u044c). \u041f\u043e\u044d\u0442\u043e\u043c\u0443, \u0435\u0441\u043b\u0438 \u043c\u044b \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440, \u0442\u043e \u0432\u0441\u0435\u0439 \u043a\u0430\u0440\u0442\u0438\u043d\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043d\u0438\u043a\u0430\u043a \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f. \u0414\u043b\u044f \u043b\u0443\u0447\u0448\u0435\u0433\u043e \u043e\u0431\u0437\u0435\u0440\u0432\u0430\u0431\u0438\u043b\u0438\u0442\u0438, \u043d\u0443\u0436\u043d\u043e \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u0442\u044c \u0438 \u0441\u0430\u043c\u0443 JVM. \u041e\u0434\u043d\u043e \u0438\u0437 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0439 Amazon CloudWatch Container Insights \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043e\u043d \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0438\u0442\u044c \u0430\u043b\u0435\u0440\u0442\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430, \u0430 \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 JVM \u043e\u043d \u0442\u0430\u043a \u043d\u0435 \u0443\u043c\u0435\u0435\u0442.<\/p>\n<p>\u0415\u0441\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 JVM \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u0432 Kubernetes. \u041e\u0434\u0438\u043d \u0438\u0437 \u043b\u0443\u0447\u0448\u0438\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 &#8212; Prometheus.<\/p>\n<p>Prometheus \u2014 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u0430\u044f \u0438 \u0448\u0438\u0440\u043e\u043a\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0430\u044f \u0431\u0430\u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f time series (\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0440\u044f\u0434\u043e\u0432). \u041e\u043d\u0430 \u0432\u0445\u043e\u0434\u0438\u0442 \u0432 Cloud Native Computing Foundation (CNCF). \u041d\u0430 GitHub \u0443 \u043d\u0435\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 40 \u0442\u044b\u0441\u044f\u0447 \u0437\u0432\u0435\u0437\u0434, \u0438 \u043f\u043e \u0441\u0443\u0442\u0438, \u044d\u0442\u043e \u0441\u0430\u043c\u043e\u0435 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u043e\u0435 \u043e\u043f\u0435\u043d\u0441\u043e\u0440\u0441\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430.<\/p>\n<p>Prometheus \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043e\u0447\u0435\u043d\u044c \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u043d\u0430 time series \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445, \u043a\u0443\u0447\u0443 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0439, \u043a\u0440\u0443\u0442\u043e\u0439 \u044f\u0437\u044b\u043a \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 PromQL, \u043e\u0442\u043b\u0438\u0447\u043d\u044b\u0435 \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0438 \u0430\u043b\u0435\u0440\u0442\u044b.<\/p>\n<p>\u0412 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 CloudWatch, Prometheus \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0443\u043b\u043b\u0438\u0442 \u0438 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442 \u0442\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u044b \u043d\u0430\u0440\u0443\u0436\u0443 \u0447\u0435\u0440\u0435\u0437 Metrics API. \u041f\u0440\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 cloud-native \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432, pull \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043b\u0443\u0447\u0448\u0435, \u0447\u0435\u043c push, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u044d\u0442\u043e \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u043c\u0435\u043d\u044c\u0448\u0435 \u0442\u0440\u0430\u0444\u0438\u043a\u0430, \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u043c\u0435\u043d\u044c\u0448\u0435 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043d\u0430 \u0441\u0435\u0442\u044c.<\/p>\n<p>\u0415\u0441\u0442\u044c \u0434\u0432\u0430 \u0441\u043f\u043e\u0441\u043e\u0431\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u043c Prometheus \u0432\u044b\u0442\u044f\u0433\u0438\u0432\u0430\u0435\u0442 \u043c\u0435\u0442\u0440\u0438\u043a\u0438. \u041f\u0435\u0440\u0432\u044b\u0439 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 Metrics API \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u0438\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a. \u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c \u0432\u044b\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043d\u0430\u0440\u0443\u0436\u0443 \u0432\u0430\u0436\u043d\u044b\u0435 \u0438\u043c \u0431\u0438\u0437\u043d\u0435\u0441\u043e\u0432\u044b\u0435 \u043c\u0435\u0442\u0440\u0438\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0442\u043e\u043c \u043f\u043e\u0439\u0434\u0443\u0442 \u0432 \u0434\u0430\u0448\u0431\u043e\u0440\u0434\u0443 Prometheus. \u042d\u0442\u043e\u0442 \u0441\u043f\u043e\u0441\u043e\u0431 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0442\u0435\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b \u0441\u0430\u043c\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442\u0435. \u0412\u0442\u043e\u0440\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u2014 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0440\u044f\u0434\u043e\u043c \u0441 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c Exporter, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0430\u043c \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u0447\u0435\u0440\u0435\u0437 API. \u042d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434 \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0434\u043b\u044f \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u043b\u044f \u0431\u0430\u0437 \u0434\u0430\u043d\u043d\u044b\u0445. \u041c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u0443\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443.<\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 Prometheus \u043d\u0430 AWS, \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0434\u043e\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0430\u0448\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 Spring Boot.<\/p>\n<h4>\u0412\u043a\u043b\u044e\u0447\u0430\u0435\u043c Prometheus \u0432 Spring Boot<\/h4>\n<p>\u0412 Java-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u0445 \u0435\u0441\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432 \u0432\u044b\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043d\u0430\u0440\u0443\u0436\u0443 \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442\u044b \u0434\u043b\u044f \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430. \u042d\u0442\u0438 \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0434\u043b\u044f \u0441\u0431\u043e\u0440\u0430 \u043c\u0435\u0442\u0440\u0438\u043a \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u041c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 Prometheus  \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 JMX \u0431\u0438\u043d\u0430\u043c\u0438. \u0412 Spring, \u0435\u0441\u0442\u044c Spring Boot Actuator, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0445\u043e\u0440\u043e\u0448\u0438\u0445, \u0433\u043e\u0442\u043e\u0432\u044b\u0445 \u0434\u043b\u044f \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u0435\u043d\u0430 \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442\u043e\u0432, \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u044b\u0445 \u0441 \u043b\u044e\u0431\u044b\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c \u043d\u0430 Spring MVC. \u041f\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u043f\u0440\u043e Spring Boot Actuator, \u043c\u043e\u0436\u043d\u043e <a href=\"https:\/\/docs.spring.io\/spring-boot\/docs\/1.3.5.RELEASE\/reference\/html\/production-ready-monitoring.html\" rel=\"noopener noreferrer nofollow\">\u0432 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438<\/a>.<\/p>\n<p>\u0412 \u043d\u0430\u0448\u0435\u043c \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u0435 Customer, \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c: <code>io.micrometer:micrometer-registry-prometheus<\/code>. \u0414\u043b\u044f Gradle \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u0432 <code>build.gradle<\/code>, \u0434\u043b\u044f Maven &#8212; pom.xml \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e.<\/p>\n<p>\u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u043b\u043e\u0436\u0438\u0442\u044c \u0435\u0449\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0432\u043e\u0439\u0441\u0442\u0432 \u0434\u043b\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b Prometheus Metrics API:<\/p>\n<pre><code class=\"yaml\">management:  endpoints:    web:      exposure:        include: health, prometheus, info, metrics     health:      show-details: always   metrics:    tags:      application: MonitoringCustomerMicroservice <\/code><\/pre>\n<p>\u041d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u0448\u0430\u0433\u0435, \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0430\u0432\u0442\u043e-\u0434\u0438\u0441\u043a\u0430\u0432\u0435\u0440\u0438, \u0447\u0442\u043e\u0431\u044b Prometheus \u0441\u043c\u043e\u0433 \u0441\u0430\u043c \u043d\u0430\u0441 \u043d\u0430\u0439\u0442\u0438 \u0438 \u0441\u0442\u044f\u043d\u0443\u0442\u044c \u0432\u0441\u0435 \u0434\u0430\u043d\u043d\u044b\u0435. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432 \u201ceks-deployment.yaml\u201d \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0435\u0449\u0435 \u043f\u0430\u0440\u043e\u0447\u043a\u0443 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0439:<\/p>\n<pre><code class=\"yaml\">template:  metadata:    labels:      app: microservice-customer    annotations:      prometheus.io\/scrape: \"true\"      prometheus.io\/port: \"8080\"      prometheus.io\/path: \"\/customer\/actuator\/prometheus\" <\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u0441\u044f \u0432 EKS, \u0438 \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043d\u0435\u0439\u043c\u0441\u043f\u0435\u0439\u0441 Prometheus \u0432 \u043d\u0430\u0448\u0435\u043c \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435:<\/p>\n<pre><code>kubectl create namespace eks-prometheus-namespace --kubeconfig ~\/.kube\/config <\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0434\u043e\u043a\u0435\u0440\u043d\u044b\u0439 \u043e\u0431\u0440\u0430\u0437 \u0438 \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0435\u0433\u043e \u043d\u0430 \u043d\u0435\u0439\u043c\u0441\u043f\u0435\u0439\u0441\u0435 \u201ceks-prometheus-namespace\u201d. \u042d\u0442\u043e\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043c\u044b \u0443\u0436\u0435 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u043b\u0438 \u0440\u0430\u043d\u0435\u0435 \u0432 \u044d\u0442\u043e\u043c \u0433\u0430\u0439\u0434\u0435. (\u0416\u0435\u0441\u0442\u043e\u043a\u0430\u044f \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u044f \u043d\u0435 \u0431\u0443\u0434\u0443 \u043a\u043e\u043f\u0438\u043f\u0430\u0441\u0442\u0438\u0442\u044c \u0441\u044e\u0434\u0430 \u0442\u0440\u0435\u0442\u044c\u044e \u0447\u0430\u0441\u0442\u044c \u044d\u0442\u043e\u0433\u043e \u0433\u0430\u0439\u0434\u0430, \u0432\u0430\u043c \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u043e\u0441\u043e\u0437\u043d\u0430\u0442\u044c \u044d\u0442\u043e \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e).<\/p>\n<p>\u041a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0437\u0430\u0434\u0435\u043f\u043b\u043e\u0438\u043b\u043e\u0441\u044c, \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u0439\u0442\u0438 \u0432 Actuator \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442 Prometheus:<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/kw\/k1\/0i\/kwk10ivstk1av3byrxcai5m6yno.png\" width=\"auto\" height=\"auto\" data-src=\"https:\/\/habrastorage.org\/webt\/kw\/k1\/0i\/kwk10ivstk1av3byrxcai5m6yno.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u042d\u0442\u043e\u0442 \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442 (<a href=\"https:\/\/customer.microservicesdemo.net\/customer\/actuator\/prometheus\" rel=\"noopener noreferrer nofollow\">https:\/\/customer.microservicesdemo.net\/customer\/actuator\/prometheus<\/a>) \u043e\u0442\u0434\u0430\u0451\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043c\u0435\u0442\u0440\u0438\u043a\u0438:<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/ct\/pl\/0u\/ctpl0uxfspdudaeduxkqyzlugmc.png\" width=\"auto\" height=\"auto\" data-src=\"https:\/\/habrastorage.org\/webt\/ct\/pl\/0u\/ctpl0uxfspdudaeduxkqyzlugmc.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041a\u0430\u043a \u0432\u0441\u0435\u0433\u0434\u0430, \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c \u0432\u0441\u0435 \u044d\u0442\u0438 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b \u0434\u043b\u044f \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u043d\u0430\u0448\u0435\u0433\u043e \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u0430, Order.<\/p>\n<h4>Amazon Managed Service for Prometheus (AMP)<\/h4>\n<p>AMP Workspace \u2014 \u043c\u0435\u0441\u0442\u043e \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c, \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0438 \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043c\u0435\u0442\u0440\u0438\u043a\u0438 Prometheus. AMP Workspace \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u0438\u0437\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432\/\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439.<\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u0442\u044c AMP Workspace  \u043c\u043e\u0436\u043d\u043e \u0447\u0435\u0440\u0435\u0437 AWS CLI \u0438\u043b\u0438 \u0447\u0435\u0440\u0435\u0437 AWS Console. \u0418\u0434\u0451\u043c \u0432 Amazon Prometheus \u0438 \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0435\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a:<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/of\/k8\/qb\/ofk8qbbqz_uubpuqjek5rjlsys8.png\" width=\"auto\" height=\"auto\" data-src=\"https:\/\/habrastorage.org\/webt\/of\/k8\/qb\/ofk8qbbqz_uubpuqjek5rjlsys8.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 AWS \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u043e \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u043e\u043c Prometheus Workspace :<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/xt\/hh\/tg\/xthhtgiffw7gurcqci-ffdmzvai.png\" width=\"auto\" height=\"auto\" data-src=\"https:\/\/habrastorage.org\/webt\/xt\/hh\/tg\/xthhtgiffw7gurcqci-ffdmzvai.png\"\/><figcaption><\/figcaption><\/figure>\n<h4>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 Prometheus Metrics Collector<\/h4>\n<p>AMP \u043d\u0435 \u0441\u0442\u044f\u0433\u0438\u0432\u0430\u0435\u0442 \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0435 \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u0441\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c Prometheus Metrics Collector. \u041e\u043d \u0441\u0442\u044f\u0433\u0438\u0432\u0430\u0435\u0442 \u0438\u0445 \u0441 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0445 Java-\u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432, \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043d\u044b\u0445 \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435, \u0438 \u043f\u043e\u0441\u044b\u043b\u0430\u0435\u0442 \u0432 AMP Workspace.<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/s1\/ph\/il\/s1philg1cbkti0jt9wceyzp8fvs.png\" width=\"auto\" height=\"auto\" data-src=\"https:\/\/habrastorage.org\/webt\/s1\/ph\/il\/s1philg1cbkti0jt9wceyzp8fvs.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0415\u0441\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432 \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c Prometheus Metrics Collector \u0432 AWS: \u043b\u0438\u0431\u043e \u0441\u0435\u0440\u0432\u0435\u0440 Prometheus, \u043b\u0438\u0431\u043e \u0430\u0433\u0435\u043d\u0442 OpenTelemetry. \u0412 \u044d\u0442\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435, \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c AWS-\u043e\u0432\u0441\u043a\u0438\u0439 \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432 OpenTelemetry Collector\/Prometheus server.<\/p>\n<h4>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 Prometheus<\/h4>\n<p>\u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440 Prometheus \u0438\u043c\u0435\u0435\u0442 \u0441\u043c\u044b\u0441\u043b \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Helm. Helm \u2014 \u044d\u0442\u043e \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0439 \u043f\u0430\u043a\u0435\u0442\u043d\u044b\u0439 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u0434\u043b\u044f Kubernetes. \u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043d\u0435\u0433\u043e \u043b\u0435\u0433\u043a\u043e \u0438 \u043f\u0440\u0438\u044f\u0442\u043d\u043e \u0438\u0441\u043a\u0430\u0442\u044c, \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u0442\u044c \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u0444\u0442, \u0441\u0434\u0435\u043b\u0430\u043d\u043d\u044b\u0439 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0434\u043b\u044f Kubernetes.<\/p>\n<p>\u0412\u043d\u0430\u0447\u0430\u043b\u0435, \u043d\u0443\u0436\u043d\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c Helm \u043d\u0430 \u043d\u0430\u0448 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440, <a href=\"https:\/\/helm.sh\/docs\/intro\/install\/\" rel=\"noopener noreferrer nofollow\">\u043a\u0430\u043a \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u043d\u043e \u0432 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0435\u0439<\/a>.<\/p>\n<p>\u0414\u0430\u043b\u044c\u0448\u0435, \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 \u0447\u0430\u0440\u0442\u043e\u0432, \u0433\u0434\u0435 \u043b\u0435\u0436\u0438\u0442 Prometheus:<\/p>\n<pre><code>helm repo add prometheus-community https:\/\/prometheus-community.github.io\/helm-charts helm repo add kube-state-metrics https:\/\/kubernetes.github.io\/kube-state-metrics helm repo update <\/code><\/pre>\n<h4>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0440\u043e\u043b\u0435\u0439 IAM<\/h4>\n<p>\u041d\u0443\u0436\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c IAM \u0440\u043e\u043b\u0438 \u0441\u0435\u0440\u0432\u0438\u0441-\u0430\u043a\u043a\u0430\u0443\u043d\u0442\u043e\u0432 \u0434\u043b\u044f \u043f\u0440\u0438\u0435\u043c\u0430 \u043c\u0435\u0442\u0440\u0438\u043a \u0438\u0437 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 EKS. \u0421\u0435\u0440\u0432\u0435\u0440 Prometheus \u043f\u043e\u0441\u044b\u043b\u0430\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0441 \u043f\u043e HTTPS. \u0414\u0430\u043d\u043d\u044b\u0435 \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u0442\u044c \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u043c\u0438 \u043a\u0440\u0435\u0434\u0435\u043d\u0448\u0435\u043b\u0430\u043c\u0438 AWS \u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u043c <a href=\"https:\/\/docs.aws.amazon.com\/AmazonS3\/latest\/API\/sig-v4-authenticating-requests.html\" rel=\"noopener noreferrer nofollow\">AWS Signature Version 4<\/a> \u0434\u043b\u044f \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u0438 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u043e\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430, \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0438\u0441\u0430. \u0417\u0430\u043f\u0440\u043e\u0441\u044b \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0438\u043d\u0441\u0442\u0430\u043d\u0441\u0443  <a href=\"https:\/\/github.com\/awslabs\/aws-sigv4-proxy\" rel=\"noopener noreferrer nofollow\">AWS signing proxy<\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u044d\u0442\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043d\u0430 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440.<\/p>\n<p>AWS signing proxy \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442 \u043d\u0430 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435 EKS \u0438 \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c\u0441\u044f \u043e\u0442 \u0438\u043c\u0435\u043d\u0438 <a href=\"https:\/\/kubernetes.io\/docs\/tasks\/configure-pod-container\/configure-service-account\/\" rel=\"noopener noreferrer nofollow\">\u0441\u0435\u0440\u0432\u0438\u0441-\u0430\u043a\u043a\u0430\u0443\u043d\u0442\u0430<\/a> Kubernetes. \u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <a href=\"https:\/\/docs.aws.amazon.com\/eks\/latest\/userguide\/iam-roles-for-service-accounts.html\" rel=\"noopener noreferrer nofollow\">IAM Roles for Service Account (IRSA)<\/a>, \u043c\u043e\u0436\u043d\u043e \u0441\u0432\u044f\u0437\u0430\u0442\u044c \u0440\u043e\u043b\u044c IAM \u0441 \u0441\u0435\u0440\u0432\u0438\u0441-\u0430\u043a\u043a\u0430\u0443\u043d\u0442\u043e\u043c Kubernetes, \u0438 \u0442\u0435\u043c \u0441\u0430\u043c\u044b\u043c \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u043e\u043b\u043d\u043e\u043c\u043e\u0447\u0438\u044f \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u043e\u0434\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u044d\u0442\u043e\u0442 \u0441\u0435\u0440\u0432\u0438\u0441-\u0430\u043a\u043a\u0430\u0443\u043d\u0442. \u042d\u0442\u043e \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0443 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u0438\u0432\u0438\u043b\u0435\u0433\u0438\u0439: IRSA \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0439 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 AWS signing proxy, \u0447\u0442\u043e\u0431\u044b \u043f\u0435\u0440\u0435\u043b\u0438\u0432\u0430\u0442\u044c \u043c\u0435\u0442\u0440\u0438\u043a\u0438 Prometheus \u0432 AMP.<\/p>\n<p>\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0435 \u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0434\u043b\u044f AMP \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c IAM \u0440\u043e\u043b\u0438 \u0441\u0435\u0440\u0432\u0438\u0441-\u0430\u043a\u043a\u0430\u0443\u043d\u0442\u043e\u0432 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c <a href=\"https:\/\/docs.aws.amazon.com\/prometheus\/latest\/userguide\/set-up-irsa.html#set-up-irsa-ingest\" rel=\"noopener noreferrer nofollow\">\u0432 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u043c \u0433\u0430\u0439\u0434\u0435<\/a>.<\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0434\u0432\u0443\u0445 \u0440\u043e\u043b\u0435\u0439 (\u043e\u0434\u043d\u043e\u0439 \u0434\u043b\u044f \u043f\u0440\u0438\u0435\u043c\u0430 \u043c\u0435\u0442\u0440\u0438\u043a, \u0438 \u0432\u0442\u043e\u0440\u043e\u0439 \u0434\u043b\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432), \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0435\u0433\u043e, \u043f\u043e\u0438\u0441\u043a\u0430\u0432 \u044d\u0442\u0438 \u0440\u043e\u043b\u0438 \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u0438:<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/a8\/xy\/db\/a8xydbieourbhkyjhvgr1gc3siw.png\" width=\"auto\" height=\"auto\" data-src=\"https:\/\/habrastorage.org\/webt\/a8\/xy\/db\/a8xydbieourbhkyjhvgr1gc3siw.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Helm \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e Kubernetes. \u041d\u0443\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0444\u0430\u0439\u043b \u0441 \u0438\u043c\u0435\u043d\u0435\u043c \u201cprometheus_eks_values.yaml\u201d \u0438 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u044b\u043c \u0442\u0438\u043f\u0430 \u0442\u0430\u043a\u043e\u0433\u043e:<\/p>\n<pre><code class=\"yaml\">serviceAccounts:  server:    name: amp-iamproxy-ingest-service-account    annotations:      eks.amazonaws.com\/role-arn: ${IAM_PROXY_PROMETHEUS_ROLE_ARN} server:  remoteWrite:    - url: https:\/\/aps-workspaces.${AWS_REGION}.amazonaws.com\/workspaces\/${WORKSPACE_ID}\/api\/v1\/remote_write      sigv4:        region: ${AWS_REGION}      queue_config:        max_samples_per_send: 1000        max_shards: 200        capacity: 2500 <\/code><\/pre>\n<p>\u0412 \u044d\u0442\u043e\u043c \u0444\u0430\u0439\u043b\u0435, \u043c\u044b \u043f\u0440\u043e\u0441\u0438\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0446\u0435\u043b\u0435\u0432\u043e\u0439 Amazon Managed Service for Prometheus, \u0430 \u0441\u0435\u0440\u0432\u0435\u0440 Prometheus, \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043d\u044b\u0439 \u043d\u0430 EKS Kubernetes, \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0441\u044b\u043b\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0441 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430.<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c, \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0441\u0435\u0440\u0432\u0435\u0440 Prometheus \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 Helm:<\/p>\n<pre><code>helm install prometheus-chart-eks prometheus-community\/prometheus -n eks-prometheus-namespace -f prometheus_eks_values.yml <\/code><\/pre>\n<h4>\u0412\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043c\u0435\u0442\u0440\u0438\u043a \u0432 Amazon Managed Grafana<\/h4>\n<p>Grafana \u2014 \u044d\u0442\u043e \u043e\u043f\u0435\u043d\u0441\u043e\u0440\u0441\u043d\u0430\u044f \u0432\u0435\u0431-\u043a\u043e\u043d\u0441\u043e\u043b\u044c \u0434\u043b\u044f \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0438 \u0438 \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445. \u041e\u043d \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0434\u0430\u0448\u0431\u043e\u0440\u0434 \u0441 \u0433\u0440\u0430\u0444\u0438\u043a\u0430\u043c\u0438, \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u043c\u0438, \u0430\u043b\u0435\u0440\u0442\u0430\u043c\u0438 (\u0431\u0443\u0434\u0443\u0447\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0430 \u043a \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0443 \u0434\u0430\u043d\u043d\u044b\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0442\u0430\u043a\u043e\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442). Grafana \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0439 \u0434\u043b\u044f \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430, \u0442\u0440\u0435\u0439\u0441\u0438\u043d\u0433\u0430, \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435. \u0427\u0430\u0441\u0442\u043e \u043e\u043d\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u0442\u0430\u043d\u0434\u0435\u043c\u0435 \u0441 Prometheus: \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0434\u0430\u0448\u0431\u043e\u0440\u0434 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 Prometheus \u043d\u0430 AWS.<\/p>\n<p>Amazon \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 <a href=\"https:\/\/aws.amazon.com\/grafana\/\" rel=\"noopener noreferrer nofollow\">\u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u0443\u044e \u043e\u0431\u043b\u0430\u0447\u043d\u0443\u044e Grafana<\/a>.<\/p>\n<p>\u0414\u0430\u043b\u044c\u0448\u0435 \u044f \u043e\u043f\u0438\u0448\u0443 \u0448\u0430\u0433\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0430\u043c\u0430\u0437\u043e\u043d\u043e\u0432\u0441\u043a\u0443\u044e Grafana \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u0430 \u043d\u0430\u0447\u0430\u043b\u0430 \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043e\u0442 Prometheus.<\/p>\n<p>\u0414\u043b\u044f \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u0432 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u043e\u0439 Grafana, \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c AWS SSO. \u0415\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0430 \u201cAWS Organization\u201d, \u0442\u043e \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f AWS SSO \u043a\u0430\u043a-\u0442\u043e \u0442\u0430\u043a:<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/an\/ha\/on\/anhaonrwvdredncszp_24l5molu.png\" width=\"auto\" height=\"auto\" data-src=\"https:\/\/habrastorage.org\/webt\/an\/ha\/on\/anhaonrwvdredncszp_24l5molu.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0414\u0430\u043b\u044c\u0448\u0435, \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0432\u043e\u0440\u043a\u0441\u043f\u0435\u0439\u0441 \u0434\u043b\u044f Grafana.  Grafana Workspace \u2014 \u044d\u0442\u043e \u043d\u0435\u043a\u0438\u0439 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u043e\u0431\u0449\u0438\u0439 \u0434\u0430\u0448\u0431\u043e\u0440\u0434 \u0434\u043b\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u0432.<\/p>\n<p>\u0418\u0437 \u0440\u0430\u0437\u0434\u0435\u043b\u0430 \u201cAmazon Grafana\u201d > Workspaces, \u043d\u043e\u0432\u044b\u0439 \u0432\u043e\u0440\u043a\u0441\u043f\u0435\u0439\u0441 \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c, \u0432\u044b\u0431\u0440\u0430\u0432 \u043e\u043f\u0446\u0438\u044e \u201cCreate workspace\u201d:<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/ou\/lh\/ge\/oulhge52ti92atyeanif2grkdni.png\" width=\"auto\" height=\"auto\" data-src=\"https:\/\/habrastorage.org\/webt\/ou\/lh\/ge\/oulhge52ti92atyeanif2grkdni.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0443\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0438\u043c\u044f \u0432\u043e\u0440\u043a\u0441\u043f\u0435\u0439\u0441\u0430, \u0432 \u043d\u0430\u0448\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u044d\u0442\u043e \u201cprometheus-metrics\u201d:<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/o6\/d_\/bp\/o6d_bpocnhdyskjjnpkmapp5u1i.png\" width=\"auto\" height=\"auto\" data-src=\"https:\/\/habrastorage.org\/webt\/o6\/d_\/bp\/o6d_bpocnhdyskjjnpkmapp5u1i.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0414\u0430\u043b\u044c\u0448\u0435, \u044d\u0442\u043e\u0442 \u0432\u043e\u0440\u043a\u0441\u043f\u0435\u0439\u0441 \u043d\u0443\u0436\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c. \u041c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c AWS SSO \u043a\u0430\u043a \u043c\u0435\u0442\u043e\u0434 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438, \u0438 \u0442\u043e\u0433\u0434\u0430 \u0440\u0430\u043d\u0435\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439 \u0430\u043a\u043a\u0430\u0443\u043d\u0442 WEB SSO \u043c\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u043b\u043e\u0433\u0438\u043d\u0438\u0442\u044c\u0441\u044f \u0432 Grafana. \u201cPermission Type\u201d \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c \u0432 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u201cService managed\u201d, \u0442\u043e\u0433\u0434\u0430 AWS \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u043d\u0443\u0436\u043d\u044b\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u044f.<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/yx\/y8\/ho\/yxy8hog-tnycwrrfrqdk2xrwiqs.png\" width=\"auto\" height=\"auto\" data-src=\"https:\/\/habrastorage.org\/webt\/yx\/y8\/ho\/yxy8hog-tnycwrrfrqdk2xrwiqs.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041d\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 \u043c\u0430\u0441\u0442\u0435\u0440\u0430, \u043d\u0443\u0436\u043d\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u201cIAM permission access settings\u201d \u0432 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u201cCurrent Account\u201d. \u0412 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 \u201cData Sources\u201d \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0440\u0430\u0437\u043d\u044b\u0435 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445, \u0438 \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0443 \u043d\u0430\u0441 \u0431\u0443\u0434\u0435\u0442 \u043e\u0434\u0438\u043d \u0434\u0430\u0448\u0431\u043e\u0440\u0434 Grafana, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u0440\u0430\u0437\u043d\u044b\u0445 \u0446\u0435\u043b\u0435\u0439 \u0438 \u0440\u0430\u0437\u043d\u044b\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 (Prometheus Monitoring, AWS CloudWatch Monitoring, AWS X-Ray Tracing, \u0438\u0442\u043f). \u0421\u0435\u0439\u0447\u0430\u0441 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u044b\u0431\u0435\u0440\u0435\u043c \u201cAmazon Managed Service for Prometheus\u201d. \u0414\u043b\u044f \u043d\u043e\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0439 \u043f\u0443\u0441\u0442\u044c \u0431\u0443\u0434\u0435\u0442 \u201cAmazon SNS\u201d.<\/p>\n<p>\u041a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u043e\u0440\u043a\u0441\u043f\u0435\u0439\u0441 \u0441\u043e\u0437\u0434\u0430\u043d, \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u043c \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u0442\u044c \u043d\u0430\u0448\u0435\u0433\u043e \u0440\u0430\u043d\u0435\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f AWS SSO \u043a \u044d\u0442\u043e\u043c\u0443 \u0432\u043e\u0440\u043a\u0441\u043f\u0435\u0439\u0441\u0443:<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/hw\/mv\/y-\/hwmvy-lccuyuvuxyhlcglrjwirq.png\" width=\"auto\" height=\"auto\" data-src=\"https:\/\/habrastorage.org\/webt\/hw\/mv\/y-\/hwmvy-lccuyuvuxyhlcglrjwirq.png\"\/><figcaption><\/figcaption><\/figure>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/jl\/we\/vw\/jlwevwyyvo4hzjlbb0z2i-dkwb0.png\" width=\"auto\" height=\"auto\" data-src=\"https:\/\/habrastorage.org\/webt\/jl\/we\/vw\/jlwevwyyvo4hzjlbb0z2i-dkwb0.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0414\u0430\u043b\u0435\u0435, \u043b\u043e\u0433\u0438\u043d\u0438\u043c\u0441\u044f \u0432 \u0432\u043e\u0440\u043a\u0441\u043f\u0435\u0439\u0441 Grafana, \u043f\u0440\u043e\u0439\u0434\u044f \u043d\u0430 URL \u0432\u043e\u0440\u043a\u0441\u043f\u0435\u0439\u0441\u0430, \u0447\u0435\u0440\u0435\u0437 AWS SSO. \u0421\u0440\u0430\u0437\u0443 \u043f\u043e\u0441\u043b\u0435 \u043b\u043e\u0433\u0438\u043d\u0430, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432\u043e\u0440\u043a\u0441\u043f\u0435\u0439\u0441 Prometheus \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u201cData Source\u201d:<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/he\/aj\/be\/heajbept7uvlubyhizmc1imkrcg.png\" width=\"auto\" height=\"auto\" data-src=\"https:\/\/habrastorage.org\/webt\/he\/aj\/be\/heajbept7uvlubyhizmc1imkrcg.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0412 \u044d\u0442\u043e\u043c \u0434\u0430\u0442\u0430\u0441\u043e\u0440\u0441\u0435, \u043d\u0443\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442 Prometheus Query URL, \u043d\u043e \u0431\u0435\u0437 \u0441\u0443\u0444\u0444\u0438\u043a\u0441\u0430  \u201c\/api\/v1\/query\u201d. \u0415\u0449\u0451, \u043d\u0443\u0436\u043d\u043e \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u201cSigV4 auth\u201d \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 \u201cAuth\u201d. \u0412 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 \u201cSigV4 Auth Details\u201d, \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u0440\u0435\u0433\u0438\u043e\u043d (\u0432 \u044d\u0442\u043e\u043c \u0434\u0435\u043c\u043e-\u043f\u0440\u043e\u0435\u043a\u0442\u0435 &#8212; \u201ceu-central-1\u201d) \u0438 \u201cAWS SDK Default\u201d \u043a\u0430\u043a \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438:<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/1w\/in\/ws\/1winwsptnqucbwlp67se4o87lwm.png\" width=\"auto\" height=\"auto\" data-src=\"https:\/\/habrastorage.org\/webt\/1w\/in\/ws\/1winwsptnqucbwlp67se4o87lwm.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0414\u0430\u043b\u044c\u0448\u0435, \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0434\u0430\u0448\u0431\u043e\u0440\u0434 \u0434\u043b\u044f \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 \u043d\u0430\u0448\u0438\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 Spring Boot, \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043d\u044b\u0445 \u043d\u0430 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435 EKS Kubernetes. \u041d\u0430 \u0441\u0430\u0439\u0442\u0435 <a href=\"https:\/\/grafana.com\" rel=\"noopener noreferrer nofollow\">grafana.com<\/a> \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u0434\u0430\u0448\u0431\u043e\u0440\u0434 \u0434\u043b\u044f \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 Spring Boot APM. \u041c\u043e\u0436\u043d\u043e \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u043f\u043e id = &#171;12900&#187;.<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/4m\/7o\/zb\/4m7ozbcmoguqwp8y1c6gnqvwlno.png\" width=\"auto\" height=\"auto\" data-src=\"https:\/\/habrastorage.org\/webt\/4m\/7o\/zb\/4m7ozbcmoguqwp8y1c6gnqvwlno.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0433\u043e \u0438\u043c\u043f\u043e\u0440\u0442\u0430, \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0434\u0430\u0448\u0431\u043e\u0440\u0434 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 Kubernetes, \u0432\u043a\u043b\u044e\u0447\u0430\u044f JVM-\u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0442\u0438\u043f\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f CPU \u0438\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u0436\u0430\u0432\u043d\u043e\u0439 \u043a\u0443\u0447\u0438:<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/tm\/su\/9n\/tmsu9nat_rqdp1sgybwjovjbpho.png\" width=\"auto\" height=\"auto\" data-src=\"https:\/\/habrastorage.org\/webt\/tm\/su\/9n\/tmsu9nat_rqdp1sgybwjovjbpho.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0418 \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u043a\u0430\u043a\u043e\u0439 \u0436\u0435 \u0434\u0436\u0430\u0432\u0438\u0441\u0442 \u043d\u0435 \u0445\u043e\u0447\u0435\u0442 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u0431\u043e\u0440\u0449\u0438\u043a\u0430 \u043c\u0443\u0441\u043e\u0440\u0430?<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/vd\/yw\/wl\/vdywwltiuv5jbuoqmywae7yhq5i.png\" width=\"auto\" height=\"auto\" data-src=\"https:\/\/habrastorage.org\/webt\/vd\/yw\/wl\/vdywwltiuv5jbuoqmywae7yhq5i.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0412 \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043a \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0443 JVM, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u044b\u0439 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 Kubernetes, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f Prometheus \u0438 Grafana. \u0414\u043e\u0431\u0430\u0432\u0438\u0432 <a href=\"https:\/\/grafana.com\/grafana\/dashboards\/6417\" rel=\"noopener noreferrer nofollow\">Grafana dashboard for Kubernetes<\/a> , \u043c\u043e\u0436\u043d\u043e \u0432\u0438\u0434\u0435\u0442\u044c \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 Kubernetes (\u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0443\u0437\u043b\u043e\u0432, \u043f\u043e\u0434\u043e\u0432, \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430). \u0415\u0449\u0435, \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043a\u0430\u0442\u044c \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u0437\u0430 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u043f\u0435\u0440\u0438\u043e\u0434 \u0432\u0440\u0435\u043c\u0435\u043d\u0438. \u0412\u043e\u0442 \u0441\u043d\u0430\u043f\u0448\u043e\u0442 \u0441 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c\u0438 \u0440\u0435\u043f\u043b\u0438\u043a\u0430\u043c\u0438, \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043d\u044b\u043c\u0438 \u043d\u0430 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435 \u0432 \u043d\u0435\u0439\u043c\u0441\u043f\u0435\u0439\u0441\u0435 \u201ceks-prometheus-namespace\u201d:<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/gj\/ms\/z2\/gjmsz2qta4knclzn8kdgfvvh-m8.png\" width=\"auto\" height=\"auto\" data-src=\"https:\/\/habrastorage.org\/webt\/gj\/ms\/z2\/gjmsz2qta4knclzn8kdgfvvh-m8.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0415\u0449\u0451, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0438\u0441\u0442\u043e\u0440\u0438\u044e \u0440\u0435\u043f\u043b\u0438\u043a\u0438 \u0441 \u043d\u0443\u0436\u043d\u044b\u043c\u0438 \u043a\u0440\u0438\u0442\u0435\u0440\u0438\u044f\u043c\u0438 \u043f\u043e\u0438\u0441\u043a\u0430:<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/1j\/qh\/bp\/1jqhbpbjzoginj-yo4dg1e-rzy0.png\" width=\"auto\" height=\"auto\" data-src=\"https:\/\/habrastorage.org\/webt\/1j\/qh\/bp\/1jqhbpbjzoginj-yo4dg1e-rzy0.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0414\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u0430 \u0432\u044b\u0448\u0435 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u0432\u0441\u0435 \u043d\u0430\u0448\u0438 \u0440\u0435\u043f\u043b\u0438\u043a\u0438 (4 \u0434\u043b\u044f \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u0438 4 \u0434\u043b\u044f \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 Prometheus), \u043e\u0442\u043b\u0438\u0447\u043d\u043e \u0441\u0435\u0431\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0438 \u043d\u0435 \u043f\u0430\u0434\u0430\u044e\u0442.<\/p>\n<p>\u041d\u0430 \u043f\u0440\u043e\u0434\u0435 \u043e\u0447\u0435\u043d\u044c \u0432\u0430\u0436\u043d\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u0430\u043b\u0435\u0440\u0442\u043e\u0432, \u0447\u0442\u043e\u0431\u044b \u0432\u043e\u0432\u0440\u0435\u043c\u044f \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c \u043d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u0443\u044e \u0440\u0430\u0431\u043e\u0442\u0443 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u0410\u043b\u0435\u0440\u0442\u044b \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u0442\u0435\u0445\u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0435 \u0431\u044b\u0441\u0442\u0440\u043e \u043e\u0442\u0440\u0435\u0430\u0433\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u043e\u0448\u0438\u0431\u043a\u0443 \u043d\u0430 \u043f\u0440\u043e\u0434\u0435. \u0410\u043b\u0435\u0440\u0442\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b, \u0435\u0441\u043b\u0438 \u0432\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u043f\u043e\u043d\u044f\u0442\u043d\u044b\u0435 SLA\/SLO \u043d\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435.<\/p>\n<p>\u0412\u043e\u0442 \u043f\u0430\u0440\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u0430\u043b\u0435\u0440\u0442\u0430\u0445:<\/p>\n<ul>\n<li>\n<p>CPU \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0431\u043e\u043b\u0435\u0435 \u0447\u0435\u043c \u043d\u0430 80%<\/p>\n<\/li>\n<li>\n<p>RAM \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0431\u043e\u043b\u0435\u0435 \u0447\u0435\u043c \u043d\u0430 80%<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u0434\u044b \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0436\u0430\u044e\u0442\u0441\u044f \u043a\u0430\u0436\u0434\u044b\u0435 10 \u043c\u0438\u043d\u0443\u0442<\/p>\n<\/li>\n<li>\n<p>\u0411\u0430\u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0430 \u043d\u0430 90%<\/p>\n<\/li>\n<\/ul>\n<p>\u041a\u043e\u0433\u0434\u0430 \u0443 \u0432\u0430\u0441 \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u043b \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u0430\u043b\u0435\u0440\u0442, \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0442\u0440\u0438\u0433\u0433\u0435\u0440, \u0441\u043e\u043e\u0431\u0449\u0430\u044e\u0449\u0438\u0439 \u043e\u0431 \u044d\u0442\u043e\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u0435 \u0442\u0435\u0445\u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u0438\u043b\u0438 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u0438\u043a\u0430\u043c. \u0412 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a\u043e\u0439 \u0430\u043b\u0435\u0440\u0442 \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u043b, \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u043d\u044b\u0435 \u043a\u0430\u043d\u0430\u043b\u044b \u043e\u043f\u043e\u0432\u0435\u0449\u0435\u043d\u0438\u044f: \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u0443\u044e \u043f\u043e\u0447\u0442\u0443, SMS, \u0447\u0430\u0442\u044b.<\/p>\n<h3>\u0418\u0442\u043e\u0433\u0438<\/h3>\n<p>\u0412 \u044d\u0442\u043e\u043c \u0433\u0430\u0439\u0434\u0435 \u043c\u044b \u0441\u043e\u0432\u0435\u0440\u0448\u0438\u043b\u0438 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043f\u0443\u0442\u0435\u0448\u0435\u0441\u0442\u0432\u0438\u0435 \u043f\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432. \u041e\u043d\u043e \u043d\u0430\u0447\u0430\u043b\u043e\u0441\u044c \u0441 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043a\u043e\u0434\u0430 \u0432 IDE \u0438 \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043b\u043e\u0441\u044c \u043d\u0430\u0431\u043b\u044e\u0434\u0435\u043d\u0438\u0435\u043c \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432 \u0432 Grafana.<\/p>\n<p>\u041d\u0430\u0434\u0435\u044e\u0441\u044c, \u044d\u0442\u043e\u0442 \u0433\u0430\u0439\u0434 \u043e\u043a\u0430\u0436\u0435\u0442\u0441\u044f \u0445\u043e\u0440\u043e\u0448\u0435\u0439 \u043e\u0442\u043f\u0440\u0430\u0432\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u043e\u0439 \u0434\u043b\u044f \u043b\u044e\u0434\u0435\u0439, \u0432 \u043f\u0435\u0440\u0432\u044b\u0439 \u0440\u0430\u0437 \u043f\u043e\u0433\u0440\u0443\u0436\u0430\u044e\u0449\u0438\u0445\u0441\u044f \u0432 \u0441\u0442\u0440\u0430\u0448\u043d\u044b\u0439 \u0432\u043e\u043b\u0448\u0435\u0431\u043d\u044b\u0439 \u043c\u0438\u0440 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u043d\u0430 Java \u0438 \u0432\u0441\u0435\u0433\u043e \u0442\u043e\u0433\u043e DevOps \u0430\u0434\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0436\u0434\u0451\u0442 \u0432\u0430\u0441 \u043f\u0440\u0438 \u0432\u0441\u0442\u0440\u0435\u0447\u0435 \u0441 \u043e\u0431\u043b\u0430\u0447\u043d\u044b\u043c\u0438 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430\u043c\u0438.<\/p>\n<p>\u0412\u0441\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043e\u0431 \u043e\u043f\u0435\u0447\u0430\u0442\u043a\u0430\u0445, \u043e\u0442\u0432\u0440\u0430\u0442\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0430\u043d\u0433\u043b\u0438\u0446\u0438\u0437\u043c\u0430\u0445, \u0431\u0438\u0442\u044b\u0445 \u0441\u0441\u044b\u043b\u043a\u0430\u0445 \u0438 \u043f\u0440\u043e\u0447\u0438\u0445 \u0432\u043e\u043f\u0440\u043e\u0441\u0430\u0445 \u043f\u043e \u0444\u043e\u0440\u043c\u0435, \u0430 \u043d\u0435 \u043f\u043e \u0441\u0443\u0442\u0438 \u2014 \u043f\u0440\u043e\u0448\u0443 \u043f\u0440\u043e\u0439\u0442\u0438 \u0441 \u043d\u0438\u043c\u0438 \u0432 \u043b\u0438\u0447\u043a\u0443, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u043c\u0443\u0441\u043e\u0440\u0438\u0442\u044c \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0445\u043e\u0442\u0438\u0442\u0435 \u043f\u043e\u043e\u0431\u0449\u0430\u0442\u044c\u0441\u044f \u0441\u043e \u043c\u043d\u043e\u0439 \u043f\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443, \u043b\u0443\u0447\u0448\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0435 \u043b\u0438\u0447\u043a\u0443 \u0425\u0430\u0431\u0440\u0430 (\u0442\u0430\u043c \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u044b \u043a\u0430\u043a\u0438\u0445-\u0442\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439, \u0448\u0430\u043d\u0441\u043e\u0432 \u0440\u0430\u0437\u0433\u0440\u0435\u0441\u0442\u0438 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435\u0442), \u0430 \u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0430 <a href=\"mailto:oleg@axiomjdk.ru\" rel=\"noopener noreferrer nofollow\">\u0440\u0430\u0431\u043e\u0447\u0443\u044e \u043f\u043e\u0447\u0442\u0443<\/a> (\u043f\u043e \u0440\u0430\u0431\u043e\u0447\u0438\u043c \u0432\u043e\u043f\u0440\u043e\u0441\u0430\u043c), \u043b\u0438\u0431\u043e \u0432 <a href=\"https:\/\/www.facebook.com\/olegchir\" rel=\"noopener noreferrer nofollow\">\u043b\u0438\u0447\u043d\u044b\u0439 Facebook<\/a> \u0438 <a href=\"https:\/\/oleg@jetstorm.ru\" rel=\"noopener noreferrer nofollow\">\u043b\u0438\u0447\u043d\u0443\u044e \u043f\u043e\u0447\u0442\u0443<\/a> (\u043f\u043e \u043f\u0440\u0438\u0432\u0430\u0442\u043d\u044b\u043c \u0432\u043e\u043f\u0440\u043e\u0441\u0430\u043c).<\/p>\n<p>\u041e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u043f\u0440\u043e\u0441\u044c\u0431\u0430 \u043a <strong>\u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u0430\u043c \u043e\u0431\u043b\u0430\u0447\u043d\u044b\u0445 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u043e\u0432<\/strong>. \u0415\u0441\u043b\u0438 \u0432\u044b \u0433\u043e\u0442\u043e\u0432\u044b \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u043e\u043c\u043e\u0449\u044c \u0432 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u043d\u0435 \u0434\u043b\u044f Amazon, \u0430 \u0434\u043b\u044f \u0432\u0430\u0448\u0438\u0445 \u043e\u0431\u043b\u0430\u043a\u043e\u0432 (SberCloud, MTS Cloud, Selectel, Yandex.Cloud, VK cloud solutions, \u0438\u0442\u043f), \u0441\u0432\u044f\u0436\u0438\u0442\u0435\u0441\u044c \u0441\u043e \u043c\u043d\u043e\u0439 \u043b\u044e\u0431\u044b\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c. \u041f\u043e\u043c\u043e\u0449\u044c \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0440\u0430\u0436\u0430\u0442\u044c\u0441\u044f, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 \u044d\u043a\u0441\u043f\u0435\u0440\u0442\u0438\u0437\u0435 \u043f\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044e \u0432\u0430\u0448\u0438\u0445 \u0430\u043d\u0430\u043b\u043e\u0433\u043e\u0432 \u0437\u0430\u0440\u0443\u0431\u0435\u0436\u043d\u044b\u0445 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432, \u043f\u043e\u043c\u043e\u0449\u0438 \u0432 \u0432\u044b\u0447\u0438\u0442\u043a\u0435 \u0441\u0442\u0430\u0442\u044c\u0438, \u043b\u0438\u0431\u043e \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u0434\u0435\u043c\u043e-\u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u0434\u043e \u0432\u0430\u0448\u0438\u0445 \u043e\u0431\u043b\u0430\u043a\u043e\u0432.<\/p>\n<p><strong>\u041f\u0440\u0438\u044f\u0442\u043d\u043e\u0433\u043e \u0421\u0435\u0437\u043e\u043d\u0430 Java \u043d\u0430 \u0425\u0430\u0431\u0440\u0435!<\/strong><\/p>\n<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"v-portal\" style=\"display:none;\"><\/div>\n<\/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\/post\/682720\/\"> https:\/\/habr.com\/ru\/post\/682720\/<\/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<figure class=\"\"><figcaption><\/figcaption><\/figure>\n<p>\u0422\u0443\u0442\u043e\u0440\u0438\u0430\u043b\u044b \u0434\u0435\u043b\u044f\u0442\u0441\u044f \u043d\u0430 \u0434\u0432\u0435 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438: \u043b\u0438\u0431\u043e &#171;\u043a\u0430\u043a \u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u0432\u0443&#187;, \u043b\u0438\u0431\u043e \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u0440\u0430\u0441\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u0442\u044b\u0441\u044f\u0447\u0438 \u0448\u0430\u0433\u043e\u0432 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 &#171;\u043d\u0430\u043f\u0438\u0448\u0438 \u0442\u0443\u0442\u043e\u0440\u0438\u0430\u043b \u0434\u043b\u044f \u0434\u0443\u0440\u0430\u043a\u0430 &#8212; \u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u0443\u0440\u0430\u043a \u0437\u0430\u0445\u043e\u0447\u0435\u0442 \u0435\u0433\u043e \u0447\u0438\u0442\u0430\u0442\u044c&#187;.<\/p>\n<p>\u041a \u043a\u0430\u043a\u043e\u0439 \u0438\u0437 \u0434\u0432\u0443\u0445 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0439 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u044d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u2014 \u0440\u0435\u0448\u0430\u0442\u044c \u0432\u0430\u043c.<\/p>\n<p>\u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0432\u044b \u0443\u0432\u0438\u0434\u0438\u0442\u0435 \u043f\u043e\u0448\u0430\u0433\u043e\u0432\u043e\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 cloud-native \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u0430 \u043d\u0430 Amazon AWS, \u043f\u0440\u0438\u0433\u043e\u0434\u043d\u043e\u0435 \u0434\u043b\u044f &#171;\u0447\u0442\u0435\u043d\u0438\u044f \u0441 \u043b\u0438\u0441\u0442\u0430&#187;. \u0427\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u044f\u0442\u044c, \u0447\u0442\u043e \u0437\u0434\u0435\u0441\u044c \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442, \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0440\u0430\u0437\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442 &#8212; \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043e\u0431\u043b\u0430\u0434\u0430\u0442\u044c \u0436\u0438\u0432\u044b\u043c \u0432\u043e\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435\u043c \u0438 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0442\u0435\u043a\u0441\u0442 \u043f\u043e \u0434\u0438\u0430\u0433\u043e\u043d\u0430\u043b\u0438. \u0415\u0441\u043b\u0438 \u0436\u0435 \u0432\u044b \u0432\u0441\u0451-\u0442\u0430\u043a\u0438 \u0437\u0430\u0445\u043e\u0442\u0438\u0442\u0435 \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c \u0448\u0430\u0433\u0438, \u0432\u0430\u043c \u0431\u0443\u0434\u0443\u0442 \u0436\u0438\u0437\u043d\u0435\u043d\u043d\u043e \u043d\u0443\u0436\u043d\u044b \u0437\u043d\u0430\u043d\u0438\u044f \u0432\u0438\u0434\u0430, \u043a\u0430\u043a \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043a\u043b\u0430\u0441\u0441\u044b \u0432 IDE \u0438 \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 Spring.<\/p>\n<p>\u0412\u043d\u0430\u0447\u0430\u043b\u0435 \u043c\u044b \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u043f\u0430\u0440\u0443 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u043d\u0430 Spring Boot, \u0434\u043e\u043a\u0435\u0440\u0438\u0437\u0443\u0435\u043c \u0438\u0445, \u0437\u0430\u043b\u044c\u0451\u043c \u0432 AWS, \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u043c \u043a\u0440\u0430\u0441\u0438\u0432\u044b\u0435 \u0434\u043e\u043c\u0435\u043d\u043d\u044b\u0435 \u0438\u043c\u0435\u043d\u0430 \u0438 HTTPS, \u043f\u0440\u0438\u043a\u0440\u0443\u0442\u0438\u043c \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433, Prometheus \u0438 Grafana. \u042d\u0442\u043e \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043f\u0443\u0442\u0435\u0448\u0435\u0441\u0442\u0432\u0438\u0435 \u043f\u043e \u0432\u0441\u0435\u043c \u043a\u0440\u0443\u0433\u0430\u043c \u0430\u0434\u0430, \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0432\u044b \u043d\u0435 \u0432\u0435\u0440\u043d\u0435\u0442\u0435\u0441\u044c \u043f\u0440\u0435\u0436\u043d\u0438\u043c.<\/p>\n<p>\u0422\u0435\u043a\u0441\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 <a href=\"https:\/\/bell-sw.com\/announcements\/2022\/06\/20\/creating-java-microservices-with-spring-boot-and-liberica-jdk\/\" rel=\"noopener noreferrer nofollow\">\u0442\u0435\u043a\u0441\u0442\u043e\u0432<\/a> \u0438 \u0434\u0435\u043c\u043e-\u043f\u0440\u043e\u0435\u043a\u0442\u0430 <a href=\"https:\/\/github.com\/kamaruzzaman\/microservice-customer\" rel=\"noopener noreferrer nofollow\">microservice-customer<\/a> \u0437\u0430 \u0430\u0432\u0442\u043e\u0440\u0441\u0442\u0432\u043e\u043c <a href=\"https:\/\/github.com\/kamaruzzaman\" rel=\"noopener noreferrer nofollow\">@kamaruzzaman<\/a>. \u0415\u0441\u043b\u0438 \u0432\u044b \u043f\u043e\u0442\u0435\u0440\u044f\u043b\u0438 \u043d\u0438\u0442\u044c \u043f\u043e\u0432\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u044f, \u0432\u0441\u0435\u0433\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0439\u0442\u0438 \u043d\u0430 GitHub \u0438 \u043d\u0430\u0439\u0442\u0438 \u0432\u0435\u0441\u044c \u043a\u043e\u0434 \u0432 \u043f\u0440\u0438\u0433\u043e\u0434\u043d\u043e\u043c \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0432\u0438\u0434\u0435.<\/p>\n<p>\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u0432\u0430\u0436\u043d\u0430\u044f \u043e\u0433\u043e\u0432\u043e\u0440\u043a\u0430. \u0412 \u044d\u0442\u043e\u043c \u0433\u0430\u0439\u0434\u0435 \u0431\u0443\u0434\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438 Amazon \u0438 \u043e\u0431\u044b\u0447\u043d\u044b\u0435 \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432\u044b OpenJDK. \u0410\u0432\u0442\u043e\u0440 \u043e\u0441\u043e\u0437\u043d\u0430\u0435\u0442, \u0447\u0442\u043e \u043c\u044b \u0436\u0438\u0432\u0451\u043c \u0432 \u0420\u043e\u0441\u0441\u0438\u0438, \u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0432\u043c\u0435\u0441\u0442\u043e Amazon \u043a\u0443\u0434\u0430 \u043b\u0443\u0447\u0448\u0435 \u043f\u043e\u0434\u043e\u0439\u0434\u0435\u0442 \u0447\u0442\u043e-\u0442\u043e \u0432\u0440\u043e\u0434\u0435 <a href=\"https:\/\/sbercloud.ru\/ru\" rel=\"noopener noreferrer nofollow\">SberCloud<\/a> \u0438\u043b\u0438 <a href=\"https:\/\/cloud.mts.ru\/\" rel=\"noopener noreferrer nofollow\">MTS Cloud<\/a>, \u0430 \u0432\u043c\u0435\u0441\u0442\u043e \u043e\u0431\u044b\u0447\u043d\u043e\u0433\u043e OpenJDK &#8212; <a href=\"https:\/\/axiomjdk.ru\/\" rel=\"noopener noreferrer nofollow\">Axiom JDK<\/a> \u0441 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0435\u0439 \u043f\u043e \u0424\u0421\u0422\u042d\u041a. \u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0440\u043e\u0441\u0441\u0438\u0439\u0441\u043a\u0438\u0445 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0439 &#8212; \u0442\u0435\u043c\u0430 \u0434\u043b\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438. \u0415\u0441\u043b\u0438 \u0432\u044b \u0437\u0430\u0445\u043e\u0442\u0438\u0442\u0435 \u0442\u0430\u043a\u043e\u0432\u0443\u044e \u043f\u043e\u0441\u043b\u0435 \u0447\u0442\u0435\u043d\u0438\u044f \u044d\u0442\u043e\u0433\u043e \u0433\u0430\u0439\u0434\u0430 &#8212; \u043e\u0442\u043c\u0435\u0442\u044c\u0442\u0435\u0441\u044c \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445.<\/p>\n<h3>\u0427\u0430\u0441\u0442\u044c 1. \u041f\u0438\u0448\u0435\u043c \u043a\u043e\u0434 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432<\/h3>\n<h4>\u0412\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438<\/h4>\n<p>\u041a\u0430\u043a\u0443\u044e \u0432\u044b\u0431\u0440\u0430\u0442\u044c Java? \u041c\u043d\u043e\u0433\u0438\u0435 \u0432\u0441\u0451 \u0435\u0449\u0451 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 Oracle JDK \u0438 \u043d\u0435 \u043e\u0441\u043e\u0437\u043d\u0430\u043b\u0438, \u0447\u0442\u043e \u043e\u043d \u0438\u043c\u0435\u0435\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u043e\u043d\u043d\u044b\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b. \u041a \u0441\u0447\u0430\u0441\u0442\u044c\u044e, \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0445 \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432\u043e\u0432 OpenJDK, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u0438 \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c. \u0412\u0441\u0435 \u043e\u043d\u0438 \u043d\u0430 100% \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u044b \u0441\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043e\u043c, \u0438 \u0432\u0441\u0451 \u0442\u0430\u043a\u043e\u0435 \u043f\u0440\u043e\u0447\u0435\u0435, \u0442.\u0435. \u0433\u043e\u0434\u044f\u0442\u0441\u044f \u0434\u043b\u044f \u0441\u0435\u0440\u044c\u0435\u0437\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u0435\u043d\u0430. \u0412\u0435\u0440\u0441\u0438\u044e Java \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u0441\u043c\u044b\u0441\u043b\u0430 \u0431\u0440\u0430\u0442\u044c \u043d\u0438\u0436\u0435 11 \u2014 \u043d\u043e\u0432\u044b\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 \u043a\u0443\u0434\u0430 \u043b\u0443\u0447\u0448\u0435 \u0433\u043e\u0434\u044f\u0442\u0441\u044f \u0434\u043b\u044f \u043e\u0431\u043b\u0430\u0447\u043d\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f.<\/p>\n<p>\u041a\u0430\u043a\u0438\u0435 \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0438? \u0421\u0435\u0439\u0447\u0430\u0441 \u0435\u0441\u0442\u044c \u043a\u0443\u0447\u0430 \u043e\u0442\u043b\u0438\u0447\u043d\u044b\u0445 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u0441\u0442\u044b\u0434\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u043f\u0440\u043e\u0434\u0435 &#8212; Spring (Pivotal), MicroProfile (Eclipse), Quarkus (RedHat), Micronaut (Object Computing), \u0438 \u0434\u0440\u0443\u0433\u0438\u0435.<\/p>\n<p>\u0418\u043c\u0445\u043e, \u0440\u044b\u043d\u043e\u043a \u0441\u0435\u0439\u0447\u0430\u0441 \u0443\u0441\u0442\u0440\u043e\u0435\u043d \u0442\u0430\u043a, \u0447\u0442\u043e Spring \u0437\u0430\u0434\u043e\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043b \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u0432\u0441\u0435\u0445. \u0415\u0441\u043b\u0438 Quarkus \u0438 Micronaut \u0432\u043e\u0441\u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0442\u0441\u044f \u043a\u0430\u043a \u0441\u043c\u0435\u043b\u044b\u0435 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u044b, \u0442\u043e Spring \u0434\u0430\u0432\u043d\u043e \u0437\u0430\u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u043e\u0432\u0430\u043b \u0441\u0435\u0431\u044f \u043a\u0430\u043a &#171;\u0434\u0435\u0444\u043e\u043b\u0442\u043d\u0430\u044f&#187; Java-\u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044f, \u0441 \u0442\u0435\u0445 \u0441\u0430\u043c\u044b\u0445 \u043f\u043e\u0440 \u043a\u0430\u043a JavaEE \u043d\u0430\u0447\u0430\u043b\u0430 \u0442\u0440\u0435\u0449\u0430\u0442\u044c \u043f\u043e \u0448\u0432\u0430\u043c. \u041c\u043e\u0436\u043d\u043e \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u044d\u0442\u043e Spring-\u0448\u043e\u0432\u0438\u043d\u0438\u0437\u043c\u043e\u043c, \u043d\u043e \u043f\u0438\u0441\u0430\u0442\u044c \u0442\u0443\u0442\u043e\u0440\u0438\u0430\u043b \u0441\u0440\u0430\u0437\u0443 \u043f\u043e \u0432\u0441\u0435\u043c\u0443 \u0437\u043e\u043e\u043f\u0430\u0440\u043a\u0443 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0439 &#8212; \u0437\u0430\u0434\u0430\u0447\u0430 \u043d\u0435\u043f\u043e\u0441\u0438\u043b\u044c\u043d\u0430\u044f.<\/p>\n<p>\u041d\u0430\u0432\u0435\u0440\u043d\u043e\u0435, \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0433\u0440\u0443\u0441\u0442\u043d\u043e \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442 \u0438\u0437 \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u0435\u0444\u043e\u043b\u0442\u043d\u044b\u0445 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0439, \u043d\u043e \u0445\u0435\u0439 &#8212; \u0438\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u043e \u043e\u0431\u044b\u0447\u043d\u043e \u0438 \u043d\u0443\u0436\u043d\u043e \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0439 \u0436\u0438\u0437\u043d\u0438. \u0427\u0442\u043e-\u0442\u043e, \u0447\u0442\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0438 \u043d\u0435 \u0441\u043b\u043e\u043c\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u043f\u043e\u043b\u043f\u0443\u0442\u0438.<\/p>\n<h4>\u0413\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u0430<\/h4>\n<p>\u041e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441\u0432\u043e\u044e \u043a\u043e\u043f\u0438\u044e \u0410\u043c\u0430\u0437\u043e\u043d\u0430 \u0438\u043b\u0438 \u041d\u0435\u0442\u0444\u043b\u0438\u043a\u0441\u0430 \u0431\u044b\u043b\u043e \u0431\u044b \u044d\u043f\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0435\u0439, \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u043d\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0435\u0439 \u043f\u043e\u0434 \u0444\u043e\u0440\u043c\u0430\u0442 \u0425\u0430\u0431\u0440\u0430. \u0412\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u043c\u044b \u0441\u043e\u0431\u0435\u0440\u0435\u043c \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043c\u0430\u0433\u0430\u0437\u0438\u043d\u0447\u0438\u043a \u043d\u0430 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043d\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435. \u0411\u044d\u043a\u0435\u043d\u0434 \u0431\u0443\u0434\u0435\u0442 \u0431\u0435\u0437 \u0444\u0440\u043e\u043d\u0442\u0435\u043d\u0434\u0430, \u043a\u0430\u043a \u044d\u0442\u043e \u043c\u043e\u0434\u043d\u043e \u0441\u0435\u0439\u0447\u0430\u0441 \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c &#8212; headless. \u042d\u0442\u043e \u043e\u0442\u043b\u0438\u0447\u043d\u043e\u0435 \u0441\u043b\u043e\u0432\u043e \u0434\u043b\u044f \u043e\u043f\u0440\u0430\u0432\u0434\u0430\u043d\u0438\u044f \u0441\u0432\u043e\u0435\u0439 \u043b\u0435\u043d\u0438, \u0437\u0430\u043f\u043e\u043c\u043d\u0438\u0442\u0435 \u0438 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u0439\u0442\u0435. \u0412 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430, \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0431\u0443\u0434\u0435\u043c \u0447\u0435\u0440\u0435\u0437 HTTP API, \u0442\u043e \u0435\u0441\u0442\u044c, \u0447\u0435\u0440\u0435\u0437 curl \u0438\u043b\u0438 Postman.<\/p>\n<p>\u041c\u044b \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u044b Customer \u0438 Order, \u0438 \u043a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 \u043d\u0438\u0445 \u0431\u0443\u0434\u0435\u0442 \u0434\u0435\u043b\u0430\u0442\u044c \u043e\u0434\u043d\u0443 \u0441\u0432\u043e\u044e \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0443\u044e \u0437\u0430\u0434\u0430\u0447\u0443, \u043a\u0430\u043a \u0438 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u043e \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 \u043a\u0430\u043d\u043e\u043d\u0430\u043c\u0438 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043d\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b, \u0434\u0430 \u0438 \u0445\u043e\u0440\u043e\u0448\u0435\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b \u0432\u043e\u043e\u0431\u0449\u0435 (single responsibility principle).<\/p>\n<p>\u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043f\u0440\u043e\u0435\u043a\u0442 Spring Boot \u0441 \u043d\u0443\u0436\u043d\u044b\u043c\u0438 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044f\u043c\u0438. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0435\u0441\u0442\u044c \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0430\u044f \u0434\u043b\u044f Spring \u0432\u0435\u0431-\u0443\u0442\u0438\u043b\u0438\u0442\u0430 <a href=\"https:\/\/start.spring.io\/\" rel=\"noopener noreferrer nofollow\">Spring Initializr<\/a>.<\/p>\n<p>\u0427\u0442\u043e \u043d\u0430\u043c \u0432\u0430\u0436\u043d\u043e:<\/p>\n<ul>\n<li>\n<p>Project: Gradle \u0438\u043b\u0438 Maven (\u043b\u0443\u0447\u0448\u0435 Gradle)<\/p>\n<\/li>\n<li>\n<p>Language: Java<\/p>\n<\/li>\n<li>\n<p>Spring Boot: 2.4.2 (\u043d\u0443 \u0438\u043b\u0438 \u043a\u0430\u043a\u0430\u044f \u0442\u0430\u043c \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430, \u043e\u043d\u0438 \u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f)<\/p>\n<\/li>\n<li>\n<p>Project Metadata: \u043b\u044e\u0431\u044b\u0435 \u043a\u0430\u043a\u0438\u0435 \u043f\u043e\u043d\u0440\u0430\u0432\u044f\u0442\u0441\u044f<\/p>\n<\/li>\n<li>\n<p>Packaging: JAR<\/p>\n<\/li>\n<li>\n<p>Java: 11<\/p>\n<\/li>\n<li>\n<p>Dependencies: <\/p>\n<ul>\n<li>\n<p>Lombok<\/p>\n<\/li>\n<li>\n<p>Spring Web<\/p>\n<\/li>\n<li>\n<p>Spring Configuration Processor<\/p>\n<\/li>\n<li>\n<p>Spring Boot DevTools<\/p>\n<\/li>\n<li>\n<p>Spring Data MongoDB<\/p>\n<\/li>\n<li>\n<p>Validation<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<figure class=\"\"><figcaption><\/figcaption><\/figure>\n<h4>\u041c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441 Order<\/h4>\n<h4>\u0421\u0443\u0449\u043d\u043e\u0441\u0442\u044c Order<\/h4>\n<p>\u041f\u0440\u043e\u0435\u043a\u0442 \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0430\u043a\u0435\u0442\u043e\u0432, \u043a\u0430\u043a \u0438 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u043e \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 Domain-Driven Design. \u041a\u043b\u0430\u0441\u0441\u044b \u0434\u043e\u043c\u0435\u043d\u0430 &#8212; \u044d\u0442\u043e POJO (\u043f\u0440\u043e\u0441\u0442\u044b\u0435 Java-\u043e\u0431\u044a\u0435\u043a\u0442\u044b), \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u043c\u0435\u0441\u0442\u0435 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 API \u043c\u043e\u0434\u0435\u043b\u0438 \u0434\u0430\u043d\u043d\u044b\u0445. \u042d\u0442\u0438 POJO \u043c\u043e\u0433\u0443\u0442 \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 MongoDB: \u0438\u0445 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u043b\u0435\u043f\u0438\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u043b\u043e\u0451\u0432 DTO (data transfer objects) \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u043c\u0430\u043f\u0438\u0442\u044c \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 REST \u043d\u0430 \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<p>\u0412\u043e\u0442 \u043a\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 POJO \u0434\u043b\u044f \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u0430 Order:<\/p>\n<pre><code class=\"java\">@Document(collection = \"order\") @Getter @Setter @ToString @NoArgsConstructor public class Order implements Serializable {     private static final long serialVersionUID = 1L;     @Id    private String id;     @NotBlank    @Field(\"customer_id\")    private String customerId;     @Field(\"created_at\")    @CreatedDate    private Instant createdAt;     @Field(\"updated_at\")    @LastModifiedDate    private Instant updatedAt;     @Version    public Integer version;     @Field(\"status\")    private OrderStatus status = OrderStatus.CREATED;     @Field(\"payment_status\")    private Boolean paymentStatus = Boolean.FALSE;     @NotNull    @Field(\"payment_method\")    private PaymentType paymentMethod;     @NotNull    @Field(\"payment_details\")    private String paymentDetails;     @Field(\"shipping_address\")    private Address shippingAddress;     @Field(\"products\")    @NotEmpty    private Set&lt;@Valid Product> products; <\/code><\/pre>\n<p>\u042f \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u0441\u0440\u0430\u0437\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <a href=\"https:\/\/projectlombok.org\/\" rel=\"noopener noreferrer nofollow\">Lombok<\/a> , \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u043f\u0438\u0441\u0430\u0442\u044c \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u0448\u0430\u0431\u043b\u043e\u043d\u043d\u044b\u0439 \u043a\u043e\u0434, \u0437\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0442\u0430\u043a \u0445\u0435\u0439\u0442\u044f\u0442 Java. \u0413\u0435\u0442\u0442\u0435\u0440\u044b, \u0441\u0435\u0442\u0442\u0435\u0440\u044b, toString, hashCode, equals. \u041c\u044b \u0436\u0435 \u0445\u043e\u0442\u0438\u043c, \u0447\u0442\u043e\u0431\u044b \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u044b \u0443 \u043d\u0430\u0441 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438\u0441\u044c \u043c\u043e\u0434\u043d\u044b\u0435 \u0438 \u043c\u043e\u043b\u043e\u0434\u0435\u0436\u043d\u044b\u0435? \u0412 \u043b\u044e\u0431\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u044f \u0440\u0435\u0448\u0438\u043b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Lombok, \u0442\u0443\u0442\u043e\u0440\u0438\u0430\u043b \u2014 \u043d\u0435 \u043c\u0435\u0441\u0442\u043e \u0434\u043b\u044f \u0434\u0435\u043c\u043e\u043a\u0440\u0430\u0442\u0438\u0438 \ud83d\ude42<\/p>\n<p>\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u0443\u0434\u0438\u0442 \u0437\u0430\u043a\u0430\u0437\u043e\u0432 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0439 <code>@CreatedDate<\/code>, <code>@LastModifiedDate<\/code> \u0438 <code>@Version<\/code>.<\/p>\n<p>\u041c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441 Order \u0443 \u043d\u0430\u0441 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0432\u0441\u0435\u0433\u043e \u0438\u0437 \u043e\u0434\u043d\u043e\u0439 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438, \u0438 \u0432\u0441\u0435 \u0435\u0435 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 (\u043f\u0440\u043e\u0434\u0443\u043a\u0442\u044b, \u0430\u0434\u0440\u0435\u0441\u0430, \u0438\u0442\u043f) \u0441\u0442\u043e\u0438\u0442 \u0432\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043f\u0440\u044f\u043c\u043e \u0432 \u044d\u0442\u0443 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044e, \u0430 \u043d\u0435 \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e.<\/p>\n<h4>\u0420\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439<\/h4>\n<p>\u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u044f \u0432\u044b\u0431\u0440\u0430\u043b MongoDB. \u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043f\u043e\u0432\u0435\u0440\u0438\u0435, \u0447\u0442\u043e Mongo &#8212; \u0443\u0436\u0430\u0441\u043d\u0430\u044f \u0431\u0430\u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0445, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043d\u0438 \u043d\u0430 \u0447\u0442\u043e \u043d\u0435 \u0433\u043e\u0434\u043d\u0430. \u0418\u0440\u043e\u043d\u0438\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043e\u043d\u0430 \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0434\u043b\u044f \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0445 \u0442\u0443\u0442\u043e\u0440\u0438\u0430\u043b\u043e\u0432. Deal with it.<\/p>\n<p>\u0412 MongoDB \u0435\u0441\u0442\u044c \u0434\u0432\u0430 \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0431\u0430\u0437\u043e\u0439. \u041f\u0435\u0440\u0432\u044b\u0439 &#8212; \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Java Driver, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439, \u043d\u0438\u0437\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u044b\u0439 API \u0431\u0430\u0437\u044b. \u0412\u0442\u043e\u0440\u043e\u0439 \u0438 \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 &#8212; \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Spring Data MongoDB. Spring Data &#8212; \u044d\u0442\u043e \u043f\u0440\u043e\u0435\u043a\u0442 \u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u0442\u0438\u0432\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0430 Spring, \u0446\u0435\u043b\u044c\u044e \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0443\u043d\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430\u043c (SQL, NoSQL, \u0438 \u0442.\u043f.).  \u0418 \u043e\u043d\u0430 \u0442\u043e\u0436\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0438\u0434\u0435\u044e Domain-Driven Design. \u0412 \u044d\u0442\u043e\u0439 \u0434\u0435\u043c\u043a\u0435, \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Spring Data MongoDB \u0447\u0442\u043e\u0431\u044b \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0438 \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u0442\u0435\u043a\u0441\u0442\u0430.<\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435\u043c \u0437\u0430\u043a\u0430\u0437\u043e\u0432 \u0432 \u0431\u0430\u0437\u0443, \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0432\u0441\u0435\u0433\u043e \u043e\u0434\u0438\u043d \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441:<\/p>\n<pre><code class=\"java\">@Repository public interface OrderRepository extends MongoRepository&lt;Order, String> { } <\/code><\/pre>\n<h4>\u041a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u044b<\/h4>\n<p>\u041d\u0430\u0448\u0430 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043d\u0430\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043d\u0430\u0440\u0443\u0436\u0443 API, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043a\u043b\u0438\u0435\u043d\u0442 \u0438\u043b\u0438 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u0434\u0440\u0443\u0433\u043e\u0439 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441 \u043c\u043e\u0436\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0447\u0442\u043e\u0431\u044b \u043e\u0431\u0449\u0430\u0442\u044c\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e REST. Spring MVC \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043f\u0430\u0442\u0442\u0435\u0440\u043d \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u043d\u0430\u0440\u0443\u0436\u0443 REST API, \u0438 \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u044d\u0442\u043e \u0431\u0443\u043a\u0432\u0430\u043b\u044c\u043d\u043e \u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u0440\u043e\u0447\u0435\u043a.<\/p>\n<p>\u0414\u043b\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439, \u0445\u043e\u0440\u043e\u0448\u0430\u044f \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0430 &#8212; \u0437\u0430\u0432\u043e\u0434\u0438\u0442\u044c \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442 <code>\/health<\/code> , \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u0447\u0442\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b\u043e\u0441\u044c \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432 Kubernetes, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0441\u044b\u043b\u0430\u0442\u044c heartbeat-\u0437\u0430\u043f\u0440\u043e\u0441\u044b.<\/p>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430, \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043a\u043b\u0430\u0441\u0441 <code>Health<\/code>:<\/p>\n<pre><code class=\"java\">@Data @NoArgsConstructor @EqualsAndHashCode @ToString public class Health {    private HealthStatus status; } <\/code><\/pre>\n<p>\u0418 \u0434\u043e\u043f\u043e\u043b\u043d\u044f\u044e\u0449\u0438\u0439 \u0435\u0433\u043e \u043a\u043b\u0430\u0441\u0441 <code>HealthStatus<\/code>:<\/p>\n<pre><code class=\"java\">@RestController @RequestMapping(\"\/api\/v1\") public class HealthStatus {    private final Logger log = LoggerFactory.getLogger(HealthResource.class);     @GetMapping(            value = \"\/health\",            produces = \"application\/json\")    public ResponseEntity&lt;Health> getHealth() {        log.debug(\"REST request to get the Health Status\");        final var health = new Health();        health.setStatus(HealthStatus.UP);        return ResponseEntity.ok().body(health);    } } <\/code><\/pre>\n<p>\u0414\u043b\u044f \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u0430 Order, \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442\u044b \u0441\u0435\u0440\u0432\u0438\u0441\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044e\u0442\u0441\u044f \u0432 \u043a\u043b\u0430\u0441\u0441\u0435  <code>OrderResource<\/code> , \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 REST API \u0434\u043b\u044f \u0432\u0441\u0435\u0445 CRUD \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439, \u043e\u0442\u043d\u043e\u0441\u044f\u0449\u0438\u0445\u0441\u044f \u043a \u0437\u0430\u043a\u0430\u0437\u0430\u043c. \u0414\u043b\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u044b, \u0441\u0435\u0439\u0447\u0430\u0441 \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u043c\u0435\u0442\u043e\u0434, createOrder (POST request).<\/p>\n<pre><code class=\"java\">@RestController @RequestMapping(\"\/api\/v1\") public class OrderResource {    private final Logger log = LoggerFactory.getLogger(OrderResource.class);     private static final String ENTITY_NAME = \"order\";     @Value(\"${spring.application.name}\")    private String applicationName;     private final OrderRepository orderRepository;     private final OrderService orderService;     public OrderResource(OrderRepository orderRepository, OrderService orderService) {        this.orderRepository = orderRepository;        this.orderService = orderService;    }     @PostMapping(\"\/orders\")    @Transactional    public ResponseEntity&lt;Order> createOrder(@Valid @RequestBody Order order) throws URISyntaxException {        log.debug(\"REST request to save Order : {}\", order);        if (order.getId() != null) {            throw new ResponseStatusException(HttpStatus.CONFLICT, \"A new order cannot already have an ID\");        }        final var result = orderRepository.save(order);        orderService.createOrder(result);         HttpHeaders headers = new HttpHeaders();        String message = String.format(\"A new %s is created with identifier %s\", ENTITY_NAME, result.getId().toString());        headers.add(\"X-\" + applicationName + \"-alert\", message);        headers.add(\"X-\" + applicationName + \"-params\", result.getId().toString());        return ResponseEntity.created(new URI(\"\/api\/orders\/\" + result.getId())).headers(headers).body(result);    }  } <\/code><\/pre>\n<p>\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0448\u0442\u0440\u0438\u0445 \u2014 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0444\u0430\u0439\u043b\u044b \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 (application.yml, index.html) \u0438 \u043e\u0434\u0438\u043d \u043a\u043b\u0430\u0441\u0441 <code>ApplicationConfiguration<\/code>.<\/p>\n<pre><code class=\"java\">@Configuration public class ApplicationConfiguration {    @Bean    public RestTemplate restTemplate(RestTemplateBuilder builder) {        return builder.build();    } } <\/code><\/pre>\n<p>index.html:<\/p>\n<pre><code>&lt;!DOCTYPE<\/code><\/pre>\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-337076","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/337076","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=337076"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/337076\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=337076"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=337076"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=337076"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}