{"id":101634,"date":"2025-03-15T12:09:47","date_gmt":"2025-03-15T08:39:47","guid":{"rendered":"https:\/\/nabfollower.com\/blog\/implementing-automated-end-to-end-testing-leveraging-your-cicd-with-your-cloud-development-kit-app-30hl\/"},"modified":"2025-03-15T12:09:47","modified_gmt":"2025-03-15T08:39:47","slug":"implementing-automated-end-to-end-testing-leveraging-your-cicd-with-your-cloud-development-kit-app-30hl","status":"publish","type":"post","link":"https:\/\/nabfollower.com\/blog\/implementing-automated-end-to-end-testing-leveraging-your-cicd-with-your-cloud-development-kit-app-30hl\/","title":{"rendered":"\u0627\u062c\u0631\u0627\u06cc \u0622\u0632\u0645\u0627\u06cc\u0634 \u062e\u0648\u062f\u06a9\u0627\u0631 \u067e\u0627\u06cc\u0627\u0646 \u0628\u0647 \u067e\u0627\u06cc\u0627\u0646: \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0628\u0631\u0646\u0627\u0645\u0647 CI\/CD \u062e\u0648\u062f \u0628\u0627 \u0628\u0631\u0646\u0627\u0645\u0647 Cloud Development Clit (CDK)"},"content":{"rendered":"<div data-article-id=\"2334519\" id=\"article-body\">\n<p>\u0645\u0646 \u0627\u062e\u06cc\u0631\u0627\u064b \u067e\u0631\u0648\u0698\u0647 \u062c\u062f\u06cc\u062f\u06cc \u0631\u0627 \u0628\u0627 \u0645\u062d\u0648\u0631\u06cc\u062a \u0645\u062f\u06cc\u0631\u06cc\u062a \u0648\u0631\u0648\u062f\u06cc \u062e\u0648\u062f \u0622\u063a\u0627\u0632 \u06a9\u0631\u062f\u0645. \u0645\u0646 \u0628\u0631\u0627\u06cc \u06cc\u06a9 \u06a9\u0627\u0631\u06af\u0632\u0627\u0631 \u0628\u06cc\u0645\u0647 \u0622\u0644\u0645\u0627\u0646\u06cc \u06a9\u0627\u0631 \u0645\u06cc \u06a9\u0646\u0645 \u06a9\u0647 \u0647\u062f\u0641 \u0622\u0646 \u0645\u062f\u0631\u0646 \u0633\u0627\u0632\u06cc \u0631\u0633\u06cc\u062f\u06af\u06cc \u0628\u0647 \u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u0641\u06cc\u0632\u06cc\u06a9\u06cc \u0627\u0633\u062a. \u0645\u062a\u0623\u0633\u0641\u0627\u0646\u0647 \u060c \u062f\u0631 \u0628\u062e\u0634 \u0628\u06cc\u0645\u0647 \u0622\u0644\u0645\u0627\u0646 \u060c \u0645\u0627 \u0646\u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u0645 \u0627\u0632 API \u06cc\u0627 \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u0647\u0627\u06cc \u0641\u0646\u06cc \u0645\u0634\u0627\u0628\u0647 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u0645. \u062f\u0631\u0639\u0648\u0636 \u060c \u0645\u062f\u06cc\u0631\u0627\u0646 \u062d\u0633\u0627\u0628 \u0645\u0627 \u0628\u0627 \u062e\u0648\u0627\u0646\u062f\u0646 \u0622\u0646\u0647\u0627 \u060c \u0627\u0633\u062a\u062e\u0631\u0627\u062c \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0648 \u062f\u0631 \u0646\u0647\u0627\u06cc\u062a \u0648\u0627\u0631\u062f \u06a9\u0631\u062f\u0646 \u06a9\u0644\u06cc\u0647 \u062c\u0632\u0626\u06cc\u0627\u062a \u0645\u0631\u0628\u0648\u0637\u0647 \u062f\u0631 CRM \u0645\u0627 \u0628\u0627 \u0646\u0627\u0645\u0647 \u0647\u0627 \u0633\u0631 \u0648 \u06a9\u0627\u0631 \u062f\u0627\u0631\u0646\u062f.<\/p>\n<p>\u062d\u062c\u0645 \u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u0641\u06cc\u0632\u06cc\u06a9\u06cc \u06a9\u0647 \u0645\u0646 \u0628\u0647 \u0622\u0646\u0647\u0627 \u0627\u0634\u0627\u0631\u0647 \u0645\u06cc \u06a9\u0646\u0645 \u062a\u0642\u0631\u06cc\u0628\u0627\u064b 8\u060c500 \u0635\u0641\u062d\u0647 \u062f\u0631 \u0645\u0627\u0647 \u0627\u0633\u062a. \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u060c \u0627\u0637\u0645\u06cc\u0646\u0627\u0646 \u0627\u0632 \u06a9\u06cc\u0641\u06cc\u062a \u0645\u0639\u0645\u0627\u0631\u06cc \u0645\u0628\u062a\u0646\u06cc \u0628\u0631 \u0631\u0648\u06cc\u062f\u0627\u062f \u0645\u0627 \u0628\u0633\u06cc\u0627\u0631 \u0645\u0647\u0645 \u0627\u0633\u062a. \u062f\u0631 \u0627\u06cc\u0646 \u0645\u0642\u0627\u0644\u0647 \u060c \u0645\u0646 \u0646\u0634\u0627\u0646 \u062e\u0648\u0627\u0647\u0645 \u062f\u0627\u062f \u06a9\u0647 \u0686\u06af\u0648\u0646\u0647 \u0645\u0627 \u06cc\u06a9 \u0631\u0648\u06cc\u06a9\u0631\u062f \u0622\u0632\u0645\u0627\u06cc\u0634 \u067e\u0627\u06cc\u0627\u0646 (E2E) \u0631\u0627 \u062f\u0631 \u062e\u0637 \u0644\u0648\u0644\u0647 CI\/CD \u062e\u0648\u062f \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u06a9\u06cc\u062a \u062a\u0648\u0633\u0639\u0647 \u0627\u0628\u0631 (CDK) \u0628\u0631\u0627\u06cc \u0627\u06cc\u062c\u0627\u062f \u0632\u06cc\u0631\u0633\u0627\u062e\u062a \u0647\u0627 \u0627\u062c\u0631\u0627 \u06a9\u0631\u062f\u06cc\u0645.<\/p>\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_84 counter-hierarchy ez-toc-counter-rtl ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">\u0641\u0647\u0631\u0633\u062a \u0645\u0637\u0627\u0644\u0628<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/nabfollower.com\/blog\/implementing-automated-end-to-end-testing-leveraging-your-cicd-with-your-cloud-development-kit-app-30hl\/#%D9%85%D8%B9%D9%85%D8%A7%D8%B1%DB%8C\" >\u0645\u0639\u0645\u0627\u0631\u06cc<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/nabfollower.com\/blog\/implementing-automated-end-to-end-testing-leveraging-your-cicd-with-your-cloud-development-kit-app-30hl\/#%D8%A7%D8%AC%D8%B1%D8%A7%DB%8C_%DB%8C%DA%A9_%D8%A7%D8%B3%D8%AA%D8%B1%D8%A7%D8%AA%DA%98%DB%8C_%D8%A2%D8%B2%D9%85%D9%88%D9%86_%D8%A2%D8%B2%D9%85%D8%A7%DB%8C%D8%B4%D8%A7%D8%AA_%D8%A2%D8%B2%D9%85%D8%A7%DB%8C%D8%B4%DB%8C_E2E\" >\u0627\u062c\u0631\u0627\u06cc \u06cc\u06a9 \u0627\u0633\u062a\u0631\u0627\u062a\u0698\u06cc \u0622\u0632\u0645\u0648\u0646: \u0622\u0632\u0645\u0627\u06cc\u0634\u0627\u062a \u0622\u0632\u0645\u0627\u06cc\u0634\u06cc E2E<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/nabfollower.com\/blog\/implementing-automated-end-to-end-testing-leveraging-your-cicd-with-your-cloud-development-kit-app-30hl\/#%D9%BE%DB%8C%D8%B4_%D9%86%DB%8C%D8%A7%D8%B2%D9%87%D8%A7%DB%8C_%D8%A7%DB%8C%D9%86_%D8%B1%D9%88%DB%8C%DA%A9%D8%B1%D8%AF\" >\u067e\u06cc\u0634 \u0646\u06cc\u0627\u0632\u0647\u0627\u06cc \u0627\u06cc\u0646 \u0631\u0648\u06cc\u06a9\u0631\u062f<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/nabfollower.com\/blog\/implementing-automated-end-to-end-testing-leveraging-your-cicd-with-your-cloud-development-kit-app-30hl\/#%D8%A8%D8%AD%D8%AB_%D8%AF%D8%B1_%D9%85%D9%88%D8%B1%D8%AF_%D8%A7%DB%8C%D9%86_%D8%B1%D9%88%DB%8C%DA%A9%D8%B1%D8%AF\" >\u0628\u062d\u062b \u062f\u0631 \u0645\u0648\u0631\u062f \u0627\u06cc\u0646 \u0631\u0648\u06cc\u06a9\u0631\u062f<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/nabfollower.com\/blog\/implementing-automated-end-to-end-testing-leveraging-your-cicd-with-your-cloud-development-kit-app-30hl\/#%D8%A7%D8%AC%D8%B1%D8%A7%DB%8C_%D9%81%DB%8C%D9%84%D9%85%D9%86%D8%A7%D9%85%D9%87\" >\u0627\u062c\u0631\u0627\u06cc \u0641\u06cc\u0644\u0645\u0646\u0627\u0645\u0647<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/nabfollower.com\/blog\/implementing-automated-end-to-end-testing-leveraging-your-cicd-with-your-cloud-development-kit-app-30hl\/#%D8%A7%D9%81%DA%A9%D8%A7%D8%B1_%D9%86%D9%87%D8%A7%DB%8C%DB%8C\" >\u0627\u0641\u06a9\u0627\u0631 \u0646\u0647\u0627\u06cc\u06cc<\/a><\/li><\/ul><\/nav><\/div>\n<h2><span class=\"ez-toc-section\" id=\"%D9%85%D8%B9%D9%85%D8%A7%D8%B1%DB%8C\"><\/span>\n<p>  \u0645\u0639\u0645\u0627\u0631\u06cc<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0645\u0646 \u0648\u0642\u062a \u0632\u06cc\u0627\u062f\u06cc \u0631\u0627 \u0628\u0631\u0627\u06cc \u0628\u062d\u062b \u062f\u0631 \u0645\u0648\u0631\u062f \u0645\u0639\u0645\u0627\u0631\u06cc \u0646\u0645\u06cc \u06af\u0630\u0631\u0627\u0646\u0645 \u060c \u0632\u06cc\u0631\u0627 \u0645\u0645\u06a9\u0646 \u0627\u0633\u062a \u062f\u0631 \u0622\u06cc\u0646\u062f\u0647 \u067e\u0633\u062a \u0648\u0628\u0644\u0627\u06af \u062f\u06cc\u06af\u0631\u06cc \u062f\u0631 \u0645\u0648\u0631\u062f \u0627\u06cc\u0646 \u0645\u0648\u0631\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0628\u0646\u0648\u06cc\u0633\u0645. \u0628\u0627 \u0627\u06cc\u0646 \u062d\u0627\u0644 \u060c \u0645\u0646 \u062d\u062f\u0627\u0642\u0644 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0644\u0627\u0632\u0645 \u0631\u0627 \u0628\u0631\u0627\u06cc \u0627\u0631\u0627\u0626\u0647 \u0633\u0631\u0646\u062e \u0628\u0647 \u0634\u0645\u0627 \u0627\u0631\u0627\u0626\u0647 \u0645\u06cc \u062f\u0647\u0645. \u062f\u0631 \u0627\u0635\u0644 \u060c \u0634\u06a9\u0644 1 \u0647\u0645\u0647 \u0686\u06cc\u0632 \u0631\u0627 \u0646\u0634\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f. \u0645\u0627 \u06cc\u06a9 \u0627\u0633\u06a9\u0646\u0631 \u067e\u06cc\u0634 \u0641\u0631\u0636 \u062f\u0627\u0631\u06cc\u0645 \u06a9\u0647 \u062a\u0645\u0627\u0645 \u0627\u0633\u06a9\u0646 \u0647\u0627 \u0631\u0627 \u0628\u0647 \u0633\u0631\u0648\u06cc\u0633 \u0627\u06cc\u0645\u06cc\u0644 \u0633\u0627\u062f\u0647 (SES) \u0645\u0646\u062a\u0642\u0644 \u0645\u06cc \u06a9\u0646\u062f. \u0647\u0631 \u0646\u0627\u0645\u0647 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0627\u06cc\u0645\u06cc\u0644 \u0628\u0631\u0627\u06cc SES \u0631\u0641\u062a\u0627\u0631 \u0645\u06cc \u0634\u0648\u062f. SES \u062a\u0645\u0627\u0645 \u0627\u06cc\u0645\u06cc\u0644 \u0647\u0627 \u0631\u0627 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0627\u0634\u06cc\u0627\u0621 MIME \u062f\u0631 S3 \u0630\u062e\u06cc\u0631\u0647 \u0645\u06cc \u06a9\u0646\u062f \u060c \u0648 \u06cc\u06a9 \u0639\u0645\u0644\u06a9\u0631\u062f Lambda \u067e\u06cc\u0648\u0633\u062a PDF \u0631\u0627 \u0628\u0627\u0632\u06cc\u0627\u0628\u06cc \u0645\u06cc \u06a9\u0646\u062f \u060c \u0645\u062a\u0639\u0627\u0642\u0628\u0627\u064b \u062a\u0648\u0627\u0628\u0639 \u0645\u0631\u062d\u0644\u0647 AWS \u0631\u0627 \u0628\u0631\u0627\u06cc \u067e\u0631\u062f\u0627\u0632\u0634 PDF \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u06a9\u0646\u062f. \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 AWS Textract \u060c \u0645\u0627 \u0646\u062a\u0627\u06cc\u062c OCR \u0631\u0627 \u0628\u062f\u0633\u062a \u0645\u06cc \u0622\u0648\u0631\u06cc\u0645 \u0648 \u0627\u0632 \u0622\u0645\u0627\u0632\u0648\u0646 \u0627\u0632 \u0628\u0633\u062a\u0631 \u0622\u0645\u0627\u0632\u0648\u0646 \u0628\u0631\u0627\u06cc \u0627\u0646\u062c\u0627\u0645 \u067e\u0631\u062f\u0627\u0632\u0634 \u0627\u0633\u0646\u0627\u062f \u0647\u0648\u0634\u0645\u0646\u062f (IDP) \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u06cc\u0645. \u0627\u0632 \u0627\u06cc\u0646 IDP \u060c \u0645\u0627 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u062e\u0627\u0635\u06cc \u0631\u0627 \u0628\u0631\u0627\u06cc \u0627\u06cc\u062c\u0627\u062f \u0646\u0627\u0645 \u062c\u062f\u06cc\u062f (\u0645\u06cc \u062f\u0627\u0646\u0645 \u060c \u0645\u062f\u0631\u0633\u0647 \u0642\u062f\u06cc\u0645\u06cc!) \u0627\u0633\u062a\u062e\u0631\u0627\u062c \u0645\u06cc \u06a9\u0646\u06cc\u0645. \u0633\u0631\u0627\u0646\u062c\u0627\u0645 \u060c \u06cc\u06a9 \u062a\u0627\u0628\u0639 Lambda PDF \u067e\u0631\u062f\u0627\u0632\u0634 \u0634\u062f\u0647 \u0631\u0627 \u0628\u0647 \u0633\u0647\u0645 \u0641\u0627\u06cc\u0644 SMB \u0633\u0648\u0642 \u0645\u06cc \u062f\u0647\u062f.<\/p>\n<p><\/p>\n<h2><span class=\"ez-toc-section\" id=\"%D8%A7%D8%AC%D8%B1%D8%A7%DB%8C_%DB%8C%DA%A9_%D8%A7%D8%B3%D8%AA%D8%B1%D8%A7%D8%AA%DA%98%DB%8C_%D8%A2%D8%B2%D9%85%D9%88%D9%86_%D8%A2%D8%B2%D9%85%D8%A7%DB%8C%D8%B4%D8%A7%D8%AA_%D8%A2%D8%B2%D9%85%D8%A7%DB%8C%D8%B4%DB%8C_E2E\"><\/span>\n<p>  \u0627\u062c\u0631\u0627\u06cc \u06cc\u06a9 \u0627\u0633\u062a\u0631\u0627\u062a\u0698\u06cc \u0622\u0632\u0645\u0648\u0646: \u0622\u0632\u0645\u0627\u06cc\u0634\u0627\u062a \u0622\u0632\u0645\u0627\u06cc\u0634\u06cc E2E<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0645\u0646 \u062a\u0645\u0627\u0645 \u067e\u0633\u062a \u0647\u0627\u06cc \u0648\u0628\u0644\u0627\u06af \u0631\u0627 \u062f\u0631 \u0645\u0648\u0631\u062f \u0637\u0631\u0627\u062d\u06cc \u0645\u0648\u0627\u0631\u062f \u0622\u0632\u0645\u0648\u0646 \u0645\u062c\u062f\u062f\u0627\u064b \u062a\u06a9\u0631\u0627\u0631 \u0646\u0645\u06cc \u06a9\u0646\u0645 \u060c \u0627\u0645\u0627 \u062f\u0648 \u062c\u0646\u0628\u0647 \u0627\u0633\u0627\u0633\u06cc \u0631\u0627 \u0628\u0631\u062c\u0633\u062a\u0647 \u062e\u0648\u0627\u0647\u0645 \u06a9\u0631\u062f. \u0627\u0648\u0644 \u060c \u0645\u0627 \u0628\u0627\u06cc\u062f \u06cc\u06a9 \u0633\u0644\u0633\u0644\u0647 \u0645\u0631\u0627\u062a\u0628 \u0622\u0632\u0645\u0648\u0646 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u0645. \u062a\u0633\u062a \u0647\u0627\u06cc \u0648\u0627\u062d\u062f \u0644\u0627\u06cc\u0647 \u067e\u0627\u06cc\u0647 \u0631\u0627 \u062a\u0634\u06a9\u06cc\u0644 \u0645\u06cc \u062f\u0647\u0646\u062f \u060c \u062a\u0633\u062a \u0647\u0627\u06cc \u0627\u062f\u063a\u0627\u0645 \u0644\u0627\u06cc\u0647 \u0645\u06cc\u0627\u0646\u06cc \u0647\u0633\u062a\u0646\u062f \u060c \u062f\u0631 \u062d\u0627\u0644\u06cc \u06a9\u0647 \u062a\u0633\u062a \u0647\u0627\u06cc E2E \u0644\u0627\u06cc\u0647 \u0628\u0627\u0644\u0627\u06cc\u06cc \u0631\u0627 \u062f\u0631 \u0647\u0631 \u0645\u0648\u0631\u062f \u0627\u062c\u0631\u0627\u06cc \u0622\u0632\u0645\u0648\u0646 \u0646\u0634\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f. \u062a\u0633\u062a \u0647\u0627\u06cc \u0648\u0627\u062d\u062f \u0627\u0631\u0632\u06cc\u0627\u0628\u06cc \u0645\u06cc \u06a9\u0646\u0646\u062f \u06a9\u0647 \u0622\u06cc\u0627 \u06cc\u06a9 \u0648\u0631\u0648\u062f\u06cc \u062e\u0627\u0635 \u062e\u0631\u0648\u062c\u06cc \u0645\u0648\u0631\u062f \u0627\u0646\u062a\u0638\u0627\u0631 \u0631\u0627 \u0627\u0632 \u06cc\u06a9 \u0639\u0645\u0644\u06a9\u0631\u062f \u062a\u0648\u0644\u06cc\u062f \u0645\u06cc \u06a9\u0646\u062f. \u0622\u0632\u0645\u0648\u0646 \u0647\u0627\u06cc \u0627\u062f\u063a\u0627\u0645 \u0627\u0631\u0632\u06cc\u0627\u0628\u06cc \u0645\u06cc \u06a9\u0646\u0646\u062f \u06a9\u0647 \u0622\u06cc\u0627 \u06cc\u06a9 \u0645\u0624\u0644\u0641\u0647 \u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u0646\u062a\u0627\u06cc\u062c \u062d\u0627\u0635\u0644 \u0627\u0632 \u06cc\u06a9 \u0645\u0624\u0644\u0641\u0647 \u062f\u0648\u0645 \u0631\u0627 \u0627\u06cc\u062c\u0627\u062f \u0648 \u06a9\u0646\u062a\u0631\u0644 \u06a9\u0646\u062f. \u0622\u0632\u0645\u0648\u0646 \u0647\u0627\u06cc E2E \u0627\u0631\u0632\u06cc\u0627\u0628\u06cc \u0645\u06cc \u06a9\u0646\u0646\u062f \u06a9\u0647 \u0622\u06cc\u0627 \u0647\u0645\u0647 \u0645\u0624\u0644\u0641\u0647 \u0647\u0627\u06cc \u06cc\u06a9 \u0633\u06cc\u0633\u062a\u0645 \u0645\u0637\u0627\u0628\u0642 \u0622\u0646\u0686\u0647 \u062f\u0631 \u0646\u0638\u0631 \u06af\u0631\u0641\u062a\u0647 \u0634\u062f\u0647 \u0628\u0627 \u0647\u0645 \u06a9\u0627\u0631 \u0645\u06cc \u06a9\u0646\u0646\u062f \u06cc\u0627 \u062e\u06cc\u0631. \u062f\u0631 \u062d\u0627\u0644\u06cc \u06a9\u0647 \u0627\u0645\u06cc\u062f\u0648\u0627\u0631\u0645 \u0647\u0645\u0647 \u0627\u0632 \u062a\u0633\u062a \u0647\u0627\u06cc \u0648\u0627\u062d\u062f \u0628\u0631\u0627\u06cc \u062a\u0636\u0645\u06cc\u0646 \u06a9\u06cc\u0641\u06cc\u062a \u0644\u0627\u0645\u0628\u062f\u0647\u0627 \u0648 \u0633\u0627\u06cc\u0631 \u0645\u0624\u0644\u0641\u0647 \u0647\u0627\u06cc \u06a9\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u0646\u062f \u060c \u062a\u0633\u062a \u0647\u0627\u06cc \u0627\u062f\u063a\u0627\u0645 \u0648 \u062a\u0633\u062a \u0647\u0627\u06cc E2E \u0628\u0647 \u0637\u0648\u0631 \u0642\u0627\u0628\u0644 \u062a\u0648\u062c\u0647\u06cc \u067e\u06cc\u0686\u06cc\u062f\u0647 \u062a\u0631 \u0648 \u067e\u0631\u0647\u0632\u06cc\u0646\u0647 \u062a\u0631 \u0647\u0633\u062a\u0646\u062f.<\/p>\n<p>\u0628\u06cc\u0627\u06cc\u06cc\u062f \u06cc\u06a9 \u0642\u062f\u0645 \u0639\u0642\u0628 \u0628\u0631\u062f\u0627\u0631\u06cc\u0645 \u0648 \u0622\u0646\u0686\u0647 \u0631\u0627 \u06a9\u0647 \u0645\u0639\u0645\u0627\u0631\u06cc \u062a\u0648\u0635\u06cc\u0641 \u0634\u062f\u0647 \u0628\u0631\u0627\u06cc \u0631\u0648\u0634\u0646 \u0634\u062f\u0646 \u067e\u06cc\u0686\u06cc\u062f\u06af\u06cc \u0622\u0632\u0645\u0627\u06cc\u0634 E2E \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc \u062f\u0647\u062f \u060c \u062a\u062c\u0632\u06cc\u0647 \u0648 \u062a\u062d\u0644\u06cc\u0644 \u06a9\u0646\u06cc\u0645. \u0627\u0628\u062a\u062f\u0627 \u0628\u0627\u06cc\u062f \u06cc\u06a9 \u0627\u06cc\u0645\u06cc\u0644 \u067e\u0631\u062f\u0627\u0632\u0634 \u06a9\u0646\u06cc\u0645. \u062f\u0631 \u0645\u0631\u062d\u0644\u0647 \u0628\u0639\u062f \u060c \u0645\u0627 PDF \u0631\u0627 \u067e\u0631\u062f\u0627\u0632\u0634 \u0645\u06cc \u06a9\u0646\u06cc\u0645 \u060c \u0648 \u062f\u0631 \u0622\u062e\u0631 \u060c \u067e\u0631\u0648\u0646\u062f\u0647 PDF \u067e\u0631\u062f\u0627\u0632\u0634 \u0634\u062f\u0647 \u0631\u0627 \u0628\u0647 \u06cc\u06a9 \u067e\u0648\u0634\u0647 \u062e\u0627\u0635 \u062f\u0631 \u0645\u062d\u06cc\u0637 \u0627\u0628\u0631 \u062e\u0648\u062f \u0633\u0648\u0642 \u0645\u06cc \u062f\u0647\u06cc\u0645. \u0627\u0632 \u0627\u06cc\u0646 \u0627\u0646\u062a\u0632\u0627\u0639 \u060c \u062a\u0633\u062a \u0647\u0627\u06cc E2E \u0645\u0627 \u0646\u06cc\u0627\u0632 \u0628\u0647 \u0634\u0628\u06cc\u0647 \u0633\u0627\u0632\u06cc \u0627\u0631\u0633\u0627\u0644 \u0627\u06cc\u0645\u06cc\u0644 \u0628\u0631\u0627\u06cc \u0645\u0633\u062e\u0631\u0647 \u06a9\u0631\u062f\u0646 \u0627\u0633\u06a9\u0646\u0631 \u062f\u0627\u0631\u0646\u062f. \u062b\u0627\u0646\u06cc\u0627 \u060c \u0645\u0627 \u0628\u0627\u06cc\u062f \u0648\u0642\u0627\u06cc\u0639 \u0627\u06cc\u062c\u0627\u062f \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 SES \u0631\u0627 \u0631\u062f\u06cc\u0627\u0628\u06cc \u06a9\u0646\u06cc\u0645. \u0627\u06af\u0631 \u0645\u06cc \u062e\u0648\u0627\u0647\u06cc\u062f \u0631\u0648\u06cc\u062f\u0627\u062f \u062e\u0627\u0635 \u0648 \u0639\u0645\u0644\u06a9\u0631\u062f Lambda \u0631\u0627 \u06a9\u0647 \u0634\u06cc\u0621 MIME \u0631\u0627 \u067e\u0631\u062f\u0627\u0632\u0634 \u0645\u06cc \u06a9\u0646\u062f \u060c \u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u0645\u0634\u06a9\u0644 \u0628\u0627\u0634\u062f. \u062f\u0631 \u0639\u0648\u0636 \u060c \u0645\u0646 \u0627\u0632 \u0639\u0645\u0644\u06a9\u0631\u062f \u0645\u0631\u062d\u0644\u0647 AWS \u062e\u0648\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0631\u062f\u0645. \u0644\u06cc\u0633\u062a \u0627\u0639\u062f\u0627\u0645 \u0647\u0627\u06cc \u0627\u06cc\u0646 \u0639\u0645\u0644\u06a9\u0631\u062f \u0645\u0631\u062d\u0644\u0647 \u0627\u06cc\u062f\u0647 \u062e\u0648\u0628\u06cc \u0628\u0647 \u0646\u0638\u0631 \u0645\u06cc \u0631\u0633\u06cc\u062f. \u0633\u0631\u0627\u0646\u062c\u0627\u0645 \u060c \u0645\u0646 \u0645\u06cc \u062a\u0648\u0627\u0646\u0645 \u0628\u0631\u0627\u06cc \u062c\u0633\u062a\u062c\u0648\u06cc \u067e\u0631\u0648\u0646\u062f\u0647 \u0622\u0632\u0645\u0627\u06cc\u0634\u06cc PDF \u060c \u0628\u0647 \u0627\u0634\u062a\u0631\u0627\u06a9 \u06af\u0630\u0627\u0631\u06cc \u067e\u0631\u0648\u0646\u062f\u0647 SMB \u062e\u0648\u062f \u0646\u06af\u0627\u0647 \u06a9\u0646\u0645.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"%D9%BE%DB%8C%D8%B4_%D9%86%DB%8C%D8%A7%D8%B2%D9%87%D8%A7%DB%8C_%D8%A7%DB%8C%D9%86_%D8%B1%D9%88%DB%8C%DA%A9%D8%B1%D8%AF\"><\/span>\n<p>  \u067e\u06cc\u0634 \u0646\u06cc\u0627\u0632\u0647\u0627\u06cc \u0627\u06cc\u0646 \u0631\u0648\u06cc\u06a9\u0631\u062f<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0634\u0645\u0627 \u0645\u0645\u06a9\u0646 \u0627\u0633\u062a \u0642\u0628\u0644\u0627\u064b \u0641\u0631\u0636\u06cc\u0627\u062a\u06cc \u0631\u0627 \u06a9\u0647 \u0628\u0627\u06cc\u062f \u0628\u0631\u0627\u06cc \u0622\u0646\u0647\u0627 \u0645\u0644\u0627\u0642\u0627\u062a \u06a9\u0646\u06cc\u0645 \u062f\u0631 \u0646\u0638\u0631 \u0628\u06af\u06cc\u0631\u06cc\u062f \u060c \u062f\u0631\u0633\u062a \u0627\u0633\u062a\u061f \u0627\u06af\u0631 \u062e\u0637 \u0644\u0648\u0644\u0647 CI\/CD \u0634\u0645\u0627 \u062f\u0631 \u06cc\u06a9 \u0628\u062e\u0634 \u0634\u0628\u06a9\u0647 \u0627\u06cc \u0627\u062c\u0631\u0627 \u0646\u0645\u06cc \u0634\u0648\u062f \u06a9\u0647 \u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u0628\u0647 \u0627\u0634\u062a\u0631\u0627\u06a9 \u067e\u0631\u0648\u0646\u062f\u0647 SMB \u0645\u0646\u062a\u0642\u0644 \u0634\u0648\u062f \u060c \u0634\u0645\u0627 \u0627\u0632 \u0634\u0627\u0646\u0633 \u062e\u0627\u0631\u062c \u0645\u06cc \u0634\u0648\u06cc\u062f. \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u060c \u0627\u062f\u063a\u0627\u0645 \u0634\u0628\u06a9\u0647 \u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u0628\u0633\u06cc\u0627\u0631 \u0645\u0647\u0645 \u0628\u0627\u0634\u062f. \u0639\u0644\u0627\u0648\u0647 \u0628\u0631 \u0627\u06cc\u0646 \u060c \u062f\u0631 \u0646\u0638\u0631 \u06af\u0631\u0641\u062a\u0646 \u0645\u062c\u0648\u0632\u0647\u0627\u06cc IAM \u0636\u0631\u0648\u0631\u06cc \u0627\u0633\u062a. \u0645\u0627 \u0627\u0632 \u062f\u0633\u062a\u0648\u0631 cdk bootstrap \u0628\u0631\u0627\u06cc \u0627\u06cc\u062c\u0627\u062f \u06a9\u0644\u06cc\u0647 \u0645\u0624\u0644\u0641\u0647 \u0647\u0627\u06cc \u0645\u0631\u0628\u0648\u0637\u0647 \u0628\u0631\u0627\u06cc \u0627\u0633\u062a\u0642\u0631\u0627\u0631 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u06cc\u0645. \u0628\u0627 \u0627\u06cc\u0646 \u062d\u0627\u0644 \u060c \u0627\u06cc\u0646 \u0645\u062c\u0645\u0648\u0639\u0647 \u0627\u0632 \u0645\u0646\u0627\u0628\u0639 \u0627\u062c\u0627\u0632\u0647 \u0644\u06cc\u0633\u062a \u0648 \u062a\u0648\u0635\u06cc\u0641 \u0645\u0646\u0627\u0628\u0639 \u063a\u06cc\u0631 \u0645\u0631\u062a\u0628\u0637 \u0628\u0627 CDK \u0631\u0627 \u0646\u0645\u06cc \u062f\u0647\u062f. \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u060c \u0628\u062e\u0634\u06cc \u0627\u0632 \u0628\u0631\u0646\u0627\u0645\u0647 \u0634\u0645\u0627 \u0628\u0627\u06cc\u062f \u06cc\u06a9 \u0646\u0642\u0634 IAM \u0628\u0627\u0634\u062f \u06a9\u0647 \u062a\u0648\u0633\u0637 \u0633\u0631\u0648\u0631 CI\/CD \u0634\u0645\u0627 \u0642\u0627\u0628\u0644 \u0641\u0631\u0636 \u0627\u0633\u062a. \u062f\u0631 \u0646\u062a\u06cc\u062c\u0647 \u060c \u0634\u0645\u0627 \u0628\u0627\u06cc\u062f \u0645\u062c\u0645\u0648\u0639\u0647 CDK Bootstrap \u0631\u0627 \u062a\u063a\u06cc\u06cc\u0631 \u062f\u0647\u06cc\u062f \u062a\u0627 \u0628\u0647 \u0634\u0645\u0627 \u0627\u0645\u06a9\u0627\u0646 \u062f\u0647\u062f \u0646\u0642\u0634 \u062c\u062f\u06cc\u062f IAM \u062e\u0648\u062f \u0631\u0627 \u0628\u0631\u0627\u06cc \u0627\u0647\u062f\u0627\u0641 \u0622\u0632\u0645\u0627\u06cc\u0634 \u0641\u0631\u0636 \u06a9\u0646\u06cc\u062f. <\/p>\n<p>\u0633\u0631\u0627\u0646\u062c\u0627\u0645 \u060c \u0627\u0632 \u0622\u0646\u062c\u0627 \u06a9\u0647 CDK \u0627\u0632 \u0646\u0627\u0645\u06af\u0630\u0627\u0631\u06cc \u0645\u0646\u0627\u0628\u0639 \u067e\u0648\u06cc\u0627 \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u0645\u06cc \u06a9\u0646\u062f \u060c \u06a9\u0647 \u0634\u0645\u0627 \u0628\u0627\u06cc\u062f \u0627\u0632 \u0622\u0646 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f \u060c \u0645\u0627 \u0646\u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u0645 \u0628\u0647 \u0637\u0631\u062d \u0647\u0627\u06cc \u0646\u0627\u0645\u06af\u0630\u0627\u0631\u06cc \u0642\u0637\u0639\u06cc \u0627\u0639\u062a\u0645\u0627\u062f \u06a9\u0646\u06cc\u0645. \u0631\u0627\u0647 \u062d\u0644 \u062f\u0631 \u0645\u0639\u0631\u0636 \u0646\u0645\u0627\u06cc\u0634 \u0627\u06cc\u0645\u06cc\u0644 \u060c \u0639\u0645\u0644\u06a9\u0631\u062f \u0645\u0631\u062d\u0644\u0647 \u0648 \u0646\u0642\u0634 IAM \u0628\u0631\u0627\u06cc \u0622\u0632\u0645\u0627\u06cc\u0634 \u0627\u0632 \u0637\u0631\u06cc\u0642 \u062e\u0631\u0648\u062c\u06cc \u0647\u0627\u06cc CloudFormation \u0627\u0633\u062a. \u0647\u0631 \u062e\u0631\u0648\u062c\u06cc \u062f\u0627\u0631\u0627\u06cc \u0646\u0627\u0645 \u0635\u0627\u062f\u0631\u0627\u062a\u06cc \u0642\u0627\u0628\u0644 \u062e\u0648\u0627\u0646\u062f\u0646 \u0648 \u0645\u062f\u0627\u0648\u0645 \u062e\u0648\u0627\u0647\u062f \u0628\u0648\u062f \u0648 \u0628\u0647 \u0645\u0627 \u0627\u0645\u06a9\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f \u0646\u0627\u0645 \u0645\u0646\u0627\u0628\u0639 \u067e\u0648\u06cc\u0627 \u0631\u0627 \u0628\u0627\u0632\u06cc\u0627\u0628\u06cc \u06a9\u0646\u06cc\u0645.<\/p>\n<p>\u0633\u0631\u0627\u0646\u062c\u0627\u0645 \u060c \u0645\u0627 \u0628\u0631\u0627\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0647\u0631 \u062f\u0648 \u060c \u0628\u0627\u06cc\u062f \u0627\u0634\u062e\u0627\u0635 \u0627\u06cc\u0645\u06cc\u0644 \u0648 \u062f\u0627\u0645\u0646\u0647 \u062e\u0648\u062f \u0631\u0627 \u062f\u0631 SES \u062a\u0623\u06cc\u06cc\u062f \u06a9\u0646\u06cc\u0645. \u0628\u0631\u0627\u06cc \u0627\u06cc\u0645\u06cc\u0644 \u0647\u0627 \u060c \u0628\u0627\u06cc\u062f \u0631\u0648\u06cc \u06cc\u06a9 \u067e\u06cc\u0648\u0646\u062f \u06a9\u0644\u06cc\u06a9 \u06a9\u0646\u06cc\u062f \u0648 \u0628\u0631\u0627\u06cc \u062f\u0627\u0645\u0646\u0647 \u0647\u0627 \u060c \u0628\u0627\u06cc\u062f \u0633\u0648\u0627\u0628\u0642 \u062e\u0648\u062f \u0631\u0627 \u0628\u0647 \u0633\u0631\u0648\u06cc\u0633 \u062f\u0627\u0645\u0646\u0647 \u062e\u0648\u062f \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u062f \u060c \u062e\u0648\u0627\u0647 \u0645\u0633\u06cc\u0631 53 \u0628\u0627\u0634\u062f \u06cc\u0627 \u06cc\u06a9 \u0627\u0631\u0627\u0626\u0647 \u062f\u0647\u0646\u062f\u0647 \u062f\u06cc\u06af\u0631.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"%D8%A8%D8%AD%D8%AB_%D8%AF%D8%B1_%D9%85%D9%88%D8%B1%D8%AF_%D8%A7%DB%8C%D9%86_%D8%B1%D9%88%DB%8C%DA%A9%D8%B1%D8%AF\"><\/span>\n<p>  \u0628\u062d\u062b \u062f\u0631 \u0645\u0648\u0631\u062f \u0627\u06cc\u0646 \u0631\u0648\u06cc\u06a9\u0631\u062f<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0628\u06cc\u0627\u06cc\u06cc\u062f \u062f\u0631 \u0645\u0648\u0631\u062f \u0646\u06a9\u0627\u062a \u0642\u0628\u0644\u06cc \u0628\u062d\u062b \u06a9\u0646\u06cc\u0645. \u0627\u0648\u0644 \u060c \u0627\u0633\u06a9\u0646\u0631 \u0628\u0647 \u062a\u0635\u0648\u06cc\u0631 \u06a9\u0634\u06cc\u062f\u0647 \u0634\u062f\u0647 \u062f\u0631 \u0634\u06a9\u0644 \u062f\u0631 \u0627\u06cc\u0646 \u0633\u0646\u0627\u0631\u06cc\u0648\u06cc \u0622\u0632\u0645\u0627\u06cc\u0634 E2E \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0646\u0645\u06cc \u0634\u0648\u062f. \u0646\u06a9\u062a\u0647 \u0639\u0627\u062f\u0644\u0627\u0646\u0647 \u0633\u0648\u0627\u0644 \u0645\u0646 \u0627\u06cc\u0646 \u0627\u0633\u062a: \u0622\u06cc\u0627 \u062a\u0644\u0627\u0634 \u0628\u0631\u0627\u06cc \u0627\u062c\u0631\u0627\u06cc \u062e\u0648\u062f \u0627\u0633\u06a9\u0646\u0631 \u0648\u0627\u0642\u0639\u0627\u064b \u0627\u0631\u0632\u06cc\u0627\u0628\u06cc \u0645\u0639\u0645\u0627\u0631\u06cc AWS \u0631\u0627 \u062a\u0648\u062c\u06cc\u0647 \u0645\u06cc \u06a9\u0646\u062f\u061f \u0627\u0633\u06a9\u0646\u0631 \u0645\u0645\u06a9\u0646 \u0627\u0633\u062a \u0628\u0647 \u0637\u0648\u0631 \u062c\u062f\u0627\u06af\u0627\u0646\u0647 \u0627\u0632 \u0645\u062d\u06cc\u0637 \u0634\u0645\u0627 \u0648\u0627\u0642\u0639 \u0634\u0648\u062f. \u062f\u0631 \u0646\u0647\u0627\u06cc\u062a \u060c \u0634\u0645\u0627 \u062f\u0631\u0633\u062a \u0647\u0633\u062a\u06cc\u062f \u061b \u0627\u06cc\u0646 \u06a9\u0627\u0645\u0644\u0627\u064b E2E \u0646\u06cc\u0633\u062a \u060c \u0627\u0645\u0627 \u0645\u0627 \u06a9\u0627\u0645\u0644\u0627\u064b \u0646\u0632\u062f\u06cc\u06a9 \u0647\u0633\u062a\u06cc\u0645.<\/p>\n<p>\u0646\u06a9\u062a\u0647 \u062f\u06cc\u06af\u0631\u06cc \u06a9\u0647 \u0645\u06cc \u062e\u0648\u0627\u0647\u0645 \u0628\u0647 \u0622\u0646 \u0627\u0634\u0627\u0631\u0647 \u06a9\u0646\u0645 \u0627\u06cc\u0646 \u0627\u0633\u062a \u06a9\u0647 \u0627\u06cc\u0646 \u0622\u0632\u0645\u0648\u0646 E2E \u0627\u0632 \u0645\u0648\u0627\u0631\u062f \u062a\u0633\u062a \u0639\u0627\u0644\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u062f. \u0627\u06cc\u0646 \u0628\u062f\u0627\u0646 \u0645\u0639\u0646\u06cc \u0627\u0633\u062a \u06a9\u0647 \u0645\u0627 \u0627\u0632 PDF \u0647\u0627\u06cc\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u06cc\u0645 \u06a9\u0647 \u0645\u06cc \u062a\u0648\u0627\u0646\u0646\u062f \u0628\u0647 \u0637\u0648\u0631 \u0645\u0624\u062b\u0631 \u062a\u0648\u0633\u0637 Textract \u0648 Bedrock \u0627\u0631\u0632\u06cc\u0627\u0628\u06cc \u0648 \u067e\u0631\u062f\u0627\u0632\u0634 \u0634\u0648\u0646\u062f \u060c \u0648 \u0627\u0637\u0645\u06cc\u0646\u0627\u0646 \u062d\u0627\u0635\u0644 \u0645\u06cc \u06a9\u0646\u0645 \u06a9\u0647 \u0645\u06cc \u062f\u0627\u0646\u0645 \u067e\u0631\u0648\u0646\u062f\u0647 \u0646\u0647\u0627\u06cc\u06cc \u0686\u06af\u0648\u0646\u0647 \u0628\u0647 \u0646\u0638\u0631 \u0645\u06cc \u0631\u0633\u062f. \u0627\u0632 \u062f\u06cc\u062f\u06af\u0627\u0647 \u0645\u0646 \u060c \u0634\u0645\u0627 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0627\u0632 \u0627\u06cc\u0646 \u0627\u0645\u0631 \u0646\u06cc\u0632 \u0627\u0646\u062a\u0642\u0627\u062f \u06a9\u0646\u06cc\u062f \u060c \u0627\u0645\u0627 \u062c\u0648\u0647\u0631 \u0622\u0632\u0645\u0627\u06cc\u0634 E2E \u062f\u0631 \u0645\u0648\u0631\u062f \u0627\u0631\u0632\u06cc\u0627\u0628\u06cc \u06a9\u06cc\u0641\u06cc\u062a \u0627\u0632 \u0646\u0638\u0631 \u062d\u062c\u0645 \u0632\u06cc\u0627\u062f \u0646\u06cc\u0633\u062a. \u0627\u06cc\u0646 \u062f\u0631 \u0645\u0648\u0631\u062f \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u0635\u062d\u06cc\u062d \u0633\u06cc\u0633\u062a\u0645 \u0628\u0631\u0627\u06cc \u062f\u0633\u062a\u06cc\u0627\u0628\u06cc \u0628\u0647 \u0646\u062a\u0627\u06cc\u062c \u0642\u0627\u0628\u0644 \u067e\u06cc\u0634 \u0628\u06cc\u0646\u06cc \u0627\u0633\u062a. \u0639\u0645\u0644\u06a9\u0631\u062f \u06a9\u0644\u06cc \u0633\u06cc\u0633\u062a\u0645 \u062f\u0631 \u062a\u0648\u0644\u06cc\u062f \u06a9\u0646\u062a\u0631\u0644 \u0645\u06cc \u0634\u0648\u062f.<\/p>\n<p>\u0645\u0646 \u0647\u0645\u0686\u0646\u06cc\u0646 \u0645\u06cc \u0634\u0646\u0648\u0645 \u06a9\u0647 \u0634\u0645\u0627 \u0645\u06cc \u06af\u0648\u06cc\u06cc\u062f \u0642\u0633\u0645\u062a \u0647\u0627\u06cc \u062e\u0627\u0635\u06cc \u0627\u0632 \u0645\u0639\u0645\u0627\u0631\u06cc \u062f\u0631 \u0627\u0633\u062a\u0642\u0631\u0627\u0631 \u0627\u0648\u0644\u06cc\u0647 \u0645\u0627\u0646\u0646\u062f \u0645\u0648\u062c\u0648\u062f\u0627\u062a SES \u06a9\u0627\u0645\u0644\u0627\u064b \u062e\u0648\u062f\u06a9\u0627\u0631 \u0646\u06cc\u0633\u062a\u0646\u062f. \u0634\u0645\u0627 \u06a9\u0627\u0645\u0644\u0627\u064b \u062f\u0631\u0633\u062a \u0647\u0633\u062a\u06cc\u062f. \u062f\u0631 SES \u060c \u0645\u0627 \u0645\u0646\u0627\u0628\u0639 \u0645\u0633\u062a\u0642\u0644\u06cc \u0645\u0627\u0646\u0646\u062f \u0627\u06cc\u0646 \u0642\u0627\u0639\u062f\u0647 \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u06a9\u0646\u06cc\u0645 \u062a\u0627 \u0627\u06cc\u0645\u06cc\u0644 \u0647\u0627\u06cc \u0648\u0631\u0648\u062f\u06cc \u0631\u0627 \u0628\u0647 S3 \u0648 Lambda \u0627\u0631\u0633\u0627\u0644 \u06a9\u0646\u06cc\u0645 \u060c \u0648 \u0647\u0645\u0686\u0646\u06cc\u0646 \u0645\u0646\u0627\u0628\u0639 \u0648\u0627\u0628\u0633\u062a\u0647 \u0645\u0627\u0646\u0646\u062f \u062f\u0627\u0645\u0646\u0647 \u0648 \u0627\u0634\u062e\u0627\u0635 \u0627\u06cc\u0645\u06cc\u0644 \u060c \u06a9\u0647 \u0628\u0627\u06cc\u062f \u062a\u0623\u06cc\u06cc\u062f \u06cc\u0627 \u0627\u06cc\u062c\u0627\u062f \u0648 \u0628\u0627\u0632\u06cc\u0627\u0628\u06cc \u0634\u0648\u0646\u062f \u060c \u0645\u0627\u0646\u0646\u062f \u0627\u0639\u062a\u0628\u0627\u0631 SMTP. \u06af\u0641\u062a\u0647 \u0645\u06cc \u0634\u0648\u062f \u060c \u062a\u0644\u0627\u0634 \u062f\u0633\u062a\u06cc \u062f\u0631\u06af\u06cc\u0631 \u0627\u0633\u062a \u060c \u0627\u0645\u0627 \u0627\u06cc\u0646 \u06cc\u06a9 \u06a9\u0627\u0631 \u06cc\u06a9 \u0628\u0627\u0631 \u0627\u0633\u062a. \u0647\u0645\u0627\u0646\u0637\u0648\u0631 \u06a9\u0647 \u0642\u0628\u0644\u0627\u064b \u0646\u06cc\u0632 \u0627\u0634\u0627\u0631\u0647 \u06a9\u0631\u062f\u0645 \u060c \u062d\u0631\u06a9\u062a \u0628\u0647 \u0633\u0645\u062a \u0622\u0632\u0645\u0627\u06cc\u0634 E2E \u062f\u0631 \u0645\u0642\u0627\u06cc\u0633\u0647 \u0628\u0627 \u0622\u0632\u0645\u0627\u06cc\u0634 \u0648\u0627\u062d\u062f \u060c \u0646\u06cc\u0627\u0632 \u0628\u0647 \u0632\u0645\u0627\u0646 \u0648 \u0645\u062f\u0627\u062e\u0644\u0647 \u062f\u0633\u062a\u06cc \u0628\u06cc\u0634\u062a\u0631\u06cc \u062f\u0627\u0631\u062f.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"%D8%A7%D8%AC%D8%B1%D8%A7%DB%8C_%D9%81%DB%8C%D9%84%D9%85%D9%86%D8%A7%D9%85%D9%87\"><\/span>\n<p>  \u0627\u062c\u0631\u0627\u06cc \u0641\u06cc\u0644\u0645\u0646\u0627\u0645\u0647<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0628\u06cc\u0627\u06cc\u06cc\u062f \u0628\u0647 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u0647\u0627 \u0634\u06cc\u0631\u062c\u0647 \u0628\u0632\u0646\u06cc\u0645. \u0627\u0648\u0644 \u060c \u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u0646\u0642\u0634 IAM \u0648 \u0646\u0645\u0648\u0646\u0647 \u0627\u06cc \u0628\u0631\u0627\u06cc \u062e\u0631\u0648\u062c\u06cc CloudFormation \u0622\u0648\u0631\u062f\u0647 \u0634\u062f\u0647 \u0627\u0633\u062a:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight python\"><code><span class=\"kn\">from<\/span> <span class=\"n\">aws_cdk<\/span> <span class=\"kn\">import<\/span> <span class=\"n\">aws_iam<\/span> <span class=\"k\">as<\/span> <span class=\"n\">iam<\/span><span class=\"p\">,<\/span> <span class=\"n\">CfnOutput<\/span>\n<span class=\"kn\">from<\/span> <span class=\"n\">constructs<\/span> <span class=\"kn\">import<\/span> <span class=\"n\">Construct<\/span>\n\n<span class=\"k\">class<\/span> <span class=\"nc\">IAMRoleStack<\/span><span class=\"p\">(<\/span><span class=\"n\">Stack<\/span><span class=\"p\">):<\/span>\n    <span class=\"sh\">\"\"\"<\/span><span class=\"s\">Create the IAM deployment.<\/span><span class=\"sh\">\"\"\"<\/span>\n\n    <span class=\"k\">def<\/span> <span class=\"nf\">__init__<\/span><span class=\"p\">(<\/span>\n        <span class=\"n\">self<\/span><span class=\"p\">,<\/span>\n        <span class=\"n\">scope<\/span><span class=\"p\">:<\/span> <span class=\"n\">Construct<\/span><span class=\"p\">,<\/span>\n        <span class=\"n\">construct_id<\/span><span class=\"p\">:<\/span> <span class=\"nb\">str<\/span><span class=\"p\">,<\/span>\n        <span class=\"o\">**<\/span><span class=\"n\">kwargs<\/span><span class=\"p\">,<\/span>\n    <span class=\"p\">)<\/span> <span class=\"o\">-&gt;<\/span> <span class=\"bp\">None<\/span><span class=\"p\">:<\/span>\n        <span class=\"sh\">\"\"\"<\/span><span class=\"s\">Create the IAM deployment.\n\n        Args:\n            scope (Construct): CDK App scope\n        <\/span><span class=\"sh\">\"\"\"<\/span>\n        <span class=\"n\">role<\/span> <span class=\"o\">=<\/span> <span class=\"n\">iam<\/span><span class=\"p\">.<\/span><span class=\"nc\">Role<\/span><span class=\"p\">(<\/span>\n            <span class=\"n\">self<\/span><span class=\"p\">,<\/span>\n            <span class=\"nb\">id<\/span><span class=\"o\">=<\/span><span class=\"sh\">\"<\/span><span class=\"s\">TestIAMRole<\/span><span class=\"sh\">\"<\/span><span class=\"p\">,<\/span>\n            <span class=\"n\">assumed_by<\/span><span class=\"o\">=<\/span><span class=\"n\">iam<\/span><span class=\"p\">.<\/span><span class=\"nc\">ServicePrincipal<\/span><span class=\"p\">(<\/span><span class=\"sh\">\"<\/span><span class=\"s\">ec2.amazonaws.com<\/span><span class=\"sh\">\"<\/span><span class=\"p\">),<\/span>\n            <span class=\"n\">description<\/span><span class=\"o\">=<\/span><span class=\"sh\">\"<\/span><span class=\"s\">IAM Role for E2E testing<\/span><span class=\"sh\">\"<\/span><span class=\"p\">,<\/span>\n        <span class=\"p\">)<\/span>\n\n        <span class=\"n\">role<\/span><span class=\"p\">.<\/span><span class=\"nf\">add_to_policy<\/span><span class=\"p\">(<\/span>\n            <span class=\"n\">iam<\/span><span class=\"p\">.<\/span><span class=\"nc\">PolicyStatement<\/span><span class=\"p\">(<\/span>\n                <span class=\"n\">actions<\/span><span class=\"o\">=<\/span><span class=\"p\">[<\/span>\n                    <span class=\"sh\">\"<\/span><span class=\"s\">states:ListExecutions<\/span><span class=\"sh\">\"<\/span><span class=\"p\">,<\/span>\n                    <span class=\"sh\">\"<\/span><span class=\"s\">states:DescribeExecution<\/span><span class=\"sh\">\"<\/span><span class=\"p\">,<\/span>\n                <span class=\"p\">],<\/span>\n                <span class=\"n\">resources<\/span><span class=\"o\">=<\/span><span class=\"p\">[<\/span><span class=\"sh\">\"<\/span><span class=\"s\">*<\/span><span class=\"sh\">\"<\/span><span class=\"p\">],<\/span>\n            <span class=\"p\">)<\/span>\n        <span class=\"p\">)<\/span>\n\n        <span class=\"nc\">CfnOutput<\/span><span class=\"p\">(<\/span>\n            <span class=\"n\">self<\/span><span class=\"p\">.<\/span><span class=\"n\">scope<\/span><span class=\"p\">,<\/span>\n            <span class=\"nb\">id<\/span><span class=\"o\">=<\/span><span class=\"sh\">\"<\/span><span class=\"s\">RoleArn<\/span><span class=\"sh\">\"<\/span><span class=\"p\">,<\/span>\n            <span class=\"n\">value<\/span><span class=\"o\">=<\/span><span class=\"n\">role<\/span><span class=\"p\">.<\/span><span class=\"n\">role_arn<\/span><span class=\"p\">,<\/span>\n            <span class=\"n\">export_name<\/span><span class=\"o\">=<\/span><span class=\"sh\">\"<\/span><span class=\"s\">E2eTestIAMRole<\/span><span class=\"sh\">\"<\/span><span class=\"p\">,<\/span>\n            <span class=\"n\">description<\/span><span class=\"o\">=<\/span><span class=\"sh\">\"<\/span><span class=\"s\">ARN of the created IAM Role<\/span><span class=\"sh\">\"<\/span><span class=\"p\">,<\/span>\n        <span class=\"p\">)<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u062f\u0631 \u0645\u0631\u062d\u0644\u0647 \u0628\u0639\u062f \u060c \u0627\u062c\u0631\u0627\u06cc Bash \u0628\u0631\u0627\u06cc \u062e\u0637 \u0644\u0648\u0644\u0647 CI\/CD \u0645\u0627 \u060c \u062f\u0631 \u0645\u0648\u0631\u062f \u0645\u0646 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 Azure DevOps \u0627\u0645\u0627 \u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u0647\u0631 \u0627\u0628\u0632\u0627\u0631 CI\/CD \u0628\u0627\u0634\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code><span class=\"nb\">export <\/span><span class=\"nv\">AWS_DEFAULT_REGION<\/span><span class=\"o\">=<\/span><span class=\"k\">${<\/span><span class=\"p\">{ parameters.AwsRegion <\/span><span class=\"k\">}<\/span><span class=\"o\">}<\/span>\n<span class=\"nv\">KST<\/span><span class=\"o\">=<\/span><span class=\"si\">$(<\/span> aws sts assume-role <span class=\"nt\">--endpoint-url<\/span> https:\/\/sts.<span class=\"k\">${<\/span><span class=\"p\">{ parameters.AwsRegion <\/span><span class=\"k\">}<\/span><span class=\"o\">}<\/span>.amazonaws.com <span class=\"nt\">--role-arn<\/span> arn:aws:iam::<span class=\"k\">${<\/span><span class=\"p\">{ parameters.AccountID <\/span><span class=\"k\">}<\/span><span class=\"o\">}<\/span>:role\/<span class=\"k\">${<\/span><span class=\"p\">{ parameters.CDKDeploymentRole <\/span><span class=\"k\">}<\/span><span class=\"o\">}<\/span>-<span class=\"k\">${<\/span><span class=\"p\">{ parameters.AccountID <\/span><span class=\"k\">}<\/span><span class=\"o\">}<\/span>-<span class=\"k\">${<\/span><span class=\"p\">{ parameters.AwsRegion <\/span><span class=\"k\">}<\/span><span class=\"o\">}<\/span> <span class=\"nt\">--role-session-name<\/span> <span class=\"si\">$(<\/span>Build.SourceVersion<span class=\"si\">)<\/span> <span class=\"nt\">--duration-seconds<\/span> 3600<span class=\"si\">)<\/span>\n<span class=\"nb\">export <\/span><span class=\"nv\">AWS_ACCESS_KEY_ID<\/span><span class=\"o\">=<\/span><span class=\"si\">$(<\/span><span class=\"nb\">echo<\/span> <span class=\"nv\">$KST<\/span> | jq <span class=\"nt\">-r<\/span> .Credentials.AccessKeyId<span class=\"si\">)<\/span>\n<span class=\"nb\">export <\/span><span class=\"nv\">AWS_SECRET_ACCESS_KEY<\/span><span class=\"o\">=<\/span><span class=\"si\">$(<\/span><span class=\"nb\">echo<\/span> <span class=\"nv\">$KST<\/span> | jq <span class=\"nt\">-r<\/span> .Credentials.SecretAccessKey<span class=\"si\">)<\/span>\n<span class=\"nb\">export <\/span><span class=\"nv\">AWS_SESSION_TOKEN<\/span><span class=\"o\">=<\/span><span class=\"si\">$(<\/span><span class=\"nb\">echo<\/span> <span class=\"nv\">$KST<\/span> | jq <span class=\"nt\">-r<\/span> .Credentials.SessionToken<span class=\"si\">)<\/span>\n<span class=\"nb\">export <\/span><span class=\"nv\">EMAIL_PROCESSOR<\/span><span class=\"o\">=<\/span><span class=\"si\">$(<\/span>aws cloudformation describe-stacks <span class=\"nt\">--stack-name<\/span> mrht-developer-posteingang-stack <span class=\"nt\">--query<\/span> <span class=\"s2\">\"Stacks[0].Outputs[?ExportName=='ExportEmailProcessor'].OutputValue\"<\/span> <span class=\"nt\">--output<\/span> text<span class=\"si\">)<\/span>\n<span class=\"nb\">export <\/span><span class=\"nv\">STATE_MACHINE_ARN<\/span><span class=\"o\">=<\/span><span class=\"si\">$(<\/span>aws cloudformation describe-stacks <span class=\"nt\">--stack-name<\/span> mrht-developer-posteingang-stack <span class=\"nt\">--query<\/span> <span class=\"s2\">\"Stacks[0].Outputs[?ExportName=='ExportStateMachine'].OutputValue\"<\/span> <span class=\"nt\">--output<\/span> text<span class=\"si\">)<\/span>\n<span class=\"nb\">export <\/span><span class=\"nv\">IAM_ROLE_ARN<\/span><span class=\"o\">=<\/span><span class=\"si\">$(<\/span>aws cloudformation describe-stacks <span class=\"nt\">--stack-name<\/span> mrht-developer-posteingang-stack <span class=\"nt\">--query<\/span> <span class=\"s2\">\"Stacks[0].Outputs[?ExportName=='E2eTestIAMRole'].OutputValue\"<\/span> <span class=\"nt\">--output<\/span> text<span class=\"si\">)<\/span>\n\n<span class=\"nv\">KST<\/span><span class=\"o\">=<\/span><span class=\"si\">$(<\/span> aws sts assume-role <span class=\"nt\">--endpoint-url<\/span> https:\/\/sts.<span class=\"k\">${<\/span><span class=\"p\">{ parameters.AwsRegion <\/span><span class=\"k\">}<\/span><span class=\"o\">}<\/span>.amazonaws.com <span class=\"nt\">--role-arn<\/span> <span class=\"nv\">$IAM_ROLE_ARN<\/span> <span class=\"nt\">--role-session-name<\/span> <span class=\"si\">$(<\/span>Build.SourceVersion<span class=\"si\">)<\/span> <span class=\"nt\">--duration-seconds<\/span> 3600<span class=\"si\">)<\/span>\n<span class=\"nb\">unset <\/span>AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY AWS_SESSION_TOKEN\n<span class=\"nb\">export <\/span><span class=\"nv\">AWS_ACCESS_KEY_ID<\/span><span class=\"o\">=<\/span><span class=\"si\">$(<\/span><span class=\"nb\">echo<\/span> <span class=\"nv\">$KST<\/span> | jq <span class=\"nt\">-r<\/span> .Credentials.AccessKeyId<span class=\"si\">)<\/span>\n<span class=\"nb\">export <\/span><span class=\"nv\">AWS_SECRET_ACCESS_KEY<\/span><span class=\"o\">=<\/span><span class=\"si\">$(<\/span><span class=\"nb\">echo<\/span> <span class=\"nv\">$KST<\/span> | jq <span class=\"nt\">-r<\/span> .Credentials.SecretAccessKey<span class=\"si\">)<\/span>\n<span class=\"nb\">export <\/span><span class=\"nv\">AWS_SESSION_TOKEN<\/span><span class=\"o\">=<\/span><span class=\"si\">$(<\/span><span class=\"nb\">echo<\/span> <span class=\"nv\">$KST<\/span> | jq <span class=\"nt\">-r<\/span> .Credentials.SessionToken<span class=\"si\">)<\/span>\npython3 src\/e2e_test\/e2e_test.py\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0627\u0648\u0644\u06cc <code>aws sts assume-role<\/code> \u0641\u0631\u0645\u0627\u0646 \u0628\u0647 \u0645\u0627 \u06a9\u0645\u06a9 \u0645\u06cc \u06a9\u0646\u062f \u062a\u0627 \u062e\u0631\u0648\u062c\u06cc \u0647\u0627\u06cc CloudFormation \u0631\u0627 \u0628\u0627\u0632\u06cc\u0627\u0628\u06cc \u06a9\u0646\u06cc\u0645. \u0645\u062c\u0648\u0632\u0647\u0627\u06cc \u0644\u0627\u0632\u0645 \u0628\u0631\u0627\u06cc \u0627\u06cc\u0646 \u0627\u0645\u0631 \u0628\u062e\u0634\u06cc \u0627\u0632 \u0645\u062c\u0645\u0648\u0639\u0647 CDK Bootstrap \u0627\u0633\u062a. \u062f\u0648\u0645 <code>aws sts assume-role<\/code> \u0641\u0631\u0645\u0627\u0646 \u0645\u0627 \u0631\u0627 \u0642\u0627\u062f\u0631 \u0645\u06cc \u0633\u0627\u0632\u062f \u062a\u0627 \u0622\u0632\u0645\u0627\u06cc\u0634 \u0631\u0627 \u0622\u063a\u0627\u0632 \u06a9\u0646\u06cc\u0645.<\/p>\n<p>\u062d\u0627\u0644 \u060c \u0628\u06cc\u0627\u06cc\u06cc\u062f \u0646\u06af\u0627\u0647\u06cc \u0628\u0647 \u067e\u0631\u0648\u0646\u062f\u0647 e2e_test.py \u0628\u06cc\u0646\u062f\u0627\u0632\u06cc\u0645:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight python\"><code><span class=\"kn\">import<\/span> <span class=\"n\">os<\/span>\n<span class=\"kn\">import<\/span> <span class=\"n\">time<\/span>\n<span class=\"kn\">import<\/span> <span class=\"n\">logging<\/span>\n<span class=\"kn\">import<\/span> <span class=\"n\">boto3<\/span>\n<span class=\"kn\">from<\/span> <span class=\"n\">botocore.exceptions<\/span> <span class=\"kn\">import<\/span> <span class=\"n\">ClientError<\/span><span class=\"p\">,<\/span> <span class=\"n\">ParamValidationError<\/span>\n<span class=\"kn\">import<\/span> <span class=\"n\">smbclient<\/span>\n<span class=\"kn\">import<\/span> <span class=\"n\">smtplib<\/span>\n<span class=\"kn\">from<\/span> <span class=\"n\">email.mime.text<\/span> <span class=\"kn\">import<\/span> <span class=\"n\">MIMEText<\/span>\n<span class=\"kn\">from<\/span> <span class=\"n\">email.mime.multipart<\/span> <span class=\"kn\">import<\/span> <span class=\"n\">MIMEMultipart<\/span>\n<span class=\"kn\">from<\/span> <span class=\"n\">email.mime.application<\/span> <span class=\"kn\">import<\/span> <span class=\"n\">MIMEApplication<\/span>\n\n<span class=\"n\">logging<\/span><span class=\"p\">.<\/span><span class=\"nf\">basicConfig<\/span><span class=\"p\">(<\/span>\n    <span class=\"n\">level<\/span><span class=\"o\">=<\/span><span class=\"n\">logging<\/span><span class=\"p\">.<\/span><span class=\"n\">INFO<\/span><span class=\"p\">,<\/span> <span class=\"nb\">format<\/span><span class=\"o\">=<\/span><span class=\"sh\">\"<\/span><span class=\"s\">%(asctime)s - %(levelname)s - %(message)s<\/span><span class=\"sh\">\"<\/span>\n<span class=\"p\">)<\/span>\n<span class=\"n\">logger<\/span> <span class=\"o\">=<\/span> <span class=\"n\">logging<\/span><span class=\"p\">.<\/span><span class=\"nf\">getLogger<\/span><span class=\"p\">(<\/span><span class=\"n\">__name__<\/span><span class=\"p\">)<\/span>\n\n<span class=\"k\">class<\/span> <span class=\"nc\">SMBClient<\/span><span class=\"p\">:<\/span>\n    <span class=\"sh\">\"\"\"<\/span><span class=\"s\">Manage an SMB connection to access shared files.<\/span><span class=\"sh\">\"\"\"<\/span>\n\n    <span class=\"k\">def<\/span> <span class=\"nf\">__init__<\/span><span class=\"p\">(<\/span><span class=\"n\">self<\/span><span class=\"p\">,<\/span> <span class=\"n\">username<\/span><span class=\"p\">:<\/span> <span class=\"nb\">str<\/span><span class=\"p\">,<\/span> <span class=\"n\">password<\/span><span class=\"p\">:<\/span> <span class=\"nb\">str<\/span><span class=\"p\">,<\/span> <span class=\"n\">servername<\/span><span class=\"p\">:<\/span> <span class=\"nb\">str<\/span><span class=\"p\">):<\/span>\n        <span class=\"sh\">\"\"\"<\/span><span class=\"s\">Initialize the SMBClient with connection details.\n\n        Args:\n            username (str): The username for the SMB connection.\n            password (str): The password for the SMB connection.\n            servername (str): The hostname or IP address of the SMB server.\n        <\/span><span class=\"sh\">\"\"\"<\/span>\n        <span class=\"n\">self<\/span><span class=\"p\">.<\/span><span class=\"n\">username<\/span> <span class=\"o\">=<\/span> <span class=\"n\">username<\/span>\n        <span class=\"n\">self<\/span><span class=\"p\">.<\/span><span class=\"n\">password<\/span> <span class=\"o\">=<\/span> <span class=\"n\">password<\/span>\n        <span class=\"n\">self<\/span><span class=\"p\">.<\/span><span class=\"n\">port<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">445<\/span>\n        <span class=\"n\">self<\/span><span class=\"p\">.<\/span><span class=\"n\">host_name<\/span> <span class=\"o\">=<\/span> <span class=\"n\">servername<\/span>\n\n    <span class=\"k\">def<\/span> <span class=\"nf\">connect_smb<\/span><span class=\"p\">(<\/span><span class=\"n\">self<\/span><span class=\"p\">,<\/span> <span class=\"n\">smb_client<\/span><span class=\"p\">:<\/span> <span class=\"n\">smbclient<\/span><span class=\"p\">)<\/span> <span class=\"o\">-&gt;<\/span> <span class=\"bp\">None<\/span><span class=\"p\">:<\/span>\n        <span class=\"sh\">\"\"\"<\/span><span class=\"s\">Connect to the SMB server.\n\n        Args:\n            smb_client (smbclient): The SMB client instance.\n        <\/span><span class=\"sh\">\"\"\"<\/span>\n        <span class=\"n\">logger<\/span><span class=\"p\">.<\/span><span class=\"nf\">info<\/span><span class=\"p\">(<\/span><span class=\"sa\">f<\/span><span class=\"sh\">\"<\/span><span class=\"s\">Trying to connect to <\/span><span class=\"si\">{<\/span><span class=\"n\">self<\/span><span class=\"p\">.<\/span><span class=\"n\">host_name<\/span><span class=\"si\">}<\/span><span class=\"s\"> as <\/span><span class=\"si\">{<\/span><span class=\"n\">self<\/span><span class=\"p\">.<\/span><span class=\"n\">username<\/span><span class=\"si\">}<\/span><span class=\"s\">.<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>\n        <span class=\"k\">try<\/span><span class=\"p\">:<\/span>\n            <span class=\"n\">smb_client<\/span><span class=\"p\">.<\/span><span class=\"nf\">register_session<\/span><span class=\"p\">(<\/span>\n                <span class=\"n\">server<\/span><span class=\"o\">=<\/span><span class=\"n\">self<\/span><span class=\"p\">.<\/span><span class=\"n\">host_name<\/span><span class=\"p\">,<\/span> <span class=\"n\">username<\/span><span class=\"o\">=<\/span><span class=\"n\">self<\/span><span class=\"p\">.<\/span><span class=\"n\">username<\/span><span class=\"p\">,<\/span> <span class=\"n\">password<\/span><span class=\"o\">=<\/span><span class=\"n\">self<\/span><span class=\"p\">.<\/span><span class=\"n\">password<\/span>\n            <span class=\"p\">)<\/span>\n            <span class=\"n\">logger<\/span><span class=\"p\">.<\/span><span class=\"nf\">info<\/span><span class=\"p\">(<\/span><span class=\"sh\">\"<\/span><span class=\"s\">Session established successfully.<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>\n        <span class=\"k\">except<\/span> <span class=\"nb\">Exception<\/span> <span class=\"k\">as<\/span> <span class=\"n\">e<\/span><span class=\"p\">:<\/span>\n            <span class=\"n\">logger<\/span><span class=\"p\">.<\/span><span class=\"nf\">exception<\/span><span class=\"p\">(<\/span><span class=\"sa\">f<\/span><span class=\"sh\">\"<\/span><span class=\"s\">Failed to connect to SMB share: <\/span><span class=\"si\">{<\/span><span class=\"n\">e<\/span><span class=\"si\">}<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>\n            <span class=\"k\">raise<\/span>\n        <span class=\"k\">return<\/span> <span class=\"bp\">True<\/span>\n\n    <span class=\"k\">def<\/span> <span class=\"nf\">list_directory<\/span><span class=\"p\">(<\/span><span class=\"n\">self<\/span><span class=\"p\">,<\/span> <span class=\"n\">path<\/span><span class=\"p\">:<\/span> <span class=\"nb\">str<\/span><span class=\"p\">,<\/span> <span class=\"n\">smb_client<\/span><span class=\"p\">:<\/span> <span class=\"n\">smbclient<\/span><span class=\"p\">)<\/span> <span class=\"o\">-&gt;<\/span> <span class=\"bp\">None<\/span><span class=\"p\">:<\/span>\n        <span class=\"sh\">\"\"\"<\/span><span class=\"s\">List the contents of an SMB directory.\n\n        Args:\n            path (str): The path to the directory.\n            smb_client (smbclient): The SMB client instance.\n\n        Returns:\n            List[str]: A list of the directory contents, or an empty list if an error occurs.\n        <\/span><span class=\"sh\">\"\"\"<\/span>\n        <span class=\"n\">entries<\/span> <span class=\"o\">=<\/span> <span class=\"p\">[]<\/span>\n        <span class=\"k\">try<\/span><span class=\"p\">:<\/span>\n            <span class=\"k\">for<\/span> <span class=\"n\">entry<\/span> <span class=\"ow\">in<\/span> <span class=\"n\">smb_client<\/span><span class=\"p\">.<\/span><span class=\"nf\">listdir<\/span><span class=\"p\">(<\/span><span class=\"n\">path<\/span><span class=\"p\">):<\/span>\n                <span class=\"n\">logger<\/span><span class=\"p\">.<\/span><span class=\"nf\">info<\/span><span class=\"p\">(<\/span><span class=\"sa\">f<\/span><span class=\"sh\">\"<\/span><span class=\"s\">Found entry: <\/span><span class=\"si\">{<\/span><span class=\"n\">entry<\/span><span class=\"si\">}<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>\n                <span class=\"n\">entries<\/span><span class=\"p\">.<\/span><span class=\"nf\">append<\/span><span class=\"p\">(<\/span><span class=\"n\">entry<\/span><span class=\"p\">)<\/span>\n            <span class=\"k\">return<\/span> <span class=\"n\">entries<\/span>\n        <span class=\"k\">except<\/span> <span class=\"nb\">Exception<\/span> <span class=\"k\">as<\/span> <span class=\"n\">e<\/span><span class=\"p\">:<\/span>\n            <span class=\"n\">logger<\/span><span class=\"p\">.<\/span><span class=\"nf\">exception<\/span><span class=\"p\">(<\/span><span class=\"sa\">f<\/span><span class=\"sh\">\"<\/span><span class=\"s\">Error listing directory: <\/span><span class=\"si\">{<\/span><span class=\"n\">e<\/span><span class=\"si\">}<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>\n            <span class=\"k\">return<\/span> <span class=\"p\">[]<\/span>\n\n<span class=\"k\">def<\/span> <span class=\"nf\">send_email<\/span><span class=\"p\">(<\/span>\n    <span class=\"n\">sender<\/span><span class=\"p\">:<\/span> <span class=\"nb\">str<\/span><span class=\"p\">,<\/span>\n    <span class=\"n\">recipient<\/span><span class=\"p\">:<\/span> <span class=\"nb\">str<\/span><span class=\"p\">,<\/span>\n    <span class=\"n\">subject<\/span><span class=\"p\">:<\/span> <span class=\"nb\">str<\/span><span class=\"p\">,<\/span>\n    <span class=\"n\">body_path<\/span><span class=\"p\">:<\/span> <span class=\"nb\">str<\/span><span class=\"p\">,<\/span>\n    <span class=\"n\">attachment_path<\/span><span class=\"p\">:<\/span> <span class=\"nb\">str<\/span><span class=\"p\">,<\/span>\n    <span class=\"n\">smtp_server<\/span><span class=\"p\">:<\/span> <span class=\"nb\">str<\/span><span class=\"p\">,<\/span>\n    <span class=\"n\">smtp_port<\/span><span class=\"p\">:<\/span> <span class=\"nb\">int<\/span><span class=\"p\">,<\/span>\n    <span class=\"n\">smtp_username<\/span><span class=\"p\">:<\/span> <span class=\"nb\">str<\/span><span class=\"p\">,<\/span>\n    <span class=\"n\">smtp_password<\/span><span class=\"p\">:<\/span> <span class=\"nb\">str<\/span><span class=\"p\">,<\/span>\n<span class=\"p\">):<\/span>\n    <span class=\"sh\">\"\"\"<\/span><span class=\"s\">Send an email with a PDF attachment using SMTP.\n\n    Args:\n        sender (str): The email address of the sender.\n        recipient (str): The email address of the recipient.\n        subject (str): The subject of the email.\n        body_path (str): The path to the text file containing the body of the email.\n        attachment_path (str): The path to the PDF file to be attached.\n        smtp_server (str): The SMTP server address.\n        smtp_port (int): The SMTP server port.\n        smtp_username (str): The SMTP username.\n        smtp_password (str): The SMTP password.\n    <\/span><span class=\"sh\">\"\"\"<\/span>\n    <span class=\"n\">msg<\/span> <span class=\"o\">=<\/span> <span class=\"nc\">MIMEMultipart<\/span><span class=\"p\">()<\/span>\n    <span class=\"n\">msg<\/span><span class=\"p\">[<\/span><span class=\"sh\">\"<\/span><span class=\"s\">Subject<\/span><span class=\"sh\">\"<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"n\">subject<\/span>\n    <span class=\"n\">msg<\/span><span class=\"p\">[<\/span><span class=\"sh\">\"<\/span><span class=\"s\">From<\/span><span class=\"sh\">\"<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"n\">sender<\/span>\n    <span class=\"n\">msg<\/span><span class=\"p\">[<\/span><span class=\"sh\">\"<\/span><span class=\"s\">To<\/span><span class=\"sh\">\"<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"n\">recipient<\/span>\n\n    <span class=\"k\">with<\/span> <span class=\"nf\">open<\/span><span class=\"p\">(<\/span><span class=\"n\">body_path<\/span><span class=\"p\">,<\/span> <span class=\"sh\">\"<\/span><span class=\"s\">r<\/span><span class=\"sh\">\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">encoding<\/span><span class=\"o\">=<\/span><span class=\"sh\">\"<\/span><span class=\"s\">utf-8<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span> <span class=\"k\">as<\/span> <span class=\"n\">text_file<\/span><span class=\"p\">:<\/span>\n        <span class=\"n\">text<\/span> <span class=\"o\">=<\/span> <span class=\"nc\">MIMEText<\/span><span class=\"p\">(<\/span><span class=\"n\">text_file<\/span><span class=\"p\">.<\/span><span class=\"nf\">read<\/span><span class=\"p\">())<\/span>\n        <span class=\"n\">msg<\/span><span class=\"p\">.<\/span><span class=\"nf\">attach<\/span><span class=\"p\">(<\/span><span class=\"n\">text<\/span><span class=\"p\">)<\/span>\n\n    <span class=\"k\">with<\/span> <span class=\"nf\">open<\/span><span class=\"p\">(<\/span><span class=\"n\">attachment_path<\/span><span class=\"p\">,<\/span> <span class=\"sh\">\"<\/span><span class=\"s\">rb<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span> <span class=\"k\">as<\/span> <span class=\"n\">pdf_file<\/span><span class=\"p\">:<\/span>\n        <span class=\"n\">attachment<\/span> <span class=\"o\">=<\/span> <span class=\"nc\">MIMEApplication<\/span><span class=\"p\">(<\/span><span class=\"n\">pdf_file<\/span><span class=\"p\">.<\/span><span class=\"nf\">read<\/span><span class=\"p\">(),<\/span> <span class=\"n\">_subtype<\/span><span class=\"o\">=<\/span><span class=\"sh\">\"<\/span><span class=\"s\">pdf<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>\n        <span class=\"n\">attachment<\/span><span class=\"p\">.<\/span><span class=\"nf\">add_header<\/span><span class=\"p\">(<\/span>\n            <span class=\"sh\">\"<\/span><span class=\"s\">Content-Disposition<\/span><span class=\"sh\">\"<\/span><span class=\"p\">,<\/span> <span class=\"sh\">\"<\/span><span class=\"s\">attachment<\/span><span class=\"sh\">\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">filename<\/span><span class=\"o\">=<\/span><span class=\"sh\">\"<\/span><span class=\"s\">attachment.pdf<\/span><span class=\"sh\">\"<\/span>\n        <span class=\"p\">)<\/span>\n        <span class=\"n\">msg<\/span><span class=\"p\">.<\/span><span class=\"nf\">attach<\/span><span class=\"p\">(<\/span><span class=\"n\">attachment<\/span><span class=\"p\">)<\/span>\n\n    <span class=\"k\">try<\/span><span class=\"p\">:<\/span>\n        <span class=\"k\">with<\/span> <span class=\"n\">smtplib<\/span><span class=\"p\">.<\/span><span class=\"nc\">SMTP<\/span><span class=\"p\">(<\/span><span class=\"n\">smtp_server<\/span><span class=\"p\">,<\/span> <span class=\"n\">smtp_port<\/span><span class=\"p\">)<\/span> <span class=\"k\">as<\/span> <span class=\"n\">s<\/span><span class=\"p\">:<\/span>\n            <span class=\"n\">s<\/span><span class=\"p\">.<\/span><span class=\"nf\">starttls<\/span><span class=\"p\">()<\/span>\n            <span class=\"n\">s<\/span><span class=\"p\">.<\/span><span class=\"nf\">login<\/span><span class=\"p\">(<\/span><span class=\"n\">smtp_username<\/span><span class=\"p\">,<\/span> <span class=\"n\">smtp_password<\/span><span class=\"p\">)<\/span>\n            <span class=\"n\">s<\/span><span class=\"p\">.<\/span><span class=\"nf\">send_message<\/span><span class=\"p\">(<\/span><span class=\"n\">msg<\/span><span class=\"p\">)<\/span>\n            <span class=\"n\">logger<\/span><span class=\"p\">.<\/span><span class=\"nf\">info<\/span><span class=\"p\">(<\/span><span class=\"sh\">\"<\/span><span class=\"s\">Email sent successfully.<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>\n    <span class=\"k\">except<\/span> <span class=\"nb\">Exception<\/span> <span class=\"k\">as<\/span> <span class=\"n\">e<\/span><span class=\"p\">:<\/span>\n        <span class=\"n\">logger<\/span><span class=\"p\">.<\/span><span class=\"nf\">error<\/span><span class=\"p\">(<\/span><span class=\"sa\">f<\/span><span class=\"sh\">\"<\/span><span class=\"s\">Error sending email: <\/span><span class=\"si\">{<\/span><span class=\"nf\">str<\/span><span class=\"p\">(<\/span><span class=\"n\">e<\/span><span class=\"p\">)<\/span><span class=\"si\">}<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>\n        <span class=\"k\">raise<\/span>\n\n\n<span class=\"k\">def<\/span> <span class=\"nf\">main<\/span><span class=\"p\">():<\/span>\n    <span class=\"sh\">\"\"\"<\/span><span class=\"s\">Run E2E test.<\/span><span class=\"sh\">\"\"\"<\/span>\n    <span class=\"k\">try<\/span><span class=\"p\">:<\/span>\n        <span class=\"n\">state_machine_arn<\/span> <span class=\"o\">=<\/span> <span class=\"n\">os<\/span><span class=\"p\">.<\/span><span class=\"nf\">getenv<\/span><span class=\"p\">(<\/span><span class=\"sh\">\"<\/span><span class=\"s\">STATE_MACHINE_ARN<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>\n        <span class=\"n\">stage<\/span> <span class=\"o\">=<\/span> <span class=\"n\">os<\/span><span class=\"p\">.<\/span><span class=\"nf\">getenv<\/span><span class=\"p\">(<\/span><span class=\"sh\">\"<\/span><span class=\"s\">STAGE<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>\n        <span class=\"n\">smb_user<\/span> <span class=\"o\">=<\/span> <span class=\"n\">os<\/span><span class=\"p\">.<\/span><span class=\"nf\">getenv<\/span><span class=\"p\">(<\/span><span class=\"sh\">\"<\/span><span class=\"s\">SMB_USERNAME<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>\n        <span class=\"n\">smb_password<\/span> <span class=\"o\">=<\/span> <span class=\"n\">os<\/span><span class=\"p\">.<\/span><span class=\"nf\">getenv<\/span><span class=\"p\">(<\/span><span class=\"sh\">\"<\/span><span class=\"s\">SMB_PASSWORD<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>\n        <span class=\"n\">smb_host_ip<\/span> <span class=\"o\">=<\/span> <span class=\"n\">os<\/span><span class=\"p\">.<\/span><span class=\"nf\">getenv<\/span><span class=\"p\">(<\/span><span class=\"sh\">\"<\/span><span class=\"s\">SMB_SERVER<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>\n        <span class=\"n\">smb_path<\/span> <span class=\"o\">=<\/span> <span class=\"sa\">f<\/span><span class=\"sh\">\"<\/span><span class=\"si\">{<\/span><span class=\"n\">smb_host_ip<\/span><span class=\"si\">}<\/span><span class=\"se\">\\\\<\/span><span class=\"s\">folder$<\/span><span class=\"se\">\\\\<\/span><span class=\"s\">folder<\/span><span class=\"se\">\\\\<\/span><span class=\"sh\">\"<\/span>\n        <span class=\"n\">smtp_server<\/span> <span class=\"o\">=<\/span> <span class=\"n\">os<\/span><span class=\"p\">.<\/span><span class=\"nf\">getenv<\/span><span class=\"p\">(<\/span><span class=\"sh\">\"<\/span><span class=\"s\">SMTP_SERVER<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>\n        <span class=\"n\">smtp_port<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">int<\/span><span class=\"p\">(<\/span><span class=\"n\">os<\/span><span class=\"p\">.<\/span><span class=\"nf\">getenv<\/span><span class=\"p\">(<\/span><span class=\"sh\">\"<\/span><span class=\"s\">SMTP_PORT<\/span><span class=\"sh\">\"<\/span><span class=\"p\">))<\/span>\n        <span class=\"n\">smtp_username<\/span> <span class=\"o\">=<\/span> <span class=\"n\">os<\/span><span class=\"p\">.<\/span><span class=\"nf\">getenv<\/span><span class=\"p\">(<\/span><span class=\"sh\">\"<\/span><span class=\"s\">SMTP_USERNAME<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>\n        <span class=\"n\">smtp_password<\/span> <span class=\"o\">=<\/span> <span class=\"n\">os<\/span><span class=\"p\">.<\/span><span class=\"nf\">getenv<\/span><span class=\"p\">(<\/span><span class=\"sh\">\"<\/span><span class=\"s\">SMTP_PASSWORD<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>\n    <span class=\"k\">except<\/span> <span class=\"nb\">KeyError<\/span> <span class=\"k\">as<\/span> <span class=\"n\">e<\/span><span class=\"p\">:<\/span>\n        <span class=\"n\">logger<\/span><span class=\"p\">.<\/span><span class=\"nf\">exception<\/span><span class=\"p\">(<\/span><span class=\"n\">e<\/span><span class=\"p\">)<\/span>\n        <span class=\"k\">raise<\/span>\n\n    <span class=\"k\">try<\/span><span class=\"p\">:<\/span>\n        <span class=\"n\">sender<\/span> <span class=\"o\">=<\/span> <span class=\"sh\">\"<\/span><span class=\"s\">scan2mail@example.com<\/span><span class=\"sh\">\"<\/span>\n        <span class=\"n\">recipient<\/span> <span class=\"o\">=<\/span> <span class=\"sh\">\"<\/span><span class=\"s\">scan2mail@example.com<\/span><span class=\"sh\">\"<\/span>\n        <span class=\"n\">subject<\/span> <span class=\"o\">=<\/span> <span class=\"sh\">\"<\/span><span class=\"s\">Test Email with Attachment<\/span><span class=\"sh\">\"<\/span>\n        <span class=\"n\">body_path<\/span> <span class=\"o\">=<\/span> <span class=\"sh\">\"<\/span><span class=\"s\">.\/src\/e2e_test\/email_body.txt<\/span><span class=\"sh\">\"<\/span>\n        <span class=\"n\">attachment_path<\/span> <span class=\"o\">=<\/span> <span class=\"sh\">\"<\/span><span class=\"s\">.\/src\/e2e_test\/test.pdf<\/span><span class=\"sh\">\"<\/span>\n\n        <span class=\"nf\">send_email<\/span><span class=\"p\">(<\/span>\n            <span class=\"n\">sender<\/span><span class=\"o\">=<\/span><span class=\"n\">sender<\/span><span class=\"p\">,<\/span>\n            <span class=\"n\">recipient<\/span><span class=\"o\">=<\/span><span class=\"n\">recipient<\/span><span class=\"p\">,<\/span>\n            <span class=\"n\">subject<\/span><span class=\"o\">=<\/span><span class=\"n\">subject<\/span><span class=\"p\">,<\/span>\n            <span class=\"n\">body_path<\/span><span class=\"o\">=<\/span><span class=\"n\">body_path<\/span><span class=\"p\">,<\/span>\n            <span class=\"n\">attachment_path<\/span><span class=\"o\">=<\/span><span class=\"n\">attachment_path<\/span><span class=\"p\">,<\/span>\n            <span class=\"n\">smtp_server<\/span><span class=\"o\">=<\/span><span class=\"n\">smtp_server<\/span><span class=\"p\">,<\/span>\n            <span class=\"n\">smtp_port<\/span><span class=\"o\">=<\/span><span class=\"n\">smtp_port<\/span><span class=\"p\">,<\/span>\n            <span class=\"n\">smtp_username<\/span><span class=\"o\">=<\/span><span class=\"n\">smtp_username<\/span><span class=\"p\">,<\/span>\n            <span class=\"n\">smtp_password<\/span><span class=\"o\">=<\/span><span class=\"n\">smtp_password<\/span><span class=\"p\">,<\/span>\n        <span class=\"p\">)<\/span>\n\n        <span class=\"n\">time<\/span><span class=\"p\">.<\/span><span class=\"nf\">sleep<\/span><span class=\"p\">(<\/span><span class=\"mi\">15<\/span><span class=\"p\">)<\/span>\n\n        <span class=\"n\">stepfunctions_client<\/span> <span class=\"o\">=<\/span> <span class=\"n\">boto3<\/span><span class=\"p\">.<\/span><span class=\"nf\">client<\/span><span class=\"p\">(<\/span><span class=\"sh\">\"<\/span><span class=\"s\">stepfunctions<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>\n\n        <span class=\"n\">list_executions_response<\/span> <span class=\"o\">=<\/span> <span class=\"n\">stepfunctions_client<\/span><span class=\"p\">.<\/span><span class=\"nf\">list_executions<\/span><span class=\"p\">(<\/span>\n            <span class=\"n\">stateMachineArn<\/span><span class=\"o\">=<\/span><span class=\"n\">state_machine_arn<\/span><span class=\"p\">,<\/span> <span class=\"n\">maxResults<\/span><span class=\"o\">=<\/span><span class=\"mi\">1<\/span><span class=\"p\">,<\/span> <span class=\"n\">statusFilter<\/span><span class=\"o\">=<\/span><span class=\"sh\">\"<\/span><span class=\"s\">RUNNING<\/span><span class=\"sh\">\"<\/span>\n        <span class=\"p\">)<\/span>\n\n        <span class=\"k\">if<\/span> <span class=\"n\">list_executions_response<\/span><span class=\"p\">[<\/span><span class=\"sh\">\"<\/span><span class=\"s\">executions<\/span><span class=\"sh\">\"<\/span><span class=\"p\">]:<\/span>\n            <span class=\"n\">execution_arn<\/span> <span class=\"o\">=<\/span> <span class=\"n\">list_executions_response<\/span><span class=\"p\">[<\/span><span class=\"sh\">\"<\/span><span class=\"s\">executions<\/span><span class=\"sh\">\"<\/span><span class=\"p\">][<\/span><span class=\"mi\">0<\/span><span class=\"p\">][<\/span><span class=\"sh\">\"<\/span><span class=\"s\">executionArn<\/span><span class=\"sh\">\"<\/span><span class=\"p\">]<\/span>\n            <span class=\"n\">logger<\/span><span class=\"p\">.<\/span><span class=\"nf\">info<\/span><span class=\"p\">(<\/span><span class=\"sa\">f<\/span><span class=\"sh\">\"<\/span><span class=\"s\">Found execution: <\/span><span class=\"si\">{<\/span><span class=\"n\">execution_arn<\/span><span class=\"si\">}<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>\n\n            <span class=\"k\">while<\/span> <span class=\"bp\">True<\/span><span class=\"p\">:<\/span>\n                <span class=\"n\">response<\/span> <span class=\"o\">=<\/span> <span class=\"n\">stepfunctions_client<\/span><span class=\"p\">.<\/span><span class=\"nf\">describe_execution<\/span><span class=\"p\">(<\/span>\n                    <span class=\"n\">executionArn<\/span><span class=\"o\">=<\/span><span class=\"n\">execution_arn<\/span>\n                <span class=\"p\">)<\/span>\n                <span class=\"n\">status<\/span> <span class=\"o\">=<\/span> <span class=\"n\">response<\/span><span class=\"p\">[<\/span><span class=\"sh\">\"<\/span><span class=\"s\">status<\/span><span class=\"sh\">\"<\/span><span class=\"p\">]<\/span>\n\n                <span class=\"k\">if<\/span> <span class=\"n\">status<\/span> <span class=\"o\">!=<\/span> <span class=\"sh\">\"<\/span><span class=\"s\">RUNNING<\/span><span class=\"sh\">\"<\/span><span class=\"p\">:<\/span>\n                    <span class=\"n\">logger<\/span><span class=\"p\">.<\/span><span class=\"nf\">info<\/span><span class=\"p\">(<\/span><span class=\"sa\">f<\/span><span class=\"sh\">\"<\/span><span class=\"s\">Step Function execution status: <\/span><span class=\"si\">{<\/span><span class=\"n\">status<\/span><span class=\"si\">}<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>\n                    <span class=\"k\">break<\/span>\n\n                <span class=\"n\">logger<\/span><span class=\"p\">.<\/span><span class=\"nf\">info<\/span><span class=\"p\">(<\/span>\n                    <span class=\"sh\">\"<\/span><span class=\"s\">Step Function is still running. Checking again in 20 seconds...<\/span><span class=\"sh\">\"<\/span>\n                <span class=\"p\">)<\/span>\n                <span class=\"n\">time<\/span><span class=\"p\">.<\/span><span class=\"nf\">sleep<\/span><span class=\"p\">(<\/span><span class=\"mi\">20<\/span><span class=\"p\">)<\/span>\n        <span class=\"k\">else<\/span><span class=\"p\">:<\/span>\n            <span class=\"n\">logger<\/span><span class=\"p\">.<\/span><span class=\"nf\">warning<\/span><span class=\"p\">(<\/span><span class=\"sh\">\"<\/span><span class=\"s\">No running execution found.<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>\n            <span class=\"k\">raise<\/span>\n\n    <span class=\"nf\">except <\/span><span class=\"p\">(<\/span><span class=\"n\">ClientError<\/span><span class=\"p\">,<\/span> <span class=\"n\">ParamValidationError<\/span><span class=\"p\">)<\/span> <span class=\"k\">as<\/span> <span class=\"n\">e<\/span><span class=\"p\">:<\/span>\n        <span class=\"n\">logger<\/span><span class=\"p\">.<\/span><span class=\"nf\">error<\/span><span class=\"p\">(<\/span><span class=\"sa\">f<\/span><span class=\"sh\">\"<\/span><span class=\"s\">An error occurred: <\/span><span class=\"si\">{<\/span><span class=\"nf\">str<\/span><span class=\"p\">(<\/span><span class=\"n\">e<\/span><span class=\"p\">)<\/span><span class=\"si\">}<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>\n        <span class=\"k\">raise<\/span>\n\n    <span class=\"n\">counter<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">0<\/span>\n    <span class=\"k\">try<\/span><span class=\"p\">:<\/span>\n        <span class=\"n\">smb<\/span> <span class=\"o\">=<\/span> <span class=\"nc\">SMBClient<\/span><span class=\"p\">(<\/span>\n            <span class=\"n\">username<\/span><span class=\"o\">=<\/span><span class=\"n\">smb_user<\/span><span class=\"p\">,<\/span>\n            <span class=\"n\">password<\/span><span class=\"o\">=<\/span><span class=\"n\">smb_password<\/span><span class=\"p\">,<\/span>\n            <span class=\"n\">servername<\/span><span class=\"o\">=<\/span><span class=\"n\">smb_host_ip<\/span><span class=\"p\">,<\/span>\n        <span class=\"p\">)<\/span>\n        <span class=\"n\">smb<\/span><span class=\"p\">.<\/span><span class=\"nf\">connect_smb<\/span><span class=\"p\">(<\/span><span class=\"n\">smbclient<\/span><span class=\"p\">)<\/span>\n        <span class=\"n\">response<\/span> <span class=\"o\">=<\/span> <span class=\"n\">smb<\/span><span class=\"p\">.<\/span><span class=\"nf\">list_directory<\/span><span class=\"p\">(<\/span><span class=\"n\">smb_path<\/span><span class=\"p\">,<\/span> <span class=\"n\">smbclient<\/span><span class=\"p\">)<\/span>\n        <span class=\"n\">desired_contract_id<\/span> <span class=\"o\">=<\/span> <span class=\"sh\">\"<\/span><span class=\"s\">__102865946013<\/span><span class=\"sh\">\"<\/span>\n        <span class=\"k\">for<\/span> <span class=\"n\">file_name<\/span> <span class=\"ow\">in<\/span> <span class=\"n\">response<\/span><span class=\"p\">:<\/span>\n            <span class=\"k\">if<\/span> <span class=\"n\">desired_contract_id<\/span> <span class=\"ow\">in<\/span> <span class=\"n\">file_name<\/span><span class=\"p\">:<\/span>\n                <span class=\"n\">logger<\/span><span class=\"p\">.<\/span><span class=\"nf\">info<\/span><span class=\"p\">(<\/span><span class=\"sa\">f<\/span><span class=\"sh\">\"<\/span><span class=\"s\">Found the ID <\/span><span class=\"sh\">'<\/span><span class=\"si\">{<\/span><span class=\"n\">desired_contract_id<\/span><span class=\"si\">}<\/span><span class=\"sh\">'<\/span><span class=\"s\"> in the directory contents.<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>\n                <span class=\"n\">counter<\/span> <span class=\"o\">+=<\/span> <span class=\"mi\">1<\/span>\n    <span class=\"k\">except<\/span> <span class=\"nb\">Exception<\/span> <span class=\"k\">as<\/span> <span class=\"n\">e<\/span><span class=\"p\">:<\/span>\n        <span class=\"n\">logger<\/span><span class=\"p\">.<\/span><span class=\"nf\">exception<\/span><span class=\"p\">(<\/span><span class=\"n\">e<\/span><span class=\"p\">)<\/span>\n        <span class=\"k\">raise<\/span>\n\n    <span class=\"k\">if<\/span> <span class=\"n\">counter<\/span> <span class=\"o\">==<\/span> <span class=\"mi\">0<\/span><span class=\"p\">:<\/span>\n        <span class=\"k\">raise<\/span> <span class=\"nc\">ValueError<\/span><span class=\"p\">(<\/span><span class=\"sh\">\"<\/span><span class=\"s\">Target ID not found<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>\n\n    <span class=\"n\">logger<\/span><span class=\"p\">.<\/span><span class=\"nf\">info<\/span><span class=\"p\">(<\/span><span class=\"sh\">\"<\/span><span class=\"s\">Finished E2E test<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>\n\n<span class=\"k\">if<\/span> <span class=\"n\">__name__<\/span> <span class=\"o\">==<\/span> <span class=\"sh\">\"<\/span><span class=\"s\">__main__<\/span><span class=\"sh\">\"<\/span><span class=\"p\">:<\/span>\n    <span class=\"k\">try<\/span><span class=\"p\">:<\/span>\n        <span class=\"nf\">main<\/span><span class=\"p\">()<\/span>\n    <span class=\"k\">except<\/span> <span class=\"nb\">Exception<\/span> <span class=\"k\">as<\/span> <span class=\"n\">e<\/span><span class=\"p\">:<\/span>\n        <span class=\"n\">logger<\/span><span class=\"p\">.<\/span><span class=\"nf\">error<\/span><span class=\"p\">(<\/span><span class=\"sa\">f<\/span><span class=\"sh\">\"<\/span><span class=\"s\">An error occurred: <\/span><span class=\"si\">{<\/span><span class=\"nf\">str<\/span><span class=\"p\">(<\/span><span class=\"n\">e<\/span><span class=\"p\">)<\/span><span class=\"si\">}<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>\n        <span class=\"k\">raise<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0627\u06cc\u0646 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0622\u062e\u0631\u06cc\u0646 \u0645\u0631\u062d\u0644\u0647 \u0627\u0632 \u062e\u0637 \u0644\u0648\u0644\u0647 CI\/CD \u0645\u0646 \u067e\u0633 \u0627\u0632 \u0627\u0633\u062a\u0642\u0631\u0627\u0631 \u0645\u0648\u0641\u0642\u06cc\u062a \u0622\u0645\u06cc\u0632 CDK \u0627\u062c\u0631\u0627 \u0645\u06cc \u0634\u0648\u062f. \u0627\u0628\u062a\u062f\u0627 \u0647\u0645\u0647 \u0645\u062a\u063a\u06cc\u0631\u0647\u0627\u06cc \u0645\u0631\u0628\u0648\u0637\u0647 \u0631\u0627 \u0627\u0632 \u0645\u062d\u06cc\u0637 \u062e\u0637 \u0644\u0648\u0644\u0647 CI\/CD \u062c\u0645\u0639 \u0645\u06cc \u06a9\u0646\u06cc\u0645. \u0628\u062f\u06cc\u0647\u06cc \u0627\u0633\u062a \u060c \u0634\u0645\u0627 \u0647\u0645\u0686\u0646\u06cc\u0646 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0627\u0632 \u062e\u062f\u0645\u0627\u062a AWS \u0645\u0627\u0646\u0646\u062f \u0641\u0631\u0648\u0634\u06af\u0627\u0647 \u067e\u0627\u0631\u0627\u0645\u062a\u0631 Simple Systems Manager (SSM) \u06cc\u0627 \u0645\u062f\u06cc\u0631 AWS Secrets \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f. \u0628\u0627 \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u060c \u0645\u0627 \u06cc\u06a9 \u0622\u0632\u0645\u0627\u06cc\u0634 \u0631\u0627 \u0627\u0632 \u0645\u062e\u0632\u0646 \u0648 \u0647\u0645\u0686\u0646\u06cc\u0646 \u06cc\u06a9 \u0628\u062f\u0646\u0647 \u0622\u0632\u0645\u0627\u06cc\u0634 \u0628\u0631\u0627\u06cc \u0627\u06cc\u0645\u06cc\u0644 \u0645\u06cc \u06af\u06cc\u0631\u06cc\u0645. \u0627\u06af\u0631 \u0627\u0632 \u0686\u0646\u062f\u06cc\u0646 \u0645\u0648\u0631\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u06cc\u062f \u060c \u0627\u062d\u062a\u0645\u0627\u0644\u0627\u064b \u0627\u06cc\u062f\u0647 \u0628\u0647\u062a\u0631\u06cc \u0628\u0631\u0627\u06cc \u0627\u062c\u0631\u0627\u06cc \u06cc\u06a9 \u0641\u0631\u0648\u0634\u06af\u0627\u0647 \u0645\u0648\u0631\u062f \u0622\u0632\u0645\u0627\u06cc\u0634 \u062f\u0631 S3 \u0627\u0633\u062a.<br \/>\u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0627\u0639\u062a\u0628\u0627\u0631\u0646\u0627\u0645\u0647 \u0647\u0627 \u0648 \u0645\u0648\u0631\u062f \u0622\u0632\u0645\u0648\u0646 \u060c \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u0645 \u0627\u06cc\u0645\u06cc\u0644\u06cc \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u0645 \u06a9\u0647 \u0628\u0647 \u0622\u062f\u0631\u0633 \u0627\u06cc\u0645\u06cc\u0644 \u0645\u0648\u0631\u062f \u0646\u0638\u0631 \u0645\u0627 \u0627\u0631\u0633\u0627\u0644 \u0634\u0648\u062f. \u062f\u0631 \u0627\u06cc\u0646 \u062d\u0627\u0644\u062a \u060c \u0641\u0631\u0633\u062a\u0646\u062f\u0647 \u0648 \u06af\u06cc\u0631\u0646\u062f\u0647 \u06cc\u06a9\u0633\u0627\u0646 \u0647\u0633\u062a\u0646\u062f. \u067e\u0633 \u0627\u0632 \u0627\u0631\u0633\u0627\u0644 \u0627\u06cc\u0645\u06cc\u0644 \u0628\u0627 \u0645\u0648\u0641\u0642\u06cc\u062a \u060c \u0645\u0627 \u0645\u062f\u062a\u06cc \u0635\u0628\u0631 \u0645\u06cc \u06a9\u0646\u06cc\u0645 \u0648 \u0633\u067e\u0633 \u0628\u0647 \u0644\u06cc\u0633\u062a \u0648 \u062a\u0648\u0635\u06cc\u0641 \u0639\u0645\u0644\u06a9\u0631\u062f \u0645\u0631\u062d\u0644\u0647 \u062e\u0648\u062f \u0647\u0645\u0627\u0646\u0637\u0648\u0631 \u06a9\u0647 \u062f\u0631 \u0634\u06a9\u0644 1 \u0646\u0634\u0627\u0646 \u062f\u0627\u062f\u0647 \u0634\u062f\u0647 \u0627\u0633\u062a \u060c \u0627\u062f\u0627\u0645\u0647 \u0645\u06cc \u062f\u0647\u06cc\u0645. \u0627\u06af\u0631 \u0639\u0645\u0644\u06a9\u0631\u062f \u0645\u0631\u062d\u0644\u0647 \u0628\u0627 \u0645\u0648\u0641\u0642\u06cc\u062a \u062a\u06a9\u0645\u06cc\u0644 \u0634\u0648\u062f \u060c \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u0641\u0647\u0631\u0633\u062a \u0641\u0647\u0631\u0633\u062a \u0647\u062f\u0641 SMB \u0631\u0627 \u0644\u06cc\u0633\u062a \u0645\u06cc \u06a9\u0646\u062f \u0648 \u0634\u0646\u0627\u0633\u0647 \u0642\u0631\u0627\u0631\u062f\u0627\u062f \u0645\u0648\u0631\u062f \u0646\u0638\u0631 \u0645\u0627 \u0631\u0627 \u0627\u0632 \u067e\u0631\u0648\u0646\u062f\u0647 \u0622\u0632\u0645\u0648\u0646 PDF \u062c\u0633\u062a\u062c\u0648 \u0645\u06cc \u06a9\u0646\u062f. \u0633\u0631\u0627\u0646\u062c\u0627\u0645 \u060c \u0622\u0632\u0645\u0648\u0646 \u0631\u0627 \u0627\u0632 \u0641\u0647\u0631\u0633\u062a SMB \u062a\u0645\u06cc\u0632 \u0645\u06cc \u06a9\u0646\u06cc\u0645.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"%D8%A7%D9%81%DA%A9%D8%A7%D8%B1_%D9%86%D9%87%D8%A7%DB%8C%DB%8C\"><\/span>\n<p>  \u0627\u0641\u06a9\u0627\u0631 \u0646\u0647\u0627\u06cc\u06cc<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0645\u0641\u0647\u0648\u0645 \u0648 \u0627\u062c\u0631\u0627\u06cc \u0622\u0632\u0645\u0648\u0646 \u0647\u0627\u06cc E2E \u0628\u062f\u0648\u0646 \u0634\u06a9 \u0646\u06cc\u0627\u0632 \u0628\u0647 \u062a\u0644\u0627\u0634 \u0642\u0627\u0628\u0644 \u062a\u0648\u062c\u0647\u06cc \u062f\u0627\u0631\u062f \u060c \u0648 \u0645\u0646 \u06a9\u0627\u0645\u0644\u0627\u064b \u0645\u0648\u0627\u0641\u0642\u0645 \u06a9\u0647 \u0627\u06cc\u0646 \u06cc\u06a9 \u0646\u0645\u0648\u0646\u0647 \u0646\u0633\u0628\u062a\u0627\u064b \u0633\u0627\u062f\u0647 \u0627\u0633\u062a. \u0628\u0627 \u0627\u06cc\u0646 \u062d\u0627\u0644 \u060c \u0627\u062a\u0648\u0645\u0627\u0633\u06cc\u0648\u0646 \u0628\u0647 \u0627\u0637\u0645\u06cc\u0646\u0627\u0646 \u0627\u0632 \u06a9\u06cc\u0641\u06cc\u062a \u06a9\u0645\u06a9 \u0645\u06cc \u06a9\u0646\u062f \u0648 \u0628\u0627\u0639\u062b \u0635\u0631\u0641\u0647 \u062c\u0648\u06cc\u06cc \u062f\u0631 \u0632\u0645\u0627\u0646 \u0642\u0627\u0628\u0644 \u062a\u0648\u062c\u0647\u06cc \u0645\u06cc \u0634\u0648\u062f.<\/p>\n<p>\u0641\u0631\u0622\u06cc\u0646\u062f \u062f\u0633\u062a\u06cc \u0686\u06cc\u0632\u06cc \u0634\u0628\u06cc\u0647 \u0628\u0647 \u0627\u06cc\u0646 \u062e\u0648\u0627\u0647\u062f \u0628\u0648\u062f: \u0627\u0631\u0633\u0627\u0644 \u0627\u06cc\u0645\u06cc\u0644 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0645\u0634\u062a\u0631\u06cc \u0645\u0648\u0631\u062f \u0639\u0644\u0627\u0642\u0647 \u062e\u0648\u062f \u060c \u0628\u0647 \u0627\u06cc\u0646 \u0627\u0645\u06cc\u062f \u06a9\u0647 \u0634\u0645\u0627 \u0627\u0632 \u0645\u0648\u0631\u062f \u0622\u0632\u0645\u0627\u06cc\u0634 \u0635\u062d\u06cc\u062d \u063a\u0627\u0641\u0644 \u0646\u0634\u0648\u06cc\u062f \u060c \u0645\u0646\u062a\u0638\u0631 \u0638\u0627\u0647\u0631 \u0634\u062f\u0646 \u067e\u0631\u0648\u0646\u062f\u0647 \u062f\u0631 \u0641\u0631\u0648\u0634\u06af\u0627\u0647 \u067e\u0631\u0648\u0646\u062f\u0647 SMB \u0647\u0633\u062a\u06cc\u062f \u0648 \u0628\u0631\u0631\u0633\u06cc \u0645\u06cc \u06a9\u0646\u06cc\u062f \u06a9\u0647 \u0622\u06cc\u0627 \u0634\u0646\u0627\u0633\u0647 \u0642\u0631\u0627\u0631\u062f\u0627\u062f \u0628\u0627 \u067e\u0631\u0648\u0646\u062f\u0647 \u062a\u0633\u062a \u0634\u0645\u0627 \u0645\u0637\u0627\u0628\u0642\u062a \u062f\u0627\u0631\u062f \u06cc\u0627 \u062e\u06cc\u0631. \u0627\u06cc\u0646 \u0631\u0648\u06cc\u06a9\u0631\u062f \u062f\u0633\u062a\u06cc \u0645\u0637\u0645\u0626\u0646\u0627\u064b \u0637\u0648\u0644\u0627\u0646\u06cc \u062a\u0631 \u0627\u0632 \u0631\u0648\u0634 \u062e\u0648\u062f\u06a9\u0627\u0631 \u0645\u0648\u0631\u062f \u0628\u062d\u062b \u0627\u0633\u062a \u06a9\u0647 \u062d\u062f\u0648\u062f 1 \u062f\u0642\u06cc\u0642\u0647 \u0648 30 \u062b\u0627\u0646\u06cc\u0647 \u0637\u0648\u0644 \u0645\u06cc \u06a9\u0634\u062f.<\/p>\n<p>\u0646\u0638\u0631 \u0634\u0645\u0627 \u0686\u06cc\u0633\u062a\u061f \u0622\u06cc\u0627 \u0645\u0646 \u0686\u06cc\u0632\u0647\u0627 \u0631\u0627 \u062f\u0631\u0633\u062a \u06a9\u0631\u062f\u0645\u061f \u0646\u0638\u0631 \u0634\u0645\u0627 \u0686\u06cc\u0633\u062a\u061f \u062e\u0648\u0634\u062d\u0627\u0644\u0645 \u06a9\u0647 \u0628\u06cc\u0634\u062a\u0631 \u0628\u062d\u062b \u06a9\u0631\u062f\u0645 \u0648 \u0628\u0647 \u0647\u0631 \u0633\u0624\u0627\u0644\u06cc \u06a9\u0647 \u0645\u0645\u06a9\u0646 \u0627\u0633\u062a \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u062f \u067e\u0627\u0633\u062e \u0645\u06cc \u062f\u0647\u0645.<\/p>\n<p>\u0628\u0631\u0646\u0627\u0645\u0647 \u0646\u0648\u06cc\u0633\u06cc \u0645\u0628\u0627\u0631\u06a9 :-)!<\/p>\n<\/p><\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u0645\u0646 \u0627\u062e\u06cc\u0631\u0627\u064b \u067e\u0631\u0648\u0698\u0647 \u062c\u062f\u06cc\u062f\u06cc \u0631\u0627 \u0628\u0627 \u0645\u062d\u0648\u0631\u06cc\u062a \u0645\u062f\u06cc\u0631\u06cc\u062a \u0648\u0631\u0648\u062f\u06cc \u062e\u0648\u062f \u0622\u063a\u0627\u0632 \u06a9\u0631\u062f\u0645. \u0645\u0646 \u0628\u0631\u0627\u06cc \u06cc\u06a9 \u06a9\u0627\u0631\u06af\u0632\u0627\u0631 \u0628\u06cc\u0645\u0647 \u0622\u0644\u0645\u0627\u0646\u06cc \u06a9\u0627\u0631 \u0645\u06cc \u06a9\u0646\u0645 \u06a9\u0647 \u0647\u062f\u0641 \u0622\u0646 \u0645\u062f\u0631\u0646 \u0633\u0627\u0632\u06cc \u0631\u0633\u06cc\u062f\u06af\u06cc \u0628\u0647 \u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u0641\u06cc\u0632\u06cc\u06a9\u06cc \u0627\u0633\u062a. \u0645\u062a\u0623\u0633\u0641\u0627\u0646\u0647 \u060c \u062f\u0631 \u0628\u062e\u0634 \u0628\u06cc\u0645\u0647 \u0622\u0644\u0645\u0627\u0646 \u060c \u0645\u0627 \u0646\u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u0645 \u0627\u0632 API \u06cc\u0627 \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u0647\u0627\u06cc \u0641\u0646\u06cc \u0645\u0634\u0627\u0628\u0647 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u0645. \u062f\u0631\u0639\u0648\u0636 \u060c \u0645\u062f\u06cc\u0631\u0627\u0646 &hellip;<\/p>\n","protected":false},"author":2,"featured_media":101635,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"fifu_image_url":"","fifu_image_alt":"","footnotes":""},"categories":[339],"tags":[],"class_list":["post-101634","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dev"],"_links":{"self":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/101634","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/comments?post=101634"}],"version-history":[{"count":0,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/101634\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media\/101635"}],"wp:attachment":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media?parent=101634"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/categories?post=101634"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/tags?post=101634"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}