{"id":342773,"date":"2022-12-16T15:00:28","date_gmt":"2022-12-16T15:00:28","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=342773"},"modified":"-0001-11-30T00:00:00","modified_gmt":"2022-12-16T15:00:28","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=342773","title":{"rendered":"<span>\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u0443\u0435\u043c Telegram-\u043a\u0430\u043d\u0430\u043b \u0441 AWS Lambda \u0438 DynamoDB<\/span>"},"content":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0412 \u044d\u0442\u043e\u043c \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0435 \u0432\u044b \u0443\u0437\u043d\u0430\u0435\u0442\u0435, \u043a\u0430\u043a \u0441\u043e\u0437\u0434\u0430\u0442\u044c Telegram-\u043a\u0430\u043d\u0430\u043b, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0441\u0430\u043c \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c\u0441\u044f, \u043f\u043e\u043b\u0443\u0447\u0430\u044f \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0445 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u0432:<\/p>\n<ul>\n<li>\n<p>\u041a\u043e\u0434 \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u043d\u0430 Python.\u00a0<\/p>\n<\/li>\n<li>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c\u0441\u044f \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u0432 <a href=\"https:\/\/aws.amazon.com\/ru\/lambda\/\" rel=\"noopener noreferrer nofollow\"><u>AWS Lambda<\/u><\/a>.<\/p>\n<\/li>\n<li>\n<p>\u0414\u043b\u044f \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430 (\u0442. \u0435. \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f) \u0434\u0430\u043d\u043d\u044b\u0445 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 <a href=\"https:\/\/pypi.org\/project\/beautifulsoup4\/\" rel=\"noopener noreferrer nofollow\"><u>BeautifulSoup<\/u><\/a>.\u00a0<\/p>\n<\/li>\n<li>\n<p>\u0427\u0442\u043e\u0431\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u0430\u0448\u0435\u043c\u0443 \u0441\u043e\u0444\u0442\u0443 <a href=\"https:\/\/en.wikipedia.org\/wiki\/Persistence_(computer_science)#:~:text=complicated%20to%20debug.-,Persistence%20layers,an%20underlying%20database%20management%20system.\" rel=\"noopener noreferrer nofollow\"><u>persistance layer<\/u><\/a> \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 <a href=\"https:\/\/aws.amazon.com\/ru\/dynamodb\/\" rel=\"noopener noreferrer nofollow\"><u>AWS DynamoDB<\/u><\/a>.<\/p>\n<\/li>\n<li>\n<p>P. S. \u0412\u0441\u0435 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e, Amazon \u043d\u0438\u0447\u0435\u0433\u043e \u043f\u043b\u0430\u0442\u0438\u0442\u044c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e.<\/p>\n<\/li>\n<\/ul>\n<p>\u0426\u0435\u043b\u044c \u0441\u0442\u0430\u0442\u044c\u0438 \u2014 \u043e\u0431\u044a\u044f\u0441\u043d\u0438\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 DynamoDB, BeautifulSoup \u0438 AWS Lambda. \u0415\u0441\u043b\u0438 \u0442\u043e\u0447\u043d\u0435\u0435 \u2014 \u043a\u0430\u043a \u0441\u0432\u044f\u0437\u0430\u0442\u044c \u0432\u0441\u0435 \u044d\u0442\u043e \u0432 \u0435\u0434\u0438\u043d\u044b\u0439 \u0440\u0430\u0431\u043e\u0447\u0438\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0434\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438.<\/p>\n<p>\u0414\u0430\u043b\u0435\u0435 \u044f \u043e\u043f\u0438\u0448\u0443 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u0441\u0438\u043d\u0442\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0437\u0430\u0434\u0430\u0447\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0442\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 \u043e\u0442\u043b\u0438\u0447\u043d\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0435\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0434\u043b\u044f \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044f \u0432\u044b\u0448\u0435\u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0445 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0439.<\/p>\n<p>\u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c \u0432\u044b \u0444\u0430\u043d\u0430\u0442 \u043c\u0443\u0437\u044b\u043a\u0438 \u0436\u0430\u043d\u0440\u0430 \u0442\u0435\u0445\u043d\u043e \u0438 \u0445\u043e\u0442\u0438\u0442\u0435 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u043c \u043f\u043e\u0441\u0442\u0443\u043f\u0438\u0432\u0448\u0435\u043c \u043c\u0443\u0437\u044b\u043a\u0430\u043b\u044c\u043d\u043e\u043c \u0430\u043b\u044c\u0431\u043e\u043c\u0435 \u0441 \u0432\u0430\u0448\u0435\u0433\u043e \u043b\u044e\u0431\u0438\u043c\u043e\u0433\u043e \u0441\u0430\u0439\u0442\u0430 <a href=\"http:\/\/hardwax.com\" rel=\"noopener noreferrer nofollow\">hardwax.com<\/a>. \u0417\u0430\u0445\u043e\u0434\u0438\u0442\u044c \u043d\u0430 \u0441\u0430\u0439\u0442 \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u043d\u0435\u0443\u0434\u043e\u0431\u043d\u043e \u0438 \u0432\u0430\u043c \u0431\u044b \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0438\u043c\u0435\u0442\u044c Telegram-\u043a\u0430\u043d\u0430\u043b, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043a\u0430\u0436\u0434\u044b\u0435 15 \u043c\u0438\u043d\u0443\u0442 \u043f\u0443\u0431\u043b\u0438\u043a\u0443\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u043c\u0443\u0437\u044b\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0430\u043b\u044c\u0431\u043e\u043c. \u0417\u0430\u0434\u0430\u0447\u0430 \u043e\u0441\u043b\u043e\u0436\u043d\u044f\u0435\u0442\u0441\u044f \u0442\u0435\u043c, \u0447\u0442\u043e \u0432\u044b \u043d\u0435 \u0445\u043e\u0442\u0438\u0442\u0435 \u0432\u0438\u0434\u0435\u0442\u044c \u043d\u0438 \u043e\u0434\u043d\u0443 \u0441\u0441\u044b\u043b\u043a\u0443 \u0432\u0442\u043e\u0440\u043e\u0439 \u0440\u0430\u0437. \u0412\u044b \u0441\u043b\u0443\u0448\u0430\u0435\u0442\u0435 \u0430\u043b\u044c\u0431\u043e\u043c \u0435\u0434\u0438\u043d\u043e\u0436\u0434\u044b \u0438 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0437\u0430\u0431\u044b\u0432\u0430\u0435\u0442\u0435 \u043f\u0440\u043e \u043d\u0435\u0433\u043e. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0434\u043e\u043b\u0436\u0435\u043d \u0437\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0442\u044c, \u043a\u0430\u043a\u0438\u0435 \u0430\u043b\u044c\u0431\u043e\u043c\u044b \u043e\u043d \u0443\u0436\u0435 \u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043b \u0432 \u043a\u0430\u043d\u0430\u043b\u0435 \u0438 \u043d\u0435 \u0434\u043e\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e\u0439 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438.\u00a0<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/ee4\/f7f\/d95\/ee4f7fd952617c1c721e5fdf17c05bbc.jpeg\" alt=\"\u0421\u0430\u0439\u0442 \u043c\u0443\u0437\u044b\u043a\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043c\u0430\u0433\u0430\u0437\u0438\u043d\u0430 hardwax.com, \u0441\u0435\u043a\u0446\u0438\u044f Techno\" title=\"\u0421\u0430\u0439\u0442 \u043c\u0443\u0437\u044b\u043a\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043c\u0430\u0433\u0430\u0437\u0438\u043d\u0430 hardwax.com, \u0441\u0435\u043a\u0446\u0438\u044f Techno\" width=\"1600\" height=\"960\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ee4\/f7f\/d95\/ee4f7fd952617c1c721e5fdf17c05bbc.jpeg\" data-blurred=\"true\"\/><figcaption>\u0421\u0430\u0439\u0442 \u043c\u0443\u0437\u044b\u043a\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043c\u0430\u0433\u0430\u0437\u0438\u043d\u0430 hardwax.com, \u0441\u0435\u043a\u0446\u0438\u044f Techno<\/figcaption><\/figure>\n<ol>\n<li>\n<p>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0442\u0435\u043b\u0435\u0433\u0440\u0430\u043c-\u043a\u0430\u043d\u0430\u043b\u0430 \u0438 \u0431\u043e\u0442\u0430.\u00a0<\/p>\n<\/li>\n<\/ol>\n<p>\u0418\u0442\u0430\u043a, \u043d\u0430\u0447\u043d\u0435\u043c. \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c Telegram-\u043a\u0430\u043d\u0430\u043b. \u041d\u0430\u0437\u043e\u0432\u0435\u043c \u0435\u0433\u043e <code>Hardwax techno<\/code>:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/b9b\/8b5\/c05\/b9b8b5c05cb3559da71b222e69c79dea.jpeg\" width=\"1600\" height=\"960\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b9b\/8b5\/c05\/b9b8b5c05cb3559da71b222e69c79dea.jpeg\" data-blurred=\"true\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041a\u0442\u043e-\u0442\u043e \u0434\u043e\u043b\u0436\u0435\u043d \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c Telegram-\u043a\u0430\u043d\u0430\u043b, \u0432\u0435\u0434\u044c \u0441\u0430\u043c \u043f\u043e \u0441\u0435\u0431\u0435 \u043a\u0430\u043d\u0430\u043b \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u043d\u0435 \u043c\u043e\u0436\u0435\u0442. \u0414\u043b\u044f \u044d\u0442\u0438\u0445 \u0446\u0435\u043b\u0435\u0439 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0431\u043e\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c\u0441\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435\u043c. \u0412 Telegram \u0431\u043e\u0442\u044b \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u043e\u0442\u0446\u0430 \u0432\u0441\u0435\u0445 \u0431\u043e\u0442\u043e\u0432 \u2014 <a href=\"https:\/\/t.me\/BotFather\" rel=\"noopener noreferrer nofollow\"><u>@BotFather<\/u><\/a>:<\/p>\n<ul>\n<li>\n<p>\u0417\u0434\u043e\u0440\u043e\u0432\u0430\u0435\u043c\u0441\u044f (<code>\/start<\/code>)<\/p>\n<\/li>\n<li>\n<p>\u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0431\u043e\u0442\u0430 (<code>\/newbot<\/code>)<\/p>\n<\/li>\n<li>\n<p>\u0414\u0430\u0435\u043c \u0438\u043c\u044f \u0431\u043e\u0442\u0443 (<code>hardwax_techno_poster<\/code>)\u00a0<\/p>\n<\/li>\n<li>\n<p>\u0414\u0430\u0435\u043c \u0435\u043c\u0443 username (<code>hardwax_techno_poster_bot<\/code>, \u0434\u043e\u043b\u0436\u043d\u043e \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 <code>_bot<\/code>)<\/p>\n<\/li>\n<li>\n<p>\u0412 \u043a\u043e\u043d\u0446\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0442\u043e\u043a\u0435\u043d \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0431\u043e\u0442\u043e\u043c, \u0435\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c.<\/p>\n<\/li>\n<\/ul>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/1ac\/a5f\/d24\/1aca5fd247dc4b310fe8b88a91f4d0d3.png\" width=\"1600\" height=\"960\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/1ac\/a5f\/d24\/1aca5fd247dc4b310fe8b88a91f4d0d3.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0431\u043e\u0442\u0430 \u0432 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u044b, \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043a\u0430\u043d\u0430\u043b\u0430 &#8212; > <code>Administrators<\/code>:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/23a\/91e\/e5e\/23a91ee5eb641809496298dd25a6c7a5.png\" width=\"1600\" height=\"960\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/23a\/91e\/e5e\/23a91ee5eb641809496298dd25a6c7a5.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0414\u0430\u043b\u0435\u0435 <code>Add Admin<\/code>, \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u043d\u0430\u0448\u0435\u0433\u043e \u0431\u043e\u0442\u0430 \u0438 \u043f\u0440\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0432\u0441\u0435 \u0433\u0430\u043b\u043e\u0447\u043a\u0438:\u00a0<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/eea\/260\/780\/eea260780573c2467d77e783e5528818.png\" width=\"1600\" height=\"960\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/eea\/260\/780\/eea260780573c2467d77e783e5528818.png\"\/><figcaption><\/figcaption><\/figure>\n<ol start=\"2\">\n<li>\n<p>\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f \u043d\u0430 AWS \u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438.<\/p>\n<\/li>\n<\/ol>\n<p>\u0421\u0435\u0442\u0430\u043f \u0432 Telegram \u0433\u043e\u0442\u043e\u0432, \u043f\u043e\u0440\u0430 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442\u044c \u043a AWS. \u041e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u043f\u0435\u0440\u0432\u043e\u0435, \u0447\u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0430\u043a\u043a\u0430\u0443\u043d\u0442. <a href=\"https:\/\/habr.com\/ru\/post\/448528\/\" rel=\"noopener noreferrer nofollow\"><u>\u0417\u0434\u0435\u0441\u044c<\/u><\/a> \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u043e, \u043a\u0430\u043a \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0438 \u043d\u0438\u0447\u0435\u0433\u043e \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043d\u0435 \u0437\u0430\u043f\u043b\u0430\u0442\u0438\u0442\u044c.<\/p>\n<p>\u0421\u0434\u0435\u043b\u0430\u043b\u0438 \u0430\u043a\u043a\u0430\u0443\u043d\u0442 AWS, \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043a \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u0438. \u041d\u0430\u0431\u0438\u0440\u0430\u0435\u043c \u0432 \u0441\u0442\u0440\u043e\u043a\u0435 \u043f\u043e\u0438\u0441\u043a\u0430 \u2018lambda\u2019 \u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0440\u0430\u0437\u0434\u0435\u043b:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/473\/dd0\/92e\/473dd092e37dafb80ea79d59b3715a79.png\" width=\"1560\" height=\"936\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/473\/dd0\/92e\/473dd092e37dafb80ea79d59b3715a79.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041d\u0430\u0436\u0438\u043c\u0430\u0435\u043c \u2018Create function\u2019, \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u0438\u043c\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438. Runtime = \u2018Python 3.9\u2019 \u0438\u043b\u0438 \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0437\u0434\u043d\u044f\u044f \u0432\u0435\u0440\u0441\u0438\u044f.\u00a0<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/71c\/c12\/bec\/71cc12beca0ab34e403fada3a287a3a3.png\" width=\"1560\" height=\"936\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/71c\/c12\/bec\/71cc12beca0ab34e403fada3a287a3a3.png\"\/><figcaption><\/figcaption><\/figure>\n<ol start=\"3\">\n<li>\n<p>\u0418\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438.\u00a0<\/p>\n<\/li>\n<\/ol>\n<p>\u0427\u0442\u043e\u0431\u044b \u043f\u0430\u0440\u0441\u0438\u0442\u044c \u0432\u0435\u0431 \u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c Telegram-\u043a\u0430\u043d\u0430\u043b\u043e\u043c \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u044f\u0442\u0441\u044f \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u2014 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438. \u0427\u0442\u043e\u0431\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u0445 \u0432 AWS Lambda \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u044b \u0441\u043b\u043e\u0438 \u2014 \u0441\u0432\u043e\u0435\u043e\u0431\u0440\u0430\u0437\u043d\u044b\u0435 \u043f\u0430\u043a\u0435\u0442\u044b \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c\u044b\u0435 \u043a \u0444\u0443\u043d\u043a\u0446\u0438\u0438. \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0442\u0430\u043a\u043e\u0439 \u0441\u043b\u043e\u0439.<\/p>\n<p>\u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u0442\u044c \u0432\u0441\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0432 <code>.zip<\/code>-\u0430\u0440\u0445\u0438\u0432\u0435. \u0412\u0441\u0435\u0433\u043e \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u044f\u0442\u0441\u044f 3 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438:\u00a0<\/p>\n<ul>\n<li>\n<p><code>requests<\/code> \u2014 \u0432\u0435\u0437\u0434\u0435\u0441\u0443\u0449\u0430\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 Python \u0434\u043b\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432.\u00a0<\/p>\n<\/li>\n<li>\n<p><code>bs4<\/code> \u0438\u043b\u0438 BeautifulSoup \u2014 \u043d\u0430\u0431\u043e\u0440 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0434\u043b\u044f \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430 \u0432\u0435\u0431-\u0441\u0442\u0440\u0430\u043d\u0438\u0446.<\/p>\n<\/li>\n<li>\n<p><code>python-telegram-bot<\/code> \u2014 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430, \u0443\u043f\u0440\u043e\u0449\u0430\u044e\u0449\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 \u0431\u043e\u0442\u0430\u043c\u0438 \u0432 Telegram.\u00a0<\/p>\n<\/li>\n<\/ul>\n<p>\u0427\u0442\u043e\u0431\u044b \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u0442\u044c \u0430\u0440\u0445\u0438\u0432, \u043d\u0430 \u043c\u0430\u0448\u0438\u043d\u0435 <code>Mac<\/code> \u0438\u043b\u0438 <code>Linux<\/code> \u0441 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u043c <code>Python3<\/code> \u0438 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u043e\u043c \u043f\u0430\u043a\u0435\u0442\u043e\u0432 <code>pip<\/code> \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u043c \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b:\u00a0<\/p>\n<ul>\n<li>\n<p>\u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e \u0434\u043b\u044f \u0430\u0440\u0445\u0438\u0432\u0430, \u043a\u0443\u0434\u0430 \u043f\u043e\u043b\u043e\u0436\u0438\u043c \u043d\u0430\u0448\u0438 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438.\u00a0<\/p>\n<\/li>\n<\/ul>\n<p><code>mkdir -p ~\/python<\/code><\/p>\n<ul>\n<li>\n<p>\u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u0432\u043d\u0443\u0442\u0440\u044c \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u043e\u0439 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438.<\/p>\n<\/li>\n<\/ul>\n<p><code>cd ~\/python<\/code><\/p>\n<ul>\n<li>\n<p>\u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u043d\u0430\u0448\u0438 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u0432 \u0442\u0435\u043a\u0443\u0449\u0443\u044e \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e, \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044f \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u0432\u0435\u0440\u0441\u0438\u0438.\u00a0<\/p>\n<\/li>\n<\/ul>\n<p><code>pip install --target=. bs4==0.0.1 python-telegram-bot==6.1.0 requests==2.24.0<\/code><\/p>\n<ul>\n<li>\n<p>\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u0441\u044f \u043e\u0431\u0440\u0430\u0442\u043d\u043e.\u00a0<\/p>\n<\/li>\n<\/ul>\n<p><code>cd ~<\/code><\/p>\n<ul>\n<li>\n<p>\u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0430\u0440\u0445\u0438\u0432 \u0441 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044f\u043c\u0438.<\/p>\n<\/li>\n<\/ul>\n<p><code>zip -r hardwax_poster_layer.zip python<\/code><\/p>\n<p>\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0432\u0448\u0438\u0439\u0441\u044f <code>.zip<\/code>-\u0430\u0440\u0445\u0438\u0432 \u0441 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044f\u043c\u0438 \u0432 AWS.\u00a0<\/p>\n<p>\u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u0431\u0435\u0440\u0435\u043c \u0432 \u043f\u043e\u0438\u0441\u043a\u0435 <code>Layers<\/code> -> <code>Create layer<\/code>. \u0417\u0430\u0434\u0430\u0435\u043c \u0438\u043c\u044f \u0441\u043b\u043e\u044f <code>hardwax_poster_layer<\/code>, \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c <code>Upload a .zip file<\/code>, \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u043f\u0443\u0442\u044c \u0434\u043e \u0430\u0440\u0445\u0438\u0432\u0430. \u0414\u0430\u043b\u0435\u0435 \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443 <code>x86_64<\/code> \u0438 <code>Runtime<\/code> = <code>Python 3.9<\/code>.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/4a3\/704\/af5\/4a3704af5081389e0553c0bec4c7327b.png\" width=\"1600\" height=\"960\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/4a3\/704\/af5\/4a3704af5081389e0553c0bec4c7327b.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041c\u044b \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u043b\u0438 \u0441\u043b\u043e\u0439. \u041a\u043e\u043f\u0438\u0440\u0443\u0435\u043c \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0435\u0433\u043e ARN (ID \u0441\u043b\u043e\u044f \u0438\u043b\u0438 <a href=\"https:\/\/docs.aws.amazon.com\/general\/latest\/gr\/aws-arns-and-namespaces.html\" rel=\"noopener noreferrer nofollow\"><u>Amazon Resource Name<\/u><\/a>), \u043e\u043d \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u0430\u043c \u0434\u0430\u043b\u044c\u0448\u0435:\u00a0<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/382\/20e\/52f\/38220e52f83a8ec3757d522762abd0a2.png\" width=\"1600\" height=\"960\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/382\/20e\/52f\/38220e52f83a8ec3757d522762abd0a2.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0441\u043b\u043e\u0439 \u043a \u043d\u0430\u0448\u0435\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u0430\u0448\u0435\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439, \u0441\u043a\u0440\u043e\u043b\u043b\u0438\u043c \u0432\u0433\u043b\u0443\u0431\u044c \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0438 \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c <code>Add layer<\/code>:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/99b\/3df\/17d\/99b3df17d3e0b4593a6395e01af9d766.png\" width=\"1600\" height=\"960\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/99b\/3df\/17d\/99b3df17d3e0b4593a6395e01af9d766.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041a\u043b\u0438\u043a\u0430\u0435\u043c <code>Specify an ARN<\/code>, \u0432\u0432\u043e\u0434\u0438\u043c \u0432 \u043f\u043e\u043b\u0435 \u0440\u0430\u043d\u0435\u0435 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 ARN \u0441\u043b\u043e\u044f. \u041d\u0430\u0436\u0438\u043c\u0430\u0435\u043c <code>Verify<\/code>, \u0447\u0442\u043e\u0431\u044b \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0432\u0441\u0435 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e. \u041d\u0430\u043a\u043e\u043d\u0435\u0446 \u0436\u043c\u0435\u043c <code>Add<\/code>, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0438\u043a\u0440\u0435\u043f\u0438\u0442\u044c \u0441\u043b\u043e\u0439 \u043a \u0444\u0443\u043d\u043a\u0446\u0438\u0438.\u00a0<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/3bf\/b2f\/917\/3bfb2f9176d4a841fca20767ed02e9a2.png\" width=\"1600\" height=\"960\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/3bf\/b2f\/917\/3bfb2f9176d4a841fca20767ed02e9a2.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041f\u0440\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u0443\u0435\u043c, \u0447\u0442\u043e \u0432 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0438 AWS \u0442\u0435\u043f\u0435\u0440\u044c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0435\u0441\u0442\u044c \u043d\u0430\u0448\u0438 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u044f\u043c\u043e \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435 \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u0435\u043c \u043a\u043e\u0434, \u0447\u0442\u043e\u0431\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0432 \u043e\u0442\u0432\u0435\u0442 \u043f\u0435\u0447\u0430\u0442\u0430\u043b\u0430 \u0432\u0435\u0440\u0441\u0438\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 Telegram \u0438\u0437 \u043d\u0430\u0448\u0438\u0445 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439. \u041d\u0430\u0436\u0438\u043c\u0430\u0435\u043c <code>Deploy<\/code>, \u0447\u0442\u043e\u0431\u044b \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432\u0441\u0442\u0443\u043f\u0438\u043b\u0438 \u0432 \u0441\u0438\u043b\u0443.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/824\/a18\/3d1\/824a183d17ba87f59f5ed7a2eed9a8c4.png\" width=\"1600\" height=\"960\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/824\/a18\/3d1\/824a183d17ba87f59f5ed7a2eed9a8c4.png\"\/><figcaption><\/figcaption><\/figure>\n<pre><code class=\"python\">import json import telegram  def lambda_handler(event, context):     # TODO implement     return {         'statusCode': 200,         'body': json.dumps(f'Telegram version is {telegram.__version__}')     }<\/code><\/pre>\n<p>\u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c AWS \u0434\u0430\u0441\u0442 \u043f\u0440\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u0448 \u043a\u043e\u0434, \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u0435. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u0436\u0438\u043c\u0430\u0435\u043c \u043d\u0430 \u0431\u043e\u043b\u044c\u0448\u0443\u044e \u043e\u0440\u0430\u043d\u0436\u0435\u0432\u0443\u044e \u043a\u043d\u043e\u043f\u043a\u0443 <code>Test<\/code>. \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0430\u043c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0438\u0447\u0435\u0433\u043e, \u043a\u0440\u043e\u043c\u0435 \u043a\u0430\u043a \u0434\u0430\u0442\u044c \u0441\u043e\u0431\u044b\u0442\u0438\u044e \u0438\u043c\u044f \u0432\u0440\u043e\u0434\u0435 <code>my_test_event<\/code>. \u0412 \u0434\u0440\u0443\u0433\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 JSON &#8212; \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0438 \u0443\u0434\u043e\u0431\u043d\u043e \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u043a\u0430\u043a \u043e\u043d\u0430 \u0438\u0445 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442.\u00a0<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/39c\/241\/2d9\/39c2412d9b77695bad0b942e755ac9ce.png\" width=\"1600\" height=\"960\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/39c\/241\/2d9\/39c2412d9b77695bad0b942e755ac9ce.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0421\u043d\u043e\u0432\u0430 \u043d\u0430\u0436\u0438\u043c\u0430\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0443\u044e \u043e\u0440\u0430\u043d\u0436\u0435\u0432\u0443\u044e \u043a\u043d\u043e\u043f\u043a\u0443 <code>Test<\/code> \u0438 AWS \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u043d\u0430\u0448 \u043a\u043e\u0434. \u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u0432\u043e \u0432\u043a\u043b\u0430\u0434\u043a\u0443 <code>Execution result<\/code> \u0438 \u0432\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u0435\u0440\u043d\u0443\u043b\u0430 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443 <code>Telegram library version is 6.1.0<\/code>. \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u043d\u0430\u0448\u0438 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u0432 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0438 \u0438 \u043c\u043e\u0436\u043d\u043e \u0438\u0434\u0442\u0438 \u0434\u0430\u043b\u044c\u0448\u0435.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/26e\/afa\/18c\/26eafa18ca87d52da85b13926fdfdcd4.png\" width=\"1600\" height=\"960\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/26e\/afa\/18c\/26eafa18ca87d52da85b13926fdfdcd4.png\"\/><figcaption><\/figcaption><\/figure>\n<ol start=\"4\">\n<li>\n<p>\u0417\u0430\u0434\u0430\u0435\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0441\u0440\u0435\u0434\u044b.\u00a0<\/p>\n<\/li>\n<\/ol>\n<p>\u041c\u044b \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c\u0441\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c Telegram-\u043a\u0430\u043d\u0430\u043b \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043d\u0430\u0448\u0435\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432 \u043a\u043e\u0434 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0442\u043e\u043a\u0435\u043d \u0434\u043b\u044f \u0431\u043e\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0435 \u043f\u043e\u0441\u0442\u044b \u0432 \u043a\u0430\u043d\u0430\u043b\u0435 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430. \u041b\u0443\u0447\u0448\u0438\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u2014 \u0441\u043e\u0437\u0434\u0430\u0442\u044c <code>Environment variable<\/code> \u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u0441\u0440\u0435\u0434\u044b \u0434\u043b\u044f \u0442\u043e\u043a\u0435\u043d\u0430. \u041f\u0440\u043e\u0441\u0442\u043e \u0432\u043f\u0438\u0441\u0430\u0442\u044c \u0442\u043e\u043a\u0435\u043d \u0432 \u0442\u0435\u043b\u043e \u043a\u043e\u0434\u0430 \u043d\u0435\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e. \u0427\u0442\u043e\u0431\u044b \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u0441\u0440\u0435\u0434\u044b \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u0432 <code>Configuration<\/code> -> <code>Environment variables<\/code> -> <code>Edit<\/code>.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/80d\/43d\/087\/80d43d08743250ea601bd7cd5ee0ed6e.png\" width=\"1600\" height=\"960\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/80d\/43d\/087\/80d43d08743250ea601bd7cd5ee0ed6e.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u0441 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c <code>telegram_token<\/code> \u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c \u0442\u043e\u043a\u0435\u043d\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u0440\u0430\u043d\u0435\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u043e\u0442 \u0431\u043e\u0442\u0430:\u00a0 <\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/090\/17c\/c18\/09017cc1806aad85c0d7e938f1aa48c7.png\" width=\"1600\" height=\"960\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/090\/17c\/c18\/09017cc1806aad85c0d7e938f1aa48c7.png\"\/><figcaption><\/figcaption><\/figure>\n<ol start=\"5\">\n<li>\n<p>\u0412\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0442\u0430\u0439\u043c\u0430\u0443\u0442.\u00a0<\/p>\n<\/li>\n<\/ol>\n<p>\u0422\u0430\u043a\u0436\u0435 \u043f\u043e\u043c\u0435\u043d\u044f\u0435\u043c \u0442\u0430\u0439\u043c\u0430\u0443\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438\u043b\u0438 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0435\u0435 \u0440\u0430\u0431\u043e\u0442\u044b. \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0443 AWS Lambda \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043e\u043d \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u043d\u0430 3 \u0441\u0435\u043a\u0443\u043d\u0434\u044b, \u0447\u0442\u043e \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043c\u0430\u043b\u043e \u0434\u043b\u044f \u043d\u0430\u0448\u0435\u0433\u043e \u0441\u043b\u0443\u0447\u0430\u044f. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u043c <code>General configuration<\/code> -> <code>Edit<\/code>.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/cc0\/3f7\/15a\/cc03f715a35675162eb9a03612f852d4.png\" width=\"1600\" height=\"960\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/cc0\/3f7\/15a\/cc03f715a35675162eb9a03612f852d4.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0414\u043b\u044f \u043d\u0430\u0441 \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0442\u0430\u0439\u043c\u0430\u0443\u0442 \u0432 15 \u043c\u0438\u043d\u0443\u0442:\u00a0<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/b68\/bf6\/4ce\/b68bf64ce56077723cca228ea83ff9b6.png\" width=\"1600\" height=\"960\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b68\/bf6\/4ce\/b68bf64ce56077723cca228ea83ff9b6.png\"\/><figcaption><\/figcaption><\/figure>\n<ol start=\"6\">\n<li>\n<p>\u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u0440\u043e\u043b\u0438.\u00a0<\/p>\n<\/li>\n<\/ol>\n<p>\u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e AWS \u043d\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c DynamoDB \u0438\u0437 AWS Lambda. \u042d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u0438\u0437 \u0441\u043e\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u043f\u0435\u0440\u0432\u0430 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043f\u0440\u0430\u0432\u0430. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u0431\u0435\u0440\u0435\u043c \u0432 \u0441\u0442\u0440\u043e\u043a\u0435\u00a0\u043f\u043e\u0438\u0441\u043a\u0430 <code>Roles<\/code>. \u0417\u0434\u0435\u0441\u044c \u043c\u044b \u0432\u0438\u0434\u0438\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u0432\u0441\u0435\u0445 \u0440\u043e\u043b\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0435\u0441\u0442\u044c \u0432 \u043d\u0430\u0448\u0435\u043c \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u0435 AWS. \u041e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u0440\u043e\u043b\u044c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0434 \u043a\u0430\u0436\u0434\u0443\u044e Lambda-\u0444\u0443\u043d\u043a\u0446\u0438\u044e. \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u043d\u0430\u0439\u0442\u0438 \u0440\u043e\u043b\u044c, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u044b\u043b\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0430 \u0434\u043b\u044f \u043d\u0430\u0448\u0435\u0439 \u0444-\u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043f\u043e\u0438\u0441\u043a\u0430, \u043a\u0430\u043a \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e \u043d\u0430 \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442\u0435:\u00a0<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/77f\/1f0\/617\/77f1f0617e9c94dd7482efe43b374e64.png\" width=\"1600\" height=\"960\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/77f\/1f0\/617\/77f1f0617e9c94dd7482efe43b374e64.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041f\u0440\u0438\u043a\u0440\u0435\u043f\u0438\u043c \u043a \u0440\u043e\u043b\u0438 \u0444-\u0438 \u043f\u0440\u0430\u0432\u0430 \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f DynamoDB. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u0436\u0438\u043c\u0430\u0435\u043c <code>Attach policies<\/code>:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/ad0\/07b\/3b8\/ad007b3b809fd3979fe0f8b19390a684.png\" width=\"1600\" height=\"960\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ad0\/07b\/3b8\/ad007b3b809fd3979fe0f8b19390a684.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041d\u0430\u0445\u043e\u0434\u0438\u043c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043f\u043e\u0438\u0441\u043a\u0430 \u043d\u0443\u0436\u043d\u044b\u0435 \u043d\u0430\u043c \u043f\u0440\u0430\u0432\u0430 <code>AmazonDynamoDBFullAccess<\/code>, \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c <code>Attach policies<\/code>:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/0de\/20a\/e2d\/0de20ae2d902f3138b554a53320afe96.png\" width=\"1600\" height=\"960\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/0de\/20a\/e2d\/0de20ae2d902f3138b554a53320afe96.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041f\u0435\u0440\u0435\u0434 \u0437\u0430\u043f\u0443\u0441\u043a\u043e\u043c \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u0447\u0442\u043e \u0432 DynamoDB \u043d\u0435\u0442 \u0442\u0430\u0431\u043b\u0438\u0446. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u0431\u0435\u0440\u0435\u043c \u0432 \u043f\u043e\u0438\u0441\u043a\u0435 <code>DynamoDB<\/code>:\u00a0<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/712\/151\/d00\/712151d00790e2dfb7d280578210bde0.png\" width=\"1600\" height=\"960\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/712\/151\/d00\/712151d00790e2dfb7d280578210bde0.png\"\/><figcaption><\/figcaption><\/figure>\n<ol start=\"7\">\n<li>\n<p>\u041a\u043e\u0434.\u00a0<\/p>\n<\/li>\n<\/ol>\n<p>\u041f\u0440\u0430\u0432\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u044b, \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0441\u0440\u0435\u0434\u044b \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u044b, \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043f\u043e\u0434\u0442\u044f\u043d\u0443\u0442\u044b. \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u043a\u043e\u0434\u0443. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u0434:\u00a0<\/p>\n<pre><code class=\"python\">import requests import boto3 from boto3.dynamodb.conditions import Key from bs4 import BeautifulSoup from botocore.exceptions import ClientError import telegram import os  def lambda_handler(event, context):      # Create table if necessary     dynamodb = boto3.resource('dynamodb', region_name='us-east-2')     table_name = 'HardwaxLinks'      try:         params = {             'TableName': table_name,             'KeySchema': [                 {'AttributeName': 'Link', 'KeyType': 'HASH'},             ],             'AttributeDefinitions': [                 {'AttributeName': 'Link', 'AttributeType': 'S'}             ],             'ProvisionedThroughput': {                 'ReadCapacityUnits': 10,                 'WriteCapacityUnits': 10             }         }         table = dynamodb.create_table(**params)         table.wait_until_exists()     except ClientError:          table = dynamodb.Table(table_name)      page_number = 1     keep_going = True      while keep_going:                  page_url = f'https:\/\/hardwax.com\/techno\/?page={page_number}'         print(f'Getting albums from {page_url}')          # Get all album links from page          response = requests.get(page_url).content         soup = BeautifulSoup(response, \"html.parser\")         page_album_links = ['https:\/\/hardwax.com' + x.get('href')\\                             for x in soup.findAll('a', {'class': 'an'})]          n_albums = len(page_album_links)                  if n_albums > 0:                          page_number += 1             print(f'Got {n_albums} albums...')              for link in page_album_links:                                already_processed =\\                 len(table.query(KeyConditionExpression=Key('Link').eq(link))\\                     ['Items']) > 0 # check if a link is in the table                                  if not already_processed:                                        bot = telegram.Bot(token=os.environ['telegram_token'])                     bot.send_message(chat_id=\"@hardwax_techno\",\\                            text=f'{link}', parse_mode=telegram.ParseMode.HTML)                     table.put_item(Item={'Link': link}) # update table                     print(f'Posted {link}')                     return                  else:                     print(f'Already processed {link}')          else:             keep_going = False<\/code><\/pre>\n<p>\u0427\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u043a\u043e\u0434?<\/p>\n<ul>\n<li>\n<p>\u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u043d\u0430 DynamoDB \u0441 \u043e\u0434\u043d\u0438\u043c \u043f\u043e\u043b\u0435\u043c Link. \u0412 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u0431\u0443\u0434\u0435\u0442 \u0445\u0440\u0430\u043d\u0438\u0442\u044c\u0441\u044f \u0432\u0441\u0435 \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0432 \u043a\u0430\u043d\u0430\u043b\u0435 \u0441\u0441\u044b\u043b\u043a\u0438. \u0415\u0441\u043b\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0443\u0436\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0430, \u0442\u043e \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u044d\u0442\u043e\u0442 \u0448\u0430\u0433. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c try\/except \u0431\u043b\u043e\u043a.<\/p>\n<\/li>\n<li>\n<p>\u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435 <a href=\"https:\/\/hardwax.com\/techno%E2%80%99\" rel=\"noopener noreferrer nofollow\">https:\/\/hardwax.com\/techno<\/a> \u0438 \u043b\u0438\u0441\u0442\u0430\u0435\u043c \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b. \u041d\u0430 \u043a\u0430\u0436\u0434\u043e\u0439 \u043d\u043e\u0432\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 \u0434\u0435\u043b\u0430\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:<\/p>\n<ul>\n<li>\n<p>\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u0441\u0441\u044b\u043b\u043e\u043a \u043d\u0430 \u0430\u043b\u044c\u0431\u043e\u043c\u044b \u0441 \u044d\u0442\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 BeautifulSoup. \u041f\u0435\u0440\u0435\u0441\u0442\u0430\u0435\u043c \u043b\u0438\u0441\u0442\u0430\u0442\u044c, \u0435\u0441\u043b\u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0442\u0430\u043a\u0438\u0445 \u0430\u043b\u044c\u0431\u043e\u043c\u043e\u0432 0, \u0442. \u0435. \u043c\u044b \u0434\u043e\u0448\u043b\u0438 \u0434\u043e \u043a\u043e\u043d\u0446\u0430.\u00a0<\/p>\n<\/li>\n<li>\n<p>\u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0441\u0441\u044b\u043b\u043a\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u0435\u0441\u0442\u044c \u043b\u0438 \u043e\u043d\u0430 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 DynamoDB. \u042d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0437\u0430 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f, \u0432 \u044d\u0442\u043e\u043c \u043f\u0440\u0435\u043b\u0435\u0441\u0442\u044c \u044d\u0442\u043e\u0439 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445. \u0422\u0430\u0431\u043b\u0438\u0446\u0430 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0438\u0437 \u0441\u0435\u0431\u044f \u043d\u0435\u0447\u0442\u043e \u0432\u0440\u043e\u0434\u0435 \u043e\u0433\u0440\u043e\u043c\u043d\u043e\u0433\u043e \u0441\u043b\u043e\u0432\u0430\u0440\u044f \u0438 \u043f\u043e \u0445\u044d\u0448\u0443 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u043a\u043b\u044e\u0447\u0430 (\u043d\u0430\u0448\u0435\u0439 \u0441\u0441\u044b\u043b\u043a\u0438). \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0435 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0441\u0441\u044b\u043b\u043a\u0438 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435.<\/p>\n<\/li>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u0441\u0441\u044b\u043b\u043a\u0430 \u0435\u0441\u0442\u044c \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435, \u0442\u043e \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0435\u0435. \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u043c\u044b \u0443\u0436\u0435 \u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043b\u0438 \u0435\u0435 \u0432 \u043a\u0430\u043d\u0430\u043b\u0435.\u00a0<\/p>\n<\/li>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0435\u0442 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435, \u0442\u043e \u043f\u0443\u0431\u043b\u0438\u043a\u0443\u0435\u043c \u0435\u0435 \u0432 \u043a\u0430\u043d\u0430\u043b \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u043d\u043e\u0432\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c. \u0412 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0440\u0430\u0437 \u043e\u043d\u0430 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u0438 \u043c\u044b \u0441\u043c\u043e\u0436\u0435\u043c \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0435\u0435. \u041a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0441\u044b\u043b\u043a\u0430 \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043d\u0430 \u0438 \u0437\u0430\u043f\u0438\u0441\u044c \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0430, \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438. \u0412 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u043c, \u043f\u043e\u043a\u0430 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043c \u0441\u0441\u044b\u043b\u043a\u0443 \u0434\u043b\u044f \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438.<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>\u041e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u043c \u0444\u0430\u0439\u043b <code>lambda_function.py<\/code> \u0438\u0437 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430. \u041d\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u0435\u043c \u043d\u0430\u0436\u0430\u0442\u044c \u043d\u0430 <code>Deploy<\/code>, \u0447\u0442\u043e\u0431\u044b \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432\u0441\u0442\u0443\u043f\u0438\u043b\u0438 \u0432 \u0441\u0438\u043b\u0443. \u041a\u043e\u0434 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u0440\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u0443\u0435\u043c, \u043d\u0430\u0436\u0430\u0432 <code>Test<\/code>:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/2e1\/eaf\/36f\/2e1eaf36f8a46d766bd8cc3feddee13f.png\" width=\"1600\" height=\"960\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/2e1\/eaf\/36f\/2e1eaf36f8a46d766bd8cc3feddee13f.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0412\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u043b\u043e\u0441\u044c, \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b. \u0418\u0437 \u043b\u043e\u0433\u043e\u0432 \u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u0444-\u044f \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0430 45 \u0430\u043b\u044c\u0431\u043e\u043c\u043e\u0432 \u043d\u0430 \u043f\u0435\u0440\u0432\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 \u0438 \u0437\u0430\u043f\u043e\u0441\u0442\u0438\u043b\u0430 \u043f\u0435\u0440\u0432\u044b\u0439 \u0436\u0435 \u0438\u0437 \u043d\u0438\u0445.\u00a0<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/2d0\/8f0\/fc3\/2d08f0fc3a91731bb74e7d76872cb8e1.png\" width=\"1600\" height=\"960\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/2d0\/8f0\/fc3\/2d08f0fc3a91731bb74e7d76872cb8e1.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0412 \u043a\u0430\u043d\u0430\u043b\u0435 \u0432\u0438\u0434\u0438\u043c \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043d\u043d\u0443\u044e \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u0430\u043b\u044c\u0431\u043e\u043c: <\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/7bb\/366\/b5f\/7bb366b5f59eb1b049dc1114aa2cbb6d.png\" width=\"1600\" height=\"960\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/7bb\/366\/b5f\/7bb366b5f59eb1b049dc1114aa2cbb6d.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043d\u0430 web-\u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u0438 \u0432\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u044d\u0442\u043e \u043f\u0435\u0440\u0432\u044b\u0439 \u0430\u043b\u044c\u0431\u043e\u043c \u0432 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438.\u00a0<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/10a\/acd\/9bb\/10aacd9bb9a096ac1d2bfbf4f5684963.png\" width=\"1600\" height=\"960\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/10a\/acd\/9bb\/10aacd9bb9a096ac1d2bfbf4f5684963.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u043c, \u043a\u0430\u043a \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0430\u0441\u044c \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0432 DynamoDB. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c <code>DynamoDB<\/code> -> <code>Tables<\/code> -> <code>HardwaxLinks<\/code> -> <code>Explore table items<\/code>. \u0412\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u043d\u0430\u0448\u0430 \u0441\u0441\u044b\u043b\u043a\u0430.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/39b\/671\/3e4\/39b6713e4beea7200db4c3faa9cedd11.png\" width=\"1600\" height=\"960\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/39b\/671\/3e4\/39b6713e4beea7200db4c3faa9cedd11.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u043c, \u0447\u0442\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043d\u0435 \u043f\u043e\u0441\u0442\u0438\u0442 \u043e\u0434\u043d\u0443 \u0438 \u0442\u0443 \u0436\u0435 \u0441\u0441\u044b\u043b\u043a\u0443 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0441\u043d\u043e\u0432\u0430 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u0435\u0435 \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u043b\u043e\u0433\u0438. \u0412\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u0444-\u044f \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u043b\u0430 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0443\u044e \u0441\u0441\u044b\u043b\u043a\u0443, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043e\u043d\u0430 \u0443\u0436\u0435 \u0431\u044b\u043b\u0430 \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043d\u0430 \u0438 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435.\u00a0<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/74c\/f76\/729\/74cf767299a2b5f6f8ceb0a38ad790a0.png\" width=\"1600\" height=\"960\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/74c\/f76\/729\/74cf767299a2b5f6f8ceb0a38ad790a0.png\"\/><figcaption><\/figcaption><\/figure>\n<ol start=\"8\">\n<li>\n<p>\u0420\u0430\u0441\u043f\u0438\u0441\u0430\u043d\u0438\u0435.\u00a0<\/p>\n<\/li>\n<\/ol>\n<p>\u0427\u0442\u043e\u0431\u044b \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u044e Telegram-\u043a\u0430\u043d\u0430\u043b\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u043c \u0440\u0430\u0441\u043f\u0438\u0441\u0430\u043d\u0438\u0435. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u0431\u0435\u0440\u0435\u043c \u0432 \u043f\u043e\u0438\u0441\u043a\u0435 <code>Amazon EventBridge<\/code> -> <code>Schedules<\/code>:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/8cb\/afc\/6e2\/8cbafc6e2f58365cbca797255f0a8687.png\" width=\"1600\" height=\"960\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/8cb\/afc\/6e2\/8cbafc6e2f58365cbca797255f0a8687.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0412\u044b\u0431\u0438\u0440\u0430\u0435\u043c <code>Recurring schedule<\/code> -> <code>Rate-based schedule<\/code>. <code>Rate expression <\/code> = <code>15 minutes<\/code>.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/7ca\/e64\/074\/7cae640745cacbadeada6168634a857c.png\" width=\"1600\" height=\"960\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/7ca\/e64\/074\/7cae640745cacbadeada6168634a857c.png\"\/><figcaption><\/figcaption><\/figure>\n<p><code>Target<\/code> = <code>AWS Lambda<\/code>:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/f0e\/96c\/352\/f0e96c352d6216c70a4c369a4b2b4295.png\" width=\"1600\" height=\"960\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/f0e\/96c\/352\/f0e96c352d6216c70a4c369a4b2b4295.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0412\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u043d\u0430\u0448\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044e:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/2f4\/a9a\/343\/2f4a9a3430d8a48343510f4b38f0e53c.png\" width=\"1600\" height=\"960\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/2f4\/a9a\/343\/2f4a9a3430d8a48343510f4b38f0e53c.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0413\u043e\u0442\u043e\u0432\u043e! \u041f\u043e\u0441\u0442\u044b \u0432 \u043a\u0430\u043d\u0430\u043b\u0435 \u043f\u0443\u0431\u043b\u0438\u043a\u0443\u044e\u0442\u0441\u044f \u0441 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u043e\u043c \u0432 15 \u043c\u0438\u043d\u0443\u0442, \u0431\u0435\u0437 \u043f\u043e\u0432\u0442\u043e\u0440\u0435\u043d\u0438\u0439.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/78a\/971\/770\/78a9717703e45a509e1f04693dc27db7.png\" width=\"1600\" height=\"960\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/78a\/971\/770\/78a9717703e45a509e1f04693dc27db7.png\"\/><figcaption><\/figcaption><\/figure>\n<ol start=\"9\">\n<li>\n<p>\u0427\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0443\u043b\u0443\u0447\u0448\u0438\u0442\u044c?\u00a0<\/p>\n<\/li>\n<\/ol>\n<p>\u0412 \u044d\u0442\u043e\u043c \u0442\u0443\u0442\u043e\u0440\u0438\u0430\u043b\u0435 \u043c\u044b \u043c\u043d\u043e\u0433\u043e\u0435 \u0434\u0435\u043b\u0430\u043b\u0438 \u0440\u0443\u043a\u0430\u043c\u0438. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u043b\u0438 \u043a\u043e\u0434 \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435, \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u0430\u0440\u0445\u0438\u0432 \u0441 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u0438 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u043b\u0438 \u0435\u0433\u043e \u0432 AWS. \u0413\u043e\u0440\u0430\u0437\u0434\u043e \u0443\u0434\u043e\u0431\u043d\u0435\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c CI\/CD \u043f\u0430\u0439\u043f\u043b\u0430\u0439\u043d \u0434\u043b\u044f \u043a\u043e\u0434\u0430 \u0438 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439. \u0418\u0434\u0435\u044f \u0442\u0430\u043a\u0430\u044f: \u0432\u044b \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442\u0435 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 \u043d\u0430 GitHub, \u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0438 \u0441\u043b\u043e\u0439 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438. \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0430\u044f \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f \u043e\u043f\u0438\u0441\u0430\u043d\u0430 \u0432 \u043c\u043e\u0435\u043c \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u043c \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0435 \u2014 <a href=\"https:\/\/habr.com\/ru\/post\/703416\/\" rel=\"noopener noreferrer nofollow\"><u>CI\/CD \u0434\u043b\u044f AWS Lambda \u0447\u0435\u0440\u0435\u0437 GitHub Actions<\/u><\/a>.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<p> <!----> <!----><\/div>\n<p> <!----> <!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/post\/706020\/\"> https:\/\/habr.com\/ru\/post\/706020\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0412 \u044d\u0442\u043e\u043c \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0435 \u0432\u044b \u0443\u0437\u043d\u0430\u0435\u0442\u0435, \u043a\u0430\u043a \u0441\u043e\u0437\u0434\u0430\u0442\u044c Telegram-\u043a\u0430\u043d\u0430\u043b, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0441\u0430\u043c \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c\u0441\u044f, \u043f\u043e\u043b\u0443\u0447\u0430\u044f \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0445 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u0432:<\/p>\n<ul>\n<li>\n<p>\u041a\u043e\u0434 \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u043d\u0430 Python.\u00a0<\/p>\n<\/li>\n<li>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c\u0441\u044f \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u0432 <a href=\"https:\/\/aws.amazon.com\/ru\/lambda\/\" rel=\"noopener noreferrer nofollow\"><u>AWS Lambda<\/u><\/a>.<\/p>\n<\/li>\n<li>\n<p>\u0414\u043b\u044f \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430 (\u0442. \u0435. \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f) \u0434\u0430\u043d\u043d\u044b\u0445 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 <a href=\"https:\/\/pypi.org\/project\/beautifulsoup4\/\" rel=\"noopener noreferrer nofollow\"><u>BeautifulSoup<\/u><\/a>.\u00a0<\/p>\n<\/li>\n<li>\n<p>\u0427\u0442\u043e\u0431\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u0430\u0448\u0435\u043c\u0443 \u0441\u043e\u0444\u0442\u0443 <a href=\"https:\/\/en.wikipedia.org\/wiki\/Persistence_(computer_science)#:~:text=complicated%20to%20debug.-,Persistence%20layers,an%20underlying%20database%20management%20system.\" rel=\"noopener noreferrer nofollow\"><u>persistance layer<\/u><\/a> \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 <a href=\"https:\/\/aws.amazon.com\/ru\/dynamodb\/\" rel=\"noopener noreferrer nofollow\"><u>AWS DynamoDB<\/u><\/a>.<\/p>\n<\/li>\n<li>\n<p>P. S. \u0412\u0441\u0435 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e, Amazon \u043d\u0438\u0447\u0435\u0433\u043e \u043f\u043b\u0430\u0442\u0438\u0442\u044c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e.<\/p>\n<\/li>\n<\/ul>\n<p>\u0426\u0435\u043b\u044c \u0441\u0442\u0430\u0442\u044c\u0438 \u2014 \u043e\u0431\u044a\u044f\u0441\u043d\u0438\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 DynamoDB, BeautifulSoup \u0438 AWS Lambda. \u0415\u0441\u043b\u0438 \u0442\u043e\u0447\u043d\u0435\u0435 \u2014 \u043a\u0430\u043a \u0441\u0432\u044f\u0437\u0430\u0442\u044c \u0432\u0441\u0435 \u044d\u0442\u043e \u0432 \u0435\u0434\u0438\u043d\u044b\u0439 \u0440\u0430\u0431\u043e\u0447\u0438\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0434\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438.<\/p>\n<p>\u0414\u0430\u043b\u0435\u0435 \u044f \u043e\u043f\u0438\u0448\u0443 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u0441\u0438\u043d\u0442\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0437\u0430\u0434\u0430\u0447\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0442\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 \u043e\u0442\u043b\u0438\u0447\u043d\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0435\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0434\u043b\u044f \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044f \u0432\u044b\u0448\u0435\u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0445 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0439.<\/p>\n<p>\u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c \u0432\u044b \u0444\u0430\u043d\u0430\u0442 \u043c\u0443\u0437\u044b\u043a\u0438 \u0436\u0430\u043d\u0440\u0430 \u0442\u0435\u0445\u043d\u043e \u0438 \u0445\u043e\u0442\u0438\u0442\u0435 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u043c \u043f\u043e\u0441\u0442\u0443\u043f\u0438\u0432\u0448\u0435\u043c \u043c\u0443\u0437\u044b\u043a\u0430\u043b\u044c\u043d\u043e\u043c \u0430\u043b\u044c\u0431\u043e\u043c\u0435 \u0441 \u0432\u0430\u0448\u0435\u0433\u043e \u043b\u044e\u0431\u0438\u043c\u043e\u0433\u043e \u0441\u0430\u0439\u0442\u0430 <a href=\"http:\/\/hardwax.com\" rel=\"noopener noreferrer nofollow\">hardwax.com<\/a>. \u0417\u0430\u0445\u043e\u0434\u0438\u0442\u044c \u043d\u0430 \u0441\u0430\u0439\u0442 \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u043d\u0435\u0443\u0434\u043e\u0431\u043d\u043e \u0438 \u0432\u0430\u043c \u0431\u044b \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0438\u043c\u0435\u0442\u044c Telegram-\u043a\u0430\u043d\u0430\u043b, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043a\u0430\u0436\u0434\u044b\u0435 15 \u043c\u0438\u043d\u0443\u0442 \u043f\u0443\u0431\u043b\u0438\u043a\u0443\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u043c\u0443\u0437\u044b\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0430\u043b\u044c\u0431\u043e\u043c. \u0417\u0430\u0434\u0430\u0447\u0430 \u043e\u0441\u043b\u043e\u0436\u043d\u044f\u0435\u0442\u0441\u044f \u0442\u0435\u043c, \u0447\u0442\u043e \u0432\u044b \u043d\u0435 \u0445\u043e\u0442\u0438\u0442\u0435 \u0432\u0438\u0434\u0435\u0442\u044c \u043d\u0438 \u043e\u0434\u043d\u0443 \u0441\u0441\u044b\u043b\u043a\u0443 \u0432\u0442\u043e\u0440\u043e\u0439 \u0440\u0430\u0437. \u0412\u044b \u0441\u043b\u0443\u0448\u0430\u0435\u0442\u0435 \u0430\u043b\u044c\u0431\u043e\u043c \u0435\u0434\u0438\u043d\u043e\u0436\u0434\u044b \u0438 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0437\u0430\u0431\u044b\u0432\u0430\u0435\u0442\u0435 \u043f\u0440\u043e \u043d\u0435\u0433\u043e. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0434\u043e\u043b\u0436\u0435\u043d \u0437\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0442\u044c, \u043a\u0430\u043a\u0438\u0435 \u0430\u043b\u044c\u0431\u043e\u043c\u044b \u043e\u043d \u0443\u0436\u0435 \u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043b \u0432 \u043a\u0430\u043d\u0430\u043b\u0435 \u0438 \u043d\u0435 \u0434\u043e\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e\u0439 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438.\u00a0<\/p>\n<figure class=\"full-width\"><figcaption>\u0421\u0430\u0439\u0442 \u043c\u0443\u0437\u044b\u043a\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043c\u0430\u0433\u0430\u0437\u0438\u043d\u0430 hardwax.com, \u0441\u0435\u043a\u0446\u0438\u044f Techno<\/figcaption><\/figure>\n<ol>\n<li>\n<p>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0442\u0435\u043b\u0435\u0433\u0440\u0430\u043c-\u043a\u0430\u043d\u0430\u043b\u0430 \u0438 \u0431\u043e\u0442\u0430.\u00a0<\/p>\n<\/li>\n<\/ol>\n<p>\u0418\u0442\u0430\u043a, \u043d\u0430\u0447\u043d\u0435\u043c. \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c Telegram-\u043a\u0430\u043d\u0430\u043b. \u041d\u0430\u0437\u043e\u0432\u0435\u043c \u0435\u0433\u043e <code>Hardwax techno<\/code>:<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u041a\u0442\u043e-\u0442\u043e \u0434\u043e\u043b\u0436\u0435\u043d \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c Telegram-\u043a\u0430\u043d\u0430\u043b, \u0432\u0435\u0434\u044c \u0441\u0430\u043c \u043f\u043e \u0441\u0435\u0431\u0435 \u043a\u0430\u043d\u0430\u043b \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u043d\u0435 \u043c\u043e\u0436\u0435\u0442. \u0414\u043b\u044f \u044d\u0442\u0438\u0445 \u0446\u0435\u043b\u0435\u0439 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0431\u043e\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c\u0441\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435\u043c. \u0412 Telegram \u0431\u043e\u0442\u044b \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u043e\u0442\u0446\u0430 \u0432\u0441\u0435\u0445 \u0431\u043e\u0442\u043e\u0432 \u2014 <a href=\"https:\/\/t.me\/BotFather\" rel=\"noopener noreferrer nofollow\"><u>@BotFather<\/u><\/a>:<\/p>\n<ul>\n<li>\n<p>\u0417\u0434\u043e\u0440\u043e\u0432\u0430\u0435\u043c\u0441\u044f (<code>\/start<\/code>)<\/p>\n<\/li>\n<li>\n<p>\u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0431\u043e\u0442\u0430 (<code>\/newbot<\/code>)<\/p>\n<\/li>\n<li>\n<p>\u0414\u0430\u0435\u043c \u0438\u043c\u044f \u0431\u043e\u0442\u0443 (<code>hardwax_techno_poster<\/code>)\u00a0<\/p>\n<\/li>\n<li>\n<p>\u0414\u0430\u0435\u043c \u0435\u043c\u0443 username (<code>hardwax_techno_poster_bot<\/code>, \u0434\u043e\u043b\u0436\u043d\u043e \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 <code>_bot<\/code>)<\/p>\n<\/li>\n<li>\n<p>\u0412 \u043a\u043e\u043d\u0446\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0442\u043e\u043a\u0435\u043d \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0431\u043e\u0442\u043e\u043c, \u0435\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c.<\/p>\n<\/li>\n<\/ul>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0431\u043e\u0442\u0430 \u0432 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u044b, \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043a\u0430\u043d\u0430\u043b\u0430 &#8212; > <code>Administrators<\/code>:<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u0414\u0430\u043b\u0435\u0435 <code>Add Admin<\/code>, \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u043d\u0430\u0448\u0435\u0433\u043e \u0431\u043e\u0442\u0430 \u0438 \u043f\u0440\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0432\u0441\u0435 \u0433\u0430\u043b\u043e\u0447\u043a\u0438:\u00a0<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<ol start=\"2\">\n<li>\n<p>\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f \u043d\u0430 AWS \u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438.<\/p>\n<\/li>\n<\/ol>\n<p>\u0421\u0435\u0442\u0430\u043f \u0432 Telegram \u0433\u043e\u0442\u043e\u0432, \u043f\u043e\u0440\u0430 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442\u044c \u043a AWS. \u041e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u043f\u0435\u0440\u0432\u043e\u0435, \u0447\u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0430\u043a\u043a\u0430\u0443\u043d\u0442. <a href=\"https:\/\/habr.com\/ru\/post\/448528\/\" rel=\"noopener noreferrer nofollow\"><u>\u0417\u0434\u0435\u0441\u044c<\/u><\/a> \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u043e, \u043a\u0430\u043a \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0438 \u043d\u0438\u0447\u0435\u0433\u043e \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043d\u0435 \u0437\u0430\u043f\u043b\u0430\u0442\u0438\u0442\u044c.<\/p>\n<p>\u0421\u0434\u0435\u043b\u0430\u043b\u0438 \u0430\u043a\u043a\u0430\u0443\u043d\u0442 AWS, \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043a \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u0438. \u041d\u0430\u0431\u0438\u0440\u0430\u0435\u043c \u0432 \u0441\u0442\u0440\u043e\u043a\u0435 \u043f\u043e\u0438\u0441\u043a\u0430 \u2018lambda\u2019 \u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0440\u0430\u0437\u0434\u0435\u043b:<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u041d\u0430\u0436\u0438\u043c\u0430\u0435\u043c \u2018Create function\u2019, \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u0438\u043c\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438. Runtime = \u2018Python 3.9\u2019 \u0438\u043b\u0438 \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0437\u0434\u043d\u044f\u044f \u0432\u0435\u0440\u0441\u0438\u044f.\u00a0<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<ol start=\"3\">\n<li>\n<p>\u0418\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438.\u00a0<\/p>\n<\/li>\n<\/ol>\n<p>\u0427\u0442\u043e\u0431\u044b \u043f\u0430\u0440\u0441\u0438\u0442\u044c \u0432\u0435\u0431 \u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c Telegram-\u043a\u0430\u043d\u0430\u043b\u043e\u043c \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u044f\u0442\u0441\u044f \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u2014 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438. \u0427\u0442\u043e\u0431\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u0445 \u0432 AWS Lambda \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u044b \u0441\u043b\u043e\u0438 \u2014 \u0441\u0432\u043e\u0435\u043e\u0431\u0440\u0430\u0437\u043d\u044b\u0435 \u043f\u0430\u043a\u0435\u0442\u044b \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c\u044b\u0435 \u043a \u0444\u0443\u043d\u043a\u0446\u0438\u0438. \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0442\u0430\u043a\u043e\u0439 \u0441\u043b\u043e\u0439.<\/p>\n<p>\u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u0442\u044c \u0432\u0441\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0432 <code>.zip<\/code>-\u0430\u0440\u0445\u0438\u0432\u0435. \u0412\u0441\u0435\u0433\u043e \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u044f\u0442\u0441\u044f 3 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438:\u00a0<\/p>\n<ul>\n<li>\n<p><code>requests<\/code> \u2014 \u0432\u0435\u0437\u0434\u0435\u0441\u0443\u0449\u0430\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 Python \u0434\u043b\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432.\u00a0<\/p>\n<\/li>\n<li>\n<p><code>bs4<\/code> \u0438\u043b\u0438 BeautifulSoup \u2014 \u043d\u0430\u0431\u043e\u0440 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0434\u043b\u044f \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430 \u0432\u0435\u0431-\u0441\u0442\u0440\u0430\u043d\u0438\u0446.<\/p>\n<\/li>\n<li>\n<p><code>python-telegram-bot<\/code> \u2014 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430, \u0443\u043f\u0440\u043e\u0449\u0430\u044e\u0449\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 \u0431\u043e\u0442\u0430\u043c\u0438 \u0432 Telegram.\u00a0<\/p>\n<\/li>\n<\/ul>\n<p>\u0427\u0442\u043e\u0431\u044b \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u0442\u044c \u0430\u0440\u0445\u0438\u0432, \u043d\u0430 \u043c\u0430\u0448\u0438\u043d\u0435 <code>Mac<\/code> \u0438\u043b\u0438 <code>Linux<\/code> \u0441 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u043c <code>Python3<\/code> \u0438 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u043e\u043c \u043f\u0430\u043a\u0435\u0442\u043e\u0432 <code>pip<\/code> \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u043c \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b:\u00a0<\/p>\n<ul>\n<li>\n<p>\u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e \u0434\u043b\u044f \u0430\u0440\u0445\u0438\u0432\u0430, \u043a\u0443\u0434\u0430 \u043f\u043e\u043b\u043e\u0436\u0438\u043c \u043d\u0430\u0448\u0438 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438.\u00a0<\/p>\n<\/li>\n<\/ul>\n<p><code>mkdir -p ~\/python<\/code><\/p>\n<ul>\n<li>\n<p>\u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u0432\u043d\u0443\u0442\u0440\u044c \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u043e\u0439 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438.<\/p>\n<\/li>\n<\/ul>\n<p><code>cd ~\/python<\/code><\/p>\n<ul>\n<li>\n<p>\u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u043d\u0430\u0448\u0438 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u0432 \u0442\u0435\u043a\u0443\u0449\u0443\u044e \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e, \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044f \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u0432\u0435\u0440\u0441\u0438\u0438.\u00a0<\/p>\n<\/li>\n<\/ul>\n<p><code>pip install --target=. bs4==0.0.1 python-telegram-bot==6.1.0 requests==2.24.0<\/code><\/p>\n<ul>\n<li>\n<p>\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u0441\u044f \u043e\u0431\u0440\u0430\u0442\u043d\u043e.\u00a0<\/p>\n<\/li>\n<\/ul>\n<p><code>cd ~<\/code><\/p>\n<ul>\n<li>\n<p>\u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0430\u0440\u0445\u0438\u0432 \u0441 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044f\u043c\u0438.<\/p>\n<\/li>\n<\/ul>\n<p><code>zip -r hardwax_poster_layer.zip python<\/code><\/p>\n<p>\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0432\u0448\u0438\u0439\u0441\u044f <code>.zip<\/code>-\u0430\u0440\u0445\u0438\u0432 \u0441 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044f\u043c\u0438 \u0432 AWS.\u00a0<\/p>\n<p>\u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u0431\u0435\u0440\u0435\u043c \u0432 \u043f\u043e\u0438\u0441\u043a\u0435 <code>Layers<\/code> -> <code>Create layer<\/code>. \u0417\u0430\u0434\u0430\u0435\u043c \u0438\u043c\u044f \u0441\u043b\u043e\u044f <code>hardwax_poster_layer<\/code>, \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c <code>Upload a .zip file<\/code>, \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u043f\u0443\u0442\u044c \u0434\u043e \u0430\u0440\u0445\u0438\u0432\u0430. \u0414\u0430\u043b\u0435\u0435 \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443 <code>x86_64<\/code> \u0438 <code>Runtime<\/code> = <code>Python 3.9<\/code>.<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u041c\u044b \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u043b\u0438 \u0441\u043b\u043e\u0439. \u041a\u043e\u043f\u0438\u0440\u0443\u0435\u043c \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0435\u0433\u043e ARN (ID \u0441\u043b\u043e\u044f \u0438\u043b\u0438 <a href=\"https:\/\/docs.aws.amazon.com\/general\/latest\/gr\/aws-arns-and-namespaces.html\" rel=\"noopener noreferrer nofollow\"><u>Amazon Resource Name<\/u><\/a>), \u043e\u043d \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u0430\u043c \u0434\u0430\u043b\u044c\u0448\u0435:\u00a0<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0441\u043b\u043e\u0439 \u043a \u043d\u0430\u0448\u0435\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u0430\u0448\u0435\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439, \u0441\u043a\u0440\u043e\u043b\u043b\u0438\u043c \u0432\u0433\u043b\u0443\u0431\u044c \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0438 \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c <code>Add layer<\/code>:<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u041a\u043b\u0438\u043a\u0430\u0435\u043c <code>Specify an ARN<\/code>, \u0432\u0432\u043e\u0434\u0438\u043c \u0432 \u043f\u043e\u043b\u0435 \u0440\u0430\u043d\u0435\u0435 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 ARN \u0441\u043b\u043e\u044f. \u041d\u0430\u0436\u0438\u043c\u0430\u0435\u043c <code>Verify<\/code>, \u0447\u0442\u043e\u0431\u044b \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0432\u0441\u0435 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e. \u041d\u0430\u043a\u043e\u043d\u0435\u0446 \u0436\u043c\u0435\u043c <code>Add<\/code>, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0438\u043a\u0440\u0435\u043f\u0438\u0442\u044c \u0441\u043b\u043e\u0439 \u043a \u0444\u0443\u043d\u043a\u0446\u0438\u0438.\u00a0<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u041f\u0440\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u0443\u0435\u043c, \u0447\u0442\u043e \u0432 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0438 AWS \u0442\u0435\u043f\u0435\u0440\u044c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0435\u0441\u0442\u044c \u043d\u0430\u0448\u0438 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u044f\u043c\u043e \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435 \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u0435\u043c \u043a\u043e\u0434, \u0447\u0442\u043e\u0431\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0432 \u043e\u0442\u0432\u0435\u0442 \u043f\u0435\u0447\u0430\u0442\u0430\u043b\u0430 \u0432\u0435\u0440\u0441\u0438\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 Telegram \u0438\u0437 \u043d\u0430\u0448\u0438\u0445 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439. \u041d\u0430\u0436\u0438\u043c\u0430\u0435\u043c <code>Deploy<\/code>, \u0447\u0442\u043e\u0431\u044b \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432\u0441\u0442\u0443\u043f\u0438\u043b\u0438 \u0432 \u0441\u0438\u043b\u0443.<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<pre><code class=\"python\">import json import telegram  def lambda_handler(event, context):     # TODO implement     return {         'statusCode': 200,         'body': json.dumps(f'Telegram version is {telegram.__version__}')     }<\/code><\/pre>\n<p>\u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c AWS \u0434\u0430\u0441\u0442 \u043f\u0440\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u0448 \u043a\u043e\u0434, \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u0435. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u0436\u0438\u043c\u0430\u0435\u043c \u043d\u0430 \u0431\u043e\u043b\u044c\u0448\u0443\u044e \u043e\u0440\u0430\u043d\u0436\u0435\u0432\u0443\u044e \u043a\u043d\u043e\u043f\u043a\u0443 <code>Test<\/code>. \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0430\u043c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0438\u0447\u0435\u0433\u043e, \u043a\u0440\u043e\u043c\u0435 \u043a\u0430\u043a \u0434\u0430\u0442\u044c \u0441\u043e\u0431\u044b\u0442\u0438\u044e \u0438\u043c\u044f \u0432\u0440\u043e\u0434\u0435 <code>my_test_event<\/code>. \u0412 \u0434\u0440\u0443\u0433\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 JSON &#8212; \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0438 \u0443\u0434\u043e\u0431\u043d\u043e \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u043a\u0430\u043a \u043e\u043d\u0430 \u0438\u0445 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442.\u00a0<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u0421\u043d\u043e\u0432\u0430 \u043d\u0430\u0436\u0438\u043c\u0430\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0443\u044e \u043e\u0440\u0430\u043d\u0436\u0435\u0432\u0443\u044e \u043a\u043d\u043e\u043f\u043a\u0443 <code>Test<\/code> \u0438 AWS \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u043d\u0430\u0448 \u043a\u043e\u0434. \u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u0432\u043e \u0432\u043a\u043b\u0430\u0434\u043a\u0443 <code>Execution result<\/code> \u0438 \u0432\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u0435\u0440\u043d\u0443\u043b\u0430 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443 <code>Telegram library version is 6.1.0<\/code>. \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u043d\u0430\u0448\u0438 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u0432 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0438 \u0438 \u043c\u043e\u0436\u043d\u043e \u0438\u0434\u0442\u0438 \u0434\u0430\u043b\u044c\u0448\u0435.<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<ol start=\"4\">\n<li>\n<p>\u0417\u0430\u0434\u0430\u0435\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0441\u0440\u0435\u0434\u044b.\u00a0<\/p>\n<\/li>\n<\/ol>\n<p>\u041c\u044b \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c\u0441\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c Telegram-\u043a\u0430\u043d\u0430\u043b \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043d\u0430\u0448\u0435\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432 \u043a\u043e\u0434 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0442\u043e\u043a\u0435\u043d \u0434\u043b\u044f \u0431\u043e\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0435 \u043f\u043e\u0441\u0442\u044b \u0432 \u043a\u0430\u043d\u0430\u043b\u0435 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430. \u041b\u0443\u0447\u0448\u0438\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u2014 \u0441\u043e\u0437\u0434\u0430\u0442\u044c <code>Environment variable<\/code> \u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u0441\u0440\u0435\u0434\u044b \u0434\u043b\u044f \u0442\u043e\u043a\u0435\u043d\u0430. \u041f\u0440\u043e\u0441\u0442\u043e \u0432\u043f\u0438\u0441\u0430\u0442\u044c \u0442\u043e\u043a\u0435\u043d \u0432 \u0442\u0435\u043b\u043e \u043a\u043e\u0434\u0430 \u043d\u0435\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e. \u0427\u0442\u043e\u0431\u044b \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u0441\u0440\u0435\u0434\u044b \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u0432 <code>Configuration<\/code> -> <code>Environment variables<\/code> -> <code>Edit<\/code>.<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u0441 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c <code>telegram_token<\/code> \u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c \u0442\u043e\u043a\u0435\u043d\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u0440\u0430\u043d\u0435\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u043e\u0442 \u0431\u043e\u0442\u0430:\u00a0 <\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<ol start=\"5\">\n<li>\n<p>\u0412\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0442\u0430\u0439\u043c\u0430\u0443\u0442.\u00a0<\/p>\n<\/li>\n<\/ol>\n<p>\u0422\u0430\u043a\u0436\u0435 \u043f\u043e\u043c\u0435\u043d\u044f\u0435\u043c \u0442\u0430\u0439\u043c\u0430\u0443\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438\u043b\u0438 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0435\u0435 \u0440\u0430\u0431\u043e\u0442\u044b. \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0443 AWS Lambda \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043e\u043d \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u043d\u0430 3 \u0441\u0435\u043a\u0443\u043d\u0434\u044b, \u0447\u0442\u043e \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043c\u0430\u043b\u043e \u0434\u043b\u044f \u043d\u0430\u0448\u0435\u0433\u043e \u0441\u043b\u0443\u0447\u0430\u044f. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u043c <code>General configuration<\/code> -> <code>Edit<\/code>.<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u0414\u043b\u044f \u043d\u0430\u0441 \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0442\u0430\u0439\u043c\u0430\u0443\u0442 \u0432 15 \u043c\u0438\u043d\u0443\u0442:\u00a0<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<ol start=\"6\">\n<li>\n<p>\u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u0440\u043e\u043b\u0438.\u00a0<\/p>\n<\/li>\n<\/ol>\n<p>\u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e AWS \u043d\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c DynamoDB \u0438\u0437 AWS Lambda. \u042d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u0438\u0437 \u0441\u043e\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u043f\u0435\u0440\u0432\u0430 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043f\u0440\u0430\u0432\u0430. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u0431\u0435\u0440\u0435\u043c \u0432 \u0441\u0442\u0440\u043e\u043a\u0435\u00a0\u043f\u043e\u0438\u0441\u043a\u0430 <code>Roles<\/code>. \u0417\u0434\u0435\u0441\u044c \u043c\u044b \u0432\u0438\u0434\u0438\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u0432\u0441\u0435\u0445 \u0440\u043e\u043b\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0435\u0441\u0442\u044c \u0432 \u043d\u0430\u0448\u0435\u043c \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u0435 AWS. \u041e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u0440\u043e\u043b\u044c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0434 \u043a\u0430\u0436\u0434\u0443\u044e Lambda-\u0444\u0443\u043d\u043a\u0446\u0438\u044e. \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u043d\u0430\u0439\u0442\u0438 \u0440\u043e\u043b\u044c, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u044b\u043b\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0430 \u0434\u043b\u044f \u043d\u0430\u0448\u0435\u0439 \u0444-\u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043f\u043e\u0438\u0441\u043a\u0430, \u043a\u0430\u043a \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e \u043d\u0430 \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442\u0435:\u00a0<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u041f\u0440\u0438\u043a\u0440\u0435\u043f\u0438\u043c \u043a \u0440\u043e\u043b\u0438 \u0444-\u0438 \u043f\u0440\u0430\u0432\u0430 \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f DynamoDB. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u0436\u0438\u043c\u0430\u0435\u043c <code>Attach policies<\/code>:<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u041d\u0430\u0445\u043e\u0434\u0438\u043c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043f\u043e\u0438\u0441\u043a\u0430 \u043d\u0443\u0436\u043d\u044b\u0435 \u043d\u0430\u043c \u043f\u0440\u0430\u0432\u0430 <code>AmazonDynamoDBFullAccess<\/code>, \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c <code>Attach policies<\/code>:<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u041f\u0435\u0440\u0435\u0434 \u0437\u0430\u043f\u0443\u0441\u043a\u043e\u043c \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u0447\u0442\u043e \u0432 DynamoDB \u043d\u0435\u0442 \u0442\u0430\u0431\u043b\u0438\u0446. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u0431\u0435\u0440\u0435\u043c \u0432 \u043f\u043e\u0438\u0441\u043a\u0435 <code>DynamoDB<\/code>:\u00a0<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<ol start=\"7\">\n<li>\n<p>\u041a\u043e\u0434.\u00a0<\/p>\n<\/li>\n<\/ol>\n<p>\u041f\u0440\u0430\u0432\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u044b, \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0441\u0440\u0435\u0434\u044b \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u044b, \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043f\u043e\u0434\u0442\u044f\u043d\u0443\u0442\u044b. \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u043a\u043e\u0434\u0443. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u0434:\u00a0<\/p>\n<pre><code class=\"python\">import requests import boto3 from boto3.dynamodb.conditions import Key from bs4 import BeautifulSoup from botocore.exceptions import ClientError import telegram import os  def lambda_handler(event, context):      # Create table if necessary     dynamodb = boto3.resource('dynamodb', region_name='us-east-2')     table_name = 'HardwaxLinks'      try:         params = {             'TableName': table_name,             'KeySchema': [                 {'AttributeName': 'Link', 'KeyType': 'HASH'},             ],             'AttributeDefinitions': [                 {'AttributeName': 'Link', 'AttributeType': 'S'}             ],             'ProvisionedThroughput': {                 'ReadCapacityUnits': 10,                 'WriteCapacityUnits': 10             }         }         table = dynamodb.create_table(**params)         table.wait_until_exists()     except ClientError:          table = dynamodb.Table(table_name)      page_number = 1     keep_going = True      while keep_going:                  page_url = f'https:\/\/hardwax.com\/techno\/?page={page_number}'         print(f'Getting albums from {page_url}')          # Get all album links from page          response = requests.get(page_url).content         soup = BeautifulSoup(response, \"html.parser\")         page_album_links = ['https:\/\/hardwax.com' + x.get('href')\\                             for x in soup.findAll('a', {'class': 'an'})]          n_albums = len(page_album_links)                  if n_albums > 0:                          page_number += 1             print(f'Got {n_albums} albums...')              for link in page_album_links:                                already_processed =\\                 len(table.query(KeyConditionExpression=Key('Link').eq(link))\\                     ['Items']) > 0 # check if a link is in the table                                  if not already_processed:                                        bot = telegram.Bot(token=os.environ['telegram_token'])                     bot.send_message(chat_id=\"@hardwax_techno\",\\                            text=f'{link}', parse_mode=telegram.ParseMode.HTML)                     table.put_item(Item={'Link': link}) # update table                     print(f'Posted {link}')                     return                  else:                     print(f'Already processed {link}')          else:             keep_going = False<\/code><\/pre>\n<p>\u0427\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u043a\u043e\u0434?<\/p>\n<ul>\n<li>\n<p>\u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u043d\u0430 DynamoDB \u0441 \u043e\u0434\u043d\u0438\u043c \u043f\u043e\u043b\u0435\u043c Link. \u0412 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u0431\u0443\u0434\u0435\u0442 \u0445\u0440\u0430\u043d\u0438\u0442\u044c\u0441\u044f \u0432\u0441\u0435 \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0432 \u043a\u0430\u043d\u0430\u043b\u0435 \u0441\u0441\u044b\u043b\u043a\u0438. \u0415\u0441\u043b\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0443\u0436\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0430, \u0442\u043e \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u044d\u0442\u043e\u0442 \u0448\u0430\u0433. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c try\/except \u0431\u043b\u043e\u043a.<\/p>\n<\/li>\n<li>\n<p>\u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435 <a href=\"https:\/\/hardwax.com\/techno%E2%80%99\" rel=\"noopener noreferrer nofollow\">https:\/\/hardwax.com\/techno<\/a> \u0438 \u043b\u0438\u0441\u0442\u0430\u0435\u043c \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b. \u041d\u0430 \u043a\u0430\u0436\u0434\u043e\u0439 \u043d\u043e\u0432\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 \u0434\u0435\u043b\u0430\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:<\/p>\n<ul>\n<li>\n<p>\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u0441\u0441\u044b\u043b\u043e\u043a \u043d\u0430 \u0430\u043b\u044c\u0431\u043e\u043c\u044b \u0441 \u044d\u0442\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 BeautifulSoup. \u041f\u0435\u0440\u0435\u0441\u0442\u0430\u0435\u043c \u043b\u0438\u0441\u0442\u0430\u0442\u044c, \u0435\u0441\u043b\u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0442\u0430\u043a\u0438\u0445 \u0430\u043b\u044c\u0431\u043e\u043c\u043e\u0432 0, \u0442. \u0435. \u043c\u044b \u0434\u043e\u0448\u043b\u0438 \u0434\u043e \u043a\u043e\u043d\u0446\u0430.\u00a0<\/p>\n<\/li>\n<li>\n<p>\u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0441\u0441\u044b\u043b\u043a\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u0435\u0441\u0442\u044c \u043b\u0438 \u043e\u043d\u0430 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 DynamoDB. \u042d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0437\u0430<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-342773","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/342773","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=342773"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/342773\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=342773"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=342773"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=342773"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}