{"id":22460,"date":"2023-05-11T14:51:33","date_gmt":"2023-05-11T11:21:33","guid":{"rendered":"https:\/\/nabfollower.com\/blog\/test-driven-development-for-aws-cdk-in-python-1agi\/"},"modified":"2023-05-11T14:51:33","modified_gmt":"2023-05-11T11:21:33","slug":"test-driven-development-for-aws-cdk-in-python-1agi","status":"publish","type":"post","link":"https:\/\/nabfollower.com\/blog\/test-driven-development-for-aws-cdk-in-python-1agi\/","title":{"rendered":"\u062a\u0648\u0633\u0639\u0647 \u062a\u0633\u062a \u0645\u062d\u0648\u0631 \u0628\u0631\u0627\u06cc AWS CDK \u062f\u0631 \u067e\u0627\u06cc\u062a\u0648\u0646"},"content":{"rendered":"<div data-article-id=\"1464464\" id=\"article-body\">\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_85 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=\"\u062a\u063a\u06cc\u06cc\u0631 \u0648\u0636\u0639\u06cc\u062a \u0641\u0647\u0631\u0633\u062a \u0645\u0637\u0627\u0644\u0628\"><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\/test-driven-development-for-aws-cdk-in-python-1agi\/#%D8%B2%D9%85%DB%8C%D9%86%D9%87\" >\u0632\u0645\u06cc\u0646\u0647<\/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\/test-driven-development-for-aws-cdk-in-python-1agi\/#TDD\" >TDD<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/nabfollower.com\/blog\/test-driven-development-for-aws-cdk-in-python-1agi\/#%D8%B3%D9%86%D8%A7%D8%B1%DB%8C%D9%88%DB%8C_%D8%AF%D9%86%DB%8C%D8%A7%DB%8C_%D9%88%D8%A7%D9%82%D8%B9%DB%8C\" >\u0633\u0646\u0627\u0631\u06cc\u0648\u06cc \u062f\u0646\u06cc\u0627\u06cc \u0648\u0627\u0642\u0639\u06cc<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/nabfollower.com\/blog\/test-driven-development-for-aws-cdk-in-python-1agi\/#%D8%A8%D8%B1%D9%88_%D8%A8%D8%B3%D8%A7%D8%B2\" >\u0628\u0631\u0648 \u0628\u0633\u0627\u0632<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/nabfollower.com\/blog\/test-driven-development-for-aws-cdk-in-python-1agi\/#%DB%8C%DA%A9_%D8%AA%D8%B3%D8%AA_%D9%86%D8%A7%D9%85%D9%88%D9%81%D9%82_%D8%A8%D9%86%D9%88%DB%8C%D8%B3%DB%8C%D8%AF_%D9%82%D8%B1%D9%85%D8%B2\" >\u06cc\u06a9 \u062a\u0633\u062a \u0646\u0627\u0645\u0648\u0641\u0642 \u0628\u0646\u0648\u06cc\u0633\u06cc\u062f (\u0642\u0631\u0645\u0632)<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/nabfollower.com\/blog\/test-driven-development-for-aws-cdk-in-python-1agi\/#%D8%B5%D9%81_%D8%B1%D9%85%D8%B2%DA%AF%D8%B0%D8%A7%D8%B1%DB%8C_%D8%B4%D8%AF%D9%87_KMS\" >\u0635\u0641 \u0631\u0645\u0632\u06af\u0630\u0627\u0631\u06cc \u0634\u062f\u0647 KMS<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/nabfollower.com\/blog\/test-driven-development-for-aws-cdk-in-python-1agi\/#%D8%B5%D9%81_%D9%86%D8%A7%D9%85%D9%87_%D9%85%D8%B1%D8%AF%D9%87_%D9%85%D8%AA%D8%B5%D9%84_%D8%A8%D9%87_%D8%B5%D9%81\" >\u0635\u0641 \u0646\u0627\u0645\u0647 \u0645\u0631\u062f\u0647 \u0645\u062a\u0635\u0644 \u0628\u0647 \u0635\u0641<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/nabfollower.com\/blog\/test-driven-development-for-aws-cdk-in-python-1agi\/#%DA%A9%D8%AF_%D9%82%D8%A8%D9%88%D9%84%DB%8C_%D8%AF%D8%B1_%D8%A2%D8%B2%D9%85%D9%88%D9%86_%D8%B1%D8%A7_%D8%A8%D9%86%D9%88%DB%8C%D8%B3%DB%8C%D8%AF_%D8%B3%D8%A8%D8%B2\" >\u06a9\u062f \u0642\u0628\u0648\u0644\u06cc \u062f\u0631 \u0622\u0632\u0645\u0648\u0646 \u0631\u0627 \u0628\u0646\u0648\u06cc\u0633\u06cc\u062f (\u0633\u0628\u0632)<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/nabfollower.com\/blog\/test-driven-development-for-aws-cdk-in-python-1agi\/#%D8%A7%DB%8C%D8%AC%D8%A7%D8%AF_%D8%B5%D9%81_SQS_%D8%A8%D8%A7_CDK\" >\u0627\u06cc\u062c\u0627\u062f \u0635\u0641 SQS \u0628\u0627 CDK<\/a><\/li><\/ul><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/nabfollower.com\/blog\/test-driven-development-for-aws-cdk-in-python-1agi\/#%D8%AE%D9%84%D8%A7%D8%B5%D9%87\" >\u062e\u0644\u0627\u0635\u0647<\/a><\/li><\/ul><\/nav><\/div>\n<h2><span class=\"ez-toc-section\" id=\"%D8%B2%D9%85%DB%8C%D9%86%D9%87\"><\/span>\n<p>  \u0632\u0645\u06cc\u0646\u0647<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0627\u063a\u0644\u0628 \u0645\u06cc \u0634\u0646\u0648\u0645 \u06a9\u0647 \u0645\u0631\u062f\u0645 \u0645\u06cc \u06af\u0648\u06cc\u0646\u062f\u060c \u0645\u0627 \u0628\u0627\u06cc\u062f TDD \u0631\u0627 \u0628\u0627 \u06a9\u062f \u062e\u0648\u062f \u0627\u0646\u062c\u0627\u0645 \u062f\u0647\u06cc\u0645.  TDD \u062e\u06cc\u0644\u06cc \u0628\u0647\u062a\u0631 \u0627\u0633\u062a.  \u0627\u0645\u0627 TDD \u0686\u06cc\u0633\u062a\u061f  \u0648 \u0686\u0631\u0627 \u0628\u0647\u062a\u0631 \u0627\u0633\u062a\u061f  \u0648 \u0686\u06af\u0648\u0646\u0647 \u0645\u06cc \u062a\u0648\u0627\u0646 \u0622\u0646 \u0631\u0627 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0645\u062b\u0627\u0644 CDK \u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u061f  \u0627\u06af\u0631 \u0645\u06cc \u062e\u0648\u0627\u0647\u06cc\u062f \u062f\u0644\u06cc\u0644 \u0622\u0646 \u0631\u0627 \u0628\u062f\u0627\u0646\u06cc\u062f\u060c \u06a9\u0627\u0641\u06cc \u0627\u0633\u062a \u0627\u062f\u0627\u0645\u0647 &#8230;<\/p>\n<p>\u062f\u0627\u0646\u0634 \u0627\u0648\u0644\u06cc\u0647 CDK \u0645\u0648\u0631\u062f \u0646\u06cc\u0627\u0632 \u0627\u0633\u062a\u060c \u0632\u06cc\u0631\u0627 \u0645\u0646 \u062a\u0648\u0636\u06cc\u062d \u0646\u0645\u06cc \u062f\u0647\u0645 CDK \u0686\u06cc\u0633\u062a.  \u0627\u06af\u0631 \u0645\u06cc \u062e\u0648\u0627\u0647\u06cc\u062f\u060c \u06a9\u0627\u0631\u06af\u0627\u0647 \u0647\u0627\u06cc \u0627\u0631\u0627\u0626\u0647 \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 AWS \u0631\u0627 \u062f\u0646\u0628\u0627\u0644 \u06a9\u0646\u06cc\u062f<\/p>\n<ul>\n<li>cdkworkshop.com<\/li>\n<li>cdk-advanced.workshop.aws<\/li>\n<\/ul>\n<h2><span class=\"ez-toc-section\" id=\"TDD\"><\/span>\n<p>  TDD<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 TDD \u0645\u062e\u0641\u0641 Test Driven Development \u0627\u0633\u062a.  Test Driven Development (TDD) \u06cc\u06a9 \u0645\u062a\u062f\u0648\u0644\u0648\u0698\u06cc \u062a\u0648\u0633\u0639\u0647 \u0646\u0631\u0645 \u0627\u0641\u0632\u0627\u0631 \u0627\u0633\u062a \u06a9\u0647 \u0628\u0631 \u062a\u0633\u062a \u0646\u0648\u0634\u062a\u0646 \u0642\u0628\u0644 \u0627\u0632 \u0646\u0648\u0634\u062a\u0646 \u06a9\u062f \u0648\u0627\u0642\u0639\u06cc \u062a\u0627\u06a9\u06cc\u062f \u062f\u0627\u0631\u062f.<\/p>\n<p>\u0647\u062f\u0641 \u0627\u0635\u0644\u06cc TDD \u0627\u06cc\u062c\u0627\u062f \u06cc\u06a9 \u067e\u0627\u06cc\u06af\u0627\u0647 \u06a9\u062f \u0648\u0627\u0636\u062d\u060c \u0642\u0627\u0628\u0644 \u0627\u0639\u062a\u0645\u0627\u062f \u0648 \u0642\u0627\u0628\u0644 \u0646\u06af\u0647\u062f\u0627\u0631\u06cc \u0627\u0633\u062a.  \u0627\u06cc\u0646 \u0627\u0628\u062a\u062f\u0627 \u0628\u0627 \u0646\u0648\u0634\u062a\u0646 \u062a\u0633\u062a\u200c\u0647\u0627 \u0628\u0647 \u062f\u0633\u062a \u0645\u06cc\u200c\u0622\u06cc\u062f \u062a\u0627 \u062a\u0648\u0633\u0639\u0647\u200c\u062f\u0647\u0646\u062f\u06af\u0627\u0646 \u0628\u062a\u0648\u0627\u0646\u0646\u062f \u0627\u0637\u0645\u06cc\u0646\u0627\u0646 \u062d\u0627\u0635\u0644 \u06a9\u0646\u0646\u062f \u06a9\u0647 \u06a9\u062f \u0622\u0646\u0647\u0627 \u0628\u0627 \u0645\u0634\u062e\u0635\u0627\u062a \u0645\u0648\u0631\u062f \u0646\u06cc\u0627\u0632 \u0645\u0637\u0627\u0628\u0642\u062a \u062f\u0627\u0631\u062f \u0648 \u0645\u0637\u0627\u0628\u0642 \u0627\u0646\u062a\u0638\u0627\u0631 \u0631\u0641\u062a\u0627\u0631 \u0645\u06cc\u200c\u06a9\u0646\u062f.<\/p>\n<p>\u0641\u0631\u0622\u06cc\u0646\u062f TDD \u0634\u0627\u0645\u0644 \u0633\u0647 \u0645\u0631\u062d\u0644\u0647 \u0627\u0635\u0644\u06cc \u0627\u0633\u062a \u06a9\u0647 \u0627\u063a\u0644\u0628 \u0628\u0647 \u0622\u0646\u0647\u0627 &#8220;\u0642\u0631\u0645\u0632\u060c \u0633\u0628\u0632 \u0648 \u0631\u06cc\u0641\u0627\u06a9\u062a\u0648\u0631&#8221; \u06af\u0641\u062a\u0647 \u0645\u06cc \u0634\u0648\u062f:<\/p>\n<ol>\n<li>\n<p>\u0642\u0631\u0645\u0632 (\u0646\u0648\u0634\u062a\u0646 \u06cc\u06a9 \u062a\u0633\u062a \u0634\u06a9\u0633\u062a \u062e\u0648\u0631\u062f\u0647): \u062f\u0631 \u0627\u06cc\u0646 \u0645\u0631\u062d\u0644\u0647\u060c \u062a\u0648\u0633\u0639\u0647 \u062f\u0647\u0646\u062f\u06af\u0627\u0646 \u0628\u0627\u06cc\u062f \u0642\u0628\u0644 \u0627\u0632 \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u06a9\u062f\u060c \u06cc\u06a9 \u062a\u0633\u062a \u0628\u0631\u0627\u06cc \u06cc\u06a9 \u0639\u0645\u0644\u06a9\u0631\u062f \u06cc\u0627 \u0648\u06cc\u0698\u06af\u06cc \u062e\u0627\u0635 \u0628\u0646\u0648\u06cc\u0633\u0646\u062f.  \u0622\u0632\u0645\u0648\u0646 \u0627\u0628\u062a\u062f\u0627 \u0628\u0627\u06cc\u062f \u0628\u0627 \u0634\u06a9\u0633\u062a \u0645\u0648\u0627\u062c\u0647 \u0634\u0648\u062f\u060c \u0632\u06cc\u0631\u0627 \u06a9\u062f \u0645\u0631\u0628\u0648\u0637\u0647 \u0647\u0646\u0648\u0632 \u0646\u0648\u0634\u062a\u0647 \u0646\u0634\u062f\u0647 \u0627\u0633\u062a.<\/p>\n<\/li>\n<li>\n<p>\u0633\u0628\u0632 (\u06a9\u062f \u0631\u0627 \u0628\u0631\u0627\u06cc \u0642\u0628\u0648\u0644\u06cc \u062f\u0631 \u0622\u0632\u0645\u0648\u0646 \u0628\u0646\u0648\u06cc\u0633\u06cc\u062f): \u0633\u067e\u0633 \u062a\u0648\u0633\u0639\u0647 \u062f\u0647\u0646\u062f\u06af\u0627\u0646 \u062d\u062f\u0627\u0642\u0644 \u06a9\u062f \u0644\u0627\u0632\u0645 \u0628\u0631\u0627\u06cc \u0642\u0628\u0648\u0644\u06cc \u062f\u0631 \u0622\u0632\u0645\u0648\u0646 \u0631\u0627 \u0645\u06cc \u0646\u0648\u06cc\u0633\u0646\u062f.  \u062a\u0645\u0631\u06a9\u0632 \u0628\u0631 \u0631\u0648\u06cc \u0645\u0648\u0641\u0642\u06cc\u062a \u062f\u0631 \u0622\u0632\u0645\u0648\u0646 \u0627\u0633\u062a\u060c \u0646\u0647 \u0627\u06cc\u062c\u0627\u062f \u06cc\u06a9 \u0631\u0627\u0647 \u062d\u0644 \u0628\u0647\u06cc\u0646\u0647 \u06cc\u0627 \u06a9\u0627\u0645\u0644.<\/p>\n<\/li>\n<li>\n<p>Refactor (\u0628\u0647\u0628\u0648\u062f \u06a9\u062f): \u067e\u0633 \u0627\u0632 \u06af\u0630\u0631\u0627\u0646\u062f\u0646 \u0622\u0632\u0645\u0648\u0646\u060c \u062a\u0648\u0633\u0639\u0647\u200c\u062f\u0647\u0646\u062f\u06af\u0627\u0646 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u0646\u062f \u06a9\u062f \u0631\u0627 \u0627\u0635\u0644\u0627\u062d \u06a9\u0646\u0646\u062f \u062a\u0627 \u0637\u0631\u0627\u062d\u06cc\u060c \u062e\u0648\u0627\u0646\u0627\u06cc\u06cc \u0648 \u06a9\u0627\u0631\u0627\u06cc\u06cc \u0622\u0646 \u0631\u0627 \u0628\u0647\u0628\u0648\u062f \u0628\u062e\u0634\u0646\u062f \u0648 \u062f\u0631 \u0639\u06cc\u0646 \u062d\u0627\u0644 \u0627\u0637\u0645\u06cc\u0646\u0627\u0646 \u062d\u0627\u0635\u0644 \u06a9\u0646\u0646\u062f \u06a9\u0647 \u0622\u0632\u0645\u0648\u0646 \u0647\u0645\u0686\u0646\u0627\u0646 \u0645\u0648\u0641\u0642 \u0627\u0633\u062a.  \u0627\u06cc\u0646 \u0645\u0631\u062d\u0644\u0647 \u0628\u0631\u0627\u06cc \u062d\u0641\u0638 \u06cc\u06a9 \u067e\u0627\u06cc\u06af\u0627\u0647 \u06a9\u062f \u062a\u0645\u06cc\u0632 \u0648 \u0642\u0627\u0628\u0644 \u0646\u06af\u0647\u062f\u0627\u0631\u06cc \u0628\u0633\u06cc\u0627\u0631 \u0645\u0647\u0645 \u0627\u0633\u062a.<\/p>\n<\/li>\n<\/ol>\n<p>\u0627\u06cc\u0646 \u0645\u0631\u0627\u062d\u0644 \u0628\u0647 \u0637\u0648\u0631 \u0645\u06a9\u0631\u0631 \u0628\u0631\u0627\u06cc \u0647\u0631 \u0628\u062e\u0634 \u0627\u0632 \u0639\u0645\u0644\u06a9\u0631\u062f \u062a\u06a9\u0631\u0627\u0631 \u0645\u06cc \u0634\u0648\u0646\u062f\u060c \u06a9\u0647 \u0645\u0646\u062c\u0631 \u0628\u0647 \u0645\u062c\u0645\u0648\u0639\u0647 \u0627\u06cc \u062c\u0627\u0645\u0639 \u0627\u0632 \u062a\u0633\u062a \u0647\u0627 \u0645\u06cc \u0634\u0648\u062f \u06a9\u0647 \u06a9\u0644 \u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u0627 \u067e\u0648\u0634\u0634 \u0645\u06cc \u062f\u0647\u062f.<\/p>\n<p>\u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0645\u0645\u06a9\u0646 \u0627\u0633\u062a \u0628\u067e\u0631\u0633\u06cc\u062f \u0686\u0647 \u0641\u0648\u0627\u06cc\u062f\u06cc \u062f\u0627\u0631\u062f\u060c \u062e\u0648\u0628 \u062f\u0631 \u0686\u0646\u062f\u06cc\u0646 \u0645\u0648\u0631\u062f \u0628\u0647 \u0634\u0645\u0627 \u06a9\u0645\u06a9 \u0645\u06cc \u06a9\u0646\u062f:<\/p>\n<ul>\n<li>\n<p>\u0628\u0647\u0628\u0648\u062f \u06a9\u06cc\u0641\u06cc\u062a \u06a9\u062f: \u0646\u0648\u0634\u062a\u0646 \u062a\u0633\u062a \u0642\u0628\u0644 \u0627\u0632 \u06a9\u062f \u0648\u0627\u0642\u0639\u06cc\u060c \u0634\u0645\u0627 \u0631\u0627 \u062a\u0634\u0648\u06cc\u0642 \u0645\u06cc\u200c\u06a9\u0646\u062f \u062a\u0627 \u062f\u0631 \u0645\u0648\u0631\u062f \u0631\u0641\u062a\u0627\u0631 \u0648 \u0637\u0631\u0627\u062d\u06cc \u0645\u0648\u0631\u062f \u0646\u0638\u0631 \u0628\u0647 \u0637\u0648\u0631 \u0627\u0646\u062a\u0642\u0627\u062f\u06cc \u0641\u06a9\u0631 \u06a9\u0646\u06cc\u062f\u060c \u06a9\u0647 \u0645\u0646\u062c\u0631 \u0628\u0647 \u06a9\u062f \u062a\u0645\u06cc\u0632\u062a\u0631 \u0648 \u0642\u0627\u0628\u0644 \u0627\u0639\u062a\u0645\u0627\u062f\u062a\u0631 \u0645\u06cc\u200c\u0634\u0648\u062f.<\/p>\n<\/li>\n<li>\n<p>\u0627\u0634\u06a9\u0627\u0644\u200c\u0632\u062f\u0627\u06cc\u06cc \u0622\u0633\u0627\u0646\u200c\u062a\u0631: \u0647\u0646\u06af\u0627\u0645\u06cc \u06a9\u0647 \u06cc\u06a9 \u062a\u0633\u062a \u0628\u0627 \u0634\u06a9\u0633\u062a \u0645\u0648\u0627\u062c\u0647 \u0645\u06cc\u200c\u0634\u0648\u062f\u060c \u0634\u0646\u0627\u0633\u0627\u06cc\u06cc \u0648 \u0631\u0641\u0639 \u0645\u0634\u06a9\u0644 \u0628\u0633\u06cc\u0627\u0631 \u0622\u0633\u0627\u0646\u200c\u062a\u0631 \u0627\u0633\u062a\u060c \u0632\u06cc\u0631\u0627 \u0622\u0632\u0645\u0627\u06cc\u0634 \u0628\u0631 \u0631\u0648\u06cc \u0639\u0645\u0644\u06a9\u0631\u062f \u062e\u0627\u0635\u06cc \u0645\u062a\u0645\u0631\u06a9\u0632 \u0627\u0633\u062a.<\/p>\n<\/li>\n<li>\n<p>\u062a\u0648\u0633\u0639\u0647 \u0633\u0631\u06cc\u0639\u062a\u0631: \u0628\u0627 \u0634\u0646\u0627\u0633\u0627\u06cc\u06cc \u062e\u0637\u0627\u0647\u0627 \u062f\u0631 \u0645\u0631\u0627\u062d\u0644 \u0627\u0648\u0644\u06cc\u0647 \u062a\u0648\u0633\u0639\u0647\u060c TDD \u0628\u0647 \u062c\u0644\u0648\u06af\u06cc\u0631\u06cc \u0627\u0632 \u062c\u0644\u0633\u0627\u062a \u0627\u0634\u06a9\u0627\u0644 \u0632\u062f\u0627\u06cc\u06cc \u067e\u0631\u0647\u0632\u06cc\u0646\u0647 \u0648 \u0648\u0642\u062a \u06af\u06cc\u0631 \u062f\u0631 \u0622\u06cc\u0646\u062f\u0647 \u06a9\u0645\u06a9 \u0645\u06cc \u06a9\u0646\u062f.<\/p>\n<\/li>\n<li>\n<p>\u0647\u0645\u06a9\u0627\u0631\u06cc \u0628\u0647\u062a\u0631: \u062f\u0631\u06a9 \u0648 \u0627\u0635\u0644\u0627\u062d \u06cc\u06a9 \u067e\u0627\u06cc\u06af\u0627\u0647 \u06a9\u062f \u062e\u0648\u0628 \u0628\u0631\u0627\u06cc \u0633\u0627\u06cc\u0631 \u0627\u0639\u0636\u0627\u06cc \u062a\u06cc\u0645 \u0622\u0633\u0627\u0646 \u062a\u0631 \u0627\u0633\u062a\u060c \u0647\u0645\u06a9\u0627\u0631\u06cc \u0631\u0627 \u062a\u0633\u0647\u06cc\u0644 \u0645\u06cc \u06a9\u0646\u062f \u0648 \u0627\u062d\u062a\u0645\u0627\u0644 \u0645\u0639\u0631\u0641\u06cc \u0627\u0634\u06a9\u0627\u0644\u0627\u062a \u062c\u062f\u06cc\u062f \u0631\u0627 \u06a9\u0627\u0647\u0634 \u0645\u06cc \u062f\u0647\u062f.<\/p>\n<\/li>\n<li>\n<p>\u0642\u0627\u0628\u0644\u06cc\u062a \u0646\u06af\u0647\u062f\u0627\u0631\u06cc \u067e\u06cc\u0634\u0631\u0641\u062a\u0647: \u0645\u062c\u0645\u0648\u0639\u0647 \u0622\u0632\u0645\u0627\u06cc\u0634\u06cc \u062c\u0627\u0645\u0639 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u06cc\u06a9 \u0634\u0628\u06a9\u0647 \u0627\u06cc\u0645\u0646\u06cc \u0639\u0645\u0644 \u0645\u06cc \u06a9\u0646\u062f \u0648 \u062a\u0636\u0645\u06cc\u0646 \u0645\u06cc \u06a9\u0646\u062f \u06a9\u0647 \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0622\u062a\u06cc \u062f\u0631 \u067e\u0627\u06cc\u06af\u0627\u0647 \u06a9\u062f \u0628\u0647 \u0637\u0648\u0631 \u0633\u0647\u0648\u06cc \u0639\u0645\u0644\u06a9\u0631\u062f \u0645\u0648\u062c\u0648\u062f \u0631\u0627 \u0627\u0632 \u0628\u06cc\u0646 \u0646\u0628\u0631\u062f.<\/p>\n<\/li>\n<\/ul>\n<p>\u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0647\u0645\u0647 \u0648 \u0647\u0645\u0647 \u0628\u0633\u06cc\u0627\u0631 \u062e\u0648\u0628 \u0627\u0633\u062a.  \u0627\u0645\u0627 \u0686\u06af\u0648\u0646\u0647 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u0645 \u0622\u0646 \u0631\u0627 \u062f\u0631 CDK \u0648 \u0632\u06cc\u0631\u0633\u0627\u062e\u062a\u200c\u0647\u0627\u06cc \u0633\u0627\u062e\u062a AWS \u0627\u0639\u0645\u0627\u0644 \u06a9\u0646\u06cc\u0645\u061f<\/p>\n<h2><span class=\"ez-toc-section\" id=\"%D8%B3%D9%86%D8%A7%D8%B1%DB%8C%D9%88%DB%8C_%D8%AF%D9%86%DB%8C%D8%A7%DB%8C_%D9%88%D8%A7%D9%82%D8%B9%DB%8C\"><\/span>\n<p>  \u0633\u0646\u0627\u0631\u06cc\u0648\u06cc \u062f\u0646\u06cc\u0627\u06cc \u0648\u0627\u0642\u0639\u06cc<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u06cc\u06a9 \u0633\u0646\u0627\u0631\u06cc\u0648\u06cc \u0648\u0627\u0642\u0639\u06cc\u060c \u0645\u06cc\u200c\u062e\u0648\u0627\u0647\u0645 \u06cc\u06a9 \u0635\u0641 \u0633\u0627\u062f\u0647 \u0648 \u0627\u06cc\u0645\u0646 Simple Queue Service (SQS) \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u0645.  \u067e\u06cc\u0631\u0648\u06cc \u0627\u0632 \u0628\u0647\u062a\u0631\u06cc\u0646 \u0634\u06cc\u0648\u0647 \u0647\u0627\u06cc AWS.  \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u062f\u0633\u062a\u0648\u0631\u0627\u0644\u0639\u0645\u0644 \u0647\u0627\u06cc\u06cc \u06a9\u0647 \u0645\u06cc \u062e\u0648\u0627\u0647\u06cc\u0645 \u0628\u0631\u0627\u06cc \u0635\u0641 SQS \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u0645 \u0639\u0628\u0627\u0631\u062a\u0646\u062f \u0627\u0632:<\/p>\n<ol>\n<li>\u0635\u0641 \u0628\u0627\u06cc\u062f \u0627\u0632 \u0631\u0645\u0632\u06af\u0630\u0627\u0631\u06cc KMS \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u062f<\/li>\n<li>\u0635\u0641 \u0628\u0627\u06cc\u062f \u062f\u0627\u0631\u0627\u06cc \u06cc\u06a9 \u0635\u0641 \u062d\u0631\u0641 \u0645\u0631\u062f\u0647 \u0628\u0627\u0634\u062f \u062a\u0627 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0633\u0631\u0631\u06cc\u0632 \u067e\u06cc\u0627\u0645 \u0647\u0627\u06cc\u06cc \u0639\u0645\u0644 \u06a9\u0646\u062f \u06a9\u0647 \u0642\u0627\u0628\u0644 \u067e\u0631\u062f\u0627\u0632\u0634 \u0646\u06cc\u0633\u062a\u0646\u062f.<\/li>\n<\/ol>\n<p>\u0628\u0639\u062f\u0627\u064b\u060c \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u0645 \u06cc\u06a9 \u062a\u0627\u0628\u0639 \u0644\u0627\u0645\u0628\u062f\u0627 \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u0645 \u06a9\u0647 \u0635\u0641 \u0631\u0627 \u0645\u06cc\u200c\u062e\u0648\u0627\u0646\u062f \u0648 \u067e\u06cc\u0627\u0645 \u0631\u0627 \u062f\u0631 S3 \u0630\u062e\u06cc\u0631\u0647 \u0645\u06cc\u200c\u06a9\u0646\u062f.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"%D8%A8%D8%B1%D9%88_%D8%A8%D8%B3%D8%A7%D8%B2\"><\/span>\n<p>  \u0628\u0631\u0648 \u0628\u0633\u0627\u0632<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u062d\u0627\u0644\u0627 \u0686\u06cc\u0632\u0647\u0627\u06cc \u0633\u0631\u06af\u0631\u0645 \u06a9\u0646\u0646\u062f\u0647 \u0634\u0631\u0648\u0639 \u0645\u06cc \u0634\u0648\u062f.  \u0628\u06cc\u0627\u06cc\u06cc\u062f \u0628\u0627 \u0645\u0642\u062f\u0627\u0631\u062f\u0647\u06cc \u0627\u0648\u0644\u06cc\u0647 \u06cc\u06a9 \u067e\u0631\u0648\u0698\u0647 CDK \u062c\u062f\u06cc\u062f \u0634\u0631\u0648\u0639 \u06a9\u0646\u06cc\u0645.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>\u279c  Hashnode mkdir secure_sqs\n\u279c  Hashnode cd secure_sqs\n\u279c  secure_sqs cdk init app --language=python                                                                                                   \nApplying project template app for python\n\n# Welcome to your CDK Python project!\n\nThis is a blank project for CDK development with Python.\n&lt;...SNIPPIT...&gt;\n\u2705 All done!\n\u279c  secure_sqs git:(main) source .venv\/bin\/activate\n(.venv) \u279c  secure_sqs git:(main)\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>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\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>\u06a9\u0627\u0631\u06cc \u06a9\u0647 \u0645\u0646 \u062f\u0631 \u0628\u0644\u0648\u06a9 \u06a9\u062f \u0628\u0627\u0644\u0627 \u0627\u0646\u062c\u0627\u0645 \u062f\u0627\u062f\u0645 \u0627\u06cc\u062c\u0627\u062f \u06cc\u06a9 \u067e\u0631\u0648\u0698\u0647 CDK \u062c\u062f\u06cc\u062f \u062e\u0627\u0644\u06cc \u062f\u0631 \u06cc\u06a9 \u062f\u0627\u06cc\u0631\u06a9\u062a\u0648\u0631\u06cc safe_sqs \u0627\u0633\u062a.<\/p>\n<p>\u0628\u0627 \u0646\u06af\u0627\u0647\u06cc \u0628\u0647 \u0633\u0627\u062e\u062a\u0627\u0631 \u062f\u0627\u06cc\u0631\u06a9\u062a\u0648\u0631\u06cc CDK\u060c \u0645\u06cc \u0628\u06cc\u0646\u06cc\u062f \u06a9\u0647 \u062f\u0627\u06cc\u0631\u06a9\u062a\u0648\u0631\u06cc \u0628\u0647 \u0646\u0627\u0645 tests \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u062f.  \u0627\u06cc\u0646 \u062c\u0627\u06cc\u06cc \u0627\u0633\u062a \u06a9\u0647 \u0645\u0627 \u0627\u0648\u0644\u06cc\u0646 \u0622\u0632\u0645\u0648\u0646 \u062e\u0648\u062f \u0631\u0627 \u0627\u0636\u0627\u0641\u0647 \u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"%DB%8C%DA%A9_%D8%AA%D8%B3%D8%AA_%D9%86%D8%A7%D9%85%D9%88%D9%81%D9%82_%D8%A8%D9%86%D9%88%DB%8C%D8%B3%DB%8C%D8%AF_%D9%82%D8%B1%D9%85%D8%B2\"><\/span>\n<p>  \u06cc\u06a9 \u062a\u0633\u062a \u0646\u0627\u0645\u0648\u0641\u0642 \u0628\u0646\u0648\u06cc\u0633\u06cc\u062f (\u0642\u0631\u0645\u0632)<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0645\u0627 \u0627\u0632 \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647 \u0627\u0638\u0647\u0627\u0631\u0627\u062a \u06a9\u0647 \u0628\u0627 CDK \u0627\u0631\u0627\u0626\u0647 \u0645\u06cc \u0634\u0648\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f.  \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0628\u06cc\u0634\u062a\u0631 \u062f\u0631 \u0645\u0648\u0631\u062f \u0627\u06cc\u0646 \u0631\u0627 \u0645\u06cc \u062a\u0648\u0627\u0646 \u062f\u0631 \u0627\u0633\u0646\u0627\u062f AWS CDK \u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u06cc\u0627\u0641\u062a.<\/p>\n<p>\u0641\u0627\u06cc\u0644 tests\/unit\/test_secure_sqs_stack.py \u0631\u0627 \u062f\u0631 \u0648\u06cc\u0631\u0627\u06cc\u0634\u06af\u0631 \u06a9\u062f \u0645\u0648\u0631\u062f \u0639\u0644\u0627\u0642\u0647 \u062e\u0648\u062f \u0628\u0627\u0632 \u06a9\u0646\u06cc\u062f.  \u0641\u0627\u06cc\u0644 \u062f\u0631 \u062d\u0627\u0644 \u062d\u0627\u0636\u0631 \u0628\u0627 \u06a9\u062f \u0632\u06cc\u0631 \u0628\u0647 \u0635\u0648\u0631\u062a \u062f\u06cc\u06af \u0628\u062e\u0627\u0631 \u0627\u0633\u062a (\u0628\u0647 \u0632\u06cc\u0631 \u0645\u0631\u0627\u062c\u0639\u0647 \u06a9\u0646\u06cc\u062f).  \u0645\u0646 \u0622\u062e\u0631\u06cc\u0646 \u0628\u0644\u0648\u06a9 \u0631\u0627 \u06a9\u0647 \u062f\u0631 \u0622\u0646 \u0628\u0631\u0631\u0633\u06cc \u0645\u06cc\u200c\u06a9\u0646\u062f \u0622\u06cc\u0627 \u0635\u0641 SQS \u0627\u06cc\u062c\u0627\u062f \u0634\u062f\u0647 \u0627\u0633\u062a\u060c \u06a9\u0627\u0645\u0646\u062a \u06af\u0630\u0627\u0634\u062a\u0647\u200c\u0627\u0645:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight python\"><code><span class=\"kn\">import<\/span> <span class=\"nn\">aws_cdk<\/span> <span class=\"k\">as<\/span> <span class=\"n\">core<\/span>\n<span class=\"kn\">import<\/span> <span class=\"nn\">aws_cdk.assertions<\/span> <span class=\"k\">as<\/span> <span class=\"n\">assertions<\/span>\n\n<span class=\"kn\">from<\/span> <span class=\"nn\">secure_sqs.secure_sqs_stack<\/span> <span class=\"kn\">import<\/span> <span class=\"n\">SecureSqsStack<\/span>\n\n<span class=\"c1\"># example tests. To run these tests, uncomment this file along with the example resource in secure_sqs\/secure_sqs_stack.py\n<\/span><span class=\"k\">def<\/span> <span class=\"nf\">test_sqs_queue_created<\/span><span class=\"p\">():<\/span>\n    <span class=\"n\">app<\/span> <span class=\"o\">=<\/span> <span class=\"n\">core<\/span><span class=\"p\">.<\/span><span class=\"n\">App<\/span><span class=\"p\">()<\/span>\n    <span class=\"n\">stack<\/span> <span class=\"o\">=<\/span> <span class=\"n\">SecureSqsStack<\/span><span class=\"p\">(<\/span><span class=\"n\">app<\/span><span class=\"p\">,<\/span> <span class=\"s\">\"secure-sqs\"<\/span><span class=\"p\">)<\/span>\n    <span class=\"n\">template<\/span> <span class=\"o\">=<\/span> <span class=\"n\">assertions<\/span><span class=\"p\">.<\/span><span class=\"n\">Template<\/span><span class=\"p\">.<\/span><span class=\"n\">from_stack<\/span><span class=\"p\">(<\/span><span class=\"n\">stack<\/span><span class=\"p\">)<\/span>\n\n    <span class=\"n\">template<\/span><span class=\"p\">.<\/span><span class=\"n\">has_resource_properties<\/span><span class=\"p\">(<\/span><span class=\"s\">\"AWS::SQS::Queue\"<\/span><span class=\"p\">,<\/span> <span class=\"p\">{<\/span>\n        <span class=\"s\">\"VisibilityTimeout\"<\/span><span class=\"p\">:<\/span> <span class=\"mi\">300<\/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>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\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\u06af\u0631 \u062a\u0633\u062a \u067e\u0627\u06cc\u062a\u0648\u0646 \u0631\u0627 \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u062f \u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u0627\u062a\u0641\u0627\u0642 \u0645\u06cc\u200c\u0627\u0641\u062a\u062f \u0627\u06cc\u0646 \u0627\u0633\u062a \u06a9\u0647 \u0622\u0632\u0645\u0627\u06cc\u0634 \u0633\u0639\u06cc \u0645\u06cc\u200c\u06a9\u0646\u062f \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u062f \u06a9\u0647 \u0622\u06cc\u0627 \u0627\u0644\u06af\u0648\u06cc CloudFormation \u06a9\u0647 \u0633\u0646\u062a\u0632 \u0645\u06cc\u200c\u0634\u0648\u062f \u062f\u0627\u0631\u0627\u06cc \u062e\u0627\u0635\u06cc\u062a AWS::SQS::Queue \u0627\u0633\u062a \u0648 \u0627\u06cc\u0646\u06a9\u0647 \u0635\u0641 \u062f\u0627\u0631\u0627\u06cc \u0628\u0627\u0632\u0647 \u0632\u0645\u0627\u0646\u06cc \u062f\u06cc\u062f 300 \u062b\u0627\u0646\u06cc\u0647 \u0627\u0633\u062a \u06cc\u0627 \u062e\u06cc\u0631.  \u0627\u0632 \u0622\u0646\u062c\u0627\u06cc\u06cc \u06a9\u0647 \u0645\u0627 \u0647\u06cc\u0686 \u06a9\u062f\u06cc \u0627\u06cc\u062c\u0627\u062f \u0646\u06a9\u0631\u062f\u0647 \u0627\u06cc\u0645\u060c pytest \u0628\u0627\u06cc\u062f \u0634\u06a9\u0633\u062a \u0628\u062e\u0648\u0631\u062f.  \u0628\u06cc\u0627\u06cc\u06cc\u062f \u0627\u06cc\u0646 \u0631\u0627 \u062a\u0633\u062a \u06a9\u0646\u06cc\u0645:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code><span class=\"o\">(<\/span>.venv<span class=\"o\">)<\/span> \u279c  secure_sqs git:<span class=\"o\">(<\/span>main<span class=\"o\">)<\/span> pytest                                                                                              &lt;aws:abn&gt;\n<span class=\"o\">=============================================================<\/span> <span class=\"nb\">test <\/span>session starts <span class=\"o\">=============================================================<\/span>\nplatform darwin <span class=\"nt\">--<\/span> Python 3.9.16, pytest-7.2.0, pluggy-1.0.0\nrootdir: \/Users\/yvthepief\/Code\/Hashnode\/secure_sqs\nplugins: black-0.3.12, typeguard-2.13.3, cov-4.0.0, syrupy-3.0.5\ncollected 1 item                                                                                                                              \n\ntests\/unit\/test_secure_sqs_stack.py F                                                                                                   <span class=\"o\">[<\/span>100%]\n\n<span class=\"o\">==================================================================<\/span> FAILURES <span class=\"o\">===================================================================<\/span>\n___________________________________________________________ test_sqs_queue_created ____________________________________________________________\njsii.errors.JavaScriptError: \n  @jsii\/kernel.RuntimeError: Error: Template has 0 resources with <span class=\"nb\">type <\/span>AWS::SQS::Queue.\n  No matches found\n\n&lt;...SNIPPIT...&gt;\n\n<span class=\"o\">===========================================================<\/span> short <span class=\"nb\">test <\/span>summary info <span class=\"o\">===========================================================<\/span>\nFAILED tests\/unit\/test_secure_sqs_stack.py::test_sqs_queue_created - RuntimeError: Error: Template has 0 resources with <span class=\"nb\">type <\/span>AWS::SQS::Queue.\n<span class=\"o\">==============================================================<\/span> 1 failed <span class=\"k\">in <\/span>3.25s <span class=\"o\">==============================================================<\/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>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\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>\u0647\u0645\u0627\u0646\u0637\u0648\u0631 \u06a9\u0647 \u0645\u06cc \u0628\u06cc\u0646\u06cc\u062f \u0622\u0632\u0645\u0648\u0646 \u0628\u0627 \u0634\u06a9\u0633\u062a \u0645\u0648\u0627\u062c\u0647 \u0634\u062f.  \u0627\u0632 \u0622\u0646\u062c\u0627\u06cc\u06cc \u06a9\u0647 \u0627\u0644\u06af\u0648 \u062f\u0627\u0631\u0627\u06cc 0 \u0645\u0646\u0628\u0639 \u0628\u0627 \u0646\u0648\u0639 AWS::SQS::Queue \u0627\u0633\u062a.  \u0648 \u0627\u06cc\u0646 \u062f\u0631\u0633\u062a \u0627\u0633\u062a\u060c \u0632\u06cc\u0631\u0627 \u0645\u0627 \u0647\u0646\u0648\u0632 \u0647\u06cc\u0686 \u062e\u0637 \u06a9\u062f\u06cc \u0646\u0646\u0648\u0634\u062a\u0647 \u0627\u06cc\u0645.  \u062f\u0631 \u0628\u062e\u0634 Real-World Ssenario \u062a\u0648\u0636\u06cc\u062d \u062f\u0627\u062f\u06cc\u0645 \u06a9\u0647 \u0645\u06cc\u200c\u062e\u0648\u0627\u0647\u06cc\u0645 Queue \u0631\u0645\u0632\u06af\u0630\u0627\u0631\u06cc \u0634\u0648\u062f \u0648 \u062d\u0627\u0648\u06cc \u06cc\u06a9 \u0635\u0641 \u062d\u0631\u0641 \u0645\u0631\u062f\u0647 \u0628\u0627\u0634\u062f.  \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0628\u0631\u0627\u06cc \u0622\u0646 \u062a\u0633\u062a \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f.<\/p>\n<h4><span class=\"ez-toc-section\" id=\"%D8%B5%D9%81_%D8%B1%D9%85%D8%B2%DA%AF%D8%B0%D8%A7%D8%B1%DB%8C_%D8%B4%D8%AF%D9%87_KMS\"><\/span>\n<p>  \u0635\u0641 \u0631\u0645\u0632\u06af\u0630\u0627\u0631\u06cc \u0634\u062f\u0647 KMS<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>\u0627\u0632 \u0622\u0646\u062c\u0627\u06cc\u06cc \u06a9\u0647 \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647 \u0627\u0638\u0647\u0627\u0631\u0627\u062a \u0645\u0648\u0631\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u062a\u0648\u0633\u0637 CDK \u0628\u0647 \u062f\u0646\u0628\u0627\u0644 \u0645\u0637\u0627\u0628\u0642\u062a \u0628\u0627 \u0627\u0644\u06af\u0648\u06cc CloudFormation \u0627\u0633\u062a\u060c \u06cc\u06a9 \u0631\u0648\u06cc\u06a9\u0631\u062f \u0645\u0641\u06cc\u062f \u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u0628\u0627 \u0646\u06af\u0627\u0647 \u06a9\u0631\u062f\u0646 \u0628\u0647 \u0627\u0633\u0646\u0627\u062f \u0631\u0633\u0645\u06cc CloudFormation \u062f\u0631 \u0645\u0646\u0628\u0639 AWS::SQS::Queue \u0628\u0627\u0634\u062f.  \u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0628\u0628\u06cc\u0646\u06cc\u062f \u06a9\u0647 \u0628\u0631\u0627\u06cc \u0627\u0641\u0632\u0648\u062f\u0646 \u0631\u0645\u0632\u06af\u0630\u0627\u0631\u06cc KMS \u0628\u0647 \u06cc\u06a9 \u0635\u0641 SQS\u060c \u0628\u0627\u06cc\u062f KmsMasterKeyId \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u062f.<\/p>\n<p>\u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0628\u0627 \u0627\u06cc\u062c\u0627\u062f \u06cc\u06a9 \u062a\u0633\u062a \u0634\u0631\u0648\u0639 \u06a9\u0646\u06cc\u062f \u06a9\u0647 \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u062f \u0622\u06cc\u0627 \u0635\u0641 \u062d\u0627\u0648\u06cc KmsMasterKeyId \u0627\u0633\u062a \u06cc\u0627 \u062e\u06cc\u0631.  \u0627\u0632 \u0622\u0646\u062c\u0627\u06cc\u06cc \u06a9\u0647 \u0627\u0631\u0632\u0634 \u06a9\u0644\u06cc\u062f \u0631\u0627 \u0646\u0645\u06cc \u062f\u0627\u0646\u06cc\u0645\u060c \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u0645 \u0627\u0632 \u06a9\u0644\u0627\u0633 Match \u0627\u0632 \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647 Assertions \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u0645.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight python\"><code><span class=\"kn\">from<\/span> <span class=\"nn\">aws_cdk.assertions<\/span> <span class=\"kn\">import<\/span> <span class=\"n\">Match<\/span>\n\n<span class=\"k\">def<\/span> <span class=\"nf\">test_sqs_queue_is_encrypted<\/span><span class=\"p\">():<\/span>\n    <span class=\"n\">app<\/span> <span class=\"o\">=<\/span> <span class=\"n\">core<\/span><span class=\"p\">.<\/span><span class=\"n\">App<\/span><span class=\"p\">()<\/span>\n    <span class=\"n\">stack<\/span> <span class=\"o\">=<\/span> <span class=\"n\">SecureSqsStack<\/span><span class=\"p\">(<\/span><span class=\"n\">app<\/span><span class=\"p\">,<\/span> <span class=\"s\">\"secure-sqs\"<\/span><span class=\"p\">)<\/span>\n    <span class=\"n\">template<\/span> <span class=\"o\">=<\/span> <span class=\"n\">assertions<\/span><span class=\"p\">.<\/span><span class=\"n\">Template<\/span><span class=\"p\">.<\/span><span class=\"n\">from_stack<\/span><span class=\"p\">(<\/span><span class=\"n\">stack<\/span><span class=\"p\">)<\/span>\n    <span class=\"n\">template<\/span><span class=\"p\">.<\/span><span class=\"n\">has_resource_properties<\/span><span class=\"p\">(<\/span>\n        <span class=\"s\">\"AWS::SQS::Queue\"<\/span><span class=\"p\">,<\/span> <span class=\"p\">{<\/span><span class=\"s\">\"KmsMasterKeyId\"<\/span><span class=\"p\">:<\/span> <span class=\"n\">Match<\/span><span class=\"p\">.<\/span><span class=\"n\">any_value<\/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>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\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 \u0628\u0644\u0648\u06a9 \u06a9\u062f \u0628\u0627\u0644\u0627 \u0628\u0631\u0631\u0633\u06cc \u0645\u06cc\u200c\u06a9\u0646\u062f \u06a9\u0647 \u0622\u06cc\u0627 \u062f\u0631 \u0627\u0644\u06af\u0648\u06cc CloudFormation\u060c \u06cc\u06a9 \u0645\u0646\u0628\u0639 \u0627\u0632 \u0646\u0648\u0639 &#8220;AWS::SQS::Queue&#8221; \u0627\u0633\u062a \u0648 \u0627\u06cc\u0646\u06a9\u0647 \u0645\u0646\u0628\u0639 \u0628\u0627 \u06cc\u06a9 &#8220;KmsMasterKeyId&#8221; \u0627\u06cc\u062c\u0627\u062f \u0634\u062f\u0647 \u0628\u0627\u0634\u062f\u060c \u0628\u0631\u0631\u0633\u06cc \u0645\u06cc\u200c\u06a9\u0646\u062f.<\/p>\n<p>\u0628\u06cc\u0627\u06cc\u06cc\u062f pytest \u0631\u0627 \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u0645\u060c \u06a9\u0647 \u0627\u0644\u0628\u062a\u0647 \u0634\u06a9\u0633\u062a \u062e\u0648\u0627\u0647\u062f \u062e\u0648\u0631\u062f\u060c btw \u0645\u0646 -v \u0631\u0627 \u0628\u0631\u0627\u06cc verbose\u060c \u0648 &#8211;tb=no \u0631\u0627 \u0628\u0631\u0627\u06cc \u063a\u06cc\u0631\u0641\u0639\u0627\u0644 \u06a9\u0631\u062f\u0646 traceback \u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u0645:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code><span class=\"o\">(<\/span>.venv<span class=\"o\">)<\/span> \u279c  secure_sqs git:<span class=\"o\">(<\/span>main<span class=\"o\">)<\/span> \u2717 pytest <span class=\"nt\">-v<\/span> <span class=\"nt\">--tb<\/span><span class=\"o\">=<\/span>no                                                                                 &lt;aws:abn&gt;\n<span class=\"o\">=============================================================<\/span> <span class=\"nb\">test <\/span>session starts <span class=\"o\">=============================================================<\/span>\nplatform darwin <span class=\"nt\">--<\/span> Python 3.9.16, pytest-7.2.0, pluggy-1.0.0 <span class=\"nt\">--<\/span> \/opt\/homebrew\/opt\/python@3.9\/bin\/python3.9\ncachedir: .pytest_cache\nrootdir: \/Users\/yvthepief\/Code\/Hashnode\/secure_sqs\nplugins: black-0.3.12, typeguard-2.13.3, cov-4.0.0, syrupy-3.0.5\ncollected 2 items                                                                                                                             \n\ntests\/unit\/test_secure_sqs_stack.py::test_sqs_queue_created FAILED                                                                      <span class=\"o\">[<\/span> 50%]\ntests\/unit\/test_secure_sqs_stack.py::test_sqs_queue_is_encrypted FAILED                                                                 <span class=\"o\">[<\/span>100%]\n\n<span class=\"nt\">-----------------------------------------------------------<\/span> snapshot report summary <span class=\"nt\">-----------------------------------------------------------<\/span>\n\n<span class=\"o\">===========================================================<\/span> short <span class=\"nb\">test <\/span>summary info <span class=\"o\">===========================================================<\/span>\nFAILED tests\/unit\/test_secure_sqs_stack.py::test_sqs_queue_created - RuntimeError: Error: Template has 0 resources with <span class=\"nb\">type <\/span>AWS::SQS::Queue.\nFAILED tests\/unit\/test_secure_sqs_stack.py::test_sqs_queue_is_encrypted - RuntimeError: Error: Template has 0 resources with <span class=\"nb\">type <\/span>AWS::SQS::Queue.\n<span class=\"o\">==============================================================<\/span> 2 failed <span class=\"k\">in <\/span>3.22s <span class=\"o\">==============================================================<\/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>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\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\u06a9\u0646\u0648\u0646 1 \u062a\u0633\u062a \u062f\u06cc\u06af\u0631 \u0628\u0631\u0627\u06cc DeadLetterQueue \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u062f.<\/p>\n<h4><span class=\"ez-toc-section\" id=\"%D8%B5%D9%81_%D9%86%D8%A7%D9%85%D9%87_%D9%85%D8%B1%D8%AF%D9%87_%D9%85%D8%AA%D8%B5%D9%84_%D8%A8%D9%87_%D8%B5%D9%81\"><\/span>\n<p>  \u0635\u0641 \u0646\u0627\u0645\u0647 \u0645\u0631\u062f\u0647 \u0645\u062a\u0635\u0644 \u0628\u0647 \u0635\u0641<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>\u062f\u0631 \u0632\u0645\u06cc\u0646\u0647 SQS\u060c \u0635\u0641 \u062d\u0631\u0641 \u0645\u0631\u062f\u0647 \u0635\u0641\u06cc \u0627\u0633\u062a \u06a9\u0647 \u0628\u0631\u0627\u06cc \u0630\u062e\u06cc\u0631\u0647 \u067e\u06cc\u0627\u0645\u200c\u0647\u0627\u06cc\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u200c\u0634\u0648\u062f \u06a9\u0647 \u067e\u0633 \u0627\u0632 \u062a\u0639\u062f\u0627\u062f \u0645\u0639\u06cc\u0646\u06cc \u062a\u0644\u0627\u0634 \u0645\u062c\u062f\u062f \u062a\u0648\u0633\u0637 \u0635\u0641 \u0627\u0635\u0644\u06cc \u0642\u0627\u0628\u0644 \u067e\u0631\u062f\u0627\u0632\u0634 \u0646\u06cc\u0633\u062a\u0646\u062f.  \u0627\u06cc\u0646 \u067e\u06cc\u0627\u0645\u200c\u0647\u0627 \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u067e\u06cc\u0627\u0645\u200c\u0647\u0627\u06cc \u0646\u0627\u0645\u0648\u0641\u0642\u06cc \u0647\u0633\u062a\u0646\u062f \u06a9\u0647 \u0628\u0647 \u062f\u0644\u06cc\u0644 \u0645\u0634\u06a9\u0644\u0627\u062a\u06cc \u0645\u0627\u0646\u0646\u062f \u0642\u0627\u0644\u0628\u200c\u0628\u0646\u062f\u06cc \u0646\u0627\u062f\u0631\u0633\u062a \u067e\u06cc\u0627\u0645 \u06cc\u0627 \u0627\u0633\u062a\u062b\u0646\u0627\u0647\u0627\u06cc \u06a9\u0646\u062a\u0631\u0644 \u0646\u0634\u062f\u0647 \u062f\u0631 \u06a9\u062f \u067e\u0631\u062f\u0627\u0632\u0634\u060c fe Lambda\u060c \u0642\u0627\u0628\u0644 \u067e\u0631\u062f\u0627\u0632\u0634 \u0646\u06cc\u0633\u062a\u0646\u062f.  \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 DLQ\u060c \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u062f \u067e\u06cc\u0627\u0645\u200c\u0647\u0627\u06cc \u0645\u0634\u06a9\u0644\u200c\u0633\u0627\u0632 \u0631\u0627 \u062c\u062f\u0627 \u06a9\u0631\u062f\u0647 \u0648 \u0639\u0644\u062a \u0627\u0635\u0644\u06cc \u0622\u0646 \u0631\u0627 \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u06cc\u062f.  \u0627\u06cc\u0646 \u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u0628\u0647 \u0634\u0645\u0627 \u06a9\u0645\u06a9 \u06a9\u0646\u062f \u0645\u0634\u06a9\u0644\u0627\u062a \u0645\u0648\u062c\u0648\u062f \u062f\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u062e\u0648\u062f \u0631\u0627 \u0634\u0646\u0627\u0633\u0627\u06cc\u06cc \u0648 \u0628\u0631\u0637\u0631\u0641 \u06a9\u0646\u06cc\u062f \u0648 \u0627\u0632 \u0628\u0631\u0648\u0632 \u062e\u0637\u0627\u0647\u0627\u06cc \u0645\u0634\u0627\u0628\u0647 \u062f\u0631 \u0622\u06cc\u0646\u062f\u0647 \u062c\u0644\u0648\u06af\u06cc\u0631\u06cc \u06a9\u0646\u06cc\u062f.  \u0647\u0645\u0686\u0646\u06cc\u0646\u060c \u0628\u0647 \u0634\u0645\u0627 \u0627\u06cc\u0646 \u0627\u0645\u06a9\u0627\u0646 \u0631\u0627 \u0645\u06cc \u062f\u0647\u062f \u06a9\u0647 \u06cc\u06a9 \u0628\u0627\u0631 \u062f\u06cc\u06af\u0631 \u067e\u06cc\u0627\u0645 \u0647\u0627\u06cc \u0634\u06a9\u0633\u062a \u062e\u0648\u0631\u062f\u0647 \u0631\u0627 \u062f\u0648\u0628\u0627\u0631\u0647 \u067e\u0631\u062f\u0627\u0632\u0634 \u06a9\u0646\u06cc\u062f.<\/p>\n<p>\u0628\u0627 \u0646\u06af\u0627\u0647\u06cc \u062f\u0648\u0628\u0627\u0631\u0647 \u0628\u0647 \u0645\u0633\u062a\u0646\u062f\u0627\u062a CloudFormation &#8220;AWS::SQS::Queue&#8221;\u060c \u0645\u06cc \u0628\u06cc\u0646\u06cc\u0645 \u06a9\u0647 \u0628\u0627\u06cc\u062f \u06cc\u06a9 RedrivePolicy \u0628\u0627 deadletterTargetArn \u0627\u0631\u0627\u0626\u0647 \u062f\u0647\u06cc\u062f \u06a9\u0647 \u0628\u0647 \u06cc\u06a9 \u0635\u0641 \u0627\u0634\u0627\u0631\u0647 \u0645\u06cc \u06a9\u0646\u062f \u06a9\u0647 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u06cc\u06a9 \u0635\u0641 \u062d\u0631\u0641 \u0645\u0631\u062f\u0647 \u0639\u0645\u0644 \u0645\u06cc \u06a9\u0646\u062f.  \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u062a\u0633\u062a \u0631\u0627 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight python\"><code><span class=\"k\">def<\/span> <span class=\"nf\">test_sqs_queue_has_dead_letter_queue<\/span><span class=\"p\">():<\/span>\n    <span class=\"n\">app<\/span> <span class=\"o\">=<\/span> <span class=\"n\">core<\/span><span class=\"p\">.<\/span><span class=\"n\">App<\/span><span class=\"p\">()<\/span>\n    <span class=\"n\">stack<\/span> <span class=\"o\">=<\/span> <span class=\"n\">SecureSqsStack<\/span><span class=\"p\">(<\/span><span class=\"n\">app<\/span><span class=\"p\">,<\/span> <span class=\"s\">\"secure-sqs\"<\/span><span class=\"p\">)<\/span>\n    <span class=\"n\">template<\/span> <span class=\"o\">=<\/span> <span class=\"n\">assertions<\/span><span class=\"p\">.<\/span><span class=\"n\">Template<\/span><span class=\"p\">.<\/span><span class=\"n\">from_stack<\/span><span class=\"p\">(<\/span><span class=\"n\">stack<\/span><span class=\"p\">)<\/span>\n    <span class=\"n\">template<\/span><span class=\"p\">.<\/span><span class=\"n\">has_resource_properties<\/span><span class=\"p\">(<\/span>\n        <span class=\"s\">\"AWS::SQS::Queue\"<\/span><span class=\"p\">,<\/span> <span class=\"p\">{<\/span><span class=\"s\">\"RedrivePolicy\"<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span><span class=\"s\">\"deadLetterTargetArn\"<\/span><span class=\"p\">:<\/span> <span class=\"n\">Match<\/span><span class=\"p\">.<\/span><span class=\"n\">any_value<\/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>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\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>\u0645\u062c\u062f\u062f\u0627\u064b \u0627\u0632 \u0639\u0628\u0627\u0631\u062a Match any value \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u06cc\u0645 \u0632\u06cc\u0631\u0627 \u062f\u0631 \u062d\u0627\u0644 \u062d\u0627\u0636\u0631 \u0627\u0632 \u0635\u0641 \u0622\u0631\u0646 \u062d\u0631\u0641 \u0645\u0631\u062f\u0647 \u0627\u0637\u0644\u0627\u0639\u06cc \u0646\u062f\u0627\u0631\u06cc\u0645.<\/p>\n<p>\u0627\u062c\u0631\u0627\u06cc pytest \u0628\u0627\u06cc\u062f \u0627\u06a9\u0646\u0648\u0646 \u062f\u0631 3 \u062a\u0633\u062a \u0634\u06a9\u0633\u062a \u0628\u062e\u0648\u0631\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code>FAILED tests\/unit\/test_secure_sqs_stack.py::test_sqs_queue_created - RuntimeError: Error: Template has 0 resources with <span class=\"nb\">type <\/span>AWS::SQS::Queue.\nFAILED tests\/unit\/test_secure_sqs_stack.py::test_sqs_queue_is_encrypted - RuntimeError: Error: Template has 0 resources with <span class=\"nb\">type <\/span>AWS::SQS::Queue.\nFAILED tests\/unit\/test_secure_sqs_stack.py::test_sqs_queue_has_dead_letter_queue - RuntimeError: Error: Template has 0 resources with <span class=\"nb\">type <\/span>AWS::SQS::Queue.\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>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\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<h3><span class=\"ez-toc-section\" id=\"%DA%A9%D8%AF_%D9%82%D8%A8%D9%88%D9%84%DB%8C_%D8%AF%D8%B1_%D8%A2%D8%B2%D9%85%D9%88%D9%86_%D8%B1%D8%A7_%D8%A8%D9%86%D9%88%DB%8C%D8%B3%DB%8C%D8%AF_%D8%B3%D8%A8%D8%B2\"><\/span>\n<p>  \u06a9\u062f \u0642\u0628\u0648\u0644\u06cc \u062f\u0631 \u0622\u0632\u0645\u0648\u0646 \u0631\u0627 \u0628\u0646\u0648\u06cc\u0633\u06cc\u062f (\u0633\u0628\u0632)<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<h4><span class=\"ez-toc-section\" id=\"%D8%A7%DB%8C%D8%AC%D8%A7%D8%AF_%D8%B5%D9%81_SQS_%D8%A8%D8%A7_CDK\"><\/span>\n<p>  \u0627\u06cc\u062c\u0627\u062f \u0635\u0641 SQS \u0628\u0627 CDK<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>\u0647\u0645\u0627\u0646\u0637\u0648\u0631 \u06a9\u0647 \u0645\u0627 \u062a\u0633\u062a \u0647\u0627\u06cc \u0627\u0648\u0644\u06cc\u0647 \u062e\u0648\u062f \u0631\u0627 \u0628\u0647 \u067e\u0627\u06cc\u0627\u0646 \u0631\u0633\u0627\u0646\u062f\u06cc\u0645\u060c \u0627\u06a9\u0646\u0648\u0646 \u0628\u0627\u06cc\u062f \u0622\u0632\u0645\u0648\u0646 \u0648\u0627\u0642\u0639\u06cc \u0631\u0627 \u0628\u0631\u0627\u06cc \u0642\u0628\u0648\u0644\u06cc \u062f\u0631 \u062a\u0633\u062a \u0647\u0627 \u0628\u0646\u0648\u06cc\u0633\u06cc\u0645.  \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u06cc\u06a9 \u0635\u0641 SQS \u0631\u0645\u0632\u06af\u0630\u0627\u0631\u06cc \u0634\u062f\u0647 \u0628\u0627 \u0635\u0641 \u062d\u0631\u0641 \u0645\u0631\u062f\u0647 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f.<\/p>\n<p>\u0641\u0627\u06cc\u0644 safe_sqs\/secure_sqs_stack.py \u0631\u0627 \u0628\u0627\u0632 \u06a9\u0646\u06cc\u062f.  \u0627\u06cc\u0646 \u0641\u0627\u06cc\u0644 \u06cc\u06a9 \u062f\u06cc\u06af \u0628\u062e\u0627\u0631 \u0646\u06cc\u0632 \u062f\u0627\u0631\u062f\u060c \u0627\u0645\u0627 \u0645\u0627 \u0642\u0635\u062f \u062f\u0627\u0631\u06cc\u0645 \u0622\u0646 \u0631\u0627 \u062a\u0646\u0638\u06cc\u0645 \u06a9\u0646\u06cc\u0645.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight python\"><code><span class=\"kn\">from<\/span> <span class=\"nn\">aws_cdk<\/span> <span class=\"kn\">import<\/span> <span class=\"p\">(<\/span>\n    <span class=\"n\">Duration<\/span><span class=\"p\">,<\/span>\n    <span class=\"n\">Stack<\/span><span class=\"p\">,<\/span>\n    <span class=\"n\">aws_kms<\/span><span class=\"p\">,<\/span>\n    <span class=\"n\">aws_sqs<\/span><span class=\"p\">,<\/span>\n<span class=\"p\">)<\/span>\n<span class=\"kn\">from<\/span> <span class=\"nn\">constructs<\/span> <span class=\"kn\">import<\/span> <span class=\"n\">Construct<\/span>\n\n\n<span class=\"k\">class<\/span> <span class=\"nc\">SecureSqsStack<\/span><span class=\"p\">(<\/span><span class=\"n\">Stack<\/span><span class=\"p\">):<\/span>\n    <span class=\"k\">def<\/span> <span class=\"nf\">__init__<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"p\">,<\/span> <span class=\"n\">scope<\/span><span class=\"p\">:<\/span> <span class=\"n\">Construct<\/span><span class=\"p\">,<\/span> <span class=\"n\">construct_id<\/span><span class=\"p\">:<\/span> <span class=\"nb\">str<\/span><span class=\"p\">,<\/span> <span class=\"o\">**<\/span><span class=\"n\">kwargs<\/span><span class=\"p\">)<\/span> <span class=\"o\">-&gt;<\/span> <span class=\"bp\">None<\/span><span class=\"p\">:<\/span>\n        <span class=\"nb\">super<\/span><span class=\"p\">().<\/span><span class=\"n\">__init__<\/span><span class=\"p\">(<\/span><span class=\"n\">scope<\/span><span class=\"p\">,<\/span> <span class=\"n\">construct_id<\/span><span class=\"p\">,<\/span> <span class=\"o\">**<\/span><span class=\"n\">kwargs<\/span><span class=\"p\">)<\/span>\n\n        <span class=\"c1\"># Create key with rotation and alias\n<\/span>        <span class=\"n\">key<\/span> <span class=\"o\">=<\/span> <span class=\"n\">aws_kms<\/span><span class=\"p\">.<\/span><span class=\"n\">Key<\/span><span class=\"p\">(<\/span>\n            <span class=\"bp\">self<\/span><span class=\"p\">,<\/span>\n            <span class=\"s\">\"SecureQueueKmsKey\"<\/span><span class=\"p\">,<\/span>\n            <span class=\"n\">alias<\/span><span class=\"o\">=<\/span><span class=\"s\">\"\/kms\/secure_queue_key\"<\/span><span class=\"p\">,<\/span>\n            <span class=\"n\">enable_key_rotation<\/span><span class=\"o\">=<\/span><span class=\"bp\">True<\/span><span class=\"p\">,<\/span>\n            <span class=\"n\">description<\/span><span class=\"o\">=<\/span><span class=\"s\">\"Key for encrypting SQS queue\"<\/span><span class=\"p\">,<\/span>\n        <span class=\"p\">)<\/span>\n        <span class=\"c1\"># Create secure encrypted queue with \n<\/span>        <span class=\"c1\"># visibility timeout of 300 seconds\n<\/span>        <span class=\"n\">queue<\/span> <span class=\"o\">=<\/span> <span class=\"n\">aws_sqs<\/span><span class=\"p\">.<\/span><span class=\"n\">Queue<\/span><span class=\"p\">(<\/span>\n            <span class=\"bp\">self<\/span><span class=\"p\">,<\/span>\n            <span class=\"s\">\"SecureQueue\"<\/span><span class=\"p\">,<\/span>\n            <span class=\"n\">queue_name<\/span><span class=\"o\">=<\/span><span class=\"s\">\"secure_queue\"<\/span><span class=\"p\">,<\/span>\n            <span class=\"n\">encryption<\/span><span class=\"o\">=<\/span><span class=\"n\">aws_sqs<\/span><span class=\"p\">.<\/span><span class=\"n\">QueueEncryption<\/span><span class=\"p\">.<\/span><span class=\"n\">KMS<\/span><span class=\"p\">,<\/span>\n            <span class=\"n\">encryption_master_key<\/span><span class=\"o\">=<\/span><span class=\"n\">key<\/span><span class=\"p\">,<\/span>\n            <span class=\"n\">enforce_ssl<\/span><span class=\"o\">=<\/span><span class=\"bp\">True<\/span><span class=\"p\">,<\/span>\n            <span class=\"n\">visibility_timeout<\/span><span class=\"o\">=<\/span><span class=\"n\">Duration<\/span><span class=\"p\">.<\/span><span class=\"n\">seconds<\/span><span class=\"p\">(<\/span><span class=\"mi\">300<\/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>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\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>\u0628\u0627 \u0646\u06af\u0627\u0647\u06cc \u0628\u0647 \u06a9\u062f \u0628\u0627\u0644\u0627\u060c \u06cc\u06a9 \u06a9\u0644\u06cc\u062f \u0645\u062f\u06cc\u0631\u06cc\u062a \u0634\u062f\u0647 \u0633\u0641\u0627\u0631\u0634\u06cc KMS \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u06a9\u0646\u06cc\u0645 \u06a9\u0647 \u062f\u0627\u0631\u0627\u06cc \u0646\u0627\u0645 \u0645\u0633\u062a\u0639\u0627\u0631 \u0648 \u0686\u0631\u062e\u0634 \u06a9\u0644\u06cc\u062f \u0641\u0639\u0627\u0644 \u0627\u0633\u062a.  \u0627\u06cc\u0646 \u06a9\u0644\u06cc\u062f \u0628\u0631\u0627\u06cc \u0631\u0645\u0632\u06af\u0630\u0627\u0631\u06cc \u0635\u0641 SQS \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u062e\u0648\u0627\u0647\u062f \u0634\u062f.  \u0645\u0627 \u0647\u0645\u0686\u0646\u06cc\u0646 \u06cc\u06a9 \u062e\u0637 \u0645\u0634\u06cc \u0635\u0641 \u062a\u0646\u0638\u06cc\u0645 \u06a9\u0631\u062f\u06cc\u0645 \u062a\u0627 \u0641\u0642\u0637 \u0628\u0647 \u062d\u0645\u0644 \u0648 \u0646\u0642\u0644 \u0627\u06cc\u0645\u0646 (SSL) \u0627\u062c\u0627\u0632\u0647 \u062f\u0647\u062f.  \u062f\u0631 \u0646\u0647\u0627\u06cc\u062a\u060c \u0647\u0645\u0627\u0646\u0637\u0648\u0631 \u06a9\u0647 \u062f\u0631 \u062a\u0633\u062a\u200c\u0647\u0627\u06cc \u0627\u06cc\u062c\u0627\u062f \u0634\u062f\u0647 \u0642\u0628\u0644\u06cc \u0645\u0634\u062e\u0635 \u0634\u062f\u060c 300 \u062b\u0627\u0646\u06cc\u0647 \u0628\u0631\u0627\u06cc \u0628\u0627\u0632\u0647 \u0632\u0645\u0627\u0646\u06cc \u062f\u06cc\u062f \u062a\u0639\u06cc\u06cc\u0646 \u06a9\u0631\u062f\u06cc\u0645.<\/p>\n<p>\u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0628\u0627 \u0627\u06cc\u062c\u0627\u062f \u0635\u0641\u060c \u0628\u06cc\u0627\u06cc\u06cc\u062f \u0646\u06af\u0627\u0647\u06cc \u0628\u0647 \u0646\u062d\u0648\u0647 \u0627\u062c\u0631\u0627\u06cc \u062a\u0633\u062a \u0647\u0627 \u0628\u06cc\u0646\u062f\u0627\u0632\u06cc\u0645:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code><span class=\"o\">(<\/span>.venv<span class=\"o\">)<\/span> \u279c  secure_sqs git:<span class=\"o\">(<\/span>main<span class=\"o\">)<\/span> \u2717 pytest <span class=\"nt\">-v<\/span> <span class=\"nt\">--tb<\/span><span class=\"o\">=<\/span>no\n<span class=\"o\">==================================================================<\/span> <span class=\"nb\">test <\/span>session starts <span class=\"o\">==================================================================<\/span>\nplatform darwin <span class=\"nt\">--<\/span> Python 3.11.3, pytest-6.2.5, py-1.11.0, pluggy-1.0.0 <span class=\"nt\">--<\/span> \/Users\/yvthepief\/Code\/Hashnode\/secure_sqs\/.venv\/bin\/python3.11\ncachedir: .pytest_cache\nrootdir: \/Users\/yvthepief\/Code\/Hashnode\/secure_sqs\nplugins: typeguard-2.13.3\ncollected 3 items                                                                                                                                       \n\ntests\/unit\/test_secure_sqs_stack.py::test_sqs_queue_created PASSED                                                                                <span class=\"o\">[<\/span> 33%]\ntests\/unit\/test_secure_sqs_stack.py::test_sqs_queue_is_encrypted PASSED                                                                           <span class=\"o\">[<\/span> 66%]\ntests\/unit\/test_secure_sqs_stack.py::test_sqs_queue_has_dead_letter_queue FAILED                                                                  <span class=\"o\">[<\/span>100%]\n\n<span class=\"o\">================================================================<\/span> short <span class=\"nb\">test <\/span>summary info <span class=\"o\">================================================================<\/span>\nFAILED tests\/unit\/test_secure_sqs_stack.py::test_sqs_queue_has_dead_letter_queue - RuntimeError: Error: Template has 1 resources with <span class=\"nb\">type <\/span>AWS::SQS::Q...\n<span class=\"o\">==============================================================<\/span> 1 failed, 2 passed <span class=\"k\">in <\/span>5.01s <span class=\"o\">==============================================================<\/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>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\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>2 \u0627\u0632 3 \u0642\u0628\u0644\u0627 \u06af\u0630\u0634\u062a.  \u0627\u0645\u0627 \u0647\u0646\u0648\u0632 \u0622\u0646 100 \u062f\u0631\u0635\u062f\u06cc \u06a9\u0647 \u0645\u0627 \u062f\u0631 \u0646\u0638\u0631 \u062f\u0627\u0631\u06cc\u0645 \u0646\u06cc\u0633\u062a.  \u0628\u0631\u0627\u06cc \u0627\u06cc\u0646\u06a9\u0647 test_sqs_queue_has_dead_letter_queue \u0646\u06cc\u0632 \u067e\u0627\u0633 \u0634\u0648\u062f\u060c \u0628\u0627\u06cc\u062f \u06cc\u06a9 Dead Letter Queue \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u0645.  \u0635\u0641 \u062d\u0631\u0641 \u0645\u0631\u062f\u0647 \u0631\u0627 \u0628\u06cc\u0646 \u06a9\u0644\u06cc\u062f \u0648 \u0635\u0641 \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u062f \u0648 \u0628\u0647 \u0645\u0646\u0628\u0639 \u0635\u0641 \u062d\u0631\u0641 \u0645\u0631\u062f\u0647 \u0628\u0631\u0627\u06cc \u0635\u0641 \u0645\u0631\u0627\u062c\u0639\u0647 \u06a9\u0646\u06cc\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight python\"><code><span class=\"kn\">from<\/span> <span class=\"nn\">aws_cdk<\/span> <span class=\"kn\">import<\/span> <span class=\"p\">(<\/span>\n    <span class=\"n\">Duration<\/span><span class=\"p\">,<\/span>\n    <span class=\"n\">Stack<\/span><span class=\"p\">,<\/span>\n    <span class=\"n\">aws_kms<\/span><span class=\"p\">,<\/span>\n    <span class=\"n\">aws_sqs<\/span><span class=\"p\">,<\/span>\n<span class=\"p\">)<\/span>\n<span class=\"kn\">from<\/span> <span class=\"nn\">constructs<\/span> <span class=\"kn\">import<\/span> <span class=\"n\">Construct<\/span>\n\n\n<span class=\"k\">class<\/span> <span class=\"nc\">SecureSqsStack<\/span><span class=\"p\">(<\/span><span class=\"n\">Stack<\/span><span class=\"p\">):<\/span>\n    <span class=\"k\">def<\/span> <span class=\"nf\">__init__<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"p\">,<\/span> <span class=\"n\">scope<\/span><span class=\"p\">:<\/span> <span class=\"n\">Construct<\/span><span class=\"p\">,<\/span> <span class=\"n\">construct_id<\/span><span class=\"p\">:<\/span> <span class=\"nb\">str<\/span><span class=\"p\">,<\/span> <span class=\"o\">**<\/span><span class=\"n\">kwargs<\/span><span class=\"p\">)<\/span> <span class=\"o\">-&gt;<\/span> <span class=\"bp\">None<\/span><span class=\"p\">:<\/span>\n        <span class=\"nb\">super<\/span><span class=\"p\">().<\/span><span class=\"n\">__init__<\/span><span class=\"p\">(<\/span><span class=\"n\">scope<\/span><span class=\"p\">,<\/span> <span class=\"n\">construct_id<\/span><span class=\"p\">,<\/span> <span class=\"o\">**<\/span><span class=\"n\">kwargs<\/span><span class=\"p\">)<\/span>\n\n        <span class=\"c1\"># Create key with rotation and alias\n<\/span>        <span class=\"n\">key<\/span> <span class=\"o\">=<\/span> <span class=\"n\">aws_kms<\/span><span class=\"p\">.<\/span><span class=\"n\">Key<\/span><span class=\"p\">(<\/span>\n            <span class=\"bp\">self<\/span><span class=\"p\">,<\/span>\n            <span class=\"s\">\"SecureQueueKmsKey\"<\/span><span class=\"p\">,<\/span>\n            <span class=\"n\">alias<\/span><span class=\"o\">=<\/span><span class=\"s\">\"\/kms\/secure_queue_key\"<\/span><span class=\"p\">,<\/span>\n            <span class=\"n\">enable_key_rotation<\/span><span class=\"o\">=<\/span><span class=\"bp\">True<\/span><span class=\"p\">,<\/span>\n            <span class=\"n\">description<\/span><span class=\"o\">=<\/span><span class=\"s\">\"Key for encrypting SQS queue\"<\/span><span class=\"p\">,<\/span>\n        <span class=\"p\">)<\/span>\n\n        <span class=\"c1\"># Create secure encrypted dead letter queue with \n<\/span>        <span class=\"c1\"># visibility timeout of 300 seconds\n<\/span>        <span class=\"n\">dead_letter_queue<\/span> <span class=\"o\">=<\/span> <span class=\"n\">aws_sqs<\/span><span class=\"p\">.<\/span><span class=\"n\">Queue<\/span><span class=\"p\">(<\/span>\n            <span class=\"bp\">self<\/span><span class=\"p\">,<\/span>\n            <span class=\"s\">\"SecureDeadLetterQueue\"<\/span><span class=\"p\">,<\/span>\n            <span class=\"n\">queue_name<\/span><span class=\"o\">=<\/span><span class=\"s\">\"secure_dead_letter_queue\"<\/span><span class=\"p\">,<\/span>\n            <span class=\"n\">encryption<\/span><span class=\"o\">=<\/span><span class=\"n\">aws_sqs<\/span><span class=\"p\">.<\/span><span class=\"n\">QueueEncryption<\/span><span class=\"p\">.<\/span><span class=\"n\">KMS<\/span><span class=\"p\">,<\/span>\n            <span class=\"n\">encryption_master_key<\/span><span class=\"o\">=<\/span><span class=\"n\">key<\/span><span class=\"p\">,<\/span>\n            <span class=\"n\">enforce_ssl<\/span><span class=\"o\">=<\/span><span class=\"bp\">True<\/span><span class=\"p\">,<\/span>\n            <span class=\"n\">visibility_timeout<\/span><span class=\"o\">=<\/span><span class=\"n\">Duration<\/span><span class=\"p\">.<\/span><span class=\"n\">seconds<\/span><span class=\"p\">(<\/span><span class=\"mi\">300<\/span><span class=\"p\">),<\/span>\n        <span class=\"p\">)<\/span>\n\n        <span class=\"c1\"># Create secure encrypted queue with \n<\/span>        <span class=\"c1\"># visibility timeout of 300 seconds and refer to the dlq\n<\/span>        <span class=\"n\">queue<\/span> <span class=\"o\">=<\/span> <span class=\"n\">aws_sqs<\/span><span class=\"p\">.<\/span><span class=\"n\">Queue<\/span><span class=\"p\">(<\/span>\n            <span class=\"bp\">self<\/span><span class=\"p\">,<\/span>\n            <span class=\"s\">\"SecureQueue\"<\/span><span class=\"p\">,<\/span>\n            <span class=\"n\">queue_name<\/span><span class=\"o\">=<\/span><span class=\"s\">\"secure_queue\"<\/span><span class=\"p\">,<\/span>\n            <span class=\"n\">encryption<\/span><span class=\"o\">=<\/span><span class=\"n\">aws_sqs<\/span><span class=\"p\">.<\/span><span class=\"n\">QueueEncryption<\/span><span class=\"p\">.<\/span><span class=\"n\">KMS<\/span><span class=\"p\">,<\/span>\n            <span class=\"n\">encryption_master_key<\/span><span class=\"o\">=<\/span><span class=\"n\">key<\/span><span class=\"p\">,<\/span>\n            <span class=\"n\">enforce_ssl<\/span><span class=\"o\">=<\/span><span class=\"bp\">True<\/span><span class=\"p\">,<\/span>\n            <span class=\"n\">visibility_timeout<\/span><span class=\"o\">=<\/span><span class=\"n\">Duration<\/span><span class=\"p\">.<\/span><span class=\"n\">seconds<\/span><span class=\"p\">(<\/span><span class=\"mi\">300<\/span><span class=\"p\">),<\/span>\n            <span class=\"n\">dead_letter_queue<\/span><span class=\"o\">=<\/span><span class=\"n\">aws_sqs<\/span><span class=\"p\">.<\/span><span class=\"n\">DeadLetterQueue<\/span><span class=\"p\">(<\/span>\n                <span class=\"n\">max_receive_count<\/span><span class=\"o\">=<\/span><span class=\"mi\">5<\/span><span class=\"p\">,<\/span> <span class=\"n\">queue<\/span><span class=\"o\">=<\/span><span class=\"n\">dead_letter_queue<\/span>\n            <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>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\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\u0644\u0627\u0646 \u062a\u0633\u062a \u0647\u0627 \u0642\u0628\u0648\u0644 \u0645\u06cc\u0634\u0647\u061f<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code><span class=\"o\">(<\/span>.venv<span class=\"o\">)<\/span> \u279c  secure_sqs git:<span class=\"o\">(<\/span>main<span class=\"o\">)<\/span> \u2717 pytest <span class=\"nt\">-v<\/span> <span class=\"nt\">--tb<\/span><span class=\"o\">=<\/span>no\n<span class=\"o\">==================================================================<\/span> <span class=\"nb\">test <\/span>session starts <span class=\"o\">==================================================================<\/span>\nplatform darwin <span class=\"nt\">--<\/span> Python 3.11.3, pytest-6.2.5, py-1.11.0, pluggy-1.0.0 <span class=\"nt\">--<\/span> \/Users\/yvthepief\/Code\/Hashnode\/secure_sqs\/.venv\/bin\/python3.11\ncachedir: .pytest_cache\nrootdir: \/Users\/yvthepief\/Code\/Hashnode\/secure_sqs\nplugins: typeguard-2.13.3\ncollected 3 items                                                                                                                                       \n\ntests\/unit\/test_secure_sqs_stack.py::test_sqs_queue_created PASSED                                                                                <span class=\"o\">[<\/span> 33%]\ntests\/unit\/test_secure_sqs_stack.py::test_sqs_queue_is_encrypted PASSED                                                                           <span class=\"o\">[<\/span> 66%]\ntests\/unit\/test_secure_sqs_stack.py::test_sqs_queue_has_dead_letter_queue PASSED                                                                  <span class=\"o\">[<\/span>100%]\n\n<span class=\"o\">===================================================================<\/span> 3 passed <span class=\"k\">in <\/span>4.98s <span class=\"o\">===================================================================<\/span>\n<span class=\"o\">(<\/span>.venv<span class=\"o\">)<\/span> \u279c  secure_sqs git:<span class=\"o\">(<\/span>main<span class=\"o\">)<\/span> \u2717\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>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\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>AWSome\u060c \u0622\u0646 \u0631\u0627 \u0645\u06cc \u06af\u0630\u0631\u062f!  \u0627\u06a9\u0646\u0648\u0646 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u0645 \u0628\u06cc\u0634\u062a\u0631 \u0628\u0633\u0627\u0632\u06cc\u0645.<\/p>\n<p>\u0647\u0645\u0627\u0646\u0637\u0648\u0631 \u06a9\u0647 \u062f\u0631 \u0645\u062b\u0627\u0644 \u0647\u0627 \u0645\u06cc \u0628\u06cc\u0646\u06cc\u062f\u060c \u0645\u0646 \u0641\u0642\u0637 3 \u062a\u0633\u062a \u0627\u06cc\u062c\u0627\u062f \u06a9\u0631\u062f\u0647 \u0627\u0645\u060c \u0627\u0645\u0627 \u0628\u0627 \u0646\u06af\u0627\u0647 \u06a9\u0631\u062f\u0646 \u0628\u0647 \u062e\u0631\u0648\u062c\u06cc CloudFormation \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0628\u0628\u06cc\u0646\u06cc\u062f \u06a9\u0647 4 \u0645\u0646\u0628\u0639 AWS \u0627\u06cc\u062c\u0627\u062f \u0634\u062f\u0647 \u0627\u0633\u062a.  \u0628\u0631\u0627\u06cc \u0633\u0627\u0632\u06af\u0627\u0631\u06cc \u0648 \u0622\u0632\u0645\u0627\u06cc\u0634 \u0647\u0645\u0647 \u0645\u0646\u0627\u0628\u0639\u060c \u0639\u0627\u0642\u0644\u0627\u0646\u0647 \u0627\u0633\u062a \u06a9\u0647 \u0628\u0631\u0627\u06cc \u0627\u06cc\u0646 \u0645\u0646\u0627\u0628\u0639 \u0646\u06cc\u0632 \u062a\u0633\u062a \u0647\u0627\u06cc\u06cc \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u062f.<\/p>\n<p>\u06af\u0632\u06cc\u0646\u0647\u200c\u0647\u0627\u06cc \u0627\u0636\u0627\u0641\u06cc \u0628\u0631\u0627\u06cc \u0645\u062b\u0627\u0644\u060c \u0627\u06cc\u062c\u0627\u062f \u06cc\u06a9 \u0622\u0632\u0645\u0627\u06cc\u0634 \u0628\u0631\u0627\u06cc \u06cc\u06a9 Lambda \u0627\u0633\u062a \u06a9\u0647 \u067e\u06cc\u0627\u0645\u200c\u0647\u0627\u06cc \u0645\u0648\u062c\u0648\u062f \u062f\u0631 \u0635\u0641 \u0627\u0645\u0646 \u0631\u0627 \u067e\u0631\u062f\u0627\u0632\u0634 \u0645\u06cc\u200c\u06a9\u0646\u062f\u060c \u06cc\u0627 \u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u0646 \u0622\u0632\u0645\u0627\u06cc\u0634\u200c\u0647\u0627\u06cc\u06cc \u0628\u0631\u0627\u06cc \u062e\u0637 \u0645\u0634\u06cc \u0635\u0641 SQS.  \u0627\u0645\u0627 \u0627\u06cc\u0646 \u0647\u0645\u0647 \u0628\u0647 \u0634\u0645\u0627 \u0628\u0633\u062a\u06af\u06cc \u062f\u0627\u0631\u062f!  \u062d\u0627\u0644\u0627 \u0628\u0631\u0648 \u0628\u0633\u0627\u0632!<\/p>\n<h2><span class=\"ez-toc-section\" id=\"%D8%AE%D9%84%D8%A7%D8%B5%D9%87\"><\/span>\n<p>  \u062e\u0644\u0627\u0635\u0647<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u062f\u0631 \u0627\u06cc\u0646 \u067e\u0633\u062a\u060c \u0645\u0646 \u0646\u0634\u0627\u0646 \u062f\u0627\u062f\u0645 \u06a9\u0647 \u0686\u06af\u0648\u0646\u0647 \u0641\u0631\u0622\u06cc\u0646\u062f \u0628\u0627\u06cc\u062f \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 Test Driven Development \u0628\u0627 CDK \u06a9\u0627\u0631 \u06a9\u0646\u062f.  \u0627\u0632 \u06a9\u0648\u0686\u06a9 \u0634\u0631\u0648\u0639 \u06a9\u0646\u06cc\u062f \u0648 \u0642\u062f\u0645 \u0628\u0647 \u0642\u062f\u0645.  \u0639\u0627\u0642\u0644\u0627\u0646\u0647 \u0646\u06cc\u0633\u062a \u06a9\u0647 \u0628\u0631\u0627\u06cc \u062a\u0645\u0627\u0645 \u0645\u0646\u0627\u0628\u0639\u06cc \u06a9\u0647 \u062f\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u062f\u0641 \u0646\u0647\u0627\u06cc\u06cc \u062e\u0648\u062f \u0627\u06cc\u062c\u0627\u062f \u062e\u0648\u0627\u0647\u06cc\u062f \u06a9\u0631\u062f\u060c \u0622\u0632\u0645\u0627\u06cc\u0634 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f.  \u0627\u06cc\u0646 \u0641\u0642\u0637 \u062a\u0633\u062a \u0647\u0627\u06cc \u0634\u0645\u0627 \u0631\u0627 \u0628\u0647 \u0647\u0645 \u0645\u06cc \u0631\u06cc\u0632\u062f.  \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0645\u0647\u0645\u062a\u0631\u06cc\u0646 \u0686\u06cc\u0632 \u0627\u06cc\u0646 \u0627\u0633\u062a \u06a9\u0647 \u0628\u0627 \u062a\u0633\u062a \u0647\u0627 \u0634\u0631\u0648\u0639 \u06a9\u0646\u06cc\u062f \u0648 \u06cc\u06a9 \u0628\u0627\u0631 \u062f\u06cc\u06af\u0631 \u0627\u06cc\u0646 \u062a\u0633\u062a \u0647\u0627 \u0631\u0627 \u06a9\u0648\u0686\u06a9 \u0646\u06af\u0647 \u062f\u0627\u0631\u06cc\u062f.  \u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u062a\u06a9\u0631\u0627\u0631 \u0645\u0647\u0645\u062a\u0631\u06cc\u0646 \u0639\u0627\u0645\u0644 \u0627\u0633\u062a!<\/p>\n<\/p><\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u0632\u0645\u06cc\u0646\u0647 \u0627\u063a\u0644\u0628 \u0645\u06cc \u0634\u0646\u0648\u0645 \u06a9\u0647 \u0645\u0631\u062f\u0645 \u0645\u06cc \u06af\u0648\u06cc\u0646\u062f\u060c \u0645\u0627 \u0628\u0627\u06cc\u062f TDD \u0631\u0627 \u0628\u0627 \u06a9\u062f \u062e\u0648\u062f \u0627\u0646\u062c\u0627\u0645 \u062f\u0647\u06cc\u0645. TDD \u062e\u06cc\u0644\u06cc \u0628\u0647\u062a\u0631 \u0627\u0633\u062a. \u0627\u0645\u0627 TDD \u0686\u06cc\u0633\u062a\u061f \u0648 \u0686\u0631\u0627 \u0628\u0647\u062a\u0631 \u0627\u0633\u062a\u061f \u0648 \u0686\u06af\u0648\u0646\u0647 \u0645\u06cc \u062a\u0648\u0627\u0646 \u0622\u0646 \u0631\u0627 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0645\u062b\u0627\u0644 CDK \u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u061f \u0627\u06af\u0631 \u0645\u06cc \u062e\u0648\u0627\u0647\u06cc\u062f \u062f\u0644\u06cc\u0644 \u0622\u0646 \u0631\u0627 \u0628\u062f\u0627\u0646\u06cc\u062f\u060c \u06a9\u0627\u0641\u06cc \u0627\u0633\u062a \u0627\u062f\u0627\u0645\u0647 &#8230; \u062f\u0627\u0646\u0634 \u0627\u0648\u0644\u06cc\u0647 CDK \u0645\u0648\u0631\u062f &hellip;<\/p>\n","protected":false},"author":2,"featured_media":22461,"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-22460","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\/22460","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=22460"}],"version-history":[{"count":0,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/22460\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media\/22461"}],"wp:attachment":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media?parent=22460"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/categories?post=22460"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/tags?post=22460"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}