{"id":80538,"date":"2020-05-07T01:42:34","date_gmt":"2020-05-06T23:42:34","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/integracziya-aviasales-api-s-amazon-kinesis-i-prostota-serverless"},"modified":"2020-05-07T01:42:34","modified_gmt":"2020-05-06T23:42:34","slug":"integracziya-aviasales-api-s-amazon-kinesis-i-prostota-serverless","status":"publish","type":"post","link":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/integracziya-aviasales-api-s-amazon-kinesis-i-prostota-serverless","title":{"rendered":"Integrazione dell'API Aviasales con Amazon Kinesis e semplicit\u00e0 serverless","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440!<\/p>\n<p>\u0410 \u0432\u044b \u043b\u044e\u0431\u0438\u0442\u0435 \u043b\u0435\u0442\u0430\u0442\u044c \u043d\u0430 \u0441\u0430\u043c\u043e\u043b\u0435\u0442\u0430\u0445? \u042f \u043e\u0431\u043e\u0436\u0430\u044e, \u043d\u043e \u043d\u0430 \u0441\u0430\u043c\u043e\u0438\u0437\u043e\u043b\u044f\u0446\u0438\u0438 \u043f\u043e\u043b\u044e\u0431\u0438\u043b \u0435\u0449\u0435 \u0438 \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043e\u0431 \u0430\u0432\u0438\u0430\u0431\u0438\u043b\u0435\u0442\u0430\u0445 \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u0433\u043e \u0440\u0435\u0441\u0443\u0440\u0441\u0430 \u2014 Aviasales.<\/p>\n<p>\u0421\u0435\u0433\u043e\u0434\u043d\u044f \u043c\u044b \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c \u0440\u0430\u0431\u043e\u0442\u0443 Amazon Kinesis, \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u043c \u0441\u0442\u0440\u0438\u043c\u043c\u0438\u043d\u0433\u043e\u0432\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0441 \u0440\u0435\u0430\u043b-\u0442\u0430\u0439\u043c \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u043e\u0439, \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043c NoSQL \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 Amazon DynamoDB \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u043c \u043e\u043f\u043e\u0432\u0435\u0449\u0435\u043d\u0438\u0435 \u0447\u0435\u0440\u0435\u0437 SMS \u043f\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u043c \u0431\u0438\u043b\u0435\u0442\u0430\u043c. <\/p>\n<p>\u0412\u0441\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u0434 \u043a\u0430\u0442\u043e\u043c! \u041f\u043e\u0435\u0445\u0430\u043b\u0438!<\/p>\n<p><img decoding=\"async\" alt=\"\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f Aviasales API \u0441 Amazon Kinesis \u0438 \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0430 serverless\" src=\"\/wp-content\/uploads\/2020\/05\/7acc9b5d0faeb54b445537c01e18a8b1.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/h2>\n<p>\n\u0414\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u043d\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0434\u043e\u0441\u0442\u0443\u043f \u043a <noindex><a rel=\"nofollow\" href=\"https:\/\/support.travelpayouts.com\/hc\/ru\/sections\/201008338-API-%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85-%D0%BE%D1%82-Aviasales\" rel=\"nofollow\">API Aviasales<\/a><\/noindex>. \u0414\u043e\u0441\u0442\u0443\u043f \u043a \u043d\u0435\u043c\u0443 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e \u0438 \u0431\u0435\u0437 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0439, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043b\u0438\u0448\u044c \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 \u00ab\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c\u00bb, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441\u0432\u043e\u0439 API \u0442\u043e\u043a\u0435\u043d \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0434\u0430\u043d\u043d\u044b\u043c.<\/p>\n<blockquote><p>\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0446\u0435\u043b\u044c \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u2014 \u0434\u0430\u0442\u044c \u043e\u0431\u0449\u0435\u0435 \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u0442\u043e\u043a\u043e\u0432\u043e\u0439 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0432 AWS, \u043c\u044b \u0432\u044b\u043d\u043e\u0441\u0438\u043c \u0437\u0430 \u0441\u043a\u043e\u0431\u043a\u0438, \u0447\u0442\u043e \u0434\u0430\u043d\u043d\u044b\u0435, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u044b\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u043c API \u043d\u0435 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0441\u0442\u0440\u043e\u0433\u043e \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442\u0441\u044f \u0438\u0437 \u043a\u044d\u0448\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u0438 \u043f\u043e\u0438\u0441\u043a\u043e\u0432 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u0441\u0430\u0439\u0442\u043e\u0432 Aviasales.ru \u0438 Jetradar.com \u0437\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 48 \u0447\u0430\u0441\u043e\u0432. <\/p><\/blockquote>\n<p>\n\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u0447\u0435\u0440\u0435\u0437 API \u0434\u0430\u043d\u043d\u044b\u0435 \u043e\u0431 \u0430\u0432\u0438\u0430\u0431\u0438\u043b\u0435\u0442\u0430\u0445 Kinesis-agent, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u043d\u0430 \u043c\u0430\u0448\u0438\u043d\u0435-\u043f\u0440\u043e\u0434\u044e\u0441\u0435\u0440\u0435, \u0431\u0443\u0434\u0435\u0442 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u043e\u043c \u043f\u0430\u0440\u0441\u0438\u0442\u044c \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0432 \u043d\u0443\u0436\u043d\u044b\u0439 \u043f\u043e\u0442\u043e\u043a \u0447\u0435\u0440\u0435\u0437 Kinesis Data Analytics. \u041d\u0435\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430 \u0431\u0443\u0434\u0435\u0442 \u043f\u0438\u0441\u0430\u0442\u044c\u0441\u044f \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0432 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435. \u0420\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u043e\u0435 \u0432 DynamoDB \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u00ab\u0441\u044b\u0440\u044b\u0445\u00bb \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u0433\u043b\u0443\u0431\u043e\u043a\u0438\u0439 \u0430\u043d\u0430\u043b\u0438\u0437 \u0431\u0438\u043b\u0435\u0442\u043e\u0432 \u0447\u0435\u0440\u0435\u0437 BI \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, AWS Quick Sight. <\/p>\n<p>\u041c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0434\u0432\u0430 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430 \u0434\u0435\u043f\u043b\u043e\u044f \u0432\u0441\u0435\u0439 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b:<\/p>\n<ul>\n<li>\u0420\u0443\u0447\u043d\u043e\u0439 \u2014 \u0447\u0435\u0440\u0435\u0437 AWS Management Console;<\/li>\n<li>\u0418\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0438\u0437 \u043a\u043e\u0434\u0430 Terraform \u2014 \u0434\u043b\u044f \u043b\u0435\u043d\u0438\u0432\u044b\u0445 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0442\u043e\u0440\u043e\u0432;<\/li>\n<\/ul>\n<p><\/p>\n<h2>\u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b<\/h2>\n<p>\n<img decoding=\"async\" alt=\"\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f Aviasales API \u0441 Amazon Kinesis \u0438 \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0430 serverless\" src=\"\/wp-content\/uploads\/2020\/05\/6e8334da51843381150ac0e4cd641eb7.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b:<\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/support.travelpayouts.com\/hc\/ru\/articles\/203956163-API-%D0%B4%D0%BE%D1%81%D1%82%D1%83%D0%BF%D0%B0-%D0%BA-%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%BC#03\" rel=\"nofollow\"><b>Aviasales API<\/b><\/a><\/noindex> \u2014 \u0434\u0430\u043d\u043d\u044b\u0435, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u044b\u0435 \u044d\u0442\u0438\u043c API, \u0431\u0443\u0434\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u043b\u044f \u0432\u0441\u0435\u0439 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0440\u0430\u0431\u043e\u0442\u044b;<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/aws.amazon.com\/ru\/ec2\/\" rel=\"nofollow\"><b>EC2 Producer Instance<\/b><\/a><\/noindex> \u2014 \u043e\u0431\u044b\u0447\u043d\u0430\u044f \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u0430\u044f \u043c\u0430\u0448\u0438\u043d\u0430 \u0432 \u043e\u0431\u043b\u0430\u043a\u0435, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0431\u0443\u0434\u0435\u0442 \u0433\u0435\u043d\u0435\u0440\u0438\u0442\u044c\u0441\u044f \u0432\u0445\u043e\u0434\u043d\u043e\u0439 \u043f\u043e\u0442\u043e\u043a \u0434\u0430\u043d\u043d\u044b\u0445:\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/docs.aws.amazon.com\/streams\/latest\/dev\/writing-with-agents.html\" rel=\"nofollow\"><b>Kinesis Agent<\/b><\/a><\/noindex> \u2014 \u044d\u0442\u043e Java-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c\u043e\u0435 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e \u043d\u0430 \u043c\u0430\u0448\u0438\u043d\u0443, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0441\u0431\u043e\u0440\u0430 \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 Kinesis (Kinesis Data Streams \u0438\u043b\u0438 Kinesis Firehose). \u0410\u0433\u0435\u043d\u0442 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0435\u0442 \u043d\u0430\u0431\u043e\u0440 \u0444\u0430\u0439\u043b\u043e\u0432 \u0432 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0445 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f\u0445 \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u043d\u043e\u0432\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 Kinesis;<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/igorgorbenko\/aviasales_kinesis\/blob\/master\/producer\/api_caller.py\" rel=\"nofollow\"><b>\u0421\u043a\u0440\u0438\u043f\u0442 API Caller<\/b><\/a><\/noindex> \u2014 Python-\u0441\u043a\u0440\u0438\u043f\u0442, \u0434\u0435\u043b\u0430\u044e\u0449\u0438\u0439 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043a API \u0438 \u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u044e\u0449\u0438\u0439 \u043e\u0442\u0432\u0435\u0442 \u0432 \u043f\u0430\u043f\u043a\u0443, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u0442 Kinesis Agent;<\/li>\n<\/ul>\n<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/aws.amazon.com\/ru\/kinesis\/data-streams\/\" rel=\"nofollow\"><b>Kinesis Data Streams<\/b><\/a><\/noindex> \u2014 \u0441\u0435\u0440\u0432\u0438\u0441 \u043f\u043e\u0442\u043e\u043a\u043e\u0432\u043e\u0439 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0441 \u0448\u0438\u0440\u043e\u043a\u0438\u043c\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044f\u043c\u0438 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f;<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/aws.amazon.com\/ru\/kinesis\/data-analytics\/\" rel=\"nofollow\"><b>Kinesis Analytics<\/b><\/a><\/noindex> \u2014 \u0431\u0435\u0441\u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0438\u0441, \u0443\u043f\u0440\u043e\u0449\u0430\u044e\u0449\u0438\u0439 \u0430\u043d\u0430\u043b\u0438\u0437 \u043f\u043e\u0442\u043e\u043a\u043e\u0432\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438. Amazon Kinesis Data Analytics \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442 \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043b\u044e\u0431\u044b\u0445 \u043e\u0431\u044a\u0435\u043c\u043e\u0432 \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445;<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/aws.amazon.com\/ru\/lambda\/\" rel=\"nofollow\"><b>AWS Lambda<\/b><\/a><\/noindex> \u2014 \u0441\u0435\u0440\u0432\u0438\u0441, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0439 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043a\u043e\u0434 \u0431\u0435\u0437 \u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432. \u0412\u0441\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043c\u043e\u0449\u043d\u043e\u0441\u0442\u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u043f\u043e\u0434 \u043a\u0430\u0436\u0434\u044b\u0439 \u0432\u044b\u0437\u043e\u0432;<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/aws.amazon.com\/ru\/dynamodb\/features\/\" rel=\"nofollow\"><b>Amazon DynamoDB<\/b><\/a><\/noindex> \u2014 \u0431\u0430\u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u0430\u0440 \u00ab\u043a\u043b\u044e\u0447\u2011\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u00bb \u0438 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0443 \u043c\u0435\u043d\u0435\u0435 10 \u043c\u0438\u043b\u043b\u0438\u0441\u0435\u043a\u0443\u043d\u0434 \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0432 \u043b\u044e\u0431\u043e\u043c \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0435. \u041f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 DynamoDB \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c \u043a\u0430\u043a\u0438\u0435-\u043b\u0438\u0431\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u044b, \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c \u043d\u0430 \u043d\u0438\u0445 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0438\u043b\u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0438\u043c\u0438. DynamoDB \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u0442 \u0442\u0430\u0431\u043b\u0438\u0446\u044b, \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u0438\u0440\u0443\u044f \u043e\u0431\u044a\u0435\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u044f \u0432\u044b\u0441\u043e\u043a\u0443\u044e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c. \u041d\u0438\u043a\u0430\u043a\u0438\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043f\u043e \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f;<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/aws.amazon.com\/ru\/sns\/\" rel=\"nofollow\"><b>Amazon SNS<\/b><\/a><\/noindex> \u2014 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0439 \u0441\u0435\u0440\u0432\u0438\u0441 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043f\u043e \u043c\u043e\u0434\u0435\u043b\u0438 \u00ab\u0438\u0437\u0434\u0430\u0442\u0435\u043b\u044c \u2014 \u043f\u043e\u0434\u043f\u0438\u0441\u0447\u0438\u043a\u00bb (Pub\/Sub), \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0438\u0437\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u044b, \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0438 \u0431\u0435\u0441\u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. SNS \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u0440\u0430\u0441\u0441\u044b\u043b\u043a\u0438 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0445 push-\u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0439, SMS-\u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0438 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u044b\u0445 \u043f\u0438\u0441\u0435\u043c.<\/li>\n<\/ul>\n<p><\/p>\n<h2>\u041d\u0430\u0447\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430<\/h2>\n<p>\n\u0414\u043b\u044f \u044d\u043c\u0443\u043b\u044f\u0446\u0438\u0438 \u043f\u043e\u0442\u043e\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u044f \u0440\u0435\u0448\u0438\u043b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e\u0431 \u0430\u0432\u0438\u0430\u0431\u0438\u043b\u0435\u0442\u0430\u0445, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u0443\u044e API Aviasales. \u0412 <noindex><a rel=\"nofollow\" href=\"https:\/\/support.travelpayouts.com\/hc\/ru\/articles\/203956163-API-%D0%B4%D0%BE%D1%81%D1%82%D1%83%D0%BF%D0%B0-%D0%BA-%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%BC#03\" rel=\"nofollow\">\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438<\/a><\/noindex> \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043e\u0431\u0448\u0438\u0440\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0440\u0430\u0437\u043d\u044b\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432, \u0432\u043e\u0437\u044c\u043c\u0435\u043c \u043e\u0434\u0438\u043d \u0438\u0437 \u043d\u0438\u0445 \u2014 \u00ab\u041a\u0430\u043b\u0435\u043d\u0434\u0430\u0440\u044c \u0446\u0435\u043d \u043d\u0430 \u043c\u0435\u0441\u044f\u0446\u00bb, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0446\u0435\u043d\u044b \u0437\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u0434\u0435\u043d\u044c \u043c\u0435\u0441\u044f\u0446\u0430, \u0441\u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0443 \u043f\u0435\u0440\u0435\u0441\u0430\u0434\u043e\u043a. \u0415\u0441\u043b\u0438 \u043d\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0432 \u0437\u0430\u043f\u0440\u043e\u0441\u0435 \u043c\u0435\u0441\u044f\u0446 \u043f\u043e\u0438\u0441\u043a\u0430, \u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0435\u043d\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0437\u0430 \u043c\u0435\u0441\u044f\u0446, \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0437\u0430 \u0442\u0435\u043a\u0443\u0449\u0438\u043c.<\/p>\n<p>\u0418\u0442\u0430\u043a, \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u043c\u0441\u044f, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0441\u0432\u043e\u0439 \u0442\u043e\u043a\u0435\u043d. <\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043d\u0438\u0436\u0435:<\/p>\n<pre><code class=\"bash\">http:\/\/api.travelpayouts.com\/v2\/prices\/month-matrix?currency=rub&amp;origin=LED&amp;destination=HKT&amp;show_to_affiliates=true&amp;token=TOKEN_API<\/code><\/pre>\n<p>\n\u0412\u044b\u0448\u0435\u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u043e\u0442 API \u0441 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0435\u043c \u0442\u043e\u043a\u0435\u043d\u0430 \u0432 \u0437\u0430\u043f\u0440\u043e\u0441\u0435 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c, \u043d\u043e \u043c\u043d\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0442\u043e\u043a\u0435\u043d \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u0447\u0435\u0440\u0435\u0437 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u0441\u043a\u0440\u0438\u043f\u0442\u0435 api_caller.py \u0431\u0443\u0434\u0435\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0438\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u0438\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c.<\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440 \u043e\u0442\u0432\u0435\u0442\u0430:<\/p>\n<pre><code class=\"json\">{{\n   &quot;success&quot;:true,\n   &quot;data&quot;:[{\n      &quot;show_to_affiliates&quot;:true,\n      &quot;trip_class&quot;:0,\n      &quot;origin&quot;:&quot;LED&quot;,\n      &quot;destination&quot;:&quot;HKT&quot;,\n      &quot;depart_date&quot;:&quot;2015-10-01&quot;,\n      &quot;return_date&quot;:&quot;&quot;,\n      &quot;number_of_changes&quot;:1,\n      &quot;value&quot;:29127,\n      &quot;found_at&quot;:&quot;2015-09-24T00:06:12+04:00&quot;,\n      &quot;distance&quot;:8015,\n      &quot;actual&quot;:true\n   }]\n}\n<\/code><\/pre>\n<p>\n\u0412 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043e\u0442\u0432\u0435\u0442\u0430 API \u0432\u044b\u0448\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043d \u0431\u0438\u043b\u0435\u0442 \u0438\u0437 \u0421\u0430\u043d\u043a\u0442-\u041f\u0435\u0442\u0435\u0440\u0431\u0443\u0440\u0433\u0430 \u0432 \u041f\u0445\u0443\u043a\u2026 \u042d\u0445, \u0434\u0430 \u0447\u0442\u043e \u043c\u0435\u0447\u0442\u0430\u0442\u044c\u2026 <br \/>\n\u0422\u0430\u043a \u043a\u0430\u043a \u044f \u0438\u0437 \u041a\u0430\u0437\u0430\u043d\u0438, \u0430 \u041f\u0445\u0443\u043a\u0435\u0442 \u0441\u0435\u0439\u0447\u0430\u0441 \u00ab\u043d\u0430\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u043d\u0438\u0442\u0441\u044f\u00bb, \u043f\u043e\u0438\u0449\u0435\u043c \u0431\u0438\u043b\u0435\u0442\u044b \u0438\u0437 \u0421\u0430\u043d\u043a\u0442-\u041f\u0435\u0442\u0435\u0440\u0431\u0443\u0440\u0433\u0430 \u0432 \u041a\u0430\u0437\u0430\u043d\u044c.<\/p>\n<blockquote><p>\u041f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0443 \u0432\u0430\u0441 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u0430\u043a\u043a\u0430\u0443\u043d\u0442 \u0432 AWS. \u0421\u0440\u0430\u0437\u0443 \u0445\u043e\u0447\u0443 \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u043e\u0441\u043e\u0431\u043e\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e Kinesis \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0430 \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0439 \u0447\u0435\u0440\u0435\u0437 SMS \u043d\u0435 \u0432\u0445\u043e\u0434\u044f\u0442 \u0432 \u0433\u043e\u0434\u043e\u0432\u043e\u0439 <noindex><a rel=\"nofollow\" href=\"https:\/\/aws.amazon.com\/ru\/free\/\" rel=\"nofollow\">Free Tier (\u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435)<\/a><\/noindex>. \u041d\u043e \u0434\u0430\u0436\u0435 \u043d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u044d\u0442\u043e, \u0437\u0430\u043b\u043e\u0436\u0438\u0432 \u0432 \u0443\u043c\u0435 \u043f\u0430\u0440\u0443 \u0434\u043e\u043b\u043b\u0430\u0440\u043e\u0432, \u0432\u043f\u043e\u043b\u043d\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u043d\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0438 \u043f\u043e\u0438\u0433\u0440\u0430\u0442\u044c \u0441 \u043d\u0435\u0439. \u0418, \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435, \u043d\u0435 \u0441\u0442\u043e\u0438\u0442 \u0437\u0430\u0431\u044b\u0432\u0430\u0442\u044c \u0443\u0434\u0430\u043b\u044f\u0442\u044c \u0432\u0441\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u043f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u043e\u043d\u0438 \u0441\u0442\u0430\u043b\u0438 \u043d\u0435 \u043d\u0443\u0436\u043d\u044b.<\/p><\/blockquote>\n<p> \u041a \u0441\u0447\u0430\u0441\u0442\u044c\u044e, DynamoDb \u0438 \u043b\u044f\u043c\u0431\u0434\u0430-\u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0431\u0443\u0434\u0443\u0442 \u0434\u043b\u044f \u043d\u0430\u0441 \u0443\u0441\u043b\u043e\u0432\u043d\u043e \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u043c\u0438, \u0435\u0441\u043b\u0438 \u0443\u043b\u043e\u0436\u0438\u0442\u044c\u0441\u044f \u0432 \u043c\u0435\u0441\u044f\u0447\u043d\u044b\u0435 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u0435 \u043b\u0438\u043c\u0438\u0442\u044b. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u043b\u044f DynamoDB: 25 \u0413\u0431 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430, 25 WCU\/RCU \u0438 100 \u043c\u043b\u043d. \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432. \u0418 \u043c\u0438\u043b\u043b\u0438\u043e\u043d \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u043b\u044f\u043c\u0431\u0434\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0432 \u043c\u0435\u0441\u044f\u0446.<\/p>\n<h2>\u0420\u0443\u0447\u043d\u043e\u0439 \u0434\u0435\u043f\u043b\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b<\/h2>\n<p><\/p>\n<h3>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 Kinesis Data Streams<\/h3>\n<p>\n\u041f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u0432 \u0441\u0435\u0440\u0432\u0438\u0441 Kinesis Data Streams \u0438 \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0434\u0432\u0430 \u043d\u043e\u0432\u044b\u0445 \u043f\u043e\u0442\u043e\u043a\u0430 \u043f\u043e \u043e\u0434\u043d\u043e\u043c\u0443 \u0448\u0430\u0440\u0434\u0443 \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439.<\/p>\n<p>                        <b class=\"spoiler_title\">\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u0448\u0430\u0440\u0434?<\/b><br \/>\n                        \u0428\u0430\u0440\u0434 \u2014 \u044d\u0442\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0435\u0434\u0438\u043d\u0438\u0446\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e\u0442\u043e\u043a\u0430 Amazon Kinesis. \u041e\u0434\u0438\u043d \u0441\u0435\u0433\u043c\u0435\u043d\u0442 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0443 \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u043e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c\u044e 1 \u041c\u0411\/\u0441 \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0443 \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u043e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c\u044e 2 \u041c\u0411\/\u0441. \u041e\u0434\u0438\u043d \u0441\u0435\u0433\u043c\u0435\u043d\u0442 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0434\u043e 1000 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 PUT \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443. \u041f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u043f\u043e\u0442\u043e\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043d\u0443\u0436\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043e\u0432. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043f\u043e\u0442\u043e\u043a \u0434\u0430\u043d\u043d\u044b\u0445 \u0441 \u0434\u0432\u0443\u043c\u044f \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430\u043c\u0438. \u042d\u0442\u043e\u0442 \u043f\u043e\u0442\u043e\u043a \u0434\u0430\u043d\u043d\u044b\u0445 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0443 \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u043e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c\u044e 2 \u041c\u0411\/\u0441 \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0443 \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u043e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c\u044e 4 \u041c\u0411\/\u0441 \u0441 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 \u0434\u043e 2000 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 PUT \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443.<\/p>\n<p>\u0427\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u0448\u0430\u0440\u0434\u043e\u0432 \u0432 \u0432\u0430\u0448\u0435\u043c \u043f\u043e\u0442\u043e\u043a\u0435 \u2014 \u0442\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u0435\u0433\u043e \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u043d\u0430\u044f \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c. \u0412 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435, \u0442\u0430\u043a \u0438 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u043f\u043e\u0442\u043e\u043a\u0438 \u2014 \u043f\u0443\u0442\u0435\u043c \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0448\u0430\u0440\u0434\u043e\u0432. \u041d\u043e \u0447\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u0443 \u0432\u0430\u0441 \u0448\u0430\u0440\u0434\u043e\u0432, \u0442\u0435\u043c \u0432\u044b\u0448\u0435 \u0438 \u0446\u0435\u043d\u0430. \u041a\u0430\u0436\u0434\u044b\u0439 \u0448\u0430\u0440\u0434 \u0441\u0442\u043e\u0438\u0442 1,5 \u0446\u0435\u043d\u0442\u0430 \u0432 \u0447\u0430\u0441 \u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e 1.4 \u0446\u0435\u043d\u0442\u0430 \u0437\u0430 \u043a\u0430\u0436\u0434\u044b\u0435 \u043c\u0438\u043b\u043b\u0438\u043e\u043d \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0432 \u043f\u043e\u0442\u043e\u043a (PUT payload units).<\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043d\u043e\u0432\u044b\u0439 \u043f\u043e\u0442\u043e\u043a \u0441 \u0438\u043c\u0435\u043d\u0435\u043c <b>airline_tickets<\/b>, \u0435\u043c\u0443 \u0432\u043f\u043e\u043b\u043d\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u0443\u0434\u0435\u0442 1 \u0448\u0430\u0440\u0434\u0430:<\/p>\n<p><img decoding=\"async\" alt=\"\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f Aviasales API \u0441 Amazon Kinesis \u0438 \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0430 serverless\" src=\"\/wp-content\/uploads\/2020\/05\/fd8f9275d5371f6e0ce5feaf19d5906c.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n\u0422\u0435\u043f\u0435\u0440\u044c \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0435\u0449\u0435 \u043e\u0434\u0438\u043d \u043f\u043e\u0442\u043e\u043a \u0441 \u0438\u043c\u0435\u043d\u0435\u043c <b>special_stream<\/b>:<\/p>\n<p><img decoding=\"async\" alt=\"\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f Aviasales API \u0441 Amazon Kinesis \u0438 \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0430 serverless\" src=\"\/wp-content\/uploads\/2020\/05\/885866e0eb955b30abb7edcc6a7c6a12.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043f\u0440\u043e\u0434\u044e\u0441\u0435\u0440\u0430<\/h3>\n<p>\n\u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0440\u043e\u0434\u044e\u0441\u0435\u0440\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u0440\u0430\u0437\u0431\u043e\u0440\u0430 \u0437\u0430\u0434\u0430\u0447\u0438 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0431\u044b\u0447\u043d\u044b\u0439 EC2 \u0438\u043d\u0441\u0442\u0430\u043d\u0441. \u042d\u0442\u043e \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u043c\u043e\u0449\u043d\u0430\u044f \u0434\u043e\u0440\u043e\u0433\u0430\u044f \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u0430\u044f \u043c\u0430\u0448\u0438\u043d\u0430, \u0432\u043f\u043e\u043b\u043d\u0435 \u043f\u043e\u0434\u043e\u0439\u0434\u0435\u0442 \u0441\u043f\u043e\u0442\u043e\u0432\u044b\u0439 t2.micro.<\/p>\n<p>\u0412\u0430\u0436\u043d\u043e\u0435 \u0437\u0430\u043c\u0435\u0447\u0430\u043d\u0438\u0435: \u0434\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c image \u2014 Amazon Linux AMI 2018.03.0, \u0441 \u043d\u0438\u043c \u043c\u0435\u043d\u044c\u0448\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u0434\u043b\u044f \u0431\u044b\u0441\u0442\u0440\u043e\u0433\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430 Kinesis Agent.<\/p>\n<p>\u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u0432 \u0441\u0435\u0440\u0432\u0438\u0441 EC2, \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043d\u043e\u0432\u0443\u044e \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u0443\u044e \u043c\u0430\u0448\u0438\u043d\u0443, \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u043d\u0443\u0436\u043d\u044b\u0439 AMI \u0441 \u0442\u0438\u043f\u043e\u043c t2.micro, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u0445\u043e\u0434\u0438\u0442 \u0432\u043e Free Tier:<\/p>\n<p><img decoding=\"async\" alt=\"\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f Aviasales API \u0441 Amazon Kinesis \u0438 \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0430 serverless\" src=\"\/wp-content\/uploads\/2020\/05\/5847aeff86589753a8f11b34e8852392.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n\u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0432\u043d\u043e\u0432\u044c \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u0430\u044f \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u0430\u044f \u043c\u0430\u0448\u0438\u043d\u0430 \u0441\u043c\u043e\u0433\u043b\u0430 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0441 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u043c Kinesis, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u0430\u0442\u044c \u0435\u0439 \u043d\u0430 \u044d\u0442\u043e \u043f\u0440\u0430\u0432\u0430. \u041b\u0443\u0447\u0448\u0438\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u2013 \u043d\u0430\u0437\u043d\u0430\u0447\u0438\u0442\u044c IAM Role. \u041f\u043e\u044d\u0442\u043e\u043c\u0443, \u043d\u0430 \u044d\u043a\u0440\u0430\u043d\u0435 Step 3: Configure Instance Details \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0432\u044b\u0431\u0440\u0430\u0442\u044c <b>Create new IAM Role<\/b>:<\/p>\n<p>                        <b class=\"spoiler_title\">\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 IAM \u0440\u043e\u043b\u0438 \u0434\u043b\u044f EC2<\/b><br \/>\n                        <img decoding=\"async\" alt=\"\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f Aviasales API \u0441 Amazon Kinesis \u0438 \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0430 serverless\" src=\"\/wp-content\/uploads\/2020\/05\/05831989bede876d3681a751e259f405.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n\u0412 \u043e\u0442\u043a\u0440\u044b\u0432\u0448\u0435\u043c\u0441\u044f \u043e\u043a\u043d\u0435, \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c, \u0447\u0442\u043e \u043d\u043e\u0432\u0443\u044e \u0440\u043e\u043b\u044c \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0434\u043b\u044f EC2 \u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u0432 \u0440\u0430\u0437\u0434\u0435\u043b Permissions:<\/p>\n<p><img decoding=\"async\" alt=\"\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f Aviasales API \u0441 Amazon Kinesis \u0438 \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0430 serverless\" src=\"\/wp-content\/uploads\/2020\/05\/848e88b983f9c408130c2bf9714c6c98.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n\u041d\u0430 \u0443\u0447\u0435\u0431\u043d\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043c\u043e\u0436\u043d\u043e \u043d\u0435 \u0432\u0434\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u0432\u043e \u0432\u0441\u0435 \u0442\u043e\u043d\u043a\u043e\u0441\u0442\u0438 \u0433\u0440\u0430\u043d\u0443\u043b\u044f\u0440\u043d\u043e\u0439 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u0440\u0430\u0432 \u043d\u0430 \u0440\u0435\u0441\u0443\u0440\u0441\u044b, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u044b\u0431\u0435\u0440\u0435\u043c \u043f\u0440\u0435\u0434\u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0435 \u0410\u043c\u0430\u0437\u043e\u043d\u043e\u043c \u043f\u043e\u043b\u0438\u0441\u0438: AmazonKinesisFullAccess \u0438 CloudWatchFullAccess.<\/p>\n<p>\u0414\u0430\u0434\u0438\u043c \u043a\u0430\u043a\u043e\u0435-\u043d\u0438\u0431\u0443\u0434\u044c \u043e\u0441\u043c\u044b\u0441\u043b\u0435\u043d\u043d\u043e\u0435 \u0438\u043c\u044f \u0434\u043b\u044f \u044d\u0442\u043e\u0439 \u0440\u043e\u043b\u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440: EC2-KinesisStreams-FullAccess. \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435, \u0434\u043e\u043b\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c\u0441\u044f \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435, \u0447\u0442\u043e \u0443\u043a\u0430\u0437\u0430\u043d\u043e \u043d\u0430 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0435 \u043d\u0438\u0436\u0435:<\/p>\n<p><img decoding=\"async\" alt=\"\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f Aviasales API \u0441 Amazon Kinesis \u0438 \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0430 serverless\" src=\"\/wp-content\/uploads\/2020\/05\/015bc45212a3458ef68e451a34f54ecf.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n\u041f\u043e\u0441\u043b\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u044d\u0442\u043e\u0439 \u043d\u043e\u0432\u043e\u0439 \u0440\u043e\u043b\u0438, \u043d\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u0435\u043c \u043f\u0440\u0438\u0446\u0435\u043f\u0438\u0442\u044c \u0435\u0435 \u043a \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0435\u043c\u043e\u043c\u0443 \u0438\u043d\u0441\u0442\u0430\u043d\u0441\u0443 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u044b:<\/p>\n<p><img decoding=\"async\" alt=\"\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f Aviasales API \u0441 Amazon Kinesis \u0438 \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0430 serverless\" src=\"\/wp-content\/uploads\/2020\/05\/e255fcd5ac0468c05deb67e265491a3e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n\u0411\u043e\u043b\u044c\u0448\u0435 \u043d\u0430 \u044d\u0442\u043e\u043c \u044d\u043a\u0440\u0430\u043d\u0435 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043c\u0435\u043d\u044f\u0435\u043c \u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043a \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u043a\u043d\u0430\u043c. <\/p>\n<p>\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0436\u0435\u0441\u0442\u043a\u043e\u0433\u043e \u0434\u0438\u0441\u043a\u0430 \u043c\u043e\u0436\u043d\u043e \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e, \u0442\u044d\u0433\u0438 \u0442\u043e\u0436\u0435 (\u0445\u043e\u0442\u044f, \u0445\u043e\u0440\u043e\u0448\u0435\u0439 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u043e\u0439 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u0435\u0433\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c, \u0445\u043e\u0442\u044f \u0431\u044b \u0434\u0430\u0432\u0430\u0442\u044c \u0438\u043c\u044f \u0438\u043d\u0441\u0442\u0430\u043d\u0441\u0443 \u0438 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u044d\u043d\u0432\u0430\u0439\u0440\u043e\u043d\u043c\u0435\u043d\u0442).<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u043d\u0430 \u0437\u0430\u043a\u043b\u0430\u0434\u043a\u0435 Step 6: Configure Security Group, \u0433\u0434\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u0438\u043b\u0438 \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0438\u043c\u0435\u044e\u0449\u0438\u0439\u0441\u044f \u0443 \u0432\u0430\u0441 S\u0435curity group, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0439 \u0434\u0435\u043b\u0430\u0442\u044c \u043a\u043e\u043d\u043d\u0435\u043a\u0442 \u0447\u0435\u0440\u0435\u0437 ssh (\u043f\u043e\u0440\u0442 22) \u043d\u0430 \u0438\u043d\u0441\u0442\u0430\u043d\u0441. \u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0442\u0430\u043c Source &#8212;&gt; My IP \u0438 \u043c\u043e\u0436\u0435\u0442\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0438\u043d\u0441\u0442\u0430\u043d\u0441.<\/p>\n<p><img decoding=\"async\" alt=\"\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f Aviasales API \u0441 Amazon Kinesis \u0438 \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0430 serverless\" src=\"\/wp-content\/uploads\/2020\/05\/a0d664ff4cd48b49bb74632b5000b702.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n\u041a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u043d \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u0442 \u0432 \u0441\u0442\u0430\u0442\u0443\u0441 running, \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0437\u0430\u043a\u043e\u043d\u043d\u0435\u043a\u0442\u0438\u0442\u044c\u0441\u044f \u043d\u0430 \u043d\u0435\u0433\u043e \u0447\u0435\u0440\u0435\u0437 ssh. <\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u044b \u0441 Kinesis Agent, \u043f\u043e\u0441\u043b\u0435 \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u043d\u0435\u043a\u0442\u0430 \u043a \u043c\u0430\u0448\u0438\u043d\u0435, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u0432\u0435\u0441\u0442\u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0432 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0435:<\/p>\n<pre><code class=\"bash\">sudo yum -y update\nsudo yum install -y python36 python36-pip\nsudo \/usr\/bin\/pip-3.6 install --upgrade pip\nsudo yum install -y aws-kinesis-agent\n<\/code><\/pre>\n<p>\n\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043f\u0430\u043f\u043a\u0443 \u0434\u043b\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043e\u0442\u0432\u0435\u0442\u043e\u0432 API:<\/p>\n<pre><code class=\"bash\">sudo mkdir \/var\/log\/airline_tickets<\/code><\/pre>\n<p>\n\u041f\u0435\u0440\u0435\u0434 \u0437\u0430\u043f\u0443\u0441\u043a\u043e\u043c \u0430\u0433\u0435\u043d\u0442\u0430, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0435\u0433\u043e \u043a\u043e\u043d\u0444\u0438\u0433:<\/p>\n<pre><code class=\"bash\">sudo vim \/etc\/aws-kinesis\/agent.json<\/code><\/pre>\n<p>\n\u0421\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u0430 agent.json \u0434\u043e\u043b\u0436\u043d\u043e \u0438\u043c\u0435\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0432\u0438\u0434:<\/p>\n<pre><code class=\"json\">{\n  &quot;cloudwatch.emitMetrics&quot;: true,\n  &quot;kinesis.endpoint&quot;: &quot;&quot;,\n  &quot;firehose.endpoint&quot;: &quot;&quot;,\n\n  &quot;flows&quot;: [\n    {\n      &quot;filePattern&quot;: &quot;\/var\/log\/airline_tickets\/*log&quot;,\n      &quot;kinesisStream&quot;: &quot;airline_tickets&quot;,\n      &quot;partitionKeyOption&quot;: &quot;RANDOM&quot;,\n      &quot;dataProcessingOptions&quot;: [\n         {\n            &quot;optionName&quot;: &quot;CSVTOJSON&quot;,\n            &quot;customFieldNames&quot;: [&quot;cost&quot;,&quot;trip_class&quot;,&quot;show_to_affiliates&quot;,\n                &quot;return_date&quot;,&quot;origin&quot;,&quot;number_of_changes&quot;,&quot;gate&quot;,&quot;found_at&quot;,\n                &quot;duration&quot;,&quot;distance&quot;,&quot;destination&quot;,&quot;depart_date&quot;,&quot;actual&quot;,&quot;record_id&quot;]\n         }\n      ]\n    }\n  ]\n}\n<\/code><\/pre>\n<p>\n\u041a\u0430\u043a \u0432\u0438\u0434\u043d\u043e \u0438\u0437 \u0444\u0430\u0439\u043b\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438, \u0430\u0433\u0435\u043d\u0442 \u0431\u0443\u0434\u0435\u0442 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u0442\u044c \u0432 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \/var\/log\/airline_tickets\/ \u0444\u0430\u0439\u043b\u044b \u0441 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435\u043c .log, \u043f\u0430\u0440\u0441\u0438\u0442\u044c \u0438\u0445 \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0432 \u043f\u043e\u0442\u043e\u043a airline_tickets.<\/p>\n<p>\u041f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0441\u0435\u0440\u0432\u0438\u0441 \u0438 \u0443\u0431\u0435\u0436\u0434\u0430\u0435\u043c\u0441\u044f, \u0447\u0442\u043e \u043e\u043d \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b\u0441\u044f \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442:<\/p>\n<pre><code class=\"bash\">sudo service aws-kinesis-agent restart<\/code><\/pre>\n<p>\n\u0422\u0435\u043f\u0435\u0440\u044c \u0441\u043a\u0430\u0447\u0430\u0435\u043c Python-\u0441\u043a\u0440\u0438\u043f\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0443 API:<\/p>\n<pre><code class=\"bash\">REPO_PATH=https:\/\/raw.githubusercontent.com\/igorgorbenko\/aviasales_kinesis\/master\/producer\n\nwget $REPO_PATH\/api_caller.py -P \/home\/ec2-user\/\nwget $REPO_PATH\/requirements.txt -P \/home\/ec2-user\/\nsudo chmod a+x \/home\/ec2-user\/api_caller.py\nsudo \/usr\/local\/bin\/pip3 install -r \/home\/ec2-user\/requirements.txt\n<\/code><\/pre>\n<p>\n\u0421\u043a\u0440\u0438\u043f\u0442 api_caller.py \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0443 Aviasales \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u043e\u0442\u0432\u0435\u0442 \u0432 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0441\u043a\u0430\u043d\u0438\u0440\u0443\u0435\u0442 Kinesis agent. \u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u044d\u0442\u043e\u0433\u043e \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0430, \u0435\u0441\u0442\u044c \u043a\u043b\u0430\u0441\u0441 TicketsApi, \u043e\u043d \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e \u0434\u0435\u0440\u0433\u0430\u0442\u044c API. \u0412 \u044d\u0442\u043e\u0442 \u043a\u043b\u0430\u0441\u0441 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0441 \u0442\u043e\u043a\u0435\u043d\u043e\u043c \u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0437\u0430\u043f\u0440\u043e\u0441\u0430:<\/p>\n<pre><code class=\"python\">class TicketsApi:\n    &quot;&quot;&quot;Api caller class.&quot;&quot;&quot;\n\n    def __init__(self, headers):\n        &quot;&quot;&quot;Init method.&quot;&quot;&quot;\n        self.base_url = BASE_URL\n        self.headers = headers\n\n    async def get_data(self, data):\n        &quot;&quot;&quot;Get the data from API query.&quot;&quot;&quot;\n        response_json = {}\n        async with ClientSession(headers=self.headers) as session:\n            try:\n                response = await session.get(self.base_url, data=data)\n                response.raise_for_status()\n                LOGGER.info('Response status %s: %s',\n                            self.base_url, response.status)\n                response_json = await response.json()\n            except HTTPError as http_err:\n                LOGGER.error('Oops! HTTP error occurred: %s', str(http_err))\n            except Exception as err:\n                LOGGER.error('Oops! An error ocurred: %s', str(err))\n            return response_json\n\n\ndef prepare_request(api_token):\n    &quot;&quot;&quot;Return the headers and query fot the API request.&quot;&quot;&quot;\n    headers = {'X-Access-Token': api_token,\n               'Accept-Encoding': 'gzip'}\n\n    data = FormData()\n    data.add_field('currency', CURRENCY)\n    data.add_field('origin', ORIGIN)\n    data.add_field('destination', DESTINATION)\n    data.add_field('show_to_affiliates', SHOW_TO_AFFILIATES)\n    data.add_field('trip_duration', TRIP_DURATION)\n    return headers, data\n\n\nasync def main():\n    &quot;&quot;&quot;Get run the code.&quot;&quot;&quot;\n    if len(sys.argv) != 2:\n        print('Usage: api_caller.py &lt;your_api_token&gt;')\n        sys.exit(1)\n        return\n    api_token = sys.argv[1]\n    headers, data = prepare_request(api_token)\n\n    api = TicketsApi(headers)\n    response = await api.get_data(data)\n    if response.get('success', None):\n        LOGGER.info('API has returned %s items', len(response['data']))\n        try:\n            count_rows = log_maker(response)\n            LOGGER.info('%s rows have been saved into %s',\n                        count_rows,\n                        TARGET_FILE)\n        except Exception as e:\n            LOGGER.error('Oops! Request result was not saved to file. %s',\n                         str(e))\n    else:\n        LOGGER.error('Oops! API request was unsuccessful %s!', response)\n<\/code><\/pre>\n<p>\n\u0414\u043b\u044f \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u0438 \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u0430\u0433\u0435\u043d\u0442\u0430 \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0439 \u0437\u0430\u043f\u0443\u0441\u043a \u0441\u043a\u0440\u0438\u043f\u0442\u0430 api_caller.py:<\/p>\n<pre><code class=\"bash\">sudo .\/api_caller.py TOKEN<\/code><\/pre>\n<p>\n<img decoding=\"async\" alt=\"\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f Aviasales API \u0441 Amazon Kinesis \u0438 \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0430 serverless\" src=\"\/wp-content\/uploads\/2020\/05\/b01033c3ee98877598840849ddbab092.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n\u0418 \u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0440\u0430\u0431\u043e\u0442\u044b \u0432 \u043b\u043e\u0433\u0430\u0445 \u0410\u0433\u0435\u043d\u0442\u0430 \u0438 \u043d\u0430 \u0437\u0430\u043a\u043b\u0430\u0434\u043a\u0435 Monitoring \u0432 \u043f\u043e\u0442\u043e\u043a\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 airline_tickets:<\/p>\n<pre><code class=\"bash\">tail -f \/var\/log\/aws-kinesis-agent\/aws-kinesis-agent.log<\/code><\/pre>\n<p>\n<img decoding=\"async\" alt=\"\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f Aviasales API \u0441 Amazon Kinesis \u0438 \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0430 serverless\" src=\"\/wp-content\/uploads\/2020\/05\/2a55b2eb7671f15b9f4cc2d66dc2de79.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<img decoding=\"async\" alt=\"\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f Aviasales API \u0441 Amazon Kinesis \u0438 \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0430 serverless\" src=\"\/wp-content\/uploads\/2020\/05\/99d8e0d43c2a48893781deb72401bdca.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n\u041a\u0430\u043a \u0432\u0438\u0434\u043d\u043e, \u0432\u0441\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0438 Kinesis Agent \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u043f\u043e\u0442\u043e\u043a. \u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u043c consumer.<\/p>\n<h3>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 Kinesis Data Analytics<\/h3>\n<p>\n\u041f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u043a \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u043e\u043c\u0443 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0443 \u0432\u0441\u0435\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u2014 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043d\u043e\u0432\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432 Kinesis Data Analytics \u0441 \u0438\u043c\u0435\u043d\u0435\u043c kinesis_analytics_airlines_app:<\/p>\n<p><img decoding=\"async\" alt=\"\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f Aviasales API \u0441 Amazon Kinesis \u0438 \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0430 serverless\" src=\"\/wp-content\/uploads\/2020\/05\/981c53a4805176ea45665d478ceef973.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nKinesis Data Analytics \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0438\u0437 Kinesis Streams \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u044f\u0437\u044b\u043a\u0430 SQL. \u042d\u0442\u043e \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0430\u0432\u0442\u043e\u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u043c\u044b\u0439 \u0441\u0435\u0440\u0432\u0438\u0441 (\u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 Kinesis Streams), \u043a\u043e\u0442\u043e\u0440\u044b\u0439:<\/p>\n<ol>\n<li>\u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0435 \u043f\u043e\u0442\u043e\u043a\u0438 (Output Stream) \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043a \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c \u0434\u0430\u043d\u043d\u044b\u043c;<\/li>\n<li>\u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043f\u043e\u0442\u043e\u043a \u0441 \u043e\u0448\u0438\u0431\u043a\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0438 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 (Error Stream);<\/li>\n<li>\u0443\u043c\u0435\u0435\u0442 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c \u0441\u0445\u0435\u043c\u0443 \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 (\u0435\u0435 \u043c\u043e\u0436\u043d\u043e \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438).<\/li>\n<\/ol>\n<p><\/p>\n<blockquote><p>\u042d\u0442\u043e \u043d\u0435\u0434\u0435\u0448\u0435\u0432\u044b\u0439 \u0441\u0435\u0440\u0432\u0438\u0441 \u2014 0.11 USD \u0437\u0430 \u0447\u0430\u0441 \u0440\u0430\u0431\u043e\u0442\u044b, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0438\u043c \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0430\u043a\u043a\u0443\u0440\u0430\u0442\u043d\u043e \u0438 \u0443\u0434\u0430\u043b\u044f\u0442\u044c \u043f\u0440\u0438 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0438 \u0440\u0430\u0431\u043e\u0442\u044b.<\/p><\/blockquote>\n<p>\n\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043a \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0443 \u0434\u0430\u043d\u043d\u044b\u0445:<\/p>\n<p><img decoding=\"async\" alt=\"\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f Aviasales API \u0441 Amazon Kinesis \u0438 \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0430 serverless\" src=\"\/wp-content\/uploads\/2020\/05\/84f51944c7413d1ba52fde9c930c177f.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n\u0412\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u043f\u043e\u0442\u043e\u043a, \u043a \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043cc\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f (airline_tickets):<\/p>\n<p><img decoding=\"async\" alt=\"\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f Aviasales API \u0441 Amazon Kinesis \u0438 \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0430 serverless\" src=\"\/wp-content\/uploads\/2020\/05\/0096a84035239c13e8c5a8b1b209de1a.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n\u0414\u0430\u043b\u0435\u0435, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0440\u0438\u0430\u0442\u0442\u0430\u0447\u0438\u0442\u044c \u043d\u043e\u0432\u0443\u044e IAM \u0420\u043e\u043b\u044c \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043c\u043e\u0433\u043b\u043e \u0447\u0438\u0442\u0430\u0442\u044c \u0438\u0437 \u043f\u043e\u0442\u043e\u043a\u0430 \u0438 \u043f\u0438\u0441\u0430\u0442\u044c \u0432 \u043f\u043e\u0442\u043e\u043a. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043c\u0435\u043d\u044f\u0442\u044c \u0432 \u0431\u043b\u043e\u043a\u0435 Access permissions:<\/p>\n<p><img decoding=\"async\" alt=\"\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f Aviasales API \u0441 Amazon Kinesis \u0438 \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0430 serverless\" src=\"\/wp-content\/uploads\/2020\/05\/d4ef5e8157863b1bb0f9999f70ffa2f6.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n\u0422\u0435\u043f\u0435\u0440\u044c \u0437\u0430\u043f\u0440\u043e\u0441\u0438\u043c \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u0438\u0435 \u0441\u0445\u0435\u043c\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u043f\u043e\u0442\u043e\u043a\u0435, \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u0436\u0438\u043c\u0430\u0435\u043c \u043d\u0430 \u043a\u043d\u043e\u043f\u043a\u0443 \u00abDiscover schema\u00bb. \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u0441\u044f (\u0441\u043e\u0437\u0434\u0430\u0441\u0442\u0441\u044f \u043d\u043e\u0432\u0430\u044f) \u0440\u043e\u043b\u044c IAM \u0438 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043e \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u0438\u0435 \u0441\u0445\u0435\u043c\u044b \u0438\u0437 \u0434\u0430\u043d\u043d\u044b\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443\u0436\u0435 \u043f\u0440\u0438\u043b\u0435\u0442\u0435\u043b\u0438 \u0432 \u043f\u043e\u0442\u043e\u043a:<\/p>\n<p><img decoding=\"async\" alt=\"\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f Aviasales API \u0441 Amazon Kinesis \u0438 \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0430 serverless\" src=\"\/wp-content\/uploads\/2020\/05\/144a9a97e0fcd4ee76ba64eccd8fcb1c.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n\u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u0432 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440 SQL. \u041f\u0440\u0438 \u043d\u0430\u0436\u0430\u0442\u0438\u0438 \u043d\u0430 \u044d\u0442\u0443 \u043a\u043d\u043e\u043f\u043a\u0443, \u0432\u044b\u0439\u0434\u0435\u0442 \u043e\u043a\u043d\u043e \u0441 \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u043c \u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u2014 \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u043c \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c:<\/p>\n<p><img decoding=\"async\" alt=\"\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f Aviasales API \u0441 Amazon Kinesis \u0438 \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0430 serverless\" src=\"\/wp-content\/uploads\/2020\/05\/85670f40cf2d4584b85f927aca7fddfe.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n\u0412 \u043e\u043a\u043d\u043e \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430 SQL \u0432\u0441\u0442\u0430\u0432\u0438\u043c \u0442\u0430\u043a\u043e\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u0438 \u043d\u0430\u0436\u0438\u043c\u0430\u0435\u043c Save and Run SQL:<\/p>\n<pre><code class=\"sql\">CREATE OR REPLACE STREAM &quot;DESTINATION_SQL_STREAM&quot; (&quot;cost&quot; DOUBLE, &quot;gate&quot; VARCHAR(16));\n\nCREATE OR REPLACE PUMP &quot;STREAM_PUMP&quot; AS INSERT INTO &quot;DESTINATION_SQL_STREAM&quot;\nSELECT STREAM &quot;cost&quot;, &quot;gate&quot;\nFROM &quot;SOURCE_SQL_STREAM_001&quot;\nWHERE &quot;cost&quot; &lt; 5000\n    and &quot;gate&quot; = 'Aeroflot';\n<\/code><\/pre>\n<p><\/p>\n<blockquote><p>\u0412 \u0440\u0435\u043b\u044f\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0431\u0430\u0437\u0430\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442\u0435 \u0441 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u043c\u0438, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b INSERT \u0434\u043b\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0438 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 SELECT \u0434\u043b\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0434\u0430\u043d\u043d\u044b\u0445. \u0412 Amazon Kinesis Data Analytics \u0432\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442\u0435 \u0441 \u043f\u043e\u0442\u043e\u043a\u0430\u043c\u0438 (STREAM) \u0438 \u00ab\u043d\u0430\u0441\u043e\u0441\u0430\u043c\u0438\u00bb (PUMP) \u2014 \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u044b\u043c\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u0430\u043c\u0438 \u0432\u0441\u0442\u0430\u0432\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430 \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u0432 \u0434\u0440\u0443\u0433\u043e\u0439 \u043f\u043e\u0442\u043e\u043a. <\/p><\/blockquote>\n<p>\n\u0412 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u043c \u0432\u044b\u0448\u0435 SQL \u0437\u0430\u043f\u0440\u043e\u0441\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u043e\u0438\u0441\u043a \u0431\u0438\u043b\u0435\u0442\u043e\u0432 \u0410\u044d\u0440\u043e\u0444\u043b\u043e\u0442\u0430 \u043f\u043e \u0441\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u0438 \u043d\u0438\u0436\u0435 \u043f\u044f\u0442\u0438 \u0442\u044b\u0441\u044f\u0447 \u0440\u0443\u0431\u043b\u0435\u0439. \u0412\u0441\u0435 \u0437\u0430\u043f\u0438\u0441\u0438, \u043f\u043e\u043f\u0430\u0434\u0430\u044e\u0449\u0438\u0435 \u043f\u043e\u0434 \u044d\u0442\u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u044f, \u0431\u0443\u0434\u0443\u0442 \u043f\u043e\u043c\u0435\u0449\u0435\u043d\u044b \u0432 \u043f\u043e\u0442\u043e\u043a DESTINATION_SQL_STREAM.<\/p>\n<p><img decoding=\"async\" alt=\"\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f Aviasales API \u0441 Amazon Kinesis \u0438 \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0430 serverless\" src=\"\/wp-content\/uploads\/2020\/05\/9e99a431ee2df32239115480a0e061f4.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n\u0412 \u0431\u043b\u043e\u043a\u0435 Destination \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u043f\u043e\u0442\u043e\u043a special_stream, \u0430 \u0432 \u0440\u0430\u0441\u043a\u0440\u044b\u0432\u0430\u044e\u0449\u0435\u043c\u0441\u044f \u0441\u043f\u0438\u0441\u043a\u0435 In-application stream name DESTINATION_SQL_STREAM:<\/p>\n<p><img decoding=\"async\" alt=\"\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f Aviasales API \u0441 Amazon Kinesis \u0438 \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0430 serverless\" src=\"\/wp-content\/uploads\/2020\/05\/013230c6f5e849c03707bf5670b99b4e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n\u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0432\u0441\u0435\u0445 \u043c\u0430\u043d\u0438\u043f\u0443\u043b\u044f\u0446\u0438\u0439 \u0434\u043e\u043b\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c\u0441\u044f \u043d\u0435\u0447\u0442\u043e \u043f\u043e\u0445\u043e\u0436\u0435\u0435 \u043d\u0430 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443 \u043d\u0438\u0436\u0435:<\/p>\n<p><img decoding=\"async\" alt=\"\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f Aviasales API \u0441 Amazon Kinesis \u0438 \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0430 serverless\" src=\"\/wp-content\/uploads\/2020\/05\/2851cd79bcf365594bc45e4c8dfdf931.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0438 \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0430 \u043d\u0430 \u0442\u043e\u043f\u0438\u043a SNS<\/h3>\n<p>\n\u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u0432 \u0441\u0435\u0440\u0432\u0438\u0441 Simple Notification Service \u0438 \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0442\u0430\u043c \u043d\u043e\u0432\u044b\u0439 \u0442\u043e\u043f\u0438\u043a c \u0438\u043c\u0435\u043d\u0435\u043c Airlines:<\/p>\n<p><img decoding=\"async\" alt=\"\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f Aviasales API \u0441 Amazon Kinesis \u0438 \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0430 serverless\" src=\"\/wp-content\/uploads\/2020\/05\/87997765a52ad92b6306a0e39fe5c97f.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n\u041e\u0444\u043e\u0440\u043c\u043b\u044f\u0435\u043c \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0443 \u043d\u0430 \u044d\u0442\u043e\u0442 \u0442\u043e\u043f\u0438\u043a, \u0432 \u043d\u0435\u0439 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u043d\u043e\u043c\u0435\u0440 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u043e\u0433\u043e \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0430, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0443\u0442 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u044c \u0421\u041c\u0421-\u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f:<\/p>\n<p><img decoding=\"async\" alt=\"\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f Aviasales API \u0441 Amazon Kinesis \u0438 \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0430 serverless\" src=\"\/wp-content\/uploads\/2020\/05\/2a6cecbbe57d0c90ac428a1a9b57b656.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0432 DynamoDB<\/h3>\n<p>\n\u0414\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043d\u0435\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0445 \u043f\u043e\u0442\u043e\u043a\u0430 airline_tickets, \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0432 DynamoDB \u0441 \u0442\u0430\u043a\u0438\u043c \u0436\u0435 \u0438\u043c\u0435\u043d\u0435\u043c. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430 \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c record_id:<\/p>\n<p><img decoding=\"async\" alt=\"\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f Aviasales API \u0441 Amazon Kinesis \u0438 \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0430 serverless\" src=\"\/wp-content\/uploads\/2020\/05\/2d82d62bc05f52466cf5f6874cd07d21.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043b\u044f\u043c\u0431\u0434\u0430-\u0444\u0443\u043d\u043a\u0446\u0438\u0438 collector<\/h3>\n<p>\n\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043b\u044f\u043c\u0431\u0434\u0430-\u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043f\u043e\u0434 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c Collector, \u0437\u0430\u0434\u0430\u0447\u0435\u0439 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0431\u0443\u0434\u0435\u0442 \u043e\u043f\u0440\u043e\u0441 \u043f\u043e\u0442\u043e\u043a\u0430 airline_tickets \u0438, \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0430\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u0442\u0430\u043c \u043d\u043e\u0432\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439, \u0432\u0441\u0442\u0430\u0432\u043a\u0430 \u044d\u0442\u0438\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 DynamoDB. \u041e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u043f\u043e\u043c\u0438\u043c\u043e \u043f\u0440\u0430\u0432 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e, \u044d\u0442\u0430 \u043b\u044f\u043c\u0431\u0434\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0438\u043c\u0435\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0447\u0442\u0435\u043d\u0438\u044e \u043f\u043e\u0442\u043e\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 Kinesis \u0438 \u0437\u0430\u043f\u0438\u0441\u0438 \u0432 DynamoDB.<\/p>\n<p>                        <b class=\"spoiler_title\">\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 IAM \u0440\u043e\u043b\u0438 \u0434\u043b\u044f \u043b\u044f\u043c\u0431\u0434\u0430-\u0444\u0443\u043d\u043a\u0446\u0438\u0438 collector<\/b><br \/>\n                        \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043d\u043e\u0432\u0443\u044e IAM \u0440\u043e\u043b\u044c \u0434\u043b\u044f \u043b\u044f\u043c\u0431\u0434\u044b \u0441 \u0438\u043c\u0435\u043d\u0435\u043c Lambda-TicketsProcessingRole:<\/p>\n<p><img decoding=\"async\" alt=\"\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f Aviasales API \u0441 Amazon Kinesis \u0438 \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0430 serverless\" src=\"\/wp-content\/uploads\/2020\/05\/c82ec9d4e383a3db39d72f83ef65f6d5.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n\u0414\u043b\u044f \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0432\u043f\u043e\u043b\u043d\u0435 \u043f\u043e\u0434\u043e\u0439\u0434\u0443\u0442 \u043f\u0440\u0435\u0434\u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0435 \u043f\u043e\u043b\u0438\u0441\u0438 AmazonKinesisReadOnlyAccess \u0438 AmazonDynamoDBFullAccess, \u043a\u0430\u043a \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e \u043d\u0430 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0435 \u043d\u0438\u0436\u0435:<\/p>\n<p><img decoding=\"async\" alt=\"\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f Aviasales API \u0441 Amazon Kinesis \u0438 \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0430 serverless\" src=\"\/wp-content\/uploads\/2020\/05\/fe314a92e2b05828288c3be77301d990.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<img decoding=\"async\" alt=\"\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f Aviasales API \u0441 Amazon Kinesis \u0438 \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0430 serverless\" src=\"\/wp-content\/uploads\/2020\/05\/70cf51e31f8c57ccf3096ac82143a02c.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n                    <br \/>\n\u0414\u0430\u043d\u043d\u0430\u044f \u043b\u044f\u043c\u0431\u0434\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c\u0441\u044f \u043f\u043e \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u0443 \u043e\u0442 Kinesis \u043f\u0440\u0438 \u043f\u043e\u043f\u0430\u0434\u0430\u043d\u0438\u0438 \u043d\u043e\u0432\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0432 \u043f\u043e\u0442\u043e\u043a airline_stream, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u0434\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u0442\u0440\u0438\u0433\u0433\u0435\u0440:<\/p>\n<p><img decoding=\"async\" alt=\"\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f Aviasales API \u0441 Amazon Kinesis \u0438 \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0430 serverless\" src=\"\/wp-content\/uploads\/2020\/05\/701fc98119b9800b71864d8d015d418d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<img decoding=\"async\" alt=\"\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f Aviasales API \u0441 Amazon Kinesis \u0438 \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0430 serverless\" src=\"\/wp-content\/uploads\/2020\/05\/54b195cae8ea7b77b74446e5fc438d62.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n\u041e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043a\u043e\u0434 \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043b\u044f\u043c\u0431\u0434\u0443.<\/p>\n<pre><code class=\"python\">&quot;&quot;&quot;Parsing the stream and inserting into the DynamoDB table.&quot;&quot;&quot;\nimport base64\nimport json\nimport boto3\nfrom decimal import Decimal\n\nDYNAMO_DB = boto3.resource('dynamodb')\nTABLE_NAME = 'airline_tickets'\n\nclass TicketsParser:\n    &quot;&quot;&quot;Parsing info from the Stream.&quot;&quot;&quot;\n\n    def __init__(self, table_name, records):\n        &quot;&quot;&quot;Init method.&quot;&quot;&quot;\n        self.table = DYNAMO_DB.Table(table_name)\n        self.json_data = TicketsParser.get_json_data(records)\n\n    @staticmethod\n    def get_json_data(records):\n        &quot;&quot;&quot;Return deserialized data from the stream.&quot;&quot;&quot;\n        decoded_record_data = ([base64.b64decode(record['kinesis']['data'])\n                                for record in records])\n        json_data = ([json.loads(decoded_record)\n                      for decoded_record in decoded_record_data])\n        return json_data\n\n    @staticmethod\n    def get_item_from_json(json_item):\n        &quot;&quot;&quot;Pre-process the json data.&quot;&quot;&quot;\n        new_item = {\n            'record_id': json_item.get('record_id'),\n            'cost': Decimal(json_item.get('cost')),\n            'trip_class': json_item.get('trip_class'),\n            'show_to_affiliates': json_item.get('show_to_affiliates'),\n            'origin': json_item.get('origin'),\n            'number_of_changes': int(json_item.get('number_of_changes')),\n            'gate': json_item.get('gate'),\n            'found_at': json_item.get('found_at'),\n            'duration': int(json_item.get('duration')),\n            'distance': int(json_item.get('distance')),\n            'destination': json_item.get('destination'),\n            'depart_date': json_item.get('depart_date'),\n            'actual': json_item.get('actual')\n        }\n        return new_item\n\n    def run(self):\n        &quot;&quot;&quot;Batch insert into the table.&quot;&quot;&quot;\n        with self.table.batch_writer() as batch_writer:\n            for item in self.json_data:\n                dynamodb_item = TicketsParser.get_item_from_json(item)\n                batch_writer.put_item(dynamodb_item)\n\n        print('Has been added ', len(self.json_data), 'items')\n\ndef lambda_handler(event, context):\n    &quot;&quot;&quot;Parse the stream and insert into the DynamoDB table.&quot;&quot;&quot;\n    print('Got event:', event)\n    parser = TicketsParser(TABLE_NAME, event['Records'])\n    parser.run()\n<\/code><\/pre>\n<p><\/p>\n<h3>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043b\u044f\u043c\u0431\u0434\u0430-\u0444\u0443\u043d\u043a\u0446\u0438\u0438 notifier<\/h3>\n<p>\n\u0412\u0442\u043e\u0440\u0430\u044f \u043b\u044f\u043c\u0431\u0434\u0430-\u0444\u0443\u043d\u043a\u0446\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u0443\u0434\u0435\u0442 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u0442\u044c \u0432\u0442\u043e\u0440\u043e\u0439 \u043f\u043e\u0442\u043e\u043a (special_stream) \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0435 \u0432 SNS, \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e. \u0421\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u044d\u0442\u0430 \u043b\u044f\u043c\u0431\u0434\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0438\u043c\u0435\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043d\u0430 \u0447\u0442\u0435\u043d\u0438\u0435 \u0438\u0437 Kinesis \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0443 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0432 \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u0439 SNS-\u0442\u043e\u043f\u0438\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u0430\u043b\u0435\u0435 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u043c SNS \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d \u0432\u0441\u0435\u043c \u043f\u043e\u0434\u043f\u0438\u0441\u0447\u0438\u043a\u0430\u043c \u044d\u0442\u043e\u0433\u043e \u0442\u043e\u043f\u0438\u043a\u0430 (email, SMS \u0438 \u0442.\u0434).<\/p>\n<p>                        <b class=\"spoiler_title\">\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 IAM \u0440\u043e\u043b\u0438<\/b><br \/>\n                        \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u043e\u0437\u0434\u0430\u0435\u043c IAM \u0440\u043e\u043b\u044c Lambda-KinesisAlarm \u0434\u043b\u044f \u044d\u0442\u043e\u0439 \u043b\u044f\u043c\u0431\u0434\u044b, \u0430 \u043f\u043e\u0442\u043e\u043c \u043d\u0430\u0437\u043d\u0430\u0447\u0430\u0435\u043c \u044d\u0442\u0443 \u0440\u043e\u043b\u044c \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0435\u043c\u043e\u0439 \u043b\u044f\u043c\u0431\u0434\u044b alarm_notifier:<\/p>\n<p><img decoding=\"async\" alt=\"\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f Aviasales API \u0441 Amazon Kinesis \u0438 \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0430 serverless\" src=\"\/wp-content\/uploads\/2020\/05\/a93c0d30ea53cad63ae74b2f5bb520ef.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<img decoding=\"async\" alt=\"\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f Aviasales API \u0441 Amazon Kinesis \u0438 \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0430 serverless\" src=\"\/wp-content\/uploads\/2020\/05\/76c21460f8721abf47ac728b9eb98e5c.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n                    <br \/>\n\u042d\u0442\u0430 \u043b\u044f\u043c\u0431\u0434\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043f\u043e \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u0443 \u043d\u0430 \u043f\u043e\u043f\u0430\u0434\u0430\u043d\u0438\u0435 \u043d\u043e\u0432\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0432 \u043f\u043e\u0442\u043e\u043a special_stream, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0442\u0440\u0438\u0433\u0433\u0435\u0440 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e \u0442\u043e\u043c\u0443, \u043a\u0430\u043a \u043c\u044b \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u043b\u0438 \u0434\u043b\u044f \u043b\u044f\u043c\u0431\u0434\u044b Collector.<\/p>\n<p>\u0414\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u044d\u0442\u043e\u0439 \u043b\u044f\u043c\u0431\u0434\u044b, \u0432\u0432\u0435\u0434\u0435\u043c \u043d\u043e\u0432\u0443\u044e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u2014 TOPIC_ARN, \u043a\u0443\u0434\u0430 \u043f\u043e\u043c\u0435\u0449\u0430\u0435\u043c ANR (Amazon Recourse Names) \u0442\u043e\u043f\u0438\u043a\u0430 Airlines:<\/p>\n<p><img decoding=\"async\" alt=\"\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f Aviasales API \u0441 Amazon Kinesis \u0438 \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0430 serverless\" src=\"\/wp-content\/uploads\/2020\/05\/8003266c2f07577eec95c1d11b65cee5.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n\u0418 \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u043a\u043e\u0434 \u043b\u044f\u043c\u0431\u0434\u044b, \u043e\u043d \u0441\u043e\u0432\u0441\u0435\u043c \u043d\u0435\u0441\u043b\u043e\u0436\u043d\u044b\u0439:<\/p>\n<pre><code class=\"python\">import boto3\nimport base64\nimport os\n\nSNS_CLIENT = boto3.client('sns')\nTOPIC_ARN = os.environ['TOPIC_ARN']\n\n\ndef lambda_handler(event, context):\n    try:\n        SNS_CLIENT.publish(TopicArn=TOPIC_ARN,\n                           Message='Hi! I have found an interesting stuff!',\n                           Subject='Airline tickets alarm')\n        print('Alarm message has been successfully delivered')\n    except Exception as err:\n        print('Delivery failure', str(err))\n<\/code><\/pre>\n<p>\n\u041a\u0430\u0436\u0435\u0442\u0441\u044f, \u043d\u0430 \u044d\u0442\u043e\u043c \u0440\u0443\u0447\u043d\u0430\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0430. \u041e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438 \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043c\u044b \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u043b\u0438 \u0432\u0441\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e.<\/p>\n<h2>\u0414\u0435\u043f\u043b\u043e\u0439 \u0438\u0437 \u043a\u043e\u0434\u0430 Terraform<\/h2>\n<p><\/p>\n<h3>\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430\u044f \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430<\/h3>\n<p>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/www.terraform.io\/intro\/index.html\" rel=\"nofollow\">Terraform<\/a><\/noindex> \u2014 \u043e\u0447\u0435\u043d\u044c \u0443\u0434\u043e\u0431\u043d\u044b\u0439 open-source \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0434\u043b\u044f \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0438\u0437 \u043a\u043e\u0434\u0430. \u0423 \u043d\u0435\u0433\u043e \u0441\u0432\u043e\u0439 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043b\u0435\u0433\u043a\u043e \u043e\u0441\u0432\u043e\u0438\u0442\u044c \u0438 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432, \u043a\u0430\u043a \u0438 \u0447\u0442\u043e \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c. \u0412 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0435 Atom \u0438\u043b\u0438 Visual Studio Code \u043c\u043d\u043e\u0433\u043e \u0443\u0434\u043e\u0431\u043d\u044b\u0445 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0445 \u043e\u0431\u043b\u0435\u0433\u0447\u0438\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 Terraform. <\/p>\n<p>\u0414\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432 \u0441\u043a\u0430\u0447\u0430\u0442\u044c \u043c\u043e\u0436\u043d\u043e <noindex><a rel=\"nofollow\" href=\"https:\/\/www.terraform.io\/downloads.html\" rel=\"nofollow\">\u043e\u0442\u0441\u044e\u0434\u0430<\/a><\/noindex>. \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u044b\u0439 \u0440\u0430\u0437\u0431\u043e\u0440 \u0432\u0441\u0435\u0445 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 Terraform \u0432\u044b\u0445\u043e\u0434\u0438\u0442 \u0437\u0430 \u0440\u0430\u043c\u043a\u0438 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u043c\u0441\u044f \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u043c\u0438 \u043c\u043e\u043c\u0435\u043d\u0442\u0430\u043c\u0438.<\/p>\n<h3>\u041a\u0430\u043a \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c<\/h3>\n<p>\n\u041f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u0434 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043b\u0435\u0436\u0438\u0442 <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/igorgorbenko\/aviasales_kinesis\" rel=\"nofollow\">\u0432 \u043c\u043e\u0435\u043c \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438<\/a><\/noindex>. \u041a\u043b\u043e\u043d\u0438\u0440\u0443\u0435\u043c \u043a \u0441\u0435\u0431\u0435 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439. \u041f\u0435\u0440\u0435\u0434 \u0437\u0430\u043f\u0443\u0441\u043a\u043e\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0443 \u0432\u0430\u0441 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d AWS CLI, \u0442.\u043a. Terraform \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043a\u0430\u0442\u044c \u0443\u0447\u0435\u0442\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u0444\u0430\u0439\u043b\u0435 ~\/.aws\/credentials.<\/p>\n<p>\u0425\u043e\u0440\u043e\u0448\u0435\u0439 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u043e\u0439 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0434 \u0434\u0435\u043f\u043b\u043e\u0435\u043c \u0432\u0441\u0435\u0439 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0443 plan, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u0447\u0442\u043e Terraform \u043d\u0430\u043c \u0441\u0435\u0439\u0447\u0430\u0441 \u043d\u0430\u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u0432 \u043e\u0431\u043b\u0430\u043a\u0435: <\/p>\n<pre><code class=\"bash\">terraform.exe plan<\/code><\/pre>\n<p>\n\u0411\u0443\u0434\u0435\u0442 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u043e \u0432\u0432\u0435\u0441\u0442\u0438 \u043d\u043e\u043c\u0435\u0440 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0430 \u0434\u043b\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u043d\u0430 \u043d\u0435\u0433\u043e \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0439. \u041d\u0430 \u044d\u0442\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u0435\u0433\u043e \u0432\u0432\u043e\u0434\u0438\u0442\u044c \u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e.<\/p>\n<p><img decoding=\"async\" alt=\"\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f Aviasales API \u0441 Amazon Kinesis \u0438 \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0430 serverless\" src=\"\/wp-content\/uploads\/2020\/05\/765ebe9ca324e2ae840928c4fbca8fd6.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n\u041f\u0440\u043e\u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0432 \u043f\u043b\u0430\u043d \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b, \u043c\u043e\u0436\u0435\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432:<\/p>\n<pre><code class=\"bash\">terraform.exe apply<\/code><\/pre>\n<p>\n\u041f\u043e\u0441\u043b\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u044d\u0442\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u043e\u043f\u044f\u0442\u044c \u043f\u043e\u044f\u0432\u0438\u0442\u0441\u044f \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 \u0432\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043d\u043e\u043c\u0435\u0440\u0430 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0430, \u043d\u0430\u0431\u0438\u0440\u0430\u0435\u043c \u00abyes\u00bb, \u043a\u043e\u0433\u0434\u0430 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u043d \u0432\u043e\u043f\u0440\u043e\u0441 \u043e \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u043f\u043e\u0434\u043d\u044f\u0442\u044c \u0432\u0441\u044e \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443, \u043f\u0440\u043e\u0432\u0435\u0441\u0442\u0438 \u0432\u0441\u044e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0443\u044e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0443 EC2, \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043b\u044f\u043c\u0431\u0434\u0430-\u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438 \u0442.\u0434.<\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0432\u0441\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u0431\u0443\u0434\u0443\u0442 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u044b \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u0434 Terraform, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0437\u0430\u0439\u0442\u0438 \u0432 \u0434\u0435\u0442\u0430\u043b\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f Kinesis Analytics (\u043a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u044f \u043d\u0435 \u043d\u0430\u0448\u0435\u043b \u043a\u0430\u043a \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u0440\u0430\u0437\u0443 \u0438\u0437 \u043a\u043e\u0434\u0430). <\/p>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435:<\/p>\n<p><img decoding=\"async\" alt=\"\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f Aviasales API \u0441 Amazon Kinesis \u0438 \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0430 serverless\" src=\"\/wp-content\/uploads\/2020\/05\/15d905ac4c3605230ce34d76e0184729.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n\u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u044f\u0432\u043d\u043e \u0437\u0430\u0434\u0430\u0442\u044c in-application stream name, \u0432\u044b\u0431\u0440\u0430\u0432 \u0438\u0437 \u0440\u0430\u0441\u043a\u0440\u044b\u0432\u0430\u044e\u0449\u0435\u0433\u043e\u0441\u044f \u0441\u043f\u0438\u0441\u043a\u0430:<\/p>\n<p><img decoding=\"async\" alt=\"\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f Aviasales API \u0441 Amazon Kinesis \u0438 \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0430 serverless\" src=\"\/wp-content\/uploads\/2020\/05\/b1e391b7c2923695cf7d9ef2aa94d0aa.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<img decoding=\"async\" alt=\"\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f Aviasales API \u0441 Amazon Kinesis \u0438 \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0430 serverless\" src=\"\/wp-content\/uploads\/2020\/05\/6f050e71cc0f1847aa2d93e9be381841.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n\u0422\u0435\u043f\u0435\u0440\u044c \u0432\u0441\u0435 \u0433\u043e\u0442\u043e\u0432\u043e \u043a \u0440\u0430\u0431\u043e\u0442\u0435.<\/p>\n<h2>\u0422\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f<\/h2>\n<p>\n\u0412\u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438, \u043a\u0430\u043a \u0432\u044b \u0434\u0435\u043f\u043b\u043e\u0438\u043b\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u0443, \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u0438\u043b\u0438 \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u0434 Terraform, \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043e\u043d\u0430 \u0431\u0443\u0434\u0435\u0442 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e.<\/p>\n<p>\u0417\u0430\u0445\u043e\u0434\u0438\u043c \u043f\u043e SSH \u043d\u0430 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u0443\u044e \u043c\u0430\u0448\u0438\u043d\u0443 EC2, \u0433\u0434\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d Kinesis Agent \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0441\u043a\u0440\u0438\u043f\u0442 api_caller.py<\/p>\n<pre><code class=\"bash\">sudo .\/api_caller.py TOKEN<\/code><\/pre>\n<p>\n\u041e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0434\u043e\u0436\u0434\u0430\u0442\u044c\u0441\u044f SMS \u043d\u0430 \u0432\u0430\u0448 \u043d\u043e\u043c\u0435\u0440: <\/p>\n<p><img decoding=\"async\" alt=\"\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f Aviasales API \u0441 Amazon Kinesis \u0438 \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0430 serverless\" src=\"\/wp-content\/uploads\/2020\/05\/82ab85d7b714e0b359f89c0554d3a443.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nSMS \u2014 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u043d\u0430 \u0442\u0435\u043b\u0435\u0444\u043e\u043d \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0447\u0435\u0440\u0435\u0437 1 \u043c\u0438\u043d\u0443\u0442\u0443: <\/p>\n<p><img decoding=\"async\" alt=\"\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f Aviasales API \u0441 Amazon Kinesis \u0438 \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0430 serverless\" src=\"\/wp-content\/uploads\/2020\/05\/6fbaa5dbaaf3efc7db76d423e48ba6f2.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n\u041e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0441\u044c \u043b\u0438 \u0437\u0430\u043f\u0438\u0441\u0438 \u0432 \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 DynamoDB \u0434\u043b\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e, \u0431\u043e\u043b\u0435\u0435 \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430. \u0422\u0430\u0431\u043b\u0438\u0446\u0430 airline_tickets \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435:<\/p>\n<p><img decoding=\"async\" alt=\"\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f Aviasales API \u0441 Amazon Kinesis \u0438 \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0430 serverless\" src=\"\/wp-content\/uploads\/2020\/05\/1b9dab372915c5d9ddbe7df987b355ae.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h2>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h2>\n<p>\n\u0412 \u0445\u043e\u0434\u0435 \u043f\u0440\u043e\u0434\u0435\u043b\u0430\u043d\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0431\u044b\u043b\u0430 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043e\u043d\u043b\u0430\u0439\u043d-\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 \u0431\u0430\u0437\u0435 Amazon Kinesis. \u0411\u044b\u043b\u0438 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u044b \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f Kinesis Agent \u0432 \u0441\u0432\u044f\u0437\u043a\u0435 \u0441 Kinesis Data Streams \u0438 \u0440\u0435\u0430\u043b-\u0442\u0430\u0439\u043c \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u043e\u0439 Kinesis Analytics \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 SQL \u043a\u043e\u043c\u0430\u043d\u0434, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 Amazon Kinesis \u0441 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0441\u0435\u0440\u0432\u0438\u0441\u0430\u043c\u0438 AWS.<\/p>\n<p>\u0412\u044b\u0448\u0435\u043e\u043f\u0438\u0441\u0430\u043d\u043d\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043c\u044b \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u043b\u0438 \u0434\u0432\u0443\u043c\u044f \u0441\u043f\u043e\u0441\u043e\u0431\u0430\u043c\u0438: \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0434\u043e\u043b\u0433\u0438\u043c \u0440\u0443\u0447\u043d\u044b\u043c \u0438 \u0431\u044b\u0441\u0442\u0440\u044b\u043c \u0438\u0437 \u043a\u043e\u0434\u0430 Terraform.<\/p>\n<p>\u0412\u0435\u0441\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/igorgorbenko\/aviasales_kinesis\" rel=\"nofollow\">\u0432 \u043c\u043e\u0435\u043c \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 \u043d\u0430 GitHub<\/a><\/noindex>, \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u0441 \u043d\u0438\u043c \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f.<\/p>\n<p>\u0421 \u0443\u0434\u043e\u0432\u043e\u043b\u044c\u0441\u0442\u0432\u0438\u0435\u043c \u0433\u043e\u0442\u043e\u0432 \u043e\u0431\u0441\u0443\u0434\u0438\u0442\u044c \u0441\u0442\u0430\u0442\u044c\u044e, \u0436\u0434\u0443 \u0412\u0430\u0448\u0438\u0445 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0435\u0432. \u041d\u0430\u0434\u0435\u044e\u0441\u044c \u043d\u0430 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u0438\u0432\u043d\u0443\u044e \u043a\u0440\u0438\u0442\u0438\u043a\u0443. <\/p>\n<p>\u0416\u0435\u043b\u0430\u044e \u0443\u0441\u043f\u0435\u0445\u043e\u0432!<br \/>\n<br \/>\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/500382\/\">habr.com<\/a> <\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u0410 \u0432\u044b \u043b\u044e\u0431\u0438\u0442\u0435 \u043b\u0435\u0442\u0430\u0442\u044c \u043d\u0430 \u0441\u0430\u043c\u043e\u043b\u0435\u0442\u0430\u0445? \u042f \u043e\u0431\u043e\u0436\u0430\u044e, \u043d\u043e \u043d\u0430 \u0441\u0430\u043c\u043e\u0438\u0437\u043e\u043b\u044f\u0446\u0438\u0438 \u043f\u043e\u043b\u044e\u0431\u0438\u043b \u0435\u0449\u0435 \u0438 \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043e\u0431 \u0430\u0432\u0438\u0430\u0431\u0438\u043b\u0435\u0442\u0430\u0445 \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u0433\u043e \u0440\u0435\u0441\u0443\u0440\u0441\u0430 \u2014 Aviasales. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u043c\u044b \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c \u0440\u0430\u0431\u043e\u0442\u0443 Amazon Kinesis, \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u043c \u0441\u0442\u0440\u0438\u043c\u043c\u0438\u043d\u0433\u043e\u0432\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0441 \u0440\u0435\u0430\u043b-\u0442\u0430\u0439\u043c \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u043e\u0439, \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043c NoSQL \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 Amazon DynamoDB \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u043c \u043e\u043f\u043e\u0432\u0435\u0449\u0435\u043d\u0438\u0435 \u0447\u0435\u0440\u0435\u0437 SMS \u043f\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u043c [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":80539,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-80538","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u0410 \u0432\u044b \u043b\u044e\u0431\u0438\u0442\u0435 \u043b\u0435\u0442\u0430\u0442\u044c \u043d\u0430 \u0441\u0430\u043c\u043e\u043b\u0435\u0442\u0430\u0445? \u042f \u043e\u0431\u043e\u0436\u0430\u044e, \u043d\u043e \u043d\u0430 \u0441\u0430\u043c\u043e\u0438\u0437\u043e\u043b\u044f\u0446\u0438\u0438 \u043f\u043e\u043b\u044e\u0431\u0438\u043b \u0435\u0449\u0435 \u0438 \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043e\u0431 \u0430\u0432\u0438\u0430\u0431\u0438\u043b\u0435\u0442\u0430\u0445 \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u0433\u043e \u0440\u0435\u0441\u0443\u0440\u0441\u0430 \u2014 Aviasales. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u043c\u044b \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c \u0440\u0430\u0431\u043e\u0442\u0443 Amazon Kinesis, \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u043c \u0441\u0442\u0440\u0438\u043c\u043c\u0438\u043d\u0433\u043e\u0432\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0441 \u0440\u0435\u0430\u043b-\u0442\u0430\u0439\u043c \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u043e\u0439, \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043c NoSQL \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 Amazon DynamoDB \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u043c \u043e\u043f\u043e\u0432\u0435\u0449\u0435\u043d\u0438\u0435 \u0447\u0435\u0440\u0435\u0437 SMS \u043f\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u043c\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/integracziya-aviasales-api-s-amazon-kinesis-i-prostota-serverless\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"it_IT\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f Aviasales API \u0441 Amazon Kinesis \u0438 \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0430 serverless | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u0410 \u0432\u044b \u043b\u044e\u0431\u0438\u0442\u0435 \u043b\u0435\u0442\u0430\u0442\u044c \u043d\u0430 \u0441\u0430\u043c\u043e\u043b\u0435\u0442\u0430\u0445? \u042f \u043e\u0431\u043e\u0436\u0430\u044e, \u043d\u043e \u043d\u0430 \u0441\u0430\u043c\u043e\u0438\u0437\u043e\u043b\u044f\u0446\u0438\u0438 \u043f\u043e\u043b\u044e\u0431\u0438\u043b \u0435\u0449\u0435 \u0438 \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043e\u0431 \u0430\u0432\u0438\u0430\u0431\u0438\u043b\u0435\u0442\u0430\u0445 \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u0433\u043e \u0440\u0435\u0441\u0443\u0440\u0441\u0430 \u2014 Aviasales. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u043c\u044b \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c \u0440\u0430\u0431\u043e\u0442\u0443 Amazon Kinesis, \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u043c \u0441\u0442\u0440\u0438\u043c\u043c\u0438\u043d\u0433\u043e\u0432\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0441 \u0440\u0435\u0430\u043b-\u0442\u0430\u0439\u043c \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u043e\u0439, \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043c NoSQL \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 Amazon DynamoDB \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u043c \u043e\u043f\u043e\u0432\u0435\u0449\u0435\u043d\u0438\u0435 \u0447\u0435\u0440\u0435\u0437 SMS \u043f\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u043c\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/integracziya-aviasales-api-s-amazon-kinesis-i-prostota-serverless\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-05-06T23:42:34+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-05-06T23:42:34+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Integrazione dell'API di Aviasales con Amazon Kinesis e semplicit\u00e0 serverless | ProHoster","description":"Ciao, Habr! Ti piace volare sugli aerei? A me piace moltissimo, ma durante l'autoisolamento ho anche iniziato ad analizzare i dati sui biglietti aerei di un noto servizio, Aviasales. Oggi esploreremo il funzionamento di Amazon Kinesis, costruiremo un sistema di streaming con analisi in tempo reale, utilizzeremo Amazon DynamoDB come principale database NoSQL e configureremo le notifiche tramite SMS per informazioni interessanti.","canonical_url":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/integracziya-aviasales-api-s-amazon-kinesis-i-prostota-serverless","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"it_IT","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f Aviasales API \u0441 Amazon Kinesis \u0438 \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0430 serverless | ProHoster","og:description":"\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u0410 \u0432\u044b \u043b\u044e\u0431\u0438\u0442\u0435 \u043b\u0435\u0442\u0430\u0442\u044c \u043d\u0430 \u0441\u0430\u043c\u043e\u043b\u0435\u0442\u0430\u0445? \u042f \u043e\u0431\u043e\u0436\u0430\u044e, \u043d\u043e \u043d\u0430 \u0441\u0430\u043c\u043e\u0438\u0437\u043e\u043b\u044f\u0446\u0438\u0438 \u043f\u043e\u043b\u044e\u0431\u0438\u043b \u0435\u0449\u0435 \u0438 \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043e\u0431 \u0430\u0432\u0438\u0430\u0431\u0438\u043b\u0435\u0442\u0430\u0445 \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u0433\u043e \u0440\u0435\u0441\u0443\u0440\u0441\u0430 \u2014 Aviasales. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u043c\u044b \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c \u0440\u0430\u0431\u043e\u0442\u0443 Amazon Kinesis, \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u043c \u0441\u0442\u0440\u0438\u043c\u043c\u0438\u043d\u0433\u043e\u0432\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0441 \u0440\u0435\u0430\u043b-\u0442\u0430\u0439\u043c \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u043e\u0439, \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043c NoSQL \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 Amazon DynamoDB \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u043c \u043e\u043f\u043e\u0432\u0435\u0449\u0435\u043d\u0438\u0435 \u0447\u0435\u0440\u0435\u0437 SMS \u043f\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u043c","og:url":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/integracziya-aviasales-api-s-amazon-kinesis-i-prostota-serverless","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-05-06T23:42:34+00:00","article:modified_time":"2020-05-06T23:42:34+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"80538","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 16:16:27","updated":"2022-09-29 10:14:32"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/80538","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/comments?post=80538"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/80538\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media\/80539"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media?parent=80538"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/categories?post=80538"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/tags?post=80538"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}