{"id":302711,"date":"2020-04-29T09:00:25","date_gmt":"2020-04-29T09:00:25","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=302711"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=302711","title":{"rendered":"AWS Lambda in Action. \u0427\u0430\u0441\u0442\u044c 2: \u0437\u043d\u0430\u043a\u043e\u043c\u0438\u043c\u0441\u044f \u0441 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f"},"content":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\" data-io-article-url=\"https:\/\/habr.com\/ru\/company\/dins\/blog\/496756\/\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/7w\/hp\/bb\/7whpbbwttpekzxdq4-7sgs28rio.png\"><\/p>\n<p>  \u042d\u0442\u043e\u0442 \u0433\u0430\u0439\u0434 \u2014 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043b\u0438\u0447\u043d\u043e\u0433\u043e \u043e\u043f\u044b\u0442\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f Serverless-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043c\u0430\u043d\u0435\u0432\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u00ab\u043a\u043e\u0441\u0442\u044b\u043b\u044f\u043c\u0438\u00bb \u0438 \u00ab\u0432\u0435\u043b\u043e\u0441\u0438\u043f\u0435\u0434\u0430\u043c\u0438\u00bb \u043f\u0440\u0438 \u043f\u043e\u043f\u044b\u0442\u043a\u0430\u0445 \u0438\u0445 \u043f\u0440\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c. \u041a\u043e\u0433\u0434\u0430 \u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u043b \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c\u0441\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u043e\u0439 Serverless-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439, \u0432\u043e \u0432\u0441\u0435\u043c \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u0440\u0443\u043a\u0430\u043c\u0438, \u043d\u0435 \u0431\u044b\u043b\u043e \u0447\u0435\u0442\u043a\u0438\u0445 \u0433\u0430\u0439\u0434\u043e\u0432 \u0438\u043b\u0438 \u0443\u0434\u043e\u0431\u043d\u044b\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. <\/p>\n<p>  \u0421\u0435\u0439\u0447\u0430\u0441 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f: \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0441\u0442\u0430\u043b\u0438 \u043f\u043e\u044f\u0432\u043b\u044f\u0442\u044c\u0441\u044f, \u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u043c\u0430\u043d\u0443\u0430\u043b\u044b \u043f\u043e \u0438\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044e \u043d\u0435\u043f\u0440\u043e\u0441\u0442\u043e. \u0412 \u044d\u0442\u043e\u043c \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0435 \u044f \u043f\u043e\u043a\u0430\u0436\u0443 \u043d\u0430 \u043f\u0440\u043e\u0441\u0442\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435, \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u043d\u043e\u0432\u044b\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u043e\u043c. \u0412\u044b \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u043b\u0435\u0433\u043a\u043e \u0435\u0433\u043e \u043e\u0441\u0432\u043e\u0438\u0442\u044c \u0438 \u043e\u0431\u043e\u0439\u0442\u0438 \u0442\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0438 \u0431\u0430\u0433\u0438, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u00ab\u043f\u043e\u0441\u0447\u0430\u0441\u0442\u043b\u0438\u0432\u0438\u043b\u043e\u0441\u044c\u00bb \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u0442\u044c\u0441\u044f \u043c\u043d\u0435. <\/p>\n<p>  \u0412\u044b \u0443\u0437\u043d\u0430\u0435\u0442\u0435, \u043a\u0430\u043a \u0432\u0435\u0441\u0442\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043d\u043e\u0439 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 AWS, SAM-CLI \u0438 IntelljIDEA. \u0415\u0449\u0435 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043f\u0440\u043e \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435: \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435, E2E \u0438 \u044e\u043d\u0438\u0442-\u0442\u0435\u0441\u0442\u044b. \u0410 \u043d\u0430\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u043a \u043e\u0431\u0441\u0443\u0434\u0438\u043c, \u0432\u043e \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043e\u0431\u043e\u0439\u0434\u0435\u0442\u0441\u044f \u0442\u0430\u043a\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 (\u0441\u043f\u043e\u0439\u043b\u0435\u0440: \u043d\u0430 \u043d\u0435\u043c \u043c\u043e\u0436\u043d\u043e \u043d\u0435\u043f\u043b\u043e\u0445\u043e \u0441\u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0442\u044c). <\/p>\n<p>  \u0421\u0442\u0430\u0442\u044c\u044f \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0435\u0437\u043d\u0430 \u0442\u0435\u043c, \u043a\u0442\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0432\u0435\u0441\u0442\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443 Serverless-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0438 \u0435\u0449\u0435 \u043d\u0435 \u0437\u043d\u0430\u043a\u043e\u043c \u0441 \u0435\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0435\u043c \u0438 \u043f\u043e\u0434\u0445\u043e\u0434\u0430\u043c\u0438. <br \/>  <a name=\"habracut\"><\/a><\/p>\n<h1>\u041e \u0447\u0435\u043c \u043f\u043e\u0439\u0434\u0435\u0442 \u0440\u0435\u0447\u044c<\/h1>\n<p>  \u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0410\u043b\u0435\u043a\u0441\u0430\u043d\u0434\u0440 \u0413\u0440\u0443\u0437\u0434\u0435\u0432, \u0438 \u044f \u0440\u0430\u0434 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432\u0442\u043e\u0440\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u0440\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443 Serverless-\u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043d\u0430 \u0431\u0430\u0437\u0435 AWS Lambda. \u0412 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u0438 \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043e \u0441\u043f\u043e\u0441\u043e\u0431\u0430\u0445 \u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0438\u0437 \u043f\u0435\u0440\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 (<a href=\"https:\/\/habr.com\/ru\/company\/dins\/blog\/486648\/\">AWS Lambda in Action \u043d\u0430 Java 11. \u0417\u0430\u0435\u0437\u0436\u0430\u0435\u043c \u0441 Serverless \u0432 \u00abProduction\u00bb<\/a>).<\/p>\n<p>  \u0421 \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0448\u043b\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0431\u044b\u043b\u043e \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u0435\u0440\u0435\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043e, \u043d\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0441\u043c\u044b\u0441\u043b \u043e\u0441\u0442\u0430\u043b\u0441\u044f \u043f\u0440\u0435\u0436\u043d\u0438\u043c. \u042d\u0442\u043e \u0431\u0430\u043d\u0430\u043b\u044c\u043d\u0430\u044f HTML-\u0444\u043e\u0440\u043c\u0430 \u00abContact Us\u00bb, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c HTTP-\u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0441 \u0444\u043e\u0440\u043c\u044b \u043d\u0430 API Gateway, \u0430 \u043e\u043d \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043f\u0440\u043e\u043a\u0441\u0438\u0440\u0443\u0435\u0442 \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0432 AWS Lambda. \u041b\u044f\u043c\u0431\u0434\u0430 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 DynamoDB \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u043f\u0438\u0441\u044c\u043c\u043e \u0447\u0435\u0440\u0435\u0437 AWS SES. \u0414\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0430 \u043d\u0438\u0436\u0435.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/ac\/zp\/wd\/aczpwdfofm_vp7xqrjdis2gsblu.png\" alt=\"Components diagram\"><\/p>\n<p>  <\/p>\n<h1>\u0421\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435<\/h1>\n<p>  <\/p>\n<ol>\n<li><a href=\"#Part1\">\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043d\u043e\u0439 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 AWS<\/a><\/li>\n<li><a href=\"#Part2\">\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c SAM-CLI<\/a><\/li>\n<li><a href=\"#Part3\">\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c IntelljIDEA<\/a><\/li>\n<li><a href=\"#Part4\">\u0412\u0438\u0434\u044b \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f<\/a><\/li>\n<li><a href=\"#Part5\">\u0421\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u044c Serverless-\u0440\u0435\u0448\u0435\u043d\u0438\u0439<\/a><\/li>\n<li><a href=\"#Part6\">\u041f\u043e\u043b\u0435\u0437\u043d\u044b\u0435 \u0441\u0441\u044b\u043b\u043a\u0438<\/a><\/li>\n<\/ol>\n<p>  <a name=\"Part1\"><\/a>  <\/p>\n<h1>1. \u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043d\u043e\u0439 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 AWS<\/h1>\n<h3>\u041a\u043e\u043d\u0441\u043e\u043b\u044c AWS<\/h3>\n<p>  \u041a\u043e\u043d\u0441\u043e\u043b\u044c AWS \u0434\u0430\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043b\u044e\u0431\u043e\u043c\u0443 AWS-\u0441\u0435\u0440\u0432\u0438\u0441\u0443, \u0431\u0443\u0434\u044c \u0442\u043e \u0432\u0430\u0448 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440 EC2, \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0440\u043e\u043b\u0435\u0439\/\u043f\u043e\u043b\u0438\u0442\u0438\u043a \u0434\u043e\u0441\u0442\u0443\u043f\u0430 IAM \u0438\u043b\u0438 AWS Lambda \u0441\u043e \u0432\u0441\u0435\u043c\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u043c\u0435\u043d\u044f\u0442\u044c \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0431\u0435\u0437 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u0447\u0435\u0440\u0435\u0437 \u0441\u0438\u0441\u0442\u0435\u043c\u044b Continuous Delivery\/Continuous Deployment.<\/p>\n<p>  \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0443\u0441\u043a\u043e\u0440\u044f\u0435\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u0438\u0434\u044b \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u0410 \u0435\u0449\u0435 \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0432\u0430\u0448\u0438\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439.<\/p>\n<h3>\u041a\u043e\u043d\u0441\u043e\u043b\u044c API Gateway<\/h3>\n<p>  \u041a\u043e\u043d\u0441\u043e\u043b\u044c \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0442\u044c \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0432\u0430\u0448\u0438\u043c\u0438 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f\u043c\u0438 \u0438 \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u043e\u0439 \u043d\u043e\u0432\u044b\u0445 \u0432\u0435\u0440\u0441\u0438\u0439. \u042f \u043f\u043e\u043a\u0430\u0436\u0443, \u043a\u0430\u043a \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u0432\u0435\u0440\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f.<\/p>\n<p>  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u044d\u0442\u0430 \u00ab\u043c\u0430\u0433\u0438\u0447\u0435\u0441\u043a\u0430\u044f\u00bb \u043a\u043e\u043d\u0441\u043e\u043b\u044c \u043d\u0430 \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442\u0435 \u0432\u043a\u043b\u0430\u0434\u043a\u0438 Resources \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u00abContact Us\u00bb: <\/p>\n<p>  <a href=\"https:\/\/habrastorage.org\/webt\/f7\/fe\/s2\/f7fes2uz9qxcpj9dqmko6zuxalc.png\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/f7\/fe\/s2\/f7fes2uz9qxcpj9dqmko6zuxalc.png\" alt=\"Gateway resources\"><\/a><\/p>\n<p>  \u041d\u0430 \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442\u0435 \u0432\u0438\u0434\u043d\u043e, \u043a\u0430\u043a \u0437\u0430\u043f\u0440\u043e\u0441 \u043e\u0442 \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u0447\u0435\u0440\u0435\u0437 API Gateway \u043f\u043e\u043f\u0430\u0434\u0435\u0442 \u0432 \u043b\u044f\u043c\u0431\u0434\u0443 \u0438 \u043a\u0430\u043a \u043e\u0442\u0432\u0435\u0442 \u0432\u0435\u0440\u043d\u0435\u0442\u0441\u044f \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u043a\u043b\u0438\u0435\u043d\u0442\u0443 \u043f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 \u043c\u0435\u0442\u043e\u0434\u043e\u043c POST \u0440\u0435\u0441\u0443\u0440\u0441\u0430\/contact.<\/p>\n<ul>\n<li><i>Method request<\/i> \u2014 \u043f\u0435\u0440\u0432\u044b\u0439 \u044d\u0442\u0430\u043f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u0430. \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a, \u043d\u043e \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438.  <\/li>\n<li><i>Integration request<\/i> \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e HTTP-\u0437\u0430\u043f\u0440\u043e\u0441 \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u043b\u044f\u043c\u0431\u0434\u0443 \u0432 \u043e\u0441\u043e\u0431\u043e\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u0435: \u043e\u043d \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0432\u0441\u044e \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u0443\u044e \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u043c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0438 \u0434\u0435\u0442\u0430\u043b\u0438 \u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c\u043e\u043c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435.<\/li>\n<li><i>Integration response<\/i> \u0433\u043e\u0432\u043e\u0440\u0438\u0442 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e HTTP-\u043a\u043b\u0438\u0435\u043d\u0442\u0443 \u043e\u0442\u0432\u0435\u0442 \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u043f\u0440\u044f\u043c\u0438\u043a\u043e\u043c \u043e\u0442 \u043b\u044f\u043c\u0431\u0434\u044b. \u0421\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u0432\u044b \u0441\u0430\u043c\u0438 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442\u0435 \u0437\u0430 \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0442\u0435\u043b\u0430 \u043e\u0442\u0432\u0435\u0442\u0430 \u0432 \u043b\u044f\u043c\u0431\u0434\u0435.<\/li>\n<\/ul>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">Disable proxy integration<\/b>                         <\/p>\n<div class=\"spoiler_text\">\u0422\u0438\u043f \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0438 \u043e\u0442\u0432\u0435\u0442\u0430 \u0434\u043b\u044f API Gateway \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c, \u0435\u0441\u043b\u0438 \u0443\u0431\u0440\u0430\u0442\u044c \u0433\u0430\u043b\u043a\u0443 <i>Use Lambda Proxy integration<\/i> \u0432 \u0431\u043b\u043e\u043a\u0435 <i>Integration Request<\/i>. \u0422\u043e\u0433\u0434\u0430 \u0443 \u0432\u0430\u0441 \u0431\u0443\u0434\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0441\u0442\u0443\u043f\u0430\u044e\u0449\u0438\u0435 \u043a \u043b\u044f\u043c\u0431\u0434\u0435 \u0434\u0430\u043d\u043d\u044b\u0435. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441 \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0432 \u043b\u044f\u043c\u0431\u0434\u0443 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 \u043c\u043e\u0434\u0435\u043b\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043e\u0436\u0438\u0434\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0432\u0445\u043e\u0434\u0435 \u043b\u044f\u043c\u0431\u0434\u044b.<\/p><\/div>\n<\/p><\/div>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">Integration request sample<\/b>                         <\/p>\n<div class=\"spoiler_text\">\u041f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0447\u0435\u0440\u0435\u0437 SAM init \u0443 \u0432\u0430\u0441 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f <i>events<\/i>, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u043c\u0435\u0440 \u0437\u0430\u043f\u0440\u043e\u0441\u0430, \u043f\u043e\u0441\u0442\u0443\u043f\u0430\u044e\u0449\u0435\u0433\u043e \u0432 \u043b\u044f\u043c\u0431\u0434\u0443 \u043f\u0440\u0438 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u043e\u043c <i>Integration request<\/i>. \u041e\u043d \u043d\u0435 \u0441\u0430\u043c\u044b\u0439 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0439, \u0442\u0430\u043a \u043a\u0430\u043a AWS \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0447\u0430\u0441\u0442\u043e \u0432\u044b\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f, \u043d\u043e \u0434\u043b\u044f \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0441\u0433\u043e\u0434\u0438\u0442\u0441\u044f. \u0412\u0435\u0440\u043d\u0435\u043c\u0441\u044f \u043a \u044d\u0442\u043e\u043c\u0443 \u0444\u0430\u0439\u043b\u0443 \u0432 \u0447\u0430\u0441\u0442\u0438 \u043f\u0440\u043e \u043a\u043e\u043d\u0441\u043e\u043b\u044c AWS Lambda.  <\/div>\n<\/p><\/div>\n<p>  \u041d\u0430\u0436\u043c\u0438\u0442\u0435 \u043d\u0430 \u043a\u043d\u043e\u043f\u043a\u0443 TEST, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u042d\u0442\u043e \u043e\u0442\u043a\u0440\u043e\u0435\u0442 \u0432\u0430\u043c \u0434\u043e\u0441\u0442\u0443\u043f \u043a HTTP-\u0432\u044b\u0437\u043e\u0432\u0430\u043c API Gateway.<\/p>\n<p>  \u041d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442\u0435 \u044f \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u043b \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 \u043f\u0440\u043e\u0433\u0440\u0435\u0432 \u043b\u044f\u043c\u0431\u0434\u044b: <br \/>  <a href=\"https:\/\/habrastorage.org\/webt\/ia\/kf\/ga\/iakfgafb8t4-9aocr5o-e5dspy0.png\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/ia\/kf\/ga\/iakfgafb8t4-9aocr5o-e5dspy0.png\" alt=\"Gateway test request\"><\/a><\/p>\n<p>  \u041a\u0440\u043e\u043c\u0435 \u043e\u0442\u0432\u0435\u0442\u0430 \u043d\u0430 \u0437\u0430\u043f\u0440\u043e\u0441 API Gateway \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442 \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043b\u043e\u0433\u0438. \u0422\u0430\u043a\u0438\u043c \u0436\u0435 \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441, \u043f\u043e\u0434\u0441\u0442\u0430\u0432\u0438\u0432 \u0432 \u0442\u0435\u043b\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430 JSON \u0432 \u0432\u0438\u0434\u0435:  <\/p>\n<pre><code class=\"javascript\">{     &quot;subject&quot;: &quot;Email subject&quot;,     &quot;question&quot;: &quot;Your question\u2026&quot;,     &quot;username&quot;: &quot;Your name\u2026&quot;,     &quot;phone&quot;: &quot;Your phone\u2026&quot;,     &quot;email&quot;: &quot;Your email\u2026&quot; }  <\/code><\/pre>\n<p>  \u0422\u0430\u043a \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0430\u0448\u0435 API \u0431\u0435\u0437 \u043a\u0430\u043a\u0438\u0445-\u043b\u0438\u0431\u043e UI \u0444\u043e\u0440\u043c \u0438 Front-end \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439, \u0442\u0435\u043c \u0441\u0430\u043c\u044b\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0432 \u0444\u0440\u043e\u043d\u0442- \u0438 \u0431\u044d\u043a\u0435\u043d\u0434-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u044b \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0439 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Postman \u0438\u043b\u0438 \u043b\u044e\u0431\u043e\u0439 \u0434\u0440\u0443\u0433\u043e\u0439 HTTP-\u043a\u043b\u0438\u0435\u043d\u0442.<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">Postman \u043a\u0430\u043a \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u0430<\/b>                         <\/p>\n<div class=\"spoiler_text\">\u0414\u043b\u044f \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043b\u044e\u0431\u044b\u0445 HTTP-\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u044f \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0438\u0442\u0430\u044e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 Postman. \u041e\u043d\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0431\u044b\u0441\u0442\u0440\u043e \u0438 \u0443\u0434\u043e\u0431\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441\u044b. \u041d\u043e \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 API Gateway \u043a\u043e\u043d\u0441\u043e\u043b\u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u0430\u043c \u0434\u0435\u043b\u0430\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0438\u0437 AWS \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f, \u043d\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u0432 \u0437\u0430\u043f\u0440\u043e\u0441 \u0438 \u0442\u0435\u043c \u0441\u0430\u043c\u044b\u043c \u0443\u0441\u043a\u043e\u0440\u044f\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 API. \u0422\u0430\u043a\u0436\u0435, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043a\u043e\u043d\u0441\u043e\u043b\u044c, \u0432\u044b \u043d\u0435 \u043f\u043b\u0430\u0442\u0438\u0442\u0435 \u0437\u0430 \u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u0438\u0437 AWS \u0442\u0440\u0430\u0444\u0438\u043a.  <\/div>\n<\/p><\/div>\n<h3>\u041a\u043e\u043d\u0441\u043e\u043b\u044c Lambda<\/h3>\n<p>  \u0414\u043b\u044f \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043a\u0440\u043e\u043c\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0447\u0435\u0440\u0435\u0437 API Gateway \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043d\u0443\u044e \u043a\u043e\u043d\u0441\u043e\u043b\u044c AWS Lambda. <\/p>\n<p>  \u0415\u0435 \u044d\u043a\u0440\u0430\u043d \u0440\u0430\u0437\u0431\u0438\u0442 \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0431\u043b\u043e\u043a\u043e\u0432:  <\/p>\n<ul>\n<li><i>Designer<\/i> \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u044b \u0438 \u0441\u043b\u043e\u0438. \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u043e\u043c \u0432\u044b\u0441\u0442\u0443\u043f\u0430\u0435\u0442 API Gateway. \u0415\u0441\u043b\u0438 \u043c\u044b \u043d\u0430 \u043d\u0435\u0433\u043e \u043a\u043b\u0438\u043a\u043d\u0435\u043c, \u043e\u0442\u043a\u0440\u043e\u0435\u0442\u0441\u044f \u0432\u0441\u044f \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f: URL, stage, resource path.<\/li>\n<li><i>Aliases<\/i> (\u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u043f\u0440\u0438 \u0432\u044b\u0431\u043e\u0440\u0435 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u0430\u043b\u0438\u0430\u0441\u0430 \u043b\u044f\u043c\u0431\u0434\u044b) \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0442\u0440\u0430\u0444\u0438\u043a\u0430 \u043f\u043e \u0432\u0435\u0440\u0441\u0438\u044f\u043c \u043b\u044f\u043c\u0431\u0434\u044b. \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043e\u0431 \u044d\u0442\u043e\u043c \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u043f\u0443\u043d\u043a\u0442\u0435.<br \/>  <a href=\"https:\/\/habrastorage.org\/webt\/hs\/3s\/b8\/hs3sb8_jvymnm4bnmtn1yvgcamg.png\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/hs\/3s\/b8\/hs3sb8_jvymnm4bnmtn1yvgcamg.png\"><\/a><\/li>\n<li><i>Function code<\/i> \u2014 \u044d\u0442\u043e \u043e\u0431\u0449\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u043a\u043e\u0434\u0435 \u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430. \u042d\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e zip-\u0444\u0430\u0439\u043b \u0441 \u043a\u043e\u0434\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043d\u043e\u0432\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e. \u0415\u0441\u043b\u0438 \u0432\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435 \u043d\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u043c\u044b\u0435 \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u044f\u0437\u044b\u043a\u0438, \u0442\u043e \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f Function code \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c \u043a\u043e\u0434 \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043d\u043e\u043c \u043e\u043a\u043d\u0435. \u042d\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u0443\u0434\u043e\u0431\u043d\u043e \u043f\u0440\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043d\u0430 Python\/NodeJs. <br \/>  <a href=\"https:\/\/habrastorage.org\/webt\/1l\/p1\/0y\/1lp10yo_zd7tcbcr7cyu-dyxtlw.png\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/1l\/p1\/0y\/1lp10yo_zd7tcbcr7cyu-dyxtlw.png\"><\/a><\/li>\n<li><i>Environment variables.<\/i> \u0414\u0443\u043c\u0430\u044e, \u0441 \u044d\u0442\u0438\u043c \u0432\u0441\u0435 \u043f\u043e\u043d\u044f\u0442\u043d\u043e \u0438\u0437 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f. \u041b\u044e\u0431\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u0438\u043c\u0435\u0442\u044c \u0440\u0430\u0437\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u0440\u0430\u0437\u043d\u044b\u0445 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0439, \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u043d\u0435\u0441\u0442\u0438 \u0432 \u044d\u0442\u043e\u0442 \u0431\u043b\u043e\u043a. \u0412 \u043c\u043e\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0438\u043c\u0435\u0439\u043b, \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0438 \u043f\u0440\u043e\u0447\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043c\u043e\u0433\u043b\u0438 \u0431\u044b \u043b\u0435\u0436\u0430\u0442\u044c \u0442\u0443\u0442. \u041a\u0441\u0442\u0430\u0442\u0438, \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0435\u0441\u043b\u0438 \u0447\u0435\u0440\u0435\u0437 \u044d\u0442\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0432\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0435 \u043a\u043e\u043d\u0444\u0438\u0434\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435.<br \/>  <a href=\"https:\/\/habrastorage.org\/webt\/hx\/sg\/z_\/hxsgz_-adludvt4phrfgebnjqa4.png\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/hx\/sg\/z_\/hxsgz_-adludvt4phrfgebnjqa4.png\"><\/a><\/li>\n<li><i>Tags<\/i> \u2014 \u044d\u0442\u043e \u043c\u0435\u0442\u043a\u0438, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0430\u0433\u0440\u0435\u0433\u0430\u0446\u0438\u044e \u0438 \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0442\u044c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0440\u0430\u0441\u0445\u043e\u0434\u044b \u043d\u0430 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u0443\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u0443, \u043e\u0442\u0434\u0435\u043b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438\u043b\u0438 \u043f\u0440\u043e\u0434\u0443\u043a\u0442.<br \/>  <a href=\"https:\/\/habrastorage.org\/webt\/qm\/za\/bt\/qmzabtb2nt-yo9tedqlxluhop8e.png\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/qm\/za\/bt\/qmzabtb2nt-yo9tedqlxluhop8e.png\"><\/a><\/li>\n<li><i>Execution role<\/i> \u2014 \u044d\u0442\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u0430\u044f \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u043b\u0438\u0431\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 (\u043a\u0430\u043a \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435) \u0440\u043e\u043b\u044c, \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0449\u0430\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u0434\u043b\u044f \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u043b\u044f\u043c\u0431\u0434\u044b.<br \/>  <a href=\"https:\/\/habrastorage.org\/webt\/bf\/rk\/3s\/bfrk3sw8ig7rseuhnwr4mr8o8-c.png\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/bf\/rk\/3s\/bfrk3sw8ig7rseuhnwr4mr8o8-c.png\"><\/a><\/li>\n<li><i>Basic settings<\/i> \u2014 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u0442\u0430\u0439\u043c\u0430\u0443\u0442\u0430 \u043f\u043e \u0440\u0430\u0431\u043e\u0442\u0435 \u043b\u044f\u043c\u0431\u0434\u044b \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u043f\u0430\u043c\u044f\u0442\u0438.<br \/>  <a href=\"https:\/\/habrastorage.org\/webt\/ds\/lr\/cj\/dslrcjorhygk_bmfzlxp5ddxqz0.png\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/ds\/lr\/cj\/dslrcjorhygk_bmfzlxp5ddxqz0.png\"><\/a><\/li>\n<li><i>Network<\/i>: \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043b\u044f\u043c\u0431\u0434\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u0432\u043d\u0435 \u043a\u0430\u043a\u0438\u0445-\u043b\u0438\u0431\u043e \u043f\u0440\u0438\u0432\u0430\u0442\u043d\u044b\u0445 \u043f\u043e\u0434\u0441\u0435\u0442\u0435\u0439, \u0442\u0430\u043a \u0447\u0442\u043e \u0443 \u043d\u0435\u0435 \u043d\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u043c \u0432\u043d\u0443\u0442\u0440\u0438 VPC. \u0415\u0441\u043b\u0438 \u0434\u043e\u0441\u0442\u0443\u043f \u043d\u0443\u0436\u0435\u043d \u2014 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u0442\u0435 \u0435\u0433\u043e <a href=\"https:\/\/docs.aws.amazon.com\/lambda\/latest\/dg\/configuration-vpc.html\">\u043f\u043e \u044d\u0442\u043e\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438.<\/a><br \/>  <a href=\"https:\/\/habrastorage.org\/webt\/-i\/lz\/hm\/-ilzhms_ty6b7i7pex7pc1dbcbw.png\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/-i\/lz\/hm\/-ilzhms_ty6b7i7pex7pc1dbcbw.png\"><\/a><\/li>\n<li><i>AWS X-Ray<\/i> \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u0443\u0435\u0442 \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432. \u042d\u0442\u043e \u0443\u043f\u0440\u043e\u0449\u0430\u0435\u0442 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u043b\u044f\u043c\u0431\u0434 \u0438\u043b\u0438 \u0434\u0440\u0443\u0433\u0438\u0445 AWS-\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432. <br \/>  <a href=\"https:\/\/habrastorage.org\/webt\/pj\/l6\/qz\/pjl6qzbt3133iqwonql03wd96qs.png\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/pj\/l6\/qz\/pjl6qzbt3133iqwonql03wd96qs.png\"><\/a><\/li>\n<li><i>\u0412 Reserve concurrency<\/i> \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0439 \u043f\u0443\u043b \u0432\u044b\u0437\u043e\u0432\u043e\u0432, \u0447\u0442\u043e\u0431\u044b \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043d\u0430 \u0434\u0440\u0443\u0433\u0438\u0435 \u043b\u044f\u043c\u0431\u0434\u044b \u0432 \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u0435 \u0434\u0430\u043d\u043d\u0430\u044f \u043b\u044f\u043c\u0431\u0434\u0430 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u043b\u0430 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432. \u0412\u0434\u043e\u0431\u0430\u0432\u043e\u043a \u044d\u0442\u0430 \u043e\u043f\u0446\u0438\u044f \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u0435\u0442 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u0445 \u043b\u044f\u043c\u0431\u0434 \u044d\u0442\u0438\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c.<br \/>  \u0421\u043a\u0440\u0438\u043d \u0432 \u043f\u0443\u043d\u043a\u0442\u0435 Provisioned concurrency<\/li>\n<li><i>Provisioned concurrency<\/i> \u2014 \u044d\u0442\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043d\u043e\u0432\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c. \u041f\u043e \u0441\u0443\u0442\u0438 \u043e\u043d\u0430 \u0437\u0430\u043c\u0435\u043d\u044f\u0435\u0442 \u043d\u0430\u0448 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u043f\u0440\u043e\u0433\u0440\u0435\u0432\u0430, \u0442\u0435\u043c \u0441\u0430\u043c\u044b\u043c \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u044f \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 \u043b\u044f\u043c\u0431\u0434 \u0434\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f. \u041e\u043d\u0430 \u0440\u0435\u0448\u0430\u0435\u0442 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u0445\u043e\u043b\u043e\u0434\u043d\u043e\u0433\u043e \u0441\u0442\u0430\u0440\u0442\u0430, \u043d\u043e \u043c\u043e\u0436\u0435\u0442 \u0434\u043e\u0440\u043e\u0433\u043e \u0441\u0442\u043e\u0438\u0442\u044c \u2014 \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u043d\u0430 \u044d\u0442\u043e \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435. \u0422\u0430\u043a\u0436\u0435 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u044d\u0442\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0430\u043d\u043d\u0443\u043b\u0438\u0440\u0443\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u043e\u0439 \u043b\u044f\u043c\u0431\u0434\u044b \u0432 Free Tier \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0438.<br \/>  <a href=\"https:\/\/habrastorage.org\/webt\/mb\/gt\/sq\/mbgtsqv1iueoy6js88rv4rusi7s.png\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/mb\/gt\/sq\/mbgtsqv1iueoy6js88rv4rusi7s.png\"><\/a><\/li>\n<li><i>Asynchronous invocation<\/i> \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u0443\u044e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432. \u0423\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0445 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u0434\u0435\u043b\u0430\u0442\u044c \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0448\u0438\u0431\u043a\u0438, \u0438 \u043a\u0430\u043a \u0434\u043e\u043b\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441 \u043c\u043e\u0436\u0435\u0442 \u0432\u0438\u0441\u0435\u0442\u044c \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u0438. \u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043c\u043e\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u043b\u0438\u0441\u044c \u043d\u0435\u0443\u0434\u0430\u0447\u043d\u043e.<br \/>  <a href=\"https:\/\/habrastorage.org\/webt\/fp\/g_\/zi\/fpg_ziuv-ouv4yeeejmxqlko-za.png\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/fp\/g_\/zi\/fpg_ziuv-ouv4yeeejmxqlko-za.png\"><\/a>  <\/li>\n<li><i>Database proxies<\/i> \u2014 \u0435\u0449\u0435 \u043e\u0434\u043d\u0430 \u043d\u043e\u0432\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c, <a href=\"https:\/\/aws.amazon.com\/about-aws\/whats-new\/2019\/12\/amazon-rds-proxy-available-in-preview\">\u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0430\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c<\/a> \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0431\u0430\u0437\u0435 \u0447\u0435\u0440\u0435\u0437 \u043f\u0440\u043e\u043a\u0441\u0438 \u0432 \u0432\u0438\u0434\u0435 API Gateway + Lambda.<br \/>  <a href=\"https:\/\/habrastorage.org\/webt\/bp\/f4\/fw\/bpf4fw1yjd0ayzsolj0vbhnjrfs.png\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/bp\/f4\/fw\/bpf4fw1yjd0ayzsolj0vbhnjrfs.png\"><\/a><\/li>\n<\/ul>\n<p>  \u0414\u0430\u043b\u044c\u0448\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a \u0432\u0435\u0441\u0442\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0441 \u044d\u0442\u043e\u0439 \u043a\u043e\u043d\u0441\u043e\u043b\u0438. \u041f\u043e\u043c\u0438\u043c\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b <i>Configure Test Events<\/i> \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430. \u0414\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043e\u0431\u0448\u0438\u0440\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a, \u043d\u043e \u043c\u044b \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u0442\u0435\u043c, \u0447\u0442\u043e \u044f \u0443\u0436\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0438\u043b \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435:  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">ContactUs request<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"javascript\">{   &quot;body&quot;: &quot;{\\&quot;subject\\&quot;: \\&quot;Question\\&quot;,\\&quot;question\\&quot;: \\&quot;How much does it cost\\&quot;,\\&quot;username\\&quot;: \\&quot;Alex\\&quot;,\\&quot;phone\\&quot;: \\&quot;+79999999999\\&quot;,\\&quot;email\\&quot;: \\&quot;alex@gmail.com\\&quot;}&quot;,   &quot;resource&quot;: &quot;\/{proxy+}&quot;,   &quot;path&quot;: &quot;\/path\/to\/resource&quot;,   &quot;httpMethod&quot;: &quot;POST&quot;,   &quot;isBase64Encoded&quot;: false,   &quot;queryStringParameters&quot;: {     &quot;foo&quot;: &quot;bar&quot;   },   &quot;pathParameters&quot;: {     &quot;proxy&quot;: &quot;\/path\/to\/resource&quot;   },   &quot;stageVariables&quot;: {     &quot;baz&quot;: &quot;qux&quot;   },   &quot;headers&quot;: {     &quot;Accept&quot;: &quot;text\/html,application\/xhtml+xml,application\/xml;q=0.9,image\/webp,*\/*;q=0.8&quot;,     &quot;Accept-Encoding&quot;: &quot;gzip, deflate, sdch&quot;,     &quot;Accept-Language&quot;: &quot;en-US,en;q=0.8&quot;,     &quot;Cache-Control&quot;: &quot;max-age=0&quot;,     &quot;CloudFront-Forwarded-Proto&quot;: &quot;https&quot;,     &quot;CloudFront-Is-Desktop-Viewer&quot;: &quot;true&quot;,     &quot;CloudFront-Is-Mobile-Viewer&quot;: &quot;false&quot;,     &quot;CloudFront-Is-SmartTV-Viewer&quot;: &quot;false&quot;,     &quot;CloudFront-Is-Tablet-Viewer&quot;: &quot;false&quot;,     &quot;CloudFront-Viewer-Country&quot;: &quot;US&quot;,     &quot;Host&quot;: &quot;1234567890.execute-api.us-east-1.amazonaws.com&quot;,     &quot;Upgrade-Insecure-Requests&quot;: &quot;1&quot;,     &quot;User-Agent&quot;: &quot;Custom User Agent String&quot;,     &quot;Via&quot;: &quot;1.1 08f323deadbeefa7af34d5feb414ce27.cloudfront.net (CloudFront)&quot;,     &quot;X-Amz-Cf-Id&quot;: &quot;cDehVQoZnx43VYQb9j2-nvCh-9z396Uhbp027Y2JvkCPNLmGJHqlaA==&quot;,     &quot;X-Forwarded-For&quot;: &quot;127.0.0.1, 127.0.0.2&quot;,     &quot;X-Forwarded-Port&quot;: &quot;443&quot;,     &quot;X-Forwarded-Proto&quot;: &quot;https&quot;   },   &quot;requestContext&quot;: {     &quot;accountId&quot;: &quot;123456789012&quot;,     &quot;resourceId&quot;: &quot;123456&quot;,     &quot;stage&quot;: &quot;prod&quot;,     &quot;requestId&quot;: &quot;c6af9ac6-7b61-11e6-9a41-93e8deadbeef&quot;,     &quot;requestTime&quot;: &quot;09\/Apr\/2015:12:34:56 +0000&quot;,     &quot;requestTimeEpoch&quot;: 1428582896000,     &quot;identity&quot;: {       &quot;cognitoIdentityPoolId&quot;: null,       &quot;accountId&quot;: null,       &quot;cognitoIdentityId&quot;: null,       &quot;caller&quot;: null,       &quot;accessKey&quot;: null,       &quot;sourceIp&quot;: &quot;127.0.0.1&quot;,       &quot;cognitoAuthenticationType&quot;: null,       &quot;cognitoAuthenticationProvider&quot;: null,       &quot;userArn&quot;: null,       &quot;userAgent&quot;: &quot;Custom User Agent String&quot;,       &quot;user&quot;: null     },     &quot;path&quot;: &quot;\/prod\/path\/to\/resource&quot;,     &quot;resourcePath&quot;: &quot;\/{proxy+}&quot;,     &quot;httpMethod&quot;: &quot;POST&quot;,     &quot;apiId&quot;: &quot;1234567890&quot;,     &quot;protocol&quot;: &quot;HTTP\/1.1&quot;   } } <\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043d\u0430\u0436\u0438\u043c\u0430\u0435\u043c <i>Test<\/i> \u0438 \u0432\u0438\u0434\u0438\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0440\u0430\u0431\u043e\u0442\u044b \u043b\u044f\u043c\u0431\u0434\u044b:<br \/>  <a href=\"https:\/\/habrastorage.org\/webt\/oc\/vw\/w1\/ocvww1tut1fhx0czz5ijzjnpvhg.png\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/oc\/vw\/w1\/ocvww1tut1fhx0czz5ijzjnpvhg.png\" alt=\"Gateway resources\"><\/a><\/p>\n<p>  \u041b\u044f\u043c\u0431\u0434\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 JSON, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0441\u0442\u0430\u0442\u0443\u0441-\u043a\u043e\u0434 \u0438 \u0442\u0435\u043b\u043e \u043e\u0442\u0432\u0435\u0442\u0430. \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 body \u043f\u043e\u0439\u0434\u0435\u0442 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u043a\u043b\u0438\u0435\u043d\u0442\u0443, \u0432\u044b\u0437\u0432\u0430\u0432\u0448\u0435\u043c\u0443 API Gateway. \u041a\u0440\u043e\u043c\u0435 \u044d\u0442\u043e\u0433\u043e, \u043d\u0430 \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442\u0435 \u0435\u0441\u0442\u044c \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\u0438 \u0432\u044b\u0437\u043e\u0432\u0430: \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f, \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0437\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043f\u043b\u0430\u0442\u0438\u0442\u044c, \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0430\u043c\u044f\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u044f\u043b\u043e\u0441\u044c \u043b\u044f\u043c\u0431\u0434\u043e\u0439. \u041f\u043e\u043b\u0430\u0433\u0430\u044f\u0441\u044c \u043d\u0430 \u044d\u0442\u0438 \u043c\u0435\u0442\u0440\u0438\u043a\u0438, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0430\u043c\u044f\u0442\u0438, \u0447\u0442\u043e\u0431\u044b \u043b\u044f\u043c\u0431\u0434\u0430 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u043b\u0430 \u0432\u0430\u0448\u0438\u043c \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f\u043c \u0446\u0435\u043d\u044b\/\u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u043e\u0442\u0432\u0435\u0442\u0430.<\/p>\n<h3>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 AWS \u043a\u043e\u043d\u0441\u043e\u043b\u0438 \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f Canary deployment<\/h3>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0437\u0430\u0442\u0440\u043e\u043d\u0435\u043c \u043e\u0434\u0438\u043d \u0432\u0430\u0436\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0439 \u0441 \u0440\u0430\u0437\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u0435\u043c \u043d\u043e\u0432\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u043b\u044f\u043c\u0431\u0434\u044b. \u042f \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u043b \u0442\u0430\u043a\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b, \u043a\u043e\u0433\u0434\u0430 \u044f \u043f\u0438\u0441\u0430\u043b SAM-\u0448\u0430\u0431\u043b\u043e\u043d:  <\/p>\n<pre><code class=\"plaintext\">AutoPublishAlias: live DeploymentPreference:   Type: Canary10Percent10Minutes <\/code><\/pre>\n<p>  \u041f\u0435\u0440\u0432\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u043a \u043a\u0430\u0436\u0434\u043e\u0439 \u043d\u043e\u0432\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u043b\u044f\u043c\u0431\u0434\u044b \u0430\u043b\u0438\u0430\u0441 <i>live<\/i>.  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041d\u0435\u043c\u043d\u043e\u0433\u043e \u043e\u0431 \u0430\u043b\u0438\u0430\u0441\u0430\u0445<\/b>                         <\/p>\n<div class=\"spoiler_text\">\u041a\u043e\u0433\u0434\u0430 \u0432\u044b \u0440\u0430\u0437\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u0442\u0435 \u043d\u043e\u0432\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e \u043b\u044f\u043c\u0431\u0434\u044b, \u0441\u0442\u0430\u0440\u0430\u044f \u0442\u043e\u0436\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f. \u0412\u0441\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 \u043e\u0441\u0442\u0430\u044e\u0442\u0441\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u043c\u0438, \u0438 \u0432\u044b \u0432 \u043b\u044e\u0431\u043e\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043c\u043e\u0436\u0435\u0442\u0435 \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043d\u0443\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0438\u0437 API Gateway. \u0412\u0435\u0440\u0441\u0438\u0438 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0430\u044e\u0442\u0441\u044f \u043d\u043e\u043c\u0435\u0440\u0430\u043c\u0438 1, 2, 3 \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435. \u0415\u0449\u0435 \u0435\u0441\u0442\u044c \u043c\u0435\u0442\u043a\u0430 <i>LATEST<\/i>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044e\u044e \u0432\u0435\u0440\u0441\u0438\u044e. \u0415\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 2 \u0438\u043b\u0438 3 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u0434\u043b\u044f API Gateway (Stage \u0432 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u0445 AWS), \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u043f\u0440\u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0438 \u043a\u043e\u0434\u0430 \u043b\u044f\u043c\u0431\u0434\u044b \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c \u0441\u043e\u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435 Gateway-Lambda. \u0412 API Gateway \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e (ARN \u043b\u044f\u043c\u0431\u0434\u044b), \u0438\u043b\u0438 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 <i>LATEST<\/i>. <\/p>\n<p>  \u0410\u043b\u0438\u0430\u0441 \u2014 \u0435\u0449\u0435 \u043e\u0434\u0438\u043d \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 (\u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u043e \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439), \u043a\u043e\u0442\u043e\u0440\u044b\u0439, \u043a\u0430\u043a \u0438 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441 \u0432\u0435\u0440\u0441\u0438\u0435\u0439, \u043c\u043e\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0432 ARN \u043b\u044f\u043c\u0431\u0434\u044b. \u041d\u043e \u0435\u0433\u043e \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043f\u043e \u043e\u0434\u043d\u043e\u043c\u0443 \u0430\u043b\u0438\u0430\u0441\u0443 \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 Stage \u0434\u043b\u044f API Gateway \u0438 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u043c\u0435\u043d\u044f\u0442\u044c \u044d\u0442\u0438 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438. \u041a \u043f\u0440\u0438\u043c\u0435\u0440\u0443, \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0439 API Gateway: dev, qa \u0438 prod \u0438 \u0441\u043e\u043e\u0442\u043d\u043e\u0441\u0438\u043c \u0438\u0445 \u0441 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c\u0438 \u0430\u043b\u0438\u0430\u0441\u0430\u043c\u0438 \u043b\u044f\u043c\u0431\u0434\u044b.<\/p>\n<p>  \u041a\u0430\u0436\u0434\u044b\u0439 \u0430\u043b\u0438\u0430\u0441 \u043c\u043e\u0436\u0435\u0442 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u043e\u0434\u043d\u0443 \u0432\u0435\u0440\u0441\u0438\u044e \u043b\u044f\u043c\u0431\u0434\u044b, \u043d\u043e \u0438 \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e, \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044f \u043f\u0440\u043e\u0446\u0435\u043d\u0442\u043d\u043e\u0435 \u0441\u043e\u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435 \u0442\u0440\u0430\u0444\u0438\u043a\u0430 \u043c\u0435\u0436\u0434\u0443 \u0432\u0435\u0440\u0441\u0438\u044f\u043c\u0438. \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0430\u043b\u0438\u0430\u0441\u0430\u043c\u0438 \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u043d\u0441\u043e\u043b\u044c, \u0438\u043b\u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u0440\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0438\u0445 \u043f\u0440\u0438 \u0440\u0430\u0437\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u0438 \u043d\u043e\u0432\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438. \u041a \u043f\u0440\u0438\u043c\u0435\u0440\u0443, live, \u043a\u0430\u043a \u043d\u0430 \u0441\u043a\u0440\u0438\u043d\u0435 \u0432\u044b\u0448\u0435. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u043d\u0430 live-\u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044e\u044e \u0432\u0435\u0440\u0441\u0438\u044e, \u0435\u0441\u043b\u0438, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u043d\u0435 \u0443\u043f\u0430\u0434\u0443\u0442 \u0445\u044d\u043b\u0441 \u0447\u0435\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0447\u0435\u0440\u0435\u0437 CloudWatch.  <\/div>\n<\/p><\/div>\n<p>  \u0414\u043b\u044f \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f canary deployment \u043c\u043e\u0436\u043d\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043a\u0430\u043a \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u044e API Gateway, \u0442\u0430\u043a \u0438 \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u044e Lambda.<\/p>\n<p>  \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0443\u0436\u043d\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043a\u043e\u0434 \u043b\u044f\u043c\u0431\u0434\u044b \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u043b\u0430 \u0434\u0440\u0443\u0433\u043e\u0439 \u043e\u0442\u0432\u0435\u0442. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u043f\u0440\u043e\u0433\u0440\u0435\u0432\u0430 \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0432 \u043e\u0442\u0432\u0435\u0442\u0435 Version 2 \u0432\u043c\u0435\u0441\u0442\u043e Version 1. \u042d\u0442\u043e \u0438 \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u0448\u0438\u043c \u043c\u0430\u0440\u043a\u0435\u0440\u043e\u043c.<\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b API Gateway Test, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0432 \u0442\u0435\u0447\u0435\u043d\u0438\u0438 \u0434\u0435\u0441\u044f\u0442\u0438 \u043c\u0438\u043d\u0443\u0442 \u043f\u0440\u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0435 WARM-UP \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043b\u0438\u0448\u044c 10 % \u043e\u0442\u0432\u0435\u0442\u043e\u0432 \u0431\u0443\u0434\u0443\u0442 \u0438\u043c\u0435\u0442\u044c Version 2 \u0432 \u0442\u0435\u043b\u0435 \u043e\u0442\u0432\u0435\u0442\u0430. \u041f\u043e \u0438\u0441\u0442\u0435\u0447\u0435\u043d\u0438\u0438 \u044d\u0442\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 100 % \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0431\u0443\u0434\u0443\u0442 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 Version 2.<\/p>\n<p>  \u041a\u0440\u043e\u043c\u0435 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 API Gateway \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u043d\u0441\u043e\u043b\u044c Lambda, \u0433\u0434\u0435, \u0432\u044b\u0431\u0440\u0430\u0432 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0439 \u0430\u043b\u0438\u0430\u0441, \u0432\u0438\u0434\u0438\u043c \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0443 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0442\u0440\u0430\u0444\u0438\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043c\u043e\u0436\u043d\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c. <br \/>  <a href=\"https:\/\/habrastorage.org\/webt\/hs\/3s\/b8\/hs3sb8_jvymnm4bnmtn1yvgcamg.png\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/hs\/3s\/b8\/hs3sb8_jvymnm4bnmtn1yvgcamg.png\" alt=\"Lambda alias\"><\/a><\/p>\n<p>  <a name=\"Part2\"><\/a>  <\/p>\n<h1>2. \u041b\u043e\u043a\u0430\u043b\u044c\u043d\u0430\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c SAM-CLI<\/h1>\n<p>  \u041d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043d\u0430\u0437\u0430\u0434 \u043e\u0434\u043d\u0438\u043c \u0438\u0437 \u0433\u043b\u0430\u0432\u043d\u044b\u0445 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u043e\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043b\u044f\u043c\u0431\u0434\u044b \u0441\u0447\u0438\u0442\u0430\u043b\u0438 \u043d\u0435\u0443\u0434\u043e\u0431\u0441\u0442\u0432\u043e \u0432 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u043d\u0430 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u0435. \u0421\u0435\u0439\u0447\u0430\u0441 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f \u0441\u0438\u043b\u044c\u043d\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0430\u0441\u044c: \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f SAM-\u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u0438 \u0440\u0430\u0437\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0442\u044c \u0440\u0435\u0448\u0435\u043d\u0438\u044f, \u043d\u043e \u0438 \u0443\u043f\u0440\u043e\u0449\u0430\u0435\u0442 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u0443\u044e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443.<\/p>\n<p>  \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u0432\u0430\u0448\u0443 \u043b\u044f\u043c\u0431\u0434\u0443 \u043f\u0440\u044f\u043c\u043e \u0438\u0437 \u043a\u043e\u043d\u0441\u043e\u043b\u0438:  <\/p>\n<pre><code class=\"bash\">sam local invoke -e .\/events\/warm_up_request.json ContactUsFunction <\/code><\/pre>\n<p>  \u042d\u0442\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u0438\u0437 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u0441 SAM-\u0448\u0430\u0431\u043b\u043e\u043d\u043e\u043c \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 JSON-\u0444\u0430\u0439\u043b\u0430 \u043d\u0430 \u0432\u0445\u043e\u0434 \u043b\u044f\u043c\u0431\u0434\u0435 ContactUsFunction (\u044d\u0442\u043e \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0438\u043c\u044f \u0432 \u0448\u0430\u0431\u043b\u043e\u043d\u0435).<\/p>\n<p>  \u0422\u043e \u0435\u0441\u0442\u044c, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u044d\u0442\u0443 \u043a\u043e\u043c\u0430\u043d\u0434\u0443, SAM \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u0435\u0442 \u0432 \u0434\u043e\u043a\u0435\u0440\u0435 \u043e\u0431\u0440\u0430\u0437 <i>lambci\/lambda:java11<\/i>, \u0438 \u0432 \u043d\u0435\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0432\u0430\u0448 \u043a\u043e\u0434. \u0414\u043b\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u044b\u043c \u0441\u0435\u0440\u0432\u0438\u0441\u0430\u043c, \u0442\u0430\u043a\u0438\u043c \u043a\u0430\u043a SES, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432\u0430\u0448\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u0434\u043b\u044f AWS \u0441 secret\/access key, \u0442\u0430\u043a \u0447\u0442\u043e \u043e\u043d\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439. \u0415\u0449\u0435 \u0432\u0430\u0436\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442: \u0435\u0441\u043b\u0438 \u0432\u044b \u043d\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u0435 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0434\u043b\u044f \u0440\u0435\u0436\u0438\u043c\u0430 \u043f\u0440\u043e\u0433\u0440\u0435\u0432\u0430, \u0431\u0443\u0434\u0443\u0442 \u0432\u044b\u0437\u0432\u0430\u043d\u044b \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0435 \u0441\u0435\u0440\u0432\u0438\u0441\u044b AWS SES \u0438 DynamoDB.<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041b\u043e\u0433 \u0432\u044b\u0437\u043e\u0432\u0430 \u0442\u0443\u0442<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"bash\">F:\\aws\\projects\\contact-us-sam-app&gt;sam local invoke -e .\/events\/warm_up_request.json ContactUsFunction Invoking com.gralll.sam.App::handleRequest (java11) Fetching lambci\/lambda:java11 Docker container image...... Mounting F:\\aws\\projects\\contact-us-sam-app\\.aws-sam\\build\\ContactUsFunction as \/var\/task:ro,delegated inside runtime container ?[32mSTART RequestId: a86d65fa-1f19-15c5-93b8-d87631c80ee2 Version: $LATEST?[0m 2020-01-06 19:09:17 a86d65fa-1f19-15c5-93b8-d87631c80ee2 INFO  App - Request was received 2020-01-06 19:09:17 a86d65fa-1f19-15c5-93b8-d87631c80ee2 DEBUG App - {   &quot;body&quot; : &quot;{\\&quot;subject\\&quot;: \\&quot;Question\\&quot;,\\&quot;question\\&quot;: \\&quot;How much does it cost\\&quot;,\\&quot;username\\&quot;: \\&quot;Alex\\&quot;,\\&quot;phone\\&quot;: \\&quot;+79999999999\\&quot;,\\&quot;email\\&quot;: \\&quot;alex@gmail.com\\&quot;}&quot;,   &quot;resource&quot; : &quot;\/{proxy+}&quot;,   &quot;requestContext&quot; : {     &quot;resourceId&quot; : &quot;123456&quot;,     &quot;apiId&quot; : &quot;1234567890&quot;,     &quot;resourcePath&quot; : &quot;\/{proxy+}&quot;,     &quot;httpMethod&quot; : &quot;POST&quot;,     &quot;requestId&quot; : &quot;c6af9ac6-7b61-11e6-9a41-93e8deadbeef&quot;,     &quot;extendedRequestId&quot; : null,     &quot;accountId&quot; : &quot;123456789012&quot;,     &quot;identity&quot; : {       &quot;apiKey&quot; : null,       &quot;apiKeyId&quot; : null,       &quot;userArn&quot; : null,       &quot;cognitoAuthenticationType&quot; : null,       &quot;caller&quot; : null,       &quot;userAgent&quot; : &quot;Custom User Agent String&quot;,       &quot;user&quot; : null,       &quot;cognitoIdentityPoolId&quot; : null,       &quot;cognitoIdentityId&quot; : null,       &quot;cognitoAuthenticationProvider&quot; : null,       &quot;sourceIp&quot; : &quot;127.0.0.1&quot;,       &quot;accountId&quot; : null,       &quot;accessKey&quot; : null     },     &quot;authorizer&quot; : null,     &quot;stage&quot; : &quot;prod&quot;,     &quot;path&quot; : &quot;\/prod\/path\/to\/resource&quot;,     &quot;protocol&quot; : &quot;HTTP\/1.1&quot;,     &quot;requestTime&quot; : &quot;09\/Apr\/2015:12:34:56 +0000&quot;,     &quot;requestTimeEpoch&quot; : 1428582896000,     &quot;elb&quot; : null   },   &quot;multiValueQueryStringParameters&quot; : { },   &quot;multiValueHeaders&quot; : {     &quot;X-WARM-UP&quot; : [ &quot;13&quot; ]   },   &quot;pathParameters&quot; : {     &quot;proxy&quot; : &quot;\/path\/to\/resource&quot;   },   &quot;httpMethod&quot; : &quot;POST&quot;,   &quot;stageVariables&quot; : {     &quot;baz&quot; : &quot;qux&quot;   },   &quot;path&quot; : &quot;\/path\/to\/resource&quot;,   &quot;isBase64Encoded&quot; : false,   &quot;requestSource&quot; : &quot;API_GATEWAY&quot; } 2020-01-06 19:09:17 a86d65fa-1f19-15c5-93b8-d87631c80ee2 INFO  App - Lambda was warmed up ?[32mEND RequestId: a86d65fa-1f19-15c5-93b8-d87631c80ee2?[0m ?[32mREPORT RequestId: a86d65fa-1f19-15c5-93b8-d87631c80ee2     Init Duration: 1984.55 ms       Duration: 42.22 ms      Billed Duration: 100 ms Memory Size: 256 MB     Max Memory Used: 102 MB ?[0m {&quot;statusCode&quot;:201,&quot;multiValueHeaders&quot;:{&quot;Access-Control-Allow-Origin&quot;:[&quot;*&quot;]},&quot;body&quot;:{&quot;response&quot;:&quot;Lambda was warmed up. V1&quot;},&quot;isBase64Encoded&quot;:false} <\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  \u041a\u0440\u043e\u043c\u0435 \u043b\u043e\u0433\u0430 \u043b\u044f\u043c\u0431\u0434\u044b \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c \u043f\u0438\u0448\u0435\u0442\u0441\u044f \u0441\u043b\u0443\u0436\u0435\u0431\u043d\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043f\u043e \u0441\u0442\u0430\u0442\u0443\u0441\u0443 \u0432\u044b\u0437\u043e\u0432\u0430 \u0438 \u043e\u0442\u0432\u0435\u0442 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 JSON.<\/p>\n<p>  API Gateway, \u043a\u0430\u043a \u0438 \u043b\u044f\u043c\u0431\u0434\u0443, \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e. <br \/>  \u0412\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u0443:  <\/p>\n<pre><code class=\"bash\">sam local start-api <\/code><\/pre>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041b\u043e\u0433 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 \u043f\u0440\u0438 \u0441\u0442\u0430\u0440\u0442\u0435<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"bash\">F:\\aws\\projects\\contact-us-sam-app&gt;sam local start-api Mounting ContactUsFunction at http:\/\/127.0.0.1:3000\/contact [POST, OPTIONS] You can now browse to the above endpoints to invoke your functions. You do not need to restart\/reload SAM CLI while working on your functions, changes will be reflected instantly\/automatically. You only need to restart SAM CLI if you update your AWS SAM template 2020-01-06 22:20:30  * Running on http:\/\/127.0.0.1:3000\/ (Press CTRL+C to quit) <\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441\u044b. \u042f \u0431\u0443\u0434\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Postman \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044e \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 \u043f\u0440\u043e\u0433\u0440\u0435\u0432 \u043b\u044f\u043c\u0431\u0434\u044b.<br \/>  <a href=\"https:\/\/habrastorage.org\/webt\/_e\/hg\/vs\/_ehgvsftbjygwjcu3iiol-vky68.png\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/_e\/hg\/vs\/_ehgvsftbjygwjcu3iiol-vky68.png\"><\/a>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u0412 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 \u0432\u0438\u0434\u0438\u043c<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"bash\">Invoking com.gralll.sam.App::handleRequest (java11) Fetching lambci\/lambda:java11 Docker container image...... Mounting F:\\aws\\projects\\contact-us-sam-app\\.aws-sam\\build\\ContactUsFunction as \/var\/task:ro,delegated inside runtime container ?[32mSTART RequestId: 27868750-3637-1f80-3d80-53a724da16ef Version: $LATEST?[0m 2020-01-06 19:28:09 27868750-3637-1f80-3d80-53a724da16ef INFO  App - Request was received 2020-01-06 19:28:09 27868750-3637-1f80-3d80-53a724da16ef DEBUG App - {   &quot;body&quot; : &quot;{\\r\\n  \\&quot;subject\\&quot;: \\&quot;Question\\&quot;,\\r\\n  \\&quot;question\\&quot;: \\&quot;How much does it cost\\&quot;,\\r\\n  \\&quot;username\\&quot;: \\&quot;Alex\\&quot;,\\r\\n  \\&quot;phone\\&quot;: \\&quot;+79999999999\\&quot;,\\r\\n  \\&quot;email\\&quot;: \\&quot;alex@gmail.com\\&quot;\\r\\n}&quot;,   &quot;resource&quot; : &quot;\/contact&quot;,   &quot;requestContext&quot; : {     &quot;resourceId&quot; : &quot;123456&quot;,     &quot;apiId&quot; : &quot;1234567890&quot;,     &quot;resourcePath&quot; : &quot;\/contact&quot;,     &quot;httpMethod&quot; : &quot;POST&quot;,     &quot;requestId&quot; : &quot;c6af9ac6-7b61-11e6-9a41-93e8deadbeef&quot;,     &quot;extendedRequestId&quot; : null,     &quot;accountId&quot; : &quot;123456789012&quot;,     &quot;identity&quot; : {       &quot;apiKey&quot; : null,       &quot;apiKeyId&quot; : null,       &quot;userArn&quot; : null,       &quot;cognitoAuthenticationType&quot; : null,       &quot;caller&quot; : null,       &quot;userAgent&quot; : &quot;Custom User Agent String&quot;,       &quot;user&quot; : null,       &quot;cognitoIdentityPoolId&quot; : null,       &quot;cognitoIdentityId&quot; : null,       &quot;cognitoAuthenticationProvider&quot; : null,       &quot;sourceIp&quot; : &quot;127.0.0.1&quot;,       &quot;accountId&quot; : null,       &quot;accessKey&quot; : null     },     &quot;authorizer&quot; : null,     &quot;stage&quot; : &quot;Prod&quot;,     &quot;path&quot; : &quot;\/contact&quot;,     &quot;protocol&quot; : null,     &quot;requestTime&quot; : null,     &quot;requestTimeEpoch&quot; : 0,     &quot;elb&quot; : null   },   &quot;multiValueQueryStringParameters&quot; : null,   &quot;multiValueHeaders&quot; : {     &quot;Accept&quot; : [ &quot;application\/json&quot; ],     &quot;Accept-Encoding&quot; : [ &quot;gzip, deflate, br&quot; ],     &quot;Accept-Language&quot; : [ &quot;ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7&quot; ],     &quot;Cache-Control&quot; : [ &quot;no-cache&quot; ],     &quot;Connection&quot; : [ &quot;keep-alive&quot; ],     &quot;Content-Length&quot; : [ &quot;150&quot; ],     &quot;Content-Type&quot; : [ &quot;text\/plain;charset=UTF-8&quot; ],     &quot;Host&quot; : [ &quot;127.0.0.1:3000&quot; ],     &quot;Origin&quot; : [ &quot;chrome-extension:\/\/fhbjgbiflinjbdggehcddcbncdddomop&quot; ],     &quot;Postman-Token&quot; : [ &quot;5cadaccd-6fae-5bc2-b4ef-63900a1725ff&quot; ],     &quot;Sec-Fetch-Mode&quot; : [ &quot;cors&quot; ],     &quot;Sec-Fetch-Site&quot; : [ &quot;cross-site&quot; ],     &quot;User-Agent&quot; : [ &quot;Mozilla\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/79.0.3945.88 Safari\/537.36&quot; ],     &quot;X-Forwarded-Port&quot; : [ &quot;3000&quot; ],     &quot;X-Forwarded-Proto&quot; : [ &quot;http&quot; ],     &quot;X-Warm-Up&quot; : [ &quot;123&quot; ]   },   &quot;pathParameters&quot; : null,   &quot;httpMethod&quot; : &quot;POST&quot;,   &quot;stageVariables&quot; : null,   &quot;path&quot; : &quot;\/contact&quot;,   &quot;isBase64Encoded&quot; : false,   &quot;requestSource&quot; : &quot;API_GATEWAY&quot; } 2020-01-06 19:28:09 27868750-3637-1f80-3d80-53a724da16ef INFO  App - Lambda was warmed up ?[32mEND RequestId: 27868750-3637-1f80-3d80-53a724da16ef?[0m ?[32mREPORT RequestId: 27868750-3637-1f80-3d80-53a724da16ef     Init Duration: 1951.87 ms       Duration: 42.91 ms      Billed Duration: 100 ms Memory Size: 256 MB     Max Memory Used: 102 MB ?[0m 2020-01-06 22:28:11 127.0.0.1 - - [06\/Jan\/2020 22:28:11] &quot;POST \/contact HTTP\/1.1&quot; 201 - <\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  \u041b\u043e\u0433\u0438, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u043d\u0435 \u043b\u0443\u0447\u0448\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c. \u041d\u0430\u0434\u0435\u044e\u0441\u044c, \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043c \u044d\u0442\u043e \u0438\u0441\u043f\u0440\u0430\u0432\u044f\u0442.<\/p>\n<p>  \u0412\u0430\u0436\u043d\u043e: \u043f\u0440\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u043a\u043e\u0434\u0430 \u043b\u044f\u043c\u0431\u0434\u044b \u0434\u0435\u043b\u0430\u0442\u044c \u0440\u0435\u0441\u0442\u0430\u0440\u0442 \u0434\u043b\u044f API \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e. \u0414\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0435\u0440\u0435\u0441\u043e\u0431\u0440\u0430\u0442\u044c \u043b\u044f\u043c\u0431\u0434\u0443 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 <i>sam build<\/i>.  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041d\u0435\u043c\u043d\u043e\u0433\u043e \u043e \u0431\u0430\u0433\u0430\u0445<\/b>                         <\/p>\n<div class=\"spoiler_text\">\u041a\u043e\u0433\u0434\u0430 \u044f \u0432\u0437\u044f\u043b \u0437\u0430 \u043e\u0441\u043d\u043e\u0432\u0443 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0438 \u043e\u0442\u0432\u0435\u0442\u0430 Java-\u043c\u043e\u0434\u0435\u043b\u0438 \u0438\u0437 <i>aws-serverless-java-container-core<\/i>, \u0442\u043e \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u0441\u044f \u0441 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043e\u0439: \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440 \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u043b 502 \u0441\u0442\u0430\u0442\u0443\u0441. \u0412 \u043b\u043e\u0433\u0430\u0445 \u044f \u0432\u0438\u0434\u0435\u043b:  <\/p>\n<pre><code class=\"bash\">Invalid API Gateway Response Keys: {'base64Encoded'} in {'statusCode': 200, 'headers': {'Content-Type': 'text\/plain'}, 'body': 'Hello World', 'base64Encoded': False}  <\/code><\/pre>\n<p>  \u042d\u0442\u043e \u0441\u043b\u0443\u0447\u0430\u043b\u043e\u0441\u044c \u0438\u0437-\u0437\u0430 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 API Gateway \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u043e\u0442\u043b\u0438\u0447\u043d\u044b\u0439 \u043e\u0442 AWS \u043c\u0435\u0442\u043e\u0434 \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0438 \u043d\u0435 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043b \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0438 JsonProperty. \u041f\u043e \u0438\u0442\u043e\u0433\u0443 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u0438\u0437 <i>&#8216;isBase64Encoded&#8217;<\/i> \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u043b\u0430\u0441\u044c \u0432 <i>&#8216;base64Encoded&#8217;<\/i>, \u0447\u0442\u043e, \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0438 \u043d\u0430\u0440\u0443\u0448\u0430\u043b\u043e \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044e \u043e\u0442\u0432\u0435\u0442\u0430. \u0420\u0430\u0437\u043e\u0431\u0440\u0430\u0432\u0448\u0438\u0441\u044c \u0441 \u044d\u0442\u0438\u043c, \u044f \u0440\u0435\u0448\u0438\u043b \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u044e \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u0443\u044e Java-\u043c\u043e\u0434\u0435\u043b\u044c ContactUsProxyResponse \u0432\u043c\u0435\u0441\u0442\u043e AwsProxyRequest.  <\/div>\n<\/p><\/div>\n<p>  <a name=\"Part3\"><\/a>  <\/p>\n<h1>3. \u041b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u0432\u044b\u0437\u043e\u0432\u044b \u0438\u0437 IDEA<\/h1>\n<p>  \u0412\u0441\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0435 \u0432 \u043f\u0443\u043d\u043a\u0442\u0435 \u0432\u044b\u0448\u0435 \u2014 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430 SAM. \u041e\u043d \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0438\u0437 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u0438 \u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 \u043b\u044e\u0431\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441. \u041a\u0430\u043a \u0440\u0430\u0437 \u044d\u0442\u043e \u0438 \u0431\u044b\u043b\u043e \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u0432 \u043f\u043b\u0430\u0433\u0438\u043d\u0435 \u0434\u043b\u044f IntelljIDEA AWS Toolkit.<\/p>\n<p>  \u0414\u0430\u043d\u043d\u044b\u0439 \u043f\u043b\u0430\u0433\u0438\u043d \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043b\u044f\u043c\u0431\u0434\u044b \u043f\u0440\u044f\u043c\u0438\u043a\u043e\u043c \u0438\u0437 IDE. \u0422\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043e\u043a\u043d\u043e \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438. <br \/>  <a href=\"https:\/\/habrastorage.org\/webt\/2s\/8u\/xk\/2s8uxk8n8gfza3p9z9ewugw-xge.png\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/2s\/8u\/xk\/2s8uxk8n8gfza3p9z9ewugw-xge.png\"><\/a><\/p>\n<p>  \u0412\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043b\u0438\u0431\u043e \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0448\u0430\u0431\u043b\u043e\u043d \u0441 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435\u043c \u043b\u044f\u043c\u0431\u0434\u044b, \u043b\u0438\u0431\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0432\u0440\u0443\u0447\u043d\u0443\u044e.<\/p>\n<p>  \u0412 \u043f\u0435\u0440\u0432\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0430\u043c\u044f\u0442\u0438 \u0438 \u044f\u0437\u044b\u043a \u0434\u043b\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0431\u0443\u0434\u0443\u0442 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u0437\u044f\u0442\u044b \u0438\u0437 \u0448\u0430\u0431\u043b\u043e\u043d\u0430. \u0412\u043e \u0432\u0442\u043e\u0440\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u044b \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u0430\u043c\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u0438 \u043f\u0440\u0438\u0431\u043b\u0438\u0437\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0441\u0447\u0435\u0442 \u043b\u0438\u043c\u0438\u0442\u0430.<\/p>\n<p>  \u0415\u0449\u0435 \u043f\u043b\u0430\u0433\u0438\u043d \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u043f\u0440\u044f\u043c\u043e \u0438\u0437 \u043e\u043a\u043d\u0430 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430 Java \u043a\u043e\u0434\u0430 \u043b\u0438\u0431\u043e yaml-\u0448\u0430\u0431\u043b\u043e\u043d\u0430. \u0421\u043a\u0440\u0438\u043d\u0448\u043e\u0442\u044b \u043d\u0438\u0436\u0435:<br \/>  <a href=\"https:\/\/habrastorage.org\/webt\/8o\/um\/83\/8oum83fe_tkz8suqmxzg-evjpaa.png\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/8o\/um\/83\/8oum83fe_tkz8suqmxzg-evjpaa.png\"><\/a><\/p>\n<p>  <a href=\"https:\/\/habrastorage.org\/webt\/iw\/ma\/is\/iwmais_steqx3sfhwstdxk7ncwa.png\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/iw\/ma\/is\/iwmais_steqx3sfhwstdxk7ncwa.png\"><\/a><\/p>\n<p>  \u041d\u0430 \u044d\u0442\u043e\u043c, \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0438 \u0432\u0441\u0435. \u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u0443\u044e \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e, \u0432\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u0443\u0435\u0442\u0435 \u0447\u0430\u0441\u0442\u044b\u0435 \u0432\u044b\u0437\u043e\u0432\u044b \u043b\u044f\u043c\u0431\u0434\u044b \u0438\u0437 \u043a\u043e\u043d\u0441\u043e\u043b\u0438. \u0421\u043e\u0433\u043b\u0430\u0441\u0438\u0442\u0435\u0441\u044c, \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0443\u0434\u043e\u0431\u043d\u043e?<\/p>\n<p>  <a name=\"Part4\"><\/a>  <\/p>\n<h1>4. \u0422\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435<\/h1>\n<p>  \u0417\u0434\u0435\u0441\u044c \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043e \u0432\u0438\u0434\u0430\u0445 \u0442\u0435\u0441\u0442\u043e\u0432 \u0434\u043b\u044f \u043b\u044f\u043c\u0431\u0434. \u0422\u0430\u043a \u043a\u0430\u043a \u0432 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b Java, \u0442\u043e \u0438 \u0442\u0435\u0441\u0442\u044b \u0431\u0443\u0434\u0443\u0442 \u0432\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0434\u043b\u044f \u044e\u043d\u0438\u0442 \u0438 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f: Junit 4, Mockito \u0438 PowerMockito. <\/p>\n<h3>\u042e\u043d\u0438\u0442-\u0442\u0435\u0441\u0442\u044b<\/h3>\n<p>  \u0414\u043b\u044f \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u044f \u043a\u043e\u0434\u0430 \u043b\u044f\u043c\u0431\u0434\u044b \u044e\u043d\u0438\u0442-\u0442\u0435\u0441\u0442\u0430\u043c\u0438 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u043e\u0431\u043b\u0430\u0434\u0430\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u044b\u043c\u0438 \u0437\u043d\u0430\u043d\u0438\u044f\u043c\u0438. \u0414\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 Java-\u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0438: \u0437\u0430\u043c\u043e\u043a\u0430\u0442\u044c \u0432\u0441\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u0432 \u043a\u043b\u0430\u0441\u0441\u0435 \u0438 \u043f\u043e\u0441\u0442\u0430\u0440\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u0441\u043b\u0443\u0447\u0430\u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u0430.<\/p>\n<p>  \u042f \u043d\u0435 \u0441\u0442\u0430\u043b \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0432\u0441\u0435 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0435 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0438 \u0438 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u043b\u0441\u044f \u0434\u0432\u0443\u043c\u044f \u043f\u043e\u0437\u0438\u0442\u0438\u0432\u043d\u044b\u043c\u0438 \u0438 \u0434\u0432\u0443\u043c\u044f \u043d\u0435\u0433\u0430\u0442\u0438\u0432\u043d\u044b\u043c\u0438 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u044f\u043c\u0438.<\/p>\n<p>  \u041f\u0435\u0440\u0432\u044b\u0439 \u043f\u043e\u0437\u0438\u0442\u0438\u0432\u043d\u044b\u0439 \u0442\u0435\u0441\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442, \u0447\u0442\u043e \u043f\u0440\u0438 \u043d\u0430\u043b\u0438\u0447\u0438\u0438 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430 X-WARM-UP \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0432 DbService \u0438 EmailService \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442. \u0412\u0442\u043e\u0440\u043e\u0439 \u043a\u0435\u0439\u0441 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442, \u0447\u0442\u043e \u044d\u0442\u0438 \u0441\u0435\u0440\u0432\u0438\u0441\u044b \u0431\u0443\u0434\u0443\u0442 \u0432\u044b\u0437\u0432\u0430\u043d\u044b, \u0435\u0441\u043b\u0438 \u0437\u0430\u043f\u0440\u043e\u0441 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0439. \u042d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0438\u0435 \u0442\u0435\u0441\u0442\u044b, \u0438 \u044f \u043e\u043f\u0443\u0441\u0442\u0438\u043b \u0432 \u043d\u0438\u0445 \u0447\u0430\u0441\u0442\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a.<\/p>\n<p>  \u041d\u0435\u0433\u0430\u0442\u0438\u0432\u043d\u044b\u0435 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0438 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0441\u043e\u0431\u043e\u0439 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u043e\u0442\u0432\u0435\u0442\u0430 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u043e\u0439 \u0438\u043b\u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u043e\u0439 \u043e\u0448\u0438\u0431\u043a\u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438.<\/p>\n<h3>\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0442\u0435\u0441\u0442\u044b<\/h3>\n<p>  \u0427\u0442\u043e \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0442\u0435\u0441\u0442\u043e\u0432, \u0442\u043e \u044f \u0440\u0435\u0448\u0438\u043b \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c DbService \u0438 \u0435\u0433\u043e \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 \u0442\u0430\u0431\u043b\u0438\u0446\u0435\u0439 DynamoDB.<\/p>\n<p>  \u0412 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044f \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0441\u044f \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u043c <a href=\"https:\/\/github.com\/localstack\/localstack\">Localstack<\/a>. \u0414\u0430\u043d\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u0435 \u043c\u043e\u043a\u0438 \u0434\u043b\u044f AWS-\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u044e\u0442\u0441\u044f \u0432 \u0432\u0438\u0434\u0435 \u0434\u043e\u043a\u0435\u0440 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432.<\/p>\n<p>  \u0414\u043b\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u044d\u0442\u043e\u0433\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u044b:  <\/p>\n<pre><code class=\"bash\">pip install localstack localstack start <\/code><\/pre>\n<p>  \u041b\u0438\u0431\u043e \u043c\u043e\u0436\u043d\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f <a href=\"https:\/\/github.com\/localstack\/localstack\/blob\/master\/docker-compose.yml\">docker-compose \u0444\u0430\u0439\u043b\u043e\u043c<\/a>.  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">docker-compose \u0434\u043b\u044f \u043f\u043e\u0434\u043d\u044f\u0442\u0438\u044f \u0442\u043e\u043b\u044c\u043a\u043e DynamoDB<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"bash\">version: '2.1' services:   localstack:     container_name: &quot;${LOCALSTACK_DOCKER_NAME-localstack_main}&quot;     image: localstack\/localstack     ports:       - &quot;4567-4599:4567-4599&quot;       - &quot;${PORT_WEB_UI-8080}:${PORT_WEB_UI-8080}&quot;     environment:       - SERVICES=dynamodb       - DEBUG=${DEBUG- }       - DATA_DIR=${DATA_DIR- }       - PORT_WEB_UI=${PORT_WEB_UI- }       - LAMBDA_EXECUTOR=${LAMBDA_EXECUTOR- }       - KINESIS_ERROR_PROBABILITY=${KINESIS_ERROR_PROBABILITY- }       - DOCKER_HOST=unix:\/\/\/var\/run\/docker.sock     volumes:       - &quot;${TMPDIR:-\/tmp\/localstack}:\/tmp\/localstack&quot;       - &quot;\/var\/run\/docker.sock:\/var\/run\/docker.sock&quot; <\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  \u041a\u043e\u043c\u0430\u043d\u0434\u0430 start \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u0435\u0442 \u0432\u0441\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 AWS-\u0441\u0435\u0440\u0432\u0438\u0441\u044b. \u0427\u0442\u043e\u0431\u044b \u043f\u043e\u0434\u043d\u044f\u0442\u044c \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e DynamoDB \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0437\u0430\u0434\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f:   <\/p>\n<pre><code class=\"bash\">set SERVICES=dynamodb <\/code><\/pre>\n<p>  \u0414\u043b\u044f Junit \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 <i>LocalstackTestRunner<\/i>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0441\u0435\u0440\u0432\u0438\u0441\u044b, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e <i>@LocalstackDockerProperties<\/i>.<br \/>  \u0412 \u0438\u0442\u043e\u0433\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0442\u0435\u0441\u0442\u0430 \u0434\u043b\u044f DbService \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:  <\/p>\n<ul>\n<li>\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043d\u0430\u0434 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u043c \u043a\u043b\u0430\u0441\u0441\u043e\u043c <br \/> \n<pre><code class=\"java\">@RunWith(LocalstackTestRunner.class) @LocalstackDockerProperties(services = { &quot;dynamodb&quot; }) <\/code><\/pre>\n<p>   <\/li>\n<li>\u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0442\u0430\u0431\u043b\u0438\u0446\u0443 <br \/> \n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">java<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"java\">@Before public void setUp() {     AmazonDynamoDB clientDynamoDB = TestUtils.getClientDynamoDB();     dynamoDB = new DynamoDB(clientDynamoDB);     dbService = new DbService(dynamoDB);      dynamoDB.createTable(             new CreateTableRequest()                     .withTableName(&quot;ContactUsTable&quot;)                     .withKeySchema(new KeySchemaElement(&quot;Id&quot;, KeyType.HASH))                     .withAttributeDefinitions(new AttributeDefinition(&quot;Id&quot;, ScalarAttributeType.S))                     .withProvisionedThroughput(new ProvisionedThroughput(10L, 10L))); }                 <\/code><\/pre>\n<p>   <\/div>\n<\/p><\/div>\n<p>   <\/li>\n<li>\u041e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0439 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0439<br \/> \n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">java<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"java\">\/\/ given ContactUsRequest contactUsRequest = new ContactUsRequest(&quot;subject&quot;, &quot;name&quot;, &quot;+79991234545&quot;, &quot;123@mail.ru&quot;, &quot;Qeustion&quot;);  \/\/ when dbService.putContactUsRequest(&quot;123&quot;, contactUsRequest);  \/\/ then Item item = dynamoDB.getTable(&quot;ContactUsTable&quot;).getItem(new PrimaryKey(&quot;Id&quot;, &quot;123&quot;)); assertEquals(contactUsRequest.getSubject(), item.get(&quot;Subject&quot;)); assertEquals(contactUsRequest.getUsername(), item.get(&quot;Username&quot;)); assertEquals(contactUsRequest.getPhone(), item.get(&quot;Phone&quot;)); assertEquals(contactUsRequest.getEmail(), item.get(&quot;Email&quot;)); assertEquals(contactUsRequest.getQuestion(), item.get(&quot;Question&quot;));               <\/code><\/pre>\n<p>   <\/div>\n<\/p><\/div>\n<p>   <\/li>\n<li>\u041d\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u0435\u043c \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u043f\u043e\u0441\u043b\u0435 \u0442\u0435\u0441\u0442\u0430<br \/> \n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">java<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"java\">@After public void tearDown() {     dynamoDB.getTable(&quot;ContactUsTable&quot;).delete(); }                <\/code><\/pre>\n<p>   <\/div>\n<\/p><\/div>\n<p>   <\/li>\n<\/ul>\n<p>  \u0412 \u0438\u0442\u043e\u0433\u0435, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f Localstack, \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043e\u0431\u0448\u0438\u0440\u043d\u044b\u0439 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u043c\u043e\u043a\u043e\u0432 AWS, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u044d\u043c\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0445 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432.<\/p>\n<h3>E2E \u0442\u0435\u0441\u0442\u044b<\/h3>\n<p>  \u0414\u043b\u044f \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f E2E \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0435\u0432 \u043b\u0443\u0447\u0448\u0435 \u043f\u043e\u0434\u043d\u044f\u0442\u044c \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0435 AWS-\u0441\u0435\u0440\u0432\u0438\u0441\u044b \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e \u043f\u043e\u0434 \u0437\u0430\u043f\u0443\u0441\u043a \u0442\u0435\u0441\u0442\u043e\u0432, \u0435\u0441\u043b\u0438, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u0435\u0441\u0442\u044c \u0442\u0430\u043a\u0430\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c. \u042d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0448\u0430\u0431\u043b\u043e\u043d\u0430 CloudFormation, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u0431\u0443\u0434\u0443\u0442 \u043a\u043e\u043f\u0438\u044f\u043c\u0438 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u0448\u0430\u0431\u043b\u043e\u043d\u0430.<\/p>\n<p>  \u0422\u0435\u0441\u0442 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0441\u0442\u0438, \u0432\u044b\u0437\u0432\u0430\u0432 \u043b\u044f\u043c\u0431\u0434\u0443 \u0447\u0435\u0440\u0435\u0437 AWS-CLI \u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043b\u044e\u0431\u044b\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u043c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u043c. \u0415\u0449\u0435 \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0432\u044b\u0437\u043e\u0432 \u0432 \u044e\u043d\u0438\u0442-\u0442\u0435\u0441\u0442\u0430\u0445, \u043d\u043e \u0431\u0435\u0437 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043c\u043e\u043a\u043e\u0432.<\/p>\n<h3>\u0422\u0435\u0441\u0442\u044b \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438<\/h3>\n<p>  \u0422\u0430\u043a \u043a\u0430\u043a performance-\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0437\u0430\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u0435\u0442 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u0438\u043b\u0438 \u0434\u0430\u0436\u0435 \u043a\u043d\u0438\u0433\u0438, \u044f \u043d\u0435 \u0431\u0443\u0434\u0443 \u043f\u044b\u0442\u0430\u0442\u044c\u0441\u044f \u0432\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0432\u0441\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0441\u044e\u0434\u0430. \u0412\u043a\u0440\u0430\u0442\u0446\u0435, \u0433\u043e\u0432\u043e\u0440\u044f \u043e \u043d\u0430\u0433\u0440\u0443\u0437\u043e\u0447\u043d\u043e\u043c \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u043c\u043d\u0438\u0442\u044c, \u0447\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435\u0445 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 AWS \u043d\u0435 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e\u0435, \u0438 \u0432\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0433\u043e\u0442\u043e\u0432\u044b \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u043e\u0446\u0435\u043d\u0438\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u0437\u0430\u0442\u0440\u0430\u0442\u044b.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u043e\u0446\u0435\u043d\u0438\u0442\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u0434\u043b\u044f \u043b\u044f\u043c\u0431\u0434\u044b, \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435\u0441\u044c UI-\u043a\u043e\u043d\u0441\u043e\u043b\u044c\u044e \u0438 \u0441\u0434\u0435\u043b\u0430\u0439\u0442\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0445 \u0432\u044b\u0437\u043e\u0432\u043e\u0432. \u0414\u0430\u043b\u0435\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0431\u0430\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u043b\u043e\u0433\u0438\u043a\u0438 \u0438 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0438 \u043e\u0446\u0435\u043d\u0438\u0442\u0435, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0438\u043c\u0435\u043d\u043d\u043e \u0432\u0430\u0448\u0435\u0439 \u043b\u044f\u043c\u0431\u0434\u044b \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432.<\/p>\n<p>  \u041d\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u0439\u0442\u0435 \u043f\u0440\u043e CloudWatch. \u0421 \u0435\u0433\u043e \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0434\u0430\u0448\u0431\u043e\u0440\u0434\u044b \u0438 \u043d\u0430 \u0438\u0445 \u043e\u0441\u043d\u043e\u0432\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c, \u043a\u0430\u043a\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043b\u044f\u043c\u0431\u0434\u044b \u0438 \u0442\u0440\u0430\u0442\u044b \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u0435\u0431\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442\u044c.<\/p>\n<p>  <a name=\"Part5\"><\/a>  <\/p>\n<h1>5. \u0421\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u044c Serverless-\u0440\u0435\u0448\u0435\u043d\u0438\u0439<\/h1>\n<p>  \u041e\u0446\u0435\u043d\u043a\u0430 \u0442\u043e\u0433\u043e \u0438\u043b\u0438 \u0438\u043d\u043e\u0433\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0432\u0441\u0435\u0433\u0434\u0430 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u0430, \u0432\u0435\u0434\u044c \u043d\u0443\u0436\u043d\u043e \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u044c \u043e\u0434\u043d\u043e\u0433\u043e \u0432\u044b\u0437\u043e\u0432\u0430, \u043d\u043e \u0438 \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0439\/\u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u0442\u0440\u0430\u0444\u0438\u043a, \u0441\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u044c \u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u043b\u043e\u0433\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430. \u0415\u0441\u043b\u0438 \u0432\u044b \u0437\u0430\u0434\u0443\u043c\u0430\u043b\u0438\u0441\u044c \u043e\u0431 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u043b\u044f\u043c\u0431\u0434\u044b, \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0441\u043f\u0440\u043e\u0433\u043d\u043e\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0443, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0432\u0430\u0448 \u0441\u0435\u0440\u0432\u0438\u0441 \u0431\u0443\u0434\u0435\u0442 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u044d\u0442\u043e \u043e\u0434\u0438\u043d\u043e\u0447\u043d\u044b\u0435 \u0432\u044b\u0437\u043e\u0432\u044b \u0438\u043b\u0438 ETL-\u043f\u0440\u043e\u0446\u0435\u0441\u0441, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c\u044b\u0439 \u0441 \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u043d\u043e\u0441\u0442\u044c\u044e \u0440\u0430\u0437 \u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0447\u0430\u0441\u043e\u0432\/\u0434\u043d\u0435\u0439, \u0442\u043e \u0441 \u0431\u043e\u043b\u044c\u0448\u0435\u0439 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c\u044e \u043b\u044f\u043c\u0431\u0434\u0430 \u043e\u043f\u0440\u0430\u0432\u0434\u0430\u0435\u0442 \u0441\u0435\u0431\u044f. \u0415\u0441\u043b\u0438 \u0432\u044b \u043f\u0440\u043e\u0433\u043d\u043e\u0437\u0438\u0440\u0443\u0435\u0442\u0435 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443 \u2014 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0434\u0438\u0442\u0435 \u0442\u043e\u0447\u043d\u0443\u044e \u043e\u0446\u0435\u043d\u043a\u0443. <\/p>\n<p>  \u041d\u0438\u0436\u0435 \u043f\u0440\u0438\u0432\u043e\u0436\u0443 \u043f\u0440\u0438\u0431\u043b\u0438\u0437\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u043e\u0434\u0441\u0447\u0435\u0442\u044b \u0441\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u0438 \u043b\u044f\u043c\u0431\u0434\u044b \u0438 \u0441\u0430\u043c\u043e\u0433\u043e \u0434\u0435\u0448\u0435\u0432\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430 EC2, \u0447\u0442\u043e\u0431\u044b \u0432\u044b \u043f\u043e\u043d\u044f\u043b\u0438, \u043e \u043a\u0430\u043a\u0438\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u0445 \u0438\u0434\u0435\u0442 \u0440\u0435\u0447\u044c: <br \/>  <a href=\"https:\/\/habrastorage.org\/webt\/p_\/0w\/ij\/p_0wij6j_z2xop6dbt185485llc.png\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/p_\/0w\/ij\/p_0wij6j_z2xop6dbt185485llc.png\"><\/a><\/p>\n<p>  \u0414\u043b\u044f \u0440\u0430\u0441\u0447\u0435\u0442\u0430 \u0431\u0440\u0430\u043b\u0438\u0441\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0434\u043b\u044f \u043b\u044f\u043c\u0431\u0434\u044b:<\/p>\n<ul>\n<li><b>\u0412\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f:<\/b> 150 \u043c\u0438\u043b\u043b\u0438\u0441\u0435\u043a\u0443\u043d\u0434<\/li>\n<li><b>\u0426\u0435\u043d\u0430:<\/b> 0,00001667$ \u0437\u0430 1\u0413\u0411\u2011\u0441<\/li>\n<li><b>\u041f\u0430\u043c\u044f\u0442\u044c:<\/b> 256 \u041c\u0411<\/li>\n<\/ul>\n<p>  \u0414\u043b\u044f EC2 t2.nano:<\/p>\n<ul>\n<li><b>\u0426\u0435\u043d\u0430:<\/b> 4,75$ \u0437\u0430 \u043c\u0435\u0441\u044f\u0446<\/li>\n<li><b>\u041f\u0430\u043c\u044f\u0442\u044c:<\/b> 512 \u041c\u0411<\/li>\n<li><b>vCPU:<\/b> 1<\/li>\n<li><b>\u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0430:<\/b> 5% CPU \u0432 \u043c\u0435\u0441\u044f\u0446<\/li>\n<\/ul>\n<p>  \u0414\u0430\u043d\u043d\u044b\u0435 \u043f\u043e \u0432\u044b\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u043e\u0439 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0435 EC2 \u044f \u0432\u0437\u044f\u043b <a href=\"https:\/\/www.concurrencylabs.com\/blog\/handle-thousands-of-users-with-a-t2-nano\/\">\u043e\u0442\u0441\u044e\u0434\u0430<\/a>.\u041f\u043e \u044d\u0442\u0438\u043c \u043f\u043e\u0434\u0441\u0447\u0435\u0442\u0430\u043c \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440 \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u0443\u044e \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u0432 0.3 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443. \u041f\u0440\u0438 \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0438 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0432\u0440\u0435\u043c\u044f \u043e\u0442\u0432\u0435\u0442\u0430 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u0442\u0438, \u0447\u0442\u043e \u0441\u043d\u0438\u0437\u0438\u0442 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430.<\/p>\n<p>  \u0412\u0441\u0435 \u044d\u0442\u0438 \u043f\u043e\u0434\u0441\u0447\u0435\u0442\u044b \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u044b \u0438 \u043d\u0435 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u044e\u0442 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0444\u0430\u043a\u0442\u043e\u0440\u043e\u0432: \u0441\u043a\u0438\u0434\u043a\u0438 \u0437\u0430 \u043f\u0440\u0435\u0434\u043e\u043f\u043b\u0430\u0442\u0443 \u0438\u043b\u0438 \u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432, \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043b\u044f\u043c\u0431\u0434\u044b \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435. \u041d\u043e \u043e\u043d\u0438 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442, \u0447\u0442\u043e \u043f\u0440\u0438 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u043c\u0435\u043d\u0435\u0435 1 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443 \u043b\u044f\u043c\u0431\u0434\u0430 \u0441\u0442\u043e\u0438\u0442 \u043c\u0435\u043d\u044c\u0448\u0435, \u0447\u0435\u043c \u0441\u0430\u043c\u044b\u0439 \u0434\u0435\u0448\u0435\u0432\u044b\u0439 EC2 \u0441\u0435\u0440\u0432\u0435\u0440.<\/p>\n<p>  \u041a\u0441\u0442\u0430\u0442\u0438, \u043d\u0435 \u0437\u0430\u0431\u0443\u0434\u044c\u0442\u0435 \u043f\u0440\u0438\u0431\u0430\u0432\u0438\u0442\u044c \u043a \u0441\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u0438 EC2 \u0446\u0435\u043d\u0443 ALB, \u0435\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0435\u0441\u0442\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0435\u043f\u043b\u0438\u043a \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438\u043b\u0438 elastic IPs.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/gr\/wc\/md\/grwcmd0t5swk3uwf-shmglewttu.png\"><\/div>\n<p>  \u0422\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u0430\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 Serverless-\u0440\u0435\u0448\u0435\u043d\u0438\u0439 \u043c\u0435\u043d\u0435\u0435 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b, \u0447\u0435\u043c \u0442\u0435 \u0436\u0435 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u044b. \u0422\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 \u0432\u0441\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u043b\u044e\u0434\u0435\u0439 \u0438\u0437\u0443\u0447\u0430\u044e\u0442 \u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u044e\u0442 \u044d\u0442\u0438 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438 \u0438 \u0434\u0430\u044e\u0442 \u0448\u0430\u043d\u0441 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c \u043e\u043f\u0435\u043d-\u0441\u043e\u0440\u0441 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430\u043c \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c\u0441\u044f \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u0435\u0435 \u0438 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u0435\u0435. \u0422\u0430\u043a\u0438\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0443\u043f\u0440\u043e\u0449\u0430\u044e\u0442 \u0436\u0438\u0437\u043d\u044c \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u044b\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043f\u0440\u043e\u0434\u0443\u043a\u0442 \u0432 \u043a\u0440\u0430\u0442\u0447\u0430\u0439\u0448\u0438\u0435 \u0441\u0440\u043e\u043a\u0438 \u0438 \u043d\u0435 \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c\u0441\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u043e\u0439 \u0432\u0441\u0435\u0439 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b. \u041d\u043e \u0438 \u0432 \u0443\u0436\u0435 \u0440\u0430\u0437\u0432\u0438\u0442\u044b\u0445 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430\u0445, \u044f \u0434\u0443\u043c\u0430\u044e, \u043d\u0430\u0439\u0434\u0435\u0442\u0441\u044f \u043c\u0435\u0441\u0442\u043e \u0434\u043b\u044f \u0431\u0435\u0441\u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0445 \u0431\u0430\u0437 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u043b\u0438 \u043b\u044f\u043c\u0431\u0434.<\/p>\n<p>  \u042f \u043d\u0435 \u043f\u0440\u0435\u0442\u0435\u043d\u0434\u0443\u044e \u043d\u0430 \u0437\u0432\u0430\u043d\u0438\u0435 \u044d\u043a\u0441\u043f\u0435\u0440\u0442\u0430 \u0432 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f Serverless-\u0440\u0435\u0448\u0435\u043d\u0438\u0439, \u043d\u043e, \u043e\u0441\u043d\u043e\u0432\u044b\u0432\u0430\u044f\u0441\u044c \u043d\u0430 \u043b\u0438\u0447\u043d\u043e\u043c \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u043e\u043f\u044b\u0442\u0435, \u0440\u0435\u0448\u0438\u043b \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043c\u043e\u043c\u0435\u043d\u0442\u044b \u0432 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435. \u041d\u0430\u0434\u0435\u044e\u0441\u044c, \u043a\u043e\u043c\u0443-\u0442\u043e \u043e\u043d\u0438 \u0431\u0443\u0434\u0443\u0442 \u043f\u043e\u043b\u0435\u0437\u043d\u044b, \u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043a\u0442\u043e-\u0442\u043e \u0438\u0437 \u0432\u0430\u0441 \u043c\u043e\u0436\u0435\u0442 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0438\u043b\u0438 \u0434\u0430\u0436\u0435 \u043f\u043e\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043c\u0435\u043d\u044f, \u0447\u0435\u043c\u0443 \u044f \u0431\u0443\u0434\u0443 \u043e\u0447\u0435\u043d\u044c \u0440\u0430\u0434.<\/p>\n<p>  <a name=\"Part6\"><\/a>  <\/p>\n<h1>\u041f\u043e\u043b\u0435\u0437\u043d\u044b\u0435 \u0441\u0441\u044b\u043b\u043a\u0438<\/h1>\n<p>  <\/p>\n<ul>\n<li><a href=\"https:\/\/habr.com\/ru\/company\/dins\/blog\/486648\/\">AWS Lambda in Action. \u0427\u0430\u0441\u0442\u044c 1<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/Gralll\/aws-sam-contact-us-java11\">\u041f\u0440\u043e\u0435\u043a\u0442 \u043d\u0430 GitHub<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/localstack\/localstack\">Localstack Git \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/localstack\/localstack\/blob\/master\/docker-compose.yml\">\u0424\u0430\u0439\u043b docker-compose \u0434\u043b\u044f \u043f\u043e\u0434\u043d\u044f\u0442\u0438\u044f Localstack<\/a><\/li>\n<li><a href=\"https:\/\/www.concurrencylabs.com\/blog\/handle-thousands-of-users-with-a-t2-nano\/\">\u0421\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0441\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f EC2 \u0438 AWS Lambda<\/a><\/li>\n<li><a href=\"https:\/\/docs.aws.amazon.com\/cli\/latest\/userguide\/install-cliv1.html\">\u0421\u043a\u0430\u0447\u0430\u0442\u044c AWS-CLI<\/a><\/li>\n<li><a href=\"https:\/\/docs.aws.amazon.com\/serverless-application-model\/latest\/developerguide\/serverless-sam-cli-install-windows.html\">\u0421\u043a\u0430\u0447\u0430\u0442\u044c SAM-CLI<\/a><\/li>\n<li><a href=\"https:\/\/docs.aws.amazon.com\/cli\/latest\/userguide\/cli-chap-configure.html\">\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f AWS-CLI<\/a><\/li>\n<li><a href=\"https:\/\/docs.aws.amazon.com\/serverless-application-model\/latest\/developerguide\/sam-specification-resources-and-properties.html\">\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 SAM-\u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432<\/a><\/li>\n<li><a href=\"https:\/\/docs.aws.amazon.com\/lambda\/latest\/dg\/configuration-aliases.html\">\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u0430\u043b\u0438\u0430\u0441\u043e\u0432 \u0434\u043b\u044f AWS Lambda<\/a><\/li>\n<\/ul>\n<\/div>\n<p> \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\/company\/dins\/blog\/496756\/\"> https:\/\/habr.com\/ru\/company\/dins\/blog\/496756\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\" data-io-article-url=\"https:\/\/habr.com\/ru\/company\/dins\/blog\/496756\/\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/7w\/hp\/bb\/7whpbbwttpekzxdq4-7sgs28rio.png\"><\/p>\n<p>  \u042d\u0442\u043e\u0442 \u0433\u0430\u0439\u0434 \u2014 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043b\u0438\u0447\u043d\u043e\u0433\u043e \u043e\u043f\u044b\u0442\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f Serverless-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043c\u0430\u043d\u0435\u0432\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u00ab\u043a\u043e\u0441\u0442\u044b\u043b\u044f\u043c\u0438\u00bb \u0438 \u00ab\u0432\u0435\u043b\u043e\u0441\u0438\u043f\u0435\u0434\u0430\u043c\u0438\u00bb \u043f\u0440\u0438 \u043f\u043e\u043f\u044b\u0442\u043a\u0430\u0445 \u0438\u0445 \u043f\u0440\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c. \u041a\u043e\u0433\u0434\u0430 \u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u043b \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c\u0441\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u043e\u0439 Serverless-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439, \u0432\u043e \u0432\u0441\u0435\u043c \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u0440\u0443\u043a\u0430\u043c\u0438, \u043d\u0435 \u0431\u044b\u043b\u043e \u0447\u0435\u0442\u043a\u0438\u0445 \u0433\u0430\u0439\u0434\u043e\u0432 \u0438\u043b\u0438 \u0443\u0434\u043e\u0431\u043d\u044b\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. <\/p>\n<p>  \u0421\u0435\u0439\u0447\u0430\u0441 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f: \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0441\u0442\u0430\u043b\u0438 \u043f\u043e\u044f\u0432\u043b\u044f\u0442\u044c\u0441\u044f, \u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u043c\u0430\u043d\u0443\u0430\u043b\u044b \u043f\u043e \u0438\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044e \u043d\u0435\u043f\u0440\u043e\u0441\u0442\u043e. \u0412 \u044d\u0442\u043e\u043c \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0435 \u044f \u043f\u043e\u043a\u0430\u0436\u0443 \u043d\u0430 \u043f\u0440\u043e\u0441\u0442\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435, \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u043d\u043e\u0432\u044b\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u043e\u043c. \u0412\u044b \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u043b\u0435\u0433\u043a\u043e \u0435\u0433\u043e \u043e\u0441\u0432\u043e\u0438\u0442\u044c \u0438 \u043e\u0431\u043e\u0439\u0442\u0438 \u0442\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0438 \u0431\u0430\u0433\u0438, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u00ab\u043f\u043e\u0441\u0447\u0430\u0441\u0442\u043b\u0438\u0432\u0438\u043b\u043e\u0441\u044c\u00bb \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u0442\u044c\u0441\u044f \u043c\u043d\u0435. <\/p>\n<p>  \u0412\u044b \u0443\u0437\u043d\u0430\u0435\u0442\u0435, \u043a\u0430\u043a \u0432\u0435\u0441\u0442\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043d\u043e\u0439 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 AWS, SAM-CLI \u0438 IntelljIDEA. \u0415\u0449\u0435 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043f\u0440\u043e \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435: \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435, E2E \u0438 \u044e\u043d\u0438\u0442-\u0442\u0435\u0441\u0442\u044b. \u0410 \u043d\u0430\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u043a \u043e\u0431\u0441\u0443\u0434\u0438\u043c, \u0432\u043e \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043e\u0431\u043e\u0439\u0434\u0435\u0442\u0441\u044f \u0442\u0430\u043a\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 (\u0441\u043f\u043e\u0439\u043b\u0435\u0440: \u043d\u0430 \u043d\u0435\u043c \u043c\u043e\u0436\u043d\u043e \u043d\u0435\u043f\u043b\u043e\u0445\u043e \u0441\u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0442\u044c). <\/p>\n<p>  \u0421\u0442\u0430\u0442\u044c\u044f \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0435\u0437\u043d\u0430 \u0442\u0435\u043c, \u043a\u0442\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0432\u0435\u0441\u0442\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443 Serverless-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0438 \u0435\u0449\u0435 \u043d\u0435 \u0437\u043d\u0430\u043a\u043e\u043c \u0441 \u0435\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0435\u043c \u0438 \u043f\u043e\u0434\u0445\u043e\u0434\u0430\u043c\u0438.   <\/p>\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-302711","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/302711","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=302711"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/302711\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=302711"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=302711"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=302711"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}