{"id":17644,"date":"2023-04-15T07:24:44","date_gmt":"2023-04-15T03:54:44","guid":{"rendered":"https:\/\/nabfollower.com\/blog\/testing-step-function-workflows-locally-1h73\/"},"modified":"2023-04-15T07:24:44","modified_gmt":"2023-04-15T03:54:44","slug":"testing-step-function-workflows-locally-1h73","status":"publish","type":"post","link":"https:\/\/nabfollower.com\/blog\/testing-step-function-workflows-locally-1h73\/","title":{"rendered":"\u062a\u0633\u062a \u06a9\u0631\u062f\u0646 \u06af\u0631\u062f\u0634 \u06a9\u0627\u0631 \u062a\u0627\u0628\u0639 \u0645\u0631\u062d\u0644\u0647 \u0628\u0647 \u0635\u0648\u0631\u062a \u0645\u062d\u0644\u06cc"},"content":{"rendered":"<div data-article-id=\"1436259\" id=\"article-body\">\n<p>\u0627\u06af\u0631 \u0645\u062f\u062a\u06cc \u0627\u0633\u062a \u06a9\u0647 \u062f\u0646\u0628\u0627\u0644 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u062f\u060c \u0645\u06cc\u200c\u062f\u0627\u0646\u06cc\u062f \u06a9\u0647 \u0645\u0646 \u0686\u0642\u062f\u0631 \u0627\u0632 \u0637\u0631\u0641\u062f\u0627\u0631\u0627\u0646 \u0633\u0631\u0648\u0631\u0647\u0627\u06cc \u0628\u062f\u0648\u0646 \u0633\u0631\u0648\u0631 \u0647\u0633\u062a\u0645.  \u0648 \u062d\u062a\u06cc \u0628\u0647 \u0637\u0648\u0631 \u062e\u0627\u0635 \u062a\u0631\u060c \u0645\u0646 \u0686\u0642\u062f\u0631 \u062a\u0648\u0627\u0628\u0639 Step \u0631\u0627 \u062f\u0648\u0633\u062a \u062f\u0627\u0631\u0645.  \u0627\u06af\u0631 \u0645\u0634\u06a9\u0644 \u0646\u06cc\u0627\u0632 \u0628\u0647 \u06cc\u06a9 \u0647\u0645\u0627\u0647\u0646\u06af \u06a9\u0646\u0646\u062f\u0647 \u06af\u0631\u062f\u0634 \u06a9\u0627\u0631 \u0628\u0633\u06cc\u0627\u0631 \u062f\u0631 \u062f\u0633\u062a\u0631\u0633 \u0631\u0627 \u062f\u0627\u0631\u06cc\u062f\u060c \u0646\u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u06a9\u0627\u0631\u06cc \u0628\u0647\u062a\u0631 \u0627\u0632 \u0627\u0646\u062a\u062e\u0627\u0628 \u0622\u0646 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0627\u0628\u0632\u0627\u0631 \u0627\u0646\u062a\u062e\u0627\u0628\u06cc \u062e\u0648\u062f \u0627\u0646\u062c\u0627\u0645 \u062f\u0647\u06cc\u062f.  \u0628\u0627 \u0627\u06cc\u0646 \u062d\u0627\u0644\u060c \u0645\u0646 \u0646\u06cc\u0632 \u0628\u062f\u0648\u0646 \u0639\u0630\u0631\u062e\u0648\u0627\u0647\u06cc \u0627\u0632 \u0637\u0631\u0641\u062f\u0627\u0631\u0627\u0646 \u062a\u0648\u0633\u0639\u0647 \u0645\u062d\u0644\u06cc \u0647\u0633\u062a\u0645.  \u0648 \u0627\u06cc\u0646 \u062c\u0627\u06cc\u06cc \u0627\u0633\u062a \u06a9\u0647 \u0645\u0646 \u0627\u062d\u0633\u0627\u0633 \u0645\u06cc \u06a9\u0646\u0645 \u06a9\u0647 \u062a\u0648\u0627\u0628\u0639 \u0645\u0631\u062d\u0644\u0647 \u06a9\u0645\u06cc \u0633\u0642\u0648\u0637 \u0645\u06cc \u06a9\u0646\u062f.  \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0645\u0646 \u0631\u0627 \u062f\u0631 \u0627\u06cc\u0646 \u062d\u0645\u0627\u0633\u0647 \u062f\u0646\u0628\u0627\u0644 \u06a9\u0646\u06cc\u062f \u062a\u0627 \u0628\u062a\u0648\u0627\u0646\u06cc\u062f \u06af\u0631\u062f\u0634 \u06a9\u0627\u0631 Step Function \u0631\u0627 \u0628\u0647 \u0635\u0648\u0631\u062a \u0645\u062d\u0644\u06cc \u0622\u0632\u0645\u0627\u06cc\u0634 \u06a9\u0646\u06cc\u062f.<\/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\/testing-step-function-workflows-locally-1h73\/#%DA%AF%D8%B1%D8%AF%D8%B4_%DA%A9%D8%A7%D8%B1\" >\u06af\u0631\u062f\u0634 \u06a9\u0627\u0631<\/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\/testing-step-function-workflows-locally-1h73\/#%D8%B1%D8%A7%D9%87_%D8%A7%D9%86%D8%AF%D8%A7%D8%B2%DB%8C_%D9%85%D8%A7%D8%B4%DB%8C%D9%86_%D8%AF%D9%88%D9%84%D8%AA%DB%8C\" >\u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u0645\u0627\u0634\u06cc\u0646 \u062f\u0648\u0644\u062a\u06cc<\/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\/testing-step-function-workflows-locally-1h73\/#%D8%A7%D8%B3%D8%AA%D9%82%D8%B1%D8%A7%D8%B1_%D8%AA%D9%88%D8%A7%D8%A8%D8%B9_%D9%85%D8%B1%D8%AD%D9%84%D9%87_%D8%A8%D9%87_%D8%B5%D9%88%D8%B1%D8%AA_%D9%85%D8%AD%D9%84%DB%8C\" >\u0627\u0633\u062a\u0642\u0631\u0627\u0631 \u062a\u0648\u0627\u0628\u0639 \u0645\u0631\u062d\u0644\u0647 \u0628\u0647 \u0635\u0648\u0631\u062a \u0645\u062d\u0644\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\/testing-step-function-workflows-locally-1h73\/#%D8%A7%D8%B3%D8%AA%D9%82%D8%B1%D8%A7%D8%B1_%D8%AF%D8%B1_%DA%A9%D8%A7%D9%86%D8%AA%DB%8C%D9%86%D8%B1_%D9%85%D8%AD%D9%84%DB%8C\" >\u0627\u0633\u062a\u0642\u0631\u0627\u0631 \u062f\u0631 \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 \u0645\u062d\u0644\u06cc<\/a><\/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\/testing-step-function-workflows-locally-1h73\/#%D8%AA%D8%B3%D8%AA_%DA%A9%D8%B1%D8%AF%D9%86_%DA%AF%D8%B1%D8%AF%D8%B4_%DA%A9%D8%A7%D8%B1_%D8%AA%D8%A7%D8%A8%D8%B9_%D9%85%D8%B1%D8%AD%D9%84%D9%87_%D8%A8%D9%87_%D8%B5%D9%88%D8%B1%D8%AA_%D9%85%D8%AD%D9%84%DB%8C\" >\u062a\u0633\u062a \u06a9\u0631\u062f\u0646 \u06af\u0631\u062f\u0634 \u06a9\u0627\u0631 \u062a\u0627\u0628\u0639 \u0645\u0631\u062d\u0644\u0647 \u0628\u0647 \u0635\u0648\u0631\u062a \u0645\u062d\u0644\u06cc<\/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\/testing-step-function-workflows-locally-1h73\/#%D9%87%D9%85%D9%87_%D8%A7%D8%B4_%D8%B1%D8%A7_%D8%A8%DA%AF%D8%B0%D8%A7%D8%B1_%DA%A9%D9%86%D8%A7%D8%B1_%D9%87%D9%85\" >\u0647\u0645\u0647 \u0627\u0634 \u0631\u0627 \u0628\u06af\u0630\u0627\u0631 \u06a9\u0646\u0627\u0631 \u0647\u0645<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/nabfollower.com\/blog\/testing-step-function-workflows-locally-1h73\/#%D8%AA%D8%A3%DB%8C%DB%8C%D8%AF_%D9%85%D8%A7%D8%B4%DB%8C%D9%86_%D8%AF%D9%88%D9%84%D8%AA%DB%8C_%D9%85%D8%B3%D8%AA%D9%82%D8%B1_%D8%B4%D8%AF\" >\u062a\u0623\u06cc\u06cc\u062f \u0645\u0627\u0634\u06cc\u0646 \u062f\u0648\u0644\u062a\u06cc \u0645\u0633\u062a\u0642\u0631 \u0634\u062f<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/nabfollower.com\/blog\/testing-step-function-workflows-locally-1h73\/#%D8%A8%D8%B3%D8%AA%D9%87_%D8%A8%D9%86%D8%AF%DB%8C\" >\u0628\u0633\u062a\u0647 \u0628\u0646\u062f\u06cc<\/a><\/li><\/ul><\/nav><\/div>\n<h2><span class=\"ez-toc-section\" id=\"%DA%AF%D8%B1%D8%AF%D8%B4_%DA%A9%D8%A7%D8%B1\"><\/span>\n<p>  \u06af\u0631\u062f\u0634 \u06a9\u0627\u0631<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0627\u06cc\u0646 \u06a9\u0648\u0686\u0648\u0644\u0648\u06cc\u06cc \u0627\u0633\u062a \u06a9\u0647 \u0642\u0631\u0627\u0631 \u0627\u0633\u062a \u0645\u062f\u062a\u06cc \u0631\u0627 \u0635\u0631\u0641 \u06a9\u0627\u0631 \u06a9\u0631\u062f\u0646 \u0628\u0627 \u0622\u0646 \u06a9\u0646\u06cc\u0645<\/p>\n<p><\/p>\n<p>\u0647\u062f\u0641 \u0627\u0632 \u0627\u06cc\u0646 \u0631\u0627\u0647\u0646\u0645\u0627 \u0627\u06cc\u062c\u0627\u062f \u06cc\u06a9 \u06af\u0631\u062f\u0634 \u06a9\u0627\u0631 \u0628\u0633\u06cc\u0627\u0631 \u0642\u0648\u06cc \u0646\u06cc\u0633\u062a\u060c \u0628\u0644\u06a9\u0647 \u0646\u0634\u0627\u0646 \u062f\u0627\u062f\u0646 \u0646\u062d\u0648\u0647 \u0627\u062c\u0631\u0627\u06cc \u0628\u0631\u062e\u06cc \u0627\u0632 \u062a\u0633\u062a\u200c\u0647\u0627\u06cc \u06cc\u06a9\u067e\u0627\u0631\u0686\u0647\u200c\u0633\u0627\u0632\u06cc \u0628\u0631 \u0631\u0648\u06cc \u062f\u0633\u062a\u06af\u0627\u0647 \u0627\u0633\u062a.<\/p>\n<p>\u0646\u06a9\u062a\u0647 \u0627\u0635\u0644\u06cc \u0627\u06cc\u0646 \u0645\u0627\u0634\u06cc\u0646 \u062d\u0627\u0644\u062a \u0627\u06cc\u0646 \u0627\u0633\u062a \u06a9\u0647 \u0628\u0627\u0631\u06cc \u0631\u0627 \u0627\u0631\u0627\u0626\u0647 \u0645\u06cc \u062f\u0647\u062f \u06a9\u0647 \u06cc\u0627 \u0628\u0647 &#8220;\u0645\u0648\u0641\u0642\u06cc\u062a&#8221; \u06cc\u0627 &#8220;\u0634\u06a9\u0633\u062a&#8221; \u0645\u0646\u062c\u0631 \u0645\u06cc \u0634\u0648\u062f.  \u0628\u0627\u0632 \u0647\u0645\u060c \u0628\u0633\u06cc\u0627\u0631 \u0633\u0627\u062f\u0647 \u0627\u0633\u062a.<\/p>\n<p>\u0627\u0632 \u0627\u06cc\u0646\u062c\u0627\u060c \u0628\u06cc\u0627\u06cc\u06cc\u062f \u062f\u0631 \u0645\u0648\u0631\u062f \u0646\u062d\u0648\u0647 \u0622\u0632\u0645\u0627\u06cc\u0634 \u06af\u0631\u062f\u0634\u200c\u0647\u0627\u06cc \u06a9\u0627\u0631\u06cc Step Function \u0628\u0647 \u0635\u0648\u0631\u062a \u0645\u062d\u0644\u06cc \u0628\u067e\u0631\u062f\u0627\u0632\u06cc\u0645.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"%D8%B1%D8%A7%D9%87_%D8%A7%D9%86%D8%AF%D8%A7%D8%B2%DB%8C_%D9%85%D8%A7%D8%B4%DB%8C%D9%86_%D8%AF%D9%88%D9%84%D8%AA%DB%8C\"><\/span>\n<p>  \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u0645\u0627\u0634\u06cc\u0646 \u062f\u0648\u0644\u062a\u06cc<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0627\u06cc\u0646 \u0646\u0645\u0648\u0646\u0647 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 CDK \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0633\u0627\u0632\u0646\u062f\u0647 \u0632\u06cc\u0631\u0633\u0627\u062e\u062a \u0633\u0627\u062e\u062a\u0647 \u0634\u062f\u0647 \u0627\u0633\u062a.  \u0627\u06af\u0631 \u0628\u0627 CDK \u0622\u0634\u0646\u0627\u06cc\u06cc \u0646\u062f\u0627\u0631\u06cc\u062f\u060c \u06cc\u06a9 \u0634\u0631\u0648\u0639 \u0627\u0632 \u0627\u06cc\u0646\u062c\u0627 \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u062f.<\/p>\n<p>\u0627\u0628\u062a\u062f\u0627 \u0627\u062c\u0627\u0632\u0647 \u062f\u0647\u06cc\u062f \u0645\u0627\u0634\u06cc\u0646 \u062d\u0627\u0644\u062a \u0631\u0627 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 CDK \u0628\u0627 TypeScript \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u0645.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight typescript\"><code><span class=\"c1\">\/\/ code above omitted<\/span>\n<span class=\"kd\">const<\/span> <span class=\"nx\">flow<\/span> <span class=\"o\">=<\/span> <span class=\"k\">this<\/span><span class=\"p\">.<\/span><span class=\"nx\">buildStateMachine<\/span><span class=\"p\">(<\/span><span class=\"nx\">scope<\/span><span class=\"p\">);<\/span>\n\n<span class=\"k\">this<\/span><span class=\"p\">.<\/span><span class=\"nx\">_stateMachine<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nx\">stepfunctions<\/span><span class=\"p\">.<\/span><span class=\"nx\">StateMachine<\/span><span class=\"p\">(<\/span><span class=\"k\">this<\/span><span class=\"p\">,<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">StateMachine<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span> <span class=\"p\">{<\/span>\n    <span class=\"na\">stateMachineName<\/span><span class=\"p\">:<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">SimpleStateMachine<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span>\n    <span class=\"na\">definition<\/span><span class=\"p\">:<\/span> <span class=\"nx\">flow<\/span><span class=\"p\">,<\/span>\n    <span class=\"na\">stateMachineType<\/span><span class=\"p\">:<\/span> <span class=\"nx\">stepfunctions<\/span><span class=\"p\">.<\/span><span class=\"nx\">StateMachineType<\/span><span class=\"p\">.<\/span><span class=\"nx\">EXPRESS<\/span><span class=\"p\">,<\/span>\n    <span class=\"na\">timeout<\/span><span class=\"p\">:<\/span> <span class=\"nx\">Duration<\/span><span class=\"p\">.<\/span><span class=\"nx\">seconds<\/span><span class=\"p\">(<\/span><span class=\"mi\">30<\/span><span class=\"p\">),<\/span>\n    <span class=\"na\">logs<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\n        <span class=\"na\">level<\/span><span class=\"p\">:<\/span> <span class=\"nx\">LogLevel<\/span><span class=\"p\">.<\/span><span class=\"nx\">ALL<\/span><span class=\"p\">,<\/span>\n        <span class=\"na\">destination<\/span><span class=\"p\">:<\/span> <span class=\"nx\">logGroup<\/span><span class=\"p\">,<\/span>\n        <span class=\"na\">includeExecutionData<\/span><span class=\"p\">:<\/span> <span class=\"kc\">true<\/span><span class=\"p\">,<\/span>\n    <span class=\"p\">},<\/span>\n<span class=\"p\">});<\/span>\n\n<span class=\"c1\">\/\/ code above omitted<\/span>\n<span class=\"nx\">buildStateMachine<\/span> <span class=\"o\">=<\/span> <span class=\"p\">(<\/span><span class=\"nx\">scope<\/span><span class=\"p\">:<\/span> <span class=\"nx\">Construct<\/span><span class=\"p\">):<\/span> <span class=\"nx\">stepfunctions<\/span><span class=\"p\">.<\/span><span class=\"nx\">IChainable<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\n    <span class=\"kd\">const<\/span> <span class=\"nx\">succeed<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nx\">Succeed<\/span><span class=\"p\">(<\/span><span class=\"nx\">scope<\/span><span class=\"p\">,<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">Succeed<\/span><span class=\"dl\">\"<\/span><span class=\"p\">);<\/span>\n    <span class=\"kd\">const<\/span> <span class=\"nx\">failure<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nx\">Fail<\/span><span class=\"p\">(<\/span><span class=\"nx\">scope<\/span><span class=\"p\">,<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">Fail<\/span><span class=\"dl\">\"<\/span><span class=\"p\">);<\/span>\n\n    <span class=\"k\">return<\/span> <span class=\"p\">(<\/span>\n        <span class=\"k\">new<\/span> <span class=\"nx\">Choice<\/span><span class=\"p\">(<\/span><span class=\"k\">this<\/span><span class=\"p\">,<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">Success or Failure<\/span><span class=\"dl\">\"<\/span><span class=\"p\">)<\/span>\n            <span class=\"c1\">\/\/ Look at the \"status\" field<\/span>\n            <span class=\"p\">.<\/span><span class=\"nx\">when<\/span><span class=\"p\">(<\/span><span class=\"nx\">Condition<\/span><span class=\"p\">.<\/span><span class=\"nx\">stringEquals<\/span><span class=\"p\">(<\/span><span class=\"dl\">\"<\/span><span class=\"s2\">$.path<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">Succeed<\/span><span class=\"dl\">\"<\/span><span class=\"p\">),<\/span> <span class=\"nx\">succeed<\/span><span class=\"p\">)<\/span>\n            <span class=\"p\">.<\/span><span class=\"nx\">when<\/span><span class=\"p\">(<\/span><span class=\"nx\">Condition<\/span><span class=\"p\">.<\/span><span class=\"nx\">stringEquals<\/span><span class=\"p\">(<\/span><span class=\"dl\">\"<\/span><span class=\"s2\">$.path<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">Fail<\/span><span class=\"dl\">\"<\/span><span class=\"p\">),<\/span> <span class=\"nx\">failure<\/span><span class=\"p\">)<\/span>\n            <span class=\"p\">.<\/span><span class=\"nx\">otherwise<\/span><span class=\"p\">(<\/span><span class=\"nx\">failure<\/span><span class=\"p\">)<\/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<h2><span class=\"ez-toc-section\" id=\"%D8%A7%D8%B3%D8%AA%D9%82%D8%B1%D8%A7%D8%B1_%D8%AA%D9%88%D8%A7%D8%A8%D8%B9_%D9%85%D8%B1%D8%AD%D9%84%D9%87_%D8%A8%D9%87_%D8%B5%D9%88%D8%B1%D8%AA_%D9%85%D8%AD%D9%84%DB%8C\"><\/span>\n<p>  \u0627\u0633\u062a\u0642\u0631\u0627\u0631 \u062a\u0648\u0627\u0628\u0639 \u0645\u0631\u062d\u0644\u0647 \u0628\u0647 \u0635\u0648\u0631\u062a \u0645\u062d\u0644\u06cc<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u062a\u0648\u0633\u0639\u0647 \u0627\u0628\u0631 \u0645\u062d\u0644\u06cc \u06af\u0627\u0647\u06cc \u0627\u0648\u0642\u0627\u062a \u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u06a9\u0645\u06cc \u0645\u0634\u06a9\u0644 \u0628\u0627\u0634\u062f.  \u0645\u0646 \u062f\u0631 \u06af\u0630\u0634\u062a\u0647 \u0627\u0632 Localstack \u0628\u0631\u0627\u06cc \u0628\u0633\u06cc\u0627\u0631\u06cc \u0627\u0632 \u0633\u0631\u0648\u06cc\u0633\u200c\u0647\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0631\u062f\u0647\u200c\u0627\u0645\u060c \u0627\u0645\u0627 \u0648\u0642\u062a\u06cc \u062a\u0635\u0648\u06cc\u0631\u06cc \u0631\u0627 \u06a9\u0647 \u0628\u0647 \u0637\u0648\u0631 \u0631\u0633\u0645\u06cc \u062a\u0648\u0633\u0637 AWS \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u0645\u06cc\u200c\u0634\u0648\u062f \u0628\u0631\u0627\u06cc \u062a\u0648\u0627\u0628\u0639 Step \u067e\u06cc\u062f\u0627 \u06a9\u0631\u062f\u0645\u060c \u0647\u06cc\u062c\u0627\u0646\u200c\u0632\u062f\u0647 \u0634\u062f\u0645 \u06a9\u0647 \u0622\u0646 \u0631\u0627 \u0627\u0645\u062a\u062d\u0627\u0646 \u06a9\u0646\u0645.  \u0628\u0631\u0627\u06cc \u0645\u0631\u062c\u0639\u060c \u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u067e\u06cc\u0648\u0646\u062f \u0628\u0647 \u0622\u0646 \u062a\u0635\u0648\u06cc\u0631 Docker \u0627\u0633\u062a.<\/p>\n<p>\u06cc\u06a9\u06cc \u0627\u0632 \u0686\u06cc\u0632\u0647\u0627\u06cc \u062e\u0648\u0628\u06cc \u06a9\u0647 \u0645\u0646 \u067e\u06cc\u062f\u0627 \u06a9\u0631\u062f\u0645 \u0627\u06cc\u0646 \u0627\u0633\u062a \u06a9\u0647 (\u062a\u0627\u06a9\u0646\u0648\u0646) \u062a\u0645\u0627\u0645 \u0648\u06cc\u0698\u06af\u06cc\u200c\u0647\u0627\u06cc \u0628\u0631\u0627\u0628\u0631\u06cc \u0631\u0627 \u062f\u0627\u0631\u062f \u06a9\u0647 \u0645\u0646 \u0628\u0631\u0627\u06cc \u0628\u06a9\u0627\u0631\u06af\u06cc\u0631\u06cc\u060c \u0622\u0632\u0645\u0627\u06cc\u0634 \u0648 \u062d\u062a\u06cc \u0627\u062c\u0631\u0627\u06cc \u0645\u062d\u0644\u06cc \u0646\u06cc\u0627\u0632 \u062f\u0627\u0631\u0645.  \u0628\u0647 \u06cc\u0627\u062f \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u062f\u060c \u0627\u06cc\u0646 \u00ab\u0633\u0631\u0648\u06cc\u0633 \u0648\u0628 \u0622\u0645\u0627\u0632\u0648\u0646\u00bb \u0627\u0633\u062a\u060c \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u200c\u0647\u0627\u06cc \u0627\u06cc\u0646 \u0633\u0631\u0648\u06cc\u0633\u200c\u0647\u0627 \u0641\u0642\u0637 \u00abGET, PUT, POST\u00bb \u0647\u0633\u062a\u0646\u062f \u0648 \u0634\u0645\u0627 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u062f \u0628\u0647 \u0635\u0648\u0631\u062a \u0645\u062d\u0644\u06cc \u0628\u0627 \u0622\u0646\u0647\u0627 \u062a\u0639\u0627\u0645\u0644 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u062f.<\/p>\n<p>\u0628\u0627 \u062a\u0648\u062c\u0647 \u0628\u0647 \u0627\u06cc\u0646\u06a9\u0647 \u06cc\u06a9 \u062a\u0635\u0648\u06cc\u0631 Docker \u0627\u0633\u062a\u060c \u0645\u0646 \u06cc\u06a9 \u0641\u0627\u06cc\u0644 Docker Compose \u0633\u0627\u062f\u0647 \u0628\u0631\u0627\u06cc \u0631\u0627\u0647\u200c\u0627\u0646\u062f\u0627\u0632\u06cc \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 \u0648 \u06cc\u06a9 \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 \u062c\u0627\u0646\u0628\u06cc \u0628\u0631\u0627\u06cc Localstack \u0633\u0627\u062e\u062a\u0647\u200c\u0627\u0645.  \u062f\u0644\u06cc\u0644 Localstack \u0627\u06cc\u0646 \u0627\u0633\u062a \u06a9\u0647 \u0628\u0627 Step Functions \u0645\u062d\u0644\u06cc\u060c \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0646\u0642\u0627\u0637 \u067e\u0627\u06cc\u0627\u0646\u06cc \u0631\u0627 \u0628\u0631\u0627\u06cc \u0686\u06cc\u0632\u0647\u0627\u06cc\u06cc \u06a9\u0647 \u0645\u06cc \u062e\u0648\u0627\u0647\u06cc\u062f &#8220;\u0645\u0633\u062e\u0631\u0647&#8221; \u06a9\u0646\u06cc\u062f \u0645\u0627\u0646\u0646\u062f Lambda\u060c SQS\u060c SNS \u0648 \u063a\u06cc\u0631\u0647 \u0645\u0634\u062e\u0635 \u06a9\u0646\u06cc\u062f.  \u0645\u0646 \u0647\u06cc\u0686 \u06a9\u062f\u0627\u0645 \u0627\u0632 \u0627\u06cc\u0646 \u06a9\u0627\u0631\u0647\u0627 \u0631\u0627 \u0628\u0631\u0627\u06cc \u0627\u06cc\u0646 \u0646\u0645\u0648\u0646\u0647 \u0627\u0646\u062c\u0627\u0645 \u0646\u0645\u06cc \u062f\u0647\u0645\u060c \u0627\u0645\u0627 \u062f\u0631 \u0635\u0648\u0631\u062a\u06cc \u06a9\u0647 \u0628\u062e\u0648\u0627\u0647\u06cc\u062f \u0622\u0646 \u0631\u0627 \u062a\u0645\u062f\u06cc\u062f \u06a9\u0646\u06cc\u062f\u060c \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u062f.<\/p>\n<p>\u0628\u06cc\u0627\u06cc\u06cc\u062f \u0646\u06af\u0627\u0647\u06cc \u0628\u0647 \u0641\u0627\u06cc\u0644 \u0646\u0648\u0634\u062a\u0646 \u0628\u06cc\u0627\u0646\u062f\u0627\u0632\u06cc\u0645<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight yaml\"><code><span class=\"na\">version<\/span><span class=\"pi\">:<\/span> <span class=\"s2\">\"<\/span><span class=\"s\">3.4\"<\/span>\n\n<span class=\"na\">services<\/span><span class=\"pi\">:<\/span>\n    <span class=\"na\">localstack<\/span><span class=\"pi\">:<\/span>\n        <span class=\"na\">container_name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">sf_localstack<\/span>\n        <span class=\"na\">image<\/span><span class=\"pi\">:<\/span> <span class=\"s\">localstack\/localstack:latest<\/span>\n        <span class=\"na\">environment<\/span><span class=\"pi\">:<\/span>\n            <span class=\"pi\">-<\/span> <span class=\"s\">AWS_DEFAULT_REGION=us-west-2<\/span>\n            <span class=\"pi\">-<\/span> <span class=\"s\">HOSTNAME_EXTERNAL=localhost<\/span>\n            <span class=\"pi\">-<\/span> <span class=\"s\">SERVICES=sqs<\/span> <span class=\"c1\"># which services to start<\/span>\n            <span class=\"pi\">-<\/span> <span class=\"s\">DEBUG=0<\/span>\n        <span class=\"na\">ports<\/span><span class=\"pi\">:<\/span>\n            <span class=\"pi\">-<\/span> <span class=\"s\">4566:4566<\/span>\n\n    <span class=\"na\">step-functions<\/span><span class=\"pi\">:<\/span>\n        <span class=\"na\">container_name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">step-functions<\/span>\n        <span class=\"na\">image<\/span><span class=\"pi\">:<\/span> <span class=\"s\">amazon\/aws-stepfunctions-local<\/span>\n        <span class=\"na\">depends_on<\/span><span class=\"pi\">:<\/span>\n            <span class=\"pi\">-<\/span> <span class=\"s\">localstack<\/span>\n        <span class=\"na\">environment<\/span><span class=\"pi\">:<\/span>\n            <span class=\"pi\">-<\/span> <span class=\"s\">AWS_DEFAULT_REGION=us-west-2<\/span> <span class=\"c1\"># this is used when resources are created<\/span>\n            <span class=\"pi\">-<\/span> <span class=\"s\">AWS_ACCESS_KEY_ID=12345<\/span> <span class=\"c1\"># just to fill in the blanks<\/span>\n            <span class=\"pi\">-<\/span> <span class=\"s\">AWS_SECRET_ACCESS_KEY=12345<\/span> <span class=\"c1\"># just to fill in the blanks<\/span>\n            <span class=\"pi\">-<\/span> <span class=\"s\">SQS_ENDPOINT=host.docker.internal:4566<\/span> <span class=\"c1\"># connected to Localstack<\/span>\n        <span class=\"na\">ports<\/span><span class=\"pi\">:<\/span>\n            <span class=\"pi\">-<\/span> <span class=\"s\">8083:8083<\/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\u0635\u0648\u0644 \u0627\u0648\u0644\u06cc\u0647 \u0646\u0648\u0634\u062a\u0646 \u0641\u0627\u06cc\u0644 \u0647\u0627.  Localstack \u0631\u0627 \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u0645\u06cc \u06a9\u0646\u062f \u0648 \u0633\u067e\u0633 \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 Step Functions \u0631\u0627 \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc \u062f\u0647\u062f.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/nabfollower.com\/blog\/wp-content\/uploads\/2023\/04\/1681530884_837_\u062a\u0633\u062a-\u06a9\u0631\u062f\u0646-\u06af\u0631\u062f\u0634-\u06a9\u0627\u0631-\u062a\u0627\u0628\u0639-\u0645\u0631\u062d\u0644\u0647-\u0628\u0647-\u0635\u0648\u0631\u062a-\u0645\u062d\u0644\u06cc.png\" alt=\"\u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u062f\u0627\u06a9\u0631\" loading=\"lazy\" width=\"800\" height=\"296\" title=\"\"><\/p>\n<h2><span class=\"ez-toc-section\" id=\"%D8%A7%D8%B3%D8%AA%D9%82%D8%B1%D8%A7%D8%B1_%D8%AF%D8%B1_%DA%A9%D8%A7%D9%86%D8%AA%DB%8C%D9%86%D8%B1_%D9%85%D8%AD%D9%84%DB%8C\"><\/span>\n<p>  \u0627\u0633\u062a\u0642\u0631\u0627\u0631 \u062f\u0631 \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 \u0645\u062d\u0644\u06cc<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u062d\u0627\u0644\u0627 \u0627\u06cc\u0646\u062c\u0627 \u062c\u0627\u06cc\u06cc \u0627\u0633\u062a \u06a9\u0647 \u0645\u0627\u0644\u0634 \u0646\u0647\u0641\u062a\u0647 \u0627\u0633\u062a.  \u0647\u0646\u06af\u0627\u0645 \u0627\u0633\u062a\u0642\u0631\u0627\u0631 \u062a\u0627 AWS \u0627\u0632 \u062e\u0631\u0648\u062c\u06cc CDK \u0628\u0631\u0627\u06cc \u0645\u0627 \u0645\u0631\u0627\u0642\u0628\u062a \u0645\u06cc \u0634\u0648\u062f.  \u0622\u0646 CloudFormation \u06a9\u0647 \u062a\u0648\u0644\u06cc\u062f \u0645\u06cc \u0634\u0648\u062f \u0628\u062f\u0648\u0646 \u0645\u0634\u06a9\u0644 \u0627\u062c\u0631\u0627 \u0645\u06cc \u0634\u0648\u062f.  \u0628\u0627 \u0627\u06cc\u0646 \u062d\u0627\u0644\u060c \u0645\u0646 \u0641\u0642\u0637 \u0645\u06cc \u062e\u0648\u0627\u0647\u0645 \u0628\u062e\u0634\u06cc \u0627\u0632 CloudFormation \u0645\u0633\u062a\u0642\u0631 \u0634\u0648\u062f.<\/p>\n<p>\u0642\u0628\u0644\u0627\u064b \u0627\u0628\u0632\u0627\u0631 \u062f\u06cc\u06af\u0631\u06cc \u0631\u0627 \u062f\u06cc\u062f\u0647 \u0628\u0648\u062f\u0645 \u06a9\u0647 \u0686\u0646\u06cc\u0646 \u06a9\u0627\u0631\u06cc \u0631\u0627 \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc \u062f\u0627\u062f\u060c \u0627\u0645\u0627 \u0645\u0646 \u0627\u0635\u0644\u0627\u064b \u0627\u0632 \u0646\u062d\u0648\u0647 \u0628\u0627\u0632\u06af\u0634\u062a \u062e\u0631\u0648\u062c\u06cc \u0622\u0646 \u062e\u0648\u0634\u0645 \u0646\u06cc\u0627\u0645\u062f \u0648 \u0628\u0647 \u062c\u0627\u06cc \u0648\u0635\u0644\u0647 \u06a9\u0631\u062f\u0646 \u0648 \u0635\u062f\u0648\u0631 \u06cc\u06a9 PR \u062a\u0635\u0645\u06cc\u0645 \u06af\u0631\u0641\u062a\u0645 \u062e\u0648\u062f\u0645 \u0631\u0627 \u0628\u0633\u0627\u0632\u0645.  \u0627\u06cc\u0646 \u0642\u0633\u0645\u062a 1 \u0628\u0648\u062f \u06a9\u0647 \u0627\u06cc\u0646 \u0641\u0631\u0622\u06cc\u0646\u062f \u0641\u06a9\u0631\u06cc \u0631\u0627 \u0622\u063a\u0627\u0632 \u06a9\u0631\u062f.  \u0627\u06af\u0631 \u0645\u06cc \u062e\u0648\u0627\u0647\u06cc\u062f \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647 \u0631\u0627 \u0628\u0628\u06cc\u0646\u06cc\u062f\u060c \u062f\u0631 \u0622\u0646 \u0645\u0642\u0627\u0644\u0647 \u06cc\u0627 \u0627\u06cc\u0646\u062c\u0627 \u0622\u0645\u062f\u0647 \u0627\u0633\u062a<\/p>\n<p>\u0631\u0648\u0634 \u06a9\u0627\u0631 \u0627\u06cc\u0646 \u0627\u0633\u062a \u06a9\u0647 \u062a\u0639\u0631\u06cc\u0641 \u0631\u0627 \u0627\u0632 State Machine \u062f\u0631 CloudFormation (JSON) \u0627\u0633\u062a\u062e\u0631\u0627\u062c \u0645\u06cc \u06a9\u0646\u062f \u0648 \u0633\u067e\u0633 \u0622\u0631\u0627\u06cc\u0647 \u0627\u06cc \u0627\u0632 \u0645\u0627\u0634\u06cc\u0646 \u0647\u0627 \u0631\u0627 \u062e\u0631\u0648\u062c\u06cc \u0645\u06cc \u062f\u0647\u062f.  \u062e\u0631\u0648\u062c\u06cc \u0628\u0647 \u0634\u06a9\u0644 \u0632\u06cc\u0631 \u0627\u0633\u062a:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code><span class=\"o\">[{<\/span><span class=\"s2\">\"identifier\"<\/span>:<span class=\"s2\">\"SimpleStateMachine3C32178E\"<\/span>,<span class=\"s2\">\"definition\"<\/span>:<span class=\"s2\">\"{<\/span><span class=\"se\">\\\"<\/span><span class=\"s2\">StartAt<\/span><span class=\"se\">\\\"<\/span><span class=\"s2\">:<\/span><span class=\"se\">\\\"<\/span><span class=\"s2\">Success or Failure<\/span><span class=\"se\">\\\"<\/span><span class=\"s2\">,<\/span><span class=\"se\">\\\"<\/span><span class=\"s2\">States<\/span><span class=\"se\">\\\"<\/span><span class=\"s2\">:{<\/span><span class=\"se\">\\\"<\/span><span class=\"s2\">Success or Failure<\/span><span class=\"se\">\\\"<\/span><span class=\"s2\">:{<\/span><span class=\"se\">\\\"<\/span><span class=\"s2\">Type<\/span><span class=\"se\">\\\"<\/span><span class=\"s2\">:<\/span><span class=\"se\">\\\"<\/span><span class=\"s2\">Choice<\/span><span class=\"se\">\\\"<\/span><span class=\"s2\">,<\/span><span class=\"se\">\\\"<\/span><span class=\"s2\">Choices<\/span><span class=\"se\">\\\"<\/span><span class=\"s2\">:[{<\/span><span class=\"se\">\\\"<\/span><span class=\"s2\">Variable<\/span><span class=\"se\">\\\"<\/span><span class=\"s2\">:<\/span><span class=\"se\">\\\"<\/span><span class=\"nv\">$.<\/span><span class=\"s2\">path<\/span><span class=\"se\">\\\"<\/span><span class=\"s2\">,<\/span><span class=\"se\">\\\"<\/span><span class=\"s2\">StringEquals<\/span><span class=\"se\">\\\"<\/span><span class=\"s2\">:<\/span><span class=\"se\">\\\"<\/span><span class=\"s2\">Succeed<\/span><span class=\"se\">\\\"<\/span><span class=\"s2\">,<\/span><span class=\"se\">\\\"<\/span><span class=\"s2\">Next<\/span><span class=\"se\">\\\"<\/span><span class=\"s2\">:<\/span><span class=\"se\">\\\"<\/span><span class=\"s2\">Succeed<\/span><span class=\"se\">\\\"<\/span><span class=\"s2\">},{<\/span><span class=\"se\">\\\"<\/span><span class=\"s2\">Variable<\/span><span class=\"se\">\\\"<\/span><span class=\"s2\">:<\/span><span class=\"se\">\\\"<\/span><span class=\"nv\">$.<\/span><span class=\"s2\">path<\/span><span class=\"se\">\\\"<\/span><span class=\"s2\">,<\/span><span class=\"se\">\\\"<\/span><span class=\"s2\">StringEquals<\/span><span class=\"se\">\\\"<\/span><span class=\"s2\">:<\/span><span class=\"se\">\\\"<\/span><span class=\"s2\">Fail<\/span><span class=\"se\">\\\"<\/span><span class=\"s2\">,<\/span><span class=\"se\">\\\"<\/span><span class=\"s2\">Next<\/span><span class=\"se\">\\\"<\/span><span class=\"s2\">:<\/span><span class=\"se\">\\\"<\/span><span class=\"s2\">Fail<\/span><span class=\"se\">\\\"<\/span><span class=\"s2\">}],<\/span><span class=\"se\">\\\"<\/span><span class=\"s2\">Default<\/span><span class=\"se\">\\\"<\/span><span class=\"s2\">:<\/span><span class=\"se\">\\\"<\/span><span class=\"s2\">Fail<\/span><span class=\"se\">\\\"<\/span><span class=\"s2\">},<\/span><span class=\"se\">\\\"<\/span><span class=\"s2\">Fail<\/span><span class=\"se\">\\\"<\/span><span class=\"s2\">:{<\/span><span class=\"se\">\\\"<\/span><span class=\"s2\">Type<\/span><span class=\"se\">\\\"<\/span><span class=\"s2\">:<\/span><span class=\"se\">\\\"<\/span><span class=\"s2\">Fail<\/span><span class=\"se\">\\\"<\/span><span class=\"s2\">},<\/span><span class=\"se\">\\\"<\/span><span class=\"s2\">Succeed<\/span><span class=\"se\">\\\"<\/span><span class=\"s2\">:{<\/span><span class=\"se\">\\\"<\/span><span class=\"s2\">Type<\/span><span class=\"se\">\\\"<\/span><span class=\"s2\">:<\/span><span class=\"se\">\\\"<\/span><span class=\"s2\">Succeed<\/span><span class=\"se\">\\\"<\/span><span class=\"s2\">}},<\/span><span class=\"se\">\\\"<\/span><span class=\"s2\">TimeoutSeconds<\/span><span class=\"se\">\\\"<\/span><span class=\"s2\">:30}\"<\/span><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>\u067e\u0633 \u0628\u0627 \u0622\u0646 \u0686\u0647 \u06a9\u0646\u06cc\u0645\u061f  \u0633\u0627\u062f\u0647 \u0627\u0633\u062a\u060c \u0622\u0646 \u0631\u0627 \u0628\u0647 \u062f\u0627\u062e\u0644 \u0638\u0631\u0641 \u062a\u0648\u0627\u0628\u0639 Step \u0641\u0634\u0627\u0631 \u062f\u0647\u06cc\u062f \u062a\u0627 \u0645\u0627\u0634\u06cc\u0646 \u062d\u0627\u0644\u062a \u0627\u06cc\u062c\u0627\u062f \u0634\u0648\u062f.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code>aws stepfunctions <span class=\"nt\">--endpoint-url<\/span> http:\/\/localhost:8083 create-state-machine <span class=\"nt\">--definition<\/span> &lt;the body&gt; <span class=\"nt\">--name<\/span> &lt;the <span class=\"nb\">id<\/span><span class=\"o\">&gt;<\/span> <span class=\"nt\">--role-arn<\/span> <span class=\"s2\">\"arn:aws:iam::012345678901:role\/DummyRole\"<\/span> <span class=\"nt\">--type<\/span> <span class=\"s2\">\"EXPRESS\"<\/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>\u067e\u0633 \u0627\u0632 \u0627\u0633\u062a\u0642\u0631\u0627\u0631\u060c \u06cc\u06a9 \u0644\u06cc\u0633\u062a \u0633\u0631\u06cc\u0639 \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code><span class=\"c\"># AWS CLI Command<\/span>\naws stepfunctions <span class=\"nt\">--endpoint-url<\/span> http:\/\/localhost:8083 list-state-machines\n\n<span class=\"c\"># the output<\/span>\n<span class=\"o\">{<\/span>\n    <span class=\"s2\">\"stateMachines\"<\/span>: <span class=\"o\">[<\/span>\n        <span class=\"o\">{<\/span>\n            <span class=\"s2\">\"stateMachineArn\"<\/span>: <span class=\"s2\">\"arn:aws:states:us-west-2:123456789012:stateMachine:SimpleStateMachine3C32178E\"<\/span>,\n            <span class=\"s2\">\"name\"<\/span>: <span class=\"s2\">\"SimpleStateMachine3C32178E\"<\/span>,\n            <span class=\"s2\">\"type\"<\/span>: <span class=\"s2\">\"EXPRESS\"<\/span>,\n            <span class=\"s2\">\"creationDate\"<\/span>: <span class=\"s2\">\"2023-04-14T13:56:45.260000-05:00\"<\/span>\n        <span class=\"o\">}<\/span>\n    <span class=\"o\">]<\/span>\n<span class=\"o\">}<\/span>\n\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 \u062d\u0631\u06a9\u062a \u062f\u0631\u0633\u062a\u060c \u0627\u06a9\u0646\u0648\u0646 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u0645 \u0622\u0632\u0645\u0627\u06cc\u0634 \u0631\u0627 \u0634\u0631\u0648\u0639 \u06a9\u0646\u06cc\u0645<\/p>\n<h2><span class=\"ez-toc-section\" id=\"%D8%AA%D8%B3%D8%AA_%DA%A9%D8%B1%D8%AF%D9%86_%DA%AF%D8%B1%D8%AF%D8%B4_%DA%A9%D8%A7%D8%B1_%D8%AA%D8%A7%D8%A8%D8%B9_%D9%85%D8%B1%D8%AD%D9%84%D9%87_%D8%A8%D9%87_%D8%B5%D9%88%D8%B1%D8%AA_%D9%85%D8%AD%D9%84%DB%8C\"><\/span>\n<p>  \u062a\u0633\u062a \u06a9\u0631\u062f\u0646 \u06af\u0631\u062f\u0634 \u06a9\u0627\u0631 \u062a\u0627\u0628\u0639 \u0645\u0631\u062d\u0644\u0647 \u0628\u0647 \u0635\u0648\u0631\u062a \u0645\u062d\u0644\u06cc<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0627\u06a9\u0646\u0648\u0646 \u06a9\u0647 \u0627\u06cc\u0646 State Machine \u0631\u0627 \u0631\u0627\u0647\u200c\u0627\u0646\u062f\u0627\u0632\u06cc \u06a9\u0631\u062f\u0647\u200c\u0627\u06cc\u0645\u060c \u0686\u06af\u0648\u0646\u0647 \u0622\u0646 \u0631\u0627 \u0622\u0632\u0645\u0627\u06cc\u0634 \u06a9\u0646\u06cc\u0645\u061f  \u0631\u0627\u0647 \u0647\u0627\u06cc \u0632\u06cc\u0627\u062f\u06cc.<\/p>\n<ul>\n<li>    \u067e\u0633\u062a\u0686\u06cc<\/li>\n<li>    \u062d\u0644\u0642\u0647<\/li>\n<li>    \u0627\u0633\u062a<\/li>\n<li>    jUnit<\/li>\n<li>    &#8230;<\/li>\n<\/ul>\n<p>\u0628\u0631\u0627\u06cc \u0627\u06cc\u0646 \u0645\u062b\u0627\u0644\u060c \u0645\u0646 \u0628\u0647 \u0634\u0645\u0627 \u0646\u0634\u0627\u0646 \u0645\u06cc\u200c\u062f\u0647\u0645 \u06a9\u0647 \u0686\u06af\u0648\u0646\u0647 Jest \u0631\u0627 \u0628\u0631\u0627\u06cc \u0622\u0632\u0645\u0627\u06cc\u0634 \u0627\u06cc\u0646 \u0645\u0648\u0627\u0631\u062f \u062a\u0646\u0638\u06cc\u0645 \u06a9\u0646\u06cc\u062f.  \u0645\u0646 \u062c\u0633\u062a \u0631\u0627 \u0628\u0647 \u0686\u0646\u062f \u062f\u0644\u06cc\u0644 \u062f\u0648\u0633\u062a \u062f\u0627\u0631\u0645<\/p>\n<ol>\n<li>\u0645\u0646 \u0645\u06cc \u062a\u0648\u0627\u0646\u0645 \u0627\u0632 TypeScript \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u0645 \u06a9\u0647 \u0647\u0645\u0627\u0646 \u0686\u06cc\u0632\u06cc \u0627\u0633\u062a \u06a9\u0647 \u0628\u0631\u0627\u06cc \u06a9\u062f CDK \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u0645.<\/li>\n<li>AWS SDK v3 \u0628\u0631\u0627\u06cc \u062c\u0627\u0648\u0627 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u062c\u0627\u0645\u062f \u0627\u0633\u062a<\/li>\n<\/ol>\n<p>\u0628\u0631\u0627\u06cc \u062c\u062f\u0627\u0633\u0627\u0632\u06cc \u062a\u0633\u062a\u200c\u0647\u0627\u06cc State Machine \u062e\u0648\u062f\u060c \u06cc\u06a9 \u0645\u062c\u0645\u0648\u0639\u0647 \u0622\u0632\u0645\u0627\u06cc\u0634\u06cc \u0645\u0627\u0646\u0646\u062f \u0627\u06cc\u0646 \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc\u200c\u06a9\u0646\u0645.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight typescript\"><code><span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">SFNClient<\/span><span class=\"p\">,<\/span> <span class=\"nx\">StartSyncExecutionCommand<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">@aws-sdk\/client-sfn<\/span><span class=\"dl\">\"<\/span><span class=\"p\">;<\/span>\n\n<span class=\"nx\">describe<\/span><span class=\"p\">(<\/span><span class=\"dl\">\"<\/span><span class=\"s2\">SF Integration Tests<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\n    <span class=\"kd\">const<\/span> <span class=\"nx\">client<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nx\">SFNClient<\/span><span class=\"p\">({<\/span>\n        <span class=\"na\">region<\/span><span class=\"p\">:<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">us-west-2<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span>\n        <span class=\"na\">endpoint<\/span><span class=\"p\">:<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">http:\/\/localhost:8083<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span>\n        <span class=\"na\">disableHostPrefix<\/span><span class=\"p\">:<\/span> <span class=\"kc\">true<\/span><span class=\"p\">,<\/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>\u0648 \u0633\u067e\u0633 \u0645\u06cc \u062a\u0648\u0627\u0646\u0645 \u06cc\u06a9 \u0622\u0632\u0645\u0627\u06cc\u0634 \u0628\u0627 \u0628\u0627\u0631\u06cc \u06a9\u0647 \u0645\u06cc \u062e\u0648\u0627\u0647\u0645 \u0627\u06cc\u0646 \u0631\u0627 \u062f\u0648\u0633\u062a \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0645\u060c \u0627\u062c\u0631\u0627 \u06a9\u0646\u0645<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight typescript\"><code><span class=\"nx\">it<\/span><span class=\"p\">(<\/span><span class=\"dl\">\"<\/span><span class=\"s2\">Should Succeed Success Path<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span> <span class=\"k\">async<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\n    <span class=\"kd\">const<\/span> <span class=\"nx\">startCommand<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nx\">StartSyncExecutionCommand<\/span><span class=\"p\">({<\/span>\n        <span class=\"na\">stateMachineArn<\/span><span class=\"p\">:<\/span>\n            <span class=\"dl\">\"<\/span><span class=\"s2\">arn:aws:states:us-west-2:123456789012:stateMachine:SimpleStateMachine3C32178E<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span>\n        <span class=\"na\">input<\/span><span class=\"p\">:<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">{\"path\": \"Succeed\"}<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span>\n    <span class=\"p\">});<\/span>\n\n    <span class=\"kd\">const<\/span> <span class=\"nx\">startOutput<\/span> <span class=\"o\">=<\/span> <span class=\"k\">await<\/span> <span class=\"nx\">client<\/span><span class=\"p\">.<\/span><span class=\"nx\">send<\/span><span class=\"p\">(<\/span><span class=\"nx\">startCommand<\/span><span class=\"p\">);<\/span>\n    <span class=\"nx\">expect<\/span><span class=\"p\">(<\/span><span class=\"nx\">startOutput<\/span><span class=\"p\">.<\/span><span class=\"nx\">status<\/span><span class=\"p\">).<\/span><span class=\"nx\">toBe<\/span><span class=\"p\">(<\/span><span class=\"dl\">\"<\/span><span class=\"s2\">SUCCEEDED<\/span><span class=\"dl\">\"<\/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\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0628\u0647 \u0646\u062d\u0648\u0647 \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc State Machine \u062a\u0648\u062c\u0647 \u06a9\u0646\u06cc\u062f.  \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0632\u06cc\u0627\u062f\u06cc \u062f\u0631 \u0645\u0648\u0631\u062f \u0639\u062f\u0645 \u0627\u0645\u06a9\u0627\u0646 \u0627\u062c\u0631\u0627\u06cc StartSync \u0628\u0627 \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 \u0645\u062d\u0644\u06cc \u062f\u0631 \u0627\u06cc\u0646\u062a\u0631\u0646\u062a \u062e\u0648\u0627\u0647\u06cc\u062f \u062f\u06cc\u062f.  \u0627\u06cc\u0646 \u062f\u06cc\u06af\u0631 \u062f\u0631\u0633\u062a \u0646\u06cc\u0633\u062a.  \u0627\u0648\u0644\u06cc\u0646 \u0645\u0634\u06a9\u0644\u06cc \u06a9\u0647 \u062e\u0648\u0627\u0647\u06cc\u062f \u062f\u06cc\u062f \u0627\u06cc\u0646 \u0627\u0633\u062a \u06a9\u0647 \u0627\u0632 \u0622\u0646 \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u0646\u0645\u06cc \u06a9\u0646\u062f.  \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0631\u0627 \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc \u062f\u0647\u062f.  \u0645\u0648\u0631\u062f \u062f\u0648\u0645 \u0627\u06cc\u0646 \u0627\u0633\u062a \u06a9\u0647 StartSync \u0627\u0636\u0627\u0641\u0647 \u0645\u06cc \u0634\u0648\u062f <code>sync-<\/code> \u0628\u0647 \u0645\u06cc\u0632\u0628\u0627\u0646 \u0628\u0631\u0627\u06cc \u0646\u0642\u0637\u0647 \u067e\u0627\u06cc\u0627\u0646\u06cc \u0634\u0645\u0627.  \u0648 \u0647\u0646\u06af\u0627\u0645 \u062a\u0646\u0638\u06cc\u0645 \u0646\u0642\u0637\u0647 \u067e\u0627\u06cc\u0627\u0646\u06cc \u062e\u0648\u062f \u0628\u0631\u0627\u06cc \u0627\u062c\u0631\u0627\u0647\u0627\u06cc \u0645\u062d\u0644\u06cc\u060c \u0627\u0636\u0627\u0641\u0647 \u0645\u06cc \u0634\u0648\u062f <code>sync-http:\/\/localhost<\/code>.  \u0627\u06cc\u0646 \u06cc\u06a9 \u0646\u0642\u0637\u0647 \u067e\u0627\u06cc\u0627\u0646 \u0645\u0639\u062a\u0628\u0631 \u0646\u06cc\u0633\u062a.<\/p>\n<p>\u067e\u0633 \u0627\u0632 \u06a9\u0645\u06cc \u062c\u0633\u062a\u062c\u0648 \u062f\u0631 \u0645\u062e\u0632\u0646 GitHub \u0648 \u062e\u0648\u0627\u0646\u062f\u0646 \u0627\u06cc\u0646\u06a9\u0647 \u0627\u06cc\u0646 \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u062f\u0631 Java SDK \u0627\u0633\u062a\u060c \u06af\u0632\u06cc\u0646\u0647 \u0645\u0648\u0631\u062f \u0646\u0638\u0631 \u0631\u0627 \u067e\u06cc\u062f\u0627 \u06a9\u0631\u062f\u0645.  \u062f\u0631 \u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u0645\u0634\u062a\u0631\u06cc\u060c \u0645\u0637\u0645\u0626\u0646 \u0634\u0648\u06cc\u062f \u06a9\u0647 \u062a\u0646\u0638\u06cc\u0645 \u06a9\u0631\u062f\u0647 \u0627\u06cc\u062f <code>disableHostPrevix: true<\/code><\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight typescript\"><code><span class=\"kd\">const<\/span> <span class=\"nx\">client<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nx\">SFNClient<\/span><span class=\"p\">({<\/span>\n    <span class=\"na\">region<\/span><span class=\"p\">:<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">us-west-2<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span>\n    <span class=\"na\">endpoint<\/span><span class=\"p\">:<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">http:\/\/localhost:8083<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span>\n    <span class=\"na\">disableHostPrefix<\/span><span class=\"p\">:<\/span> <span class=\"kc\">true<\/span><span class=\"p\">,<\/span> <span class=\"c1\">\/\/ &lt;----- HERE<\/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\u062c\u0631\u0627\u06cc \u0645\u062c\u0645\u0648\u0639\u0647 \u0628\u0647 \u0627\u06cc\u0646 \u0634\u06a9\u0644 \u062e\u0648\u0627\u0647\u062f \u0628\u0648\u062f<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/nabfollower.com\/blog\/wp-content\/uploads\/2023\/04\/1681530884_853_\u062a\u0633\u062a-\u06a9\u0631\u062f\u0646-\u06af\u0631\u062f\u0634-\u06a9\u0627\u0631-\u062a\u0627\u0628\u0639-\u0645\u0631\u062d\u0644\u0647-\u0628\u0647-\u0635\u0648\u0631\u062a-\u0645\u062d\u0644\u06cc.png\" alt=\"Run Local \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u062f\" loading=\"lazy\" width=\"800\" height=\"255\" title=\"\"><\/p>\n<p>\u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0647\u0646\u06af\u0627\u0645 \u0622\u0632\u0645\u0627\u06cc\u0634 \u06af\u0631\u062f\u0634 \u06a9\u0627\u0631 \u062a\u0627\u0628\u0639 Step \u0628\u0647 \u0635\u0648\u0631\u062a \u0645\u062d\u0644\u06cc\u060c \u0645\u06cc \u062a\u0648\u0627\u0646\u0645 \u0627\u0632 \u0647\u0645\u0627\u0646 \u0627\u0628\u0632\u0627\u0631\u06cc \u06a9\u0647 \u0628\u0647 \u0622\u0646 \u0639\u0627\u062f\u062a \u06a9\u0631\u062f\u0647 \u0627\u0645 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u0645.<\/p>\n<ul>\n<li>    \u062f\u0627\u06a9\u0631<\/li>\n<li>    CDK \u0648 TypeScript<\/li>\n<li>    \u0686\u0627\u0631\u0686\u0648\u0628 \u0648 \u0627\u0628\u0632\u0627\u0631 \u062a\u0633\u062a \u0645\u0646 \u0631\u0627 \u0628\u06cc\u0627\u0648\u0631\u06cc\u062f<\/li>\n<li>    AWS SDK \u06a9\u0647 \u0628\u0647 \u0635\u0648\u0631\u062a \u0645\u062d\u0644\u06cc \u0648 \u062f\u0631 \u0641\u0636\u0627\u06cc \u0627\u0628\u0631\u06cc \u06a9\u0627\u0631 \u0645\u06cc \u06a9\u0646\u062f<\/li>\n<\/ul>\n<h2><span class=\"ez-toc-section\" id=\"%D9%87%D9%85%D9%87_%D8%A7%D8%B4_%D8%B1%D8%A7_%D8%A8%DA%AF%D8%B0%D8%A7%D8%B1_%DA%A9%D9%86%D8%A7%D8%B1_%D9%87%D9%85\"><\/span>\n<p>  \u0647\u0645\u0647 \u0627\u0634 \u0631\u0627 \u0628\u06af\u0630\u0627\u0631 \u06a9\u0646\u0627\u0631 \u0647\u0645<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0622\u0632\u0645\u0627\u06cc\u0634 \u06af\u0631\u062f\u0634\u200c\u0647\u0627\u06cc \u06a9\u0627\u0631\u06cc \u062a\u0627\u0628\u0639 \u0645\u0631\u062d\u0644\u0647 \u0628\u0647 \u0635\u0648\u0631\u062a \u0645\u062d\u0644\u06cc \u0634\u06af\u0641\u062a\u200c\u0627\u0646\u06af\u06cc\u0632 \u0627\u0633\u062a \u0648 \u0628\u0631\u0631\u0633\u06cc\u200c\u0647\u0627\u06cc \u0632\u06cc\u0627\u062f\u06cc \u0631\u0627 \u0628\u0647 \u06af\u0631\u062f\u0634 \u06a9\u0627\u0631 \u062a\u0648\u0633\u0639\u0647 \u0645\u062d\u0644\u06cc \u0645\u0646 \u0627\u0636\u0627\u0641\u0647 \u0645\u06cc\u200c\u06a9\u0646\u062f.  \u0648 \u0645\u0637\u0645\u0626\u0646\u0627\u064b \u0627\u06cc\u0646 \u0686\u06cc\u0632 \u062e\u0648\u0628\u06cc \u0627\u0633\u062a.  \u0627\u0645\u0627 \u0627\u06af\u0631 \u0628\u062e\u0648\u0627\u0647\u0645 \u06cc\u06a9 \u0642\u062f\u0645 \u0641\u0631\u0627\u062a\u0631 \u0628\u0631\u0648\u0645 \u0686\u0647\u061f  \u0627\u06af\u0631 \u0628\u062e\u0648\u0627\u0647\u0645 \u0627\u06cc\u0646 \u0631\u0627 \u062f\u0631 \u062e\u0637 \u0644\u0648\u0644\u0647 CI\/CD \u062e\u0648\u062f \u0628\u0631\u0627\u06cc \u062a\u0648\u0633\u0639\u0647 \u0632\u06cc\u0631\u0633\u0627\u062e\u062a\u0645 \u0645\u0639\u0631\u0641\u06cc \u06a9\u0646\u0645\u060c \u0686\u0647 \u0645\u06cc\u200c\u0634\u0648\u062f\u061f<\/p>\n<p>\u0628\u06cc\u0627\u06cc\u06cc\u062f \u0647\u0645\u06cc\u0646 \u06a9\u0627\u0631 \u0631\u0627 \u0628\u06a9\u0646\u06cc\u0645!  \u0628\u06cc\u0627\u06cc\u06cc\u062f L3 Construct \u0628\u0647 \u0646\u0627\u0645 CDK Pipelines \u0631\u0627 \u0628\u0647 \u062a\u0631\u06a9\u06cc\u0628 \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u0645.  \u0627\u06af\u0631 \u0622\u0634\u0646\u0627 \u0646\u06cc\u0633\u062a\u06cc\u062f\u060c \u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u06cc\u06a9 \u0622\u063a\u0627\u0632\u06af\u0631 \u0633\u0631\u06cc\u0639 \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u062f.<\/p>\n<p>\u06a9\u062f \u062e\u0637 \u0644\u0648\u0644\u0647 \u0628\u0647 \u0627\u06cc\u0646 \u0634\u06a9\u0644 \u0627\u0633\u062a.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight typescript\"><code><span class=\"k\">export<\/span> <span class=\"kd\">class<\/span> <span class=\"nx\">PipelineStack<\/span> <span class=\"kd\">extends<\/span> <span class=\"nx\">Stack<\/span> <span class=\"p\">{<\/span>\n    <span class=\"kd\">constructor<\/span><span class=\"p\">(<\/span><span class=\"nx\">scope<\/span><span class=\"p\">:<\/span> <span class=\"nx\">Construct<\/span><span class=\"p\">,<\/span> <span class=\"nx\">id<\/span><span class=\"p\">:<\/span> <span class=\"kr\">string<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n        <span class=\"k\">super<\/span><span class=\"p\">(<\/span><span class=\"nx\">scope<\/span><span class=\"p\">,<\/span> <span class=\"nx\">id<\/span><span class=\"p\">);<\/span>\n        <span class=\"kd\">const<\/span> <span class=\"nx\">pipeline<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nx\">CodePipeline<\/span><span class=\"p\">(<\/span><span class=\"k\">this<\/span><span class=\"p\">,<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">Pipeline<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span> <span class=\"p\">{<\/span>\n            <span class=\"na\">pipelineName<\/span><span class=\"p\">:<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">SamplePipeline<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span>\n            <span class=\"na\">dockerEnabledForSynth<\/span><span class=\"p\">:<\/span> <span class=\"kc\">true<\/span><span class=\"p\">,<\/span>\n            <span class=\"na\">synth<\/span><span class=\"p\">:<\/span> <span class=\"k\">new<\/span> <span class=\"nx\">ShellStep<\/span><span class=\"p\">(<\/span><span class=\"dl\">\"<\/span><span class=\"s2\">Synth<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span> <span class=\"p\">{<\/span>\n                <span class=\"na\">input<\/span><span class=\"p\">:<\/span> <span class=\"nx\">CodePipelineSource<\/span><span class=\"p\">.<\/span><span class=\"nx\">gitHub<\/span><span class=\"p\">(<\/span>\n                    <span class=\"dl\">\"<\/span><span class=\"s2\">benbpyle\/cdk-step-functions-local-testing<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span>\n                    <span class=\"dl\">\"<\/span><span class=\"s2\">main<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span>\n                    <span class=\"p\">{<\/span>\n                        <span class=\"na\">authentication<\/span><span class=\"p\">:<\/span> <span class=\"nx\">SecretValue<\/span><span class=\"p\">.<\/span><span class=\"nx\">secretsManager<\/span><span class=\"p\">(<\/span>\n                            <span class=\"dl\">\"<\/span><span class=\"s2\">sf-sample<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span>\n                            <span class=\"p\">{<\/span>\n                                <span class=\"na\">jsonField<\/span><span class=\"p\">:<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">github<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span>\n                            <span class=\"p\">}<\/span>\n                        <span class=\"p\">),<\/span>\n                    <span class=\"p\">}<\/span>\n                <span class=\"p\">),<\/span>\n                <span class=\"na\">commands<\/span><span class=\"p\">:<\/span> <span class=\"p\">[<\/span>\n                    <span class=\"dl\">\"<\/span><span class=\"s2\">npm i<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span>\n                    <span class=\"dl\">\"<\/span><span class=\"s2\">npm i cdk-asl-definition-extractor -g<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span>\n                    <span class=\"dl\">\"<\/span><span class=\"s2\">make test-start-local<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span>\n                <span class=\"p\">],<\/span>\n            <span class=\"p\">}),<\/span>\n            <span class=\"na\">synthCodeBuildDefaults<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\n                <span class=\"na\">buildEnvironment<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\n                    <span class=\"na\">buildImage<\/span><span class=\"p\">:<\/span> <span class=\"nx\">LinuxBuildImage<\/span><span class=\"p\">.<\/span><span class=\"nx\">STANDARD_6_0<\/span><span class=\"p\">,<\/span>\n                    <span class=\"na\">environmentVariables<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\n                        <span class=\"na\">DOCKERHUB_USERNAME<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\n                            <span class=\"na\">type<\/span><span class=\"p\">:<\/span> <span class=\"nx\">BuildEnvironmentVariableType<\/span><span class=\"p\">.<\/span><span class=\"nx\">SECRETS_MANAGER<\/span><span class=\"p\">,<\/span>\n                            <span class=\"na\">value<\/span><span class=\"p\">:<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">dockerhub:username<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span>\n                        <span class=\"p\">},<\/span>\n                        <span class=\"na\">DOCKERHUB_PASSWORD<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\n                            <span class=\"na\">type<\/span><span class=\"p\">:<\/span> <span class=\"nx\">BuildEnvironmentVariableType<\/span><span class=\"p\">.<\/span><span class=\"nx\">SECRETS_MANAGER<\/span><span class=\"p\">,<\/span>\n                            <span class=\"na\">value<\/span><span class=\"p\">:<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">dockerhub:password<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span>\n                        <span class=\"p\">},<\/span>\n                    <span class=\"p\">},<\/span>\n                <span class=\"p\">},<\/span>\n                <span class=\"na\">partialBuildSpec<\/span><span class=\"p\">:<\/span> <span class=\"nx\">BuildSpec<\/span><span class=\"p\">.<\/span><span class=\"nx\">fromObject<\/span><span class=\"p\">({<\/span>\n                    <span class=\"na\">phases<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\n                        <span class=\"na\">install<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\n                            <span class=\"dl\">\"<\/span><span class=\"s2\">runtime-versions<\/span><span class=\"dl\">\"<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\n                                <span class=\"na\">nodejs<\/span><span class=\"p\">:<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">16<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span>\n                            <span class=\"p\">},<\/span>\n                            <span class=\"na\">commands<\/span><span class=\"p\">:<\/span> <span class=\"p\">[<\/span>\n                                <span class=\"dl\">\"<\/span><span class=\"s2\">docker login --username $DOCKERHUB_USERNAME --password $DOCKERHUB_PASSWORD<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span>\n                            <span class=\"p\">],<\/span>\n                        <span class=\"p\">},<\/span>\n                    <span class=\"p\">},<\/span>\n                <span class=\"p\">}),<\/span>\n            <span class=\"p\">},<\/span>\n        <span class=\"p\">});<\/span>\n\n        <span class=\"nx\">pipeline<\/span><span class=\"p\">.<\/span><span class=\"nx\">addStage<\/span><span class=\"p\">(<\/span><span class=\"k\">new<\/span> <span class=\"nx\">PipelineStage<\/span><span class=\"p\">(<\/span><span class=\"k\">this<\/span><span class=\"p\">,<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">PipelineStage<\/span><span class=\"dl\">\"<\/span><span class=\"p\">));<\/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>\u0686\u0646\u062f \u0646\u06a9\u062a\u0647 \u0642\u0627\u0628\u0644 \u0630\u06a9\u0631 \u0627\u0633\u062a.  \u0627\u0628\u062a\u062f\u0627\u060c \u0645\u0631\u062d\u0644\u0647 \u062a\u0631\u06a9\u06cc\u0628\u06cc \u0627\u0632 GitHub \u0628\u0627 \u06a9\u0644\u06cc\u062f API \u0634\u062e\u0635\u06cc \u0648\u0627\u06a9\u0634\u06cc \u0634\u062f\u0647 \u0627\u0632 AWS Secrets Manager \u0627\u0633\u062a.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight typescript\"><code><span class=\"nx\">input<\/span><span class=\"p\">:<\/span> <span class=\"nx\">CodePipelineSource<\/span><span class=\"p\">.<\/span><span class=\"nx\">gitHub<\/span><span class=\"p\">(<\/span>\n    <span class=\"dl\">\"<\/span><span class=\"s2\">benbpyle\/cdk-step-functions-local-testing<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span>\n    <span class=\"dl\">\"<\/span><span class=\"s2\">main<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span>\n    <span class=\"p\">{<\/span>\n        <span class=\"c1\">\/\/ the IAM policy gets added by default<\/span>\n        <span class=\"na\">authentication<\/span><span class=\"p\">:<\/span> <span class=\"nx\">SecretValue<\/span><span class=\"p\">.<\/span><span class=\"nx\">secretsManager<\/span><span class=\"p\">(<\/span>\n            <span class=\"dl\">\"<\/span><span class=\"s2\">sf-sample<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span>\n            <span class=\"p\">{<\/span>\n                <span class=\"na\">jsonField<\/span><span class=\"p\">:<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">github<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span>\n            <span class=\"p\">}<\/span>\n        <span class=\"p\">),<\/span>\n    <span class=\"p\">}<\/span>\n<span class=\"p\">),<\/span>\n\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>\u062f\u0648\u0645\u060c \u0645\u0646 \u0648\u0627\u0628\u0633\u062a\u06af\u06cc \u0631\u0627 \u0628\u0631\u0627\u06cc \u0628\u0633\u062a\u0647 NPM \u062e\u0648\u062f \u06a9\u0647 \u062f\u0631 \u0628\u0627\u0644\u0627 \u0630\u06a9\u0631 \u0634\u062f \u0627\u0636\u0627\u0641\u0647 \u0645\u06cc \u06a9\u0646\u0645 \u0648 \u0633\u067e\u0633 \u0622\u0646 \u0631\u0627 \u0627\u062c\u0631\u0627 \u0645\u06cc \u06a9\u0646\u0645 <code>Make<\/code> \u0641\u0631\u0645\u0627\u0646<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight typescript\"><code><span class=\"nx\">commands<\/span><span class=\"p\">:<\/span> <span class=\"p\">[<\/span>\n    <span class=\"dl\">\"<\/span><span class=\"s2\">npm i<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span>\n    <span class=\"dl\">\"<\/span><span class=\"s2\">npm i cdk-asl-definition-extractor -g<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span>\n    <span class=\"dl\">\"<\/span><span class=\"s2\">make test-start-local<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span>\n<span class=\"p\">],<\/span>\n\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>\u0633\u0648\u0645\u060c <code>Make<\/code> \u062f\u0633\u062a\u0648\u0631 \u0641\u0642\u0637 \u0645\u0631\u0627\u062d\u0644\u06cc \u0631\u0627 \u06a9\u0647 \u062f\u0631 \u0628\u0627\u0644\u0627 \u062a\u0648\u0636\u06cc\u062d \u062f\u0627\u062f\u0645 \u0627\u062c\u0631\u0627 \u0645\u06cc \u06a9\u0646\u062f<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight make\"><code><span class=\"nl\">test-start-local<\/span><span class=\"o\">:<\/span>\n    npx cdk synth <span class=\"nt\">--quiet<\/span> <span class=\"c\"># build<\/span>\n    docker-compose up <span class=\"nt\">-d<\/span> <span class=\"nt\">--quiet-pull<\/span> <span class=\"c\"># run the containers<\/span>\n    <span class=\"nb\">sleep <\/span>10 <span class=\"c\"># pause to let localstack startup<\/span>\n    node scripts\/index.js <span class=\"c\"># a runner for posting the state machine into the local container<\/span>\n    npm run test-sf <span class=\"c\"># executes the Jest tests<\/span>\n    make test-end-local <span class=\"c\"># teardown<\/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>\u062f\u0646\u0628\u0627\u0644 \u06a9\u0631\u062f\u0646 \u0645\u0631\u0627\u062d\u0644 \u0628\u0647 \u0627\u0646\u062f\u0627\u0632\u0647 \u06a9\u0627\u0641\u06cc \u0622\u0633\u0627\u0646 \u0627\u0633\u062a\u060c \u0627\u0645\u0627 \u0645\u0633\u062a\u0646\u062f\u0633\u0627\u0632\u06cc \u0622\u0646\u0647\u0627 \u0639\u0628\u0627\u0631\u062a\u0646\u062f \u0627\u0632:<\/p>\n<ol>\n<li>synth \u0631\u0627 \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u062f \u0648 \u062e\u0631\u0648\u062c\u06cc CloudFormation \u0631\u0627 \u0628\u0633\u0627\u0632\u06cc\u062f<\/li>\n<li>\u06a9\u0627\u0646\u062a\u06cc\u0646\u0631\u0647\u0627\u06cc \u0645\u062d\u0644\u06cc Localstack \u0648 Step Functions \u0631\u0627 \u0628\u06cc\u0627\u0648\u0631\u06cc\u062f<\/li>\n<li>\u0645\u06a9\u062b \u062c\u0632\u0626\u06cc &#8230; \u0627\u06cc\u0646 \u0628\u0631\u0627\u06cc Localstack \u0627\u0633\u062a<\/li>\n<li>\u06cc\u06a9 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u062f\u0631 POST \u062f\u0631 \u062a\u0639\u0631\u06cc\u0641 \u0645\u0627\u0634\u06cc\u0646 \u062d\u0627\u0644\u062a \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u062f<\/li>\n<li>\u062a\u0633\u062a \u0647\u0627\u06cc\u06cc \u0631\u0627 \u06a9\u0647 \u062f\u0631 \u0628\u0627\u0644\u0627 \u0646\u06af\u0627\u0647 \u06a9\u0631\u062f\u06cc\u0645 \u0631\u0627 \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u062f<\/li>\n<li>\u0641\u0631\u0648\u067e\u0627\u0634\u06cc \u0631\u0627 \u062e\u0631\u0627\u0628 \u06a9\u0646\u06cc\u062f<\/li>\n<\/ol>\n<p>\u0628\u0631\u0627\u06cc \u0628\u0627\u0644\u0627 \u0628\u0631\u062f\u0646 \u0627\u06cc\u0646 \u0645\u0648\u0636\u0648\u0639 \u0628\u0647 \u0645\u062d\u06cc\u0637 AWS \u062e\u0648\u062f\u060c \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u062f <code>cdk deploy<\/code> (\u0627\u0644\u0628\u062a\u0647 \u0628\u0639\u062f \u0627\u0632 \u0627\u06cc\u0646\u06a9\u0647 \u0628\u0648\u062a \u0627\u0633\u062a\u0631\u067e \u06a9\u0631\u062f\u06cc\u062f) \u0648 \u0645\u06cc \u0631\u0648\u06cc\u062f.  \u0628\u0627\u06cc\u062f \u062f\u0631 \u0646\u0647\u0627\u06cc\u062a \u0645\u0627\u0646\u0646\u062f \u0634\u06a9\u0644 \u0632\u06cc\u0631 \u0628\u0627\u0634\u062f<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/nabfollower.com\/blog\/wp-content\/uploads\/2023\/04\/1681530884_655_\u062a\u0633\u062a-\u06a9\u0631\u062f\u0646-\u06af\u0631\u062f\u0634-\u06a9\u0627\u0631-\u062a\u0627\u0628\u0639-\u0645\u0631\u062d\u0644\u0647-\u0628\u0647-\u0635\u0648\u0631\u062a-\u0645\u062d\u0644\u06cc.png\" alt=\"\u062e\u0637 \u0644\u0648\u0644\u0647 CDK\" loading=\"lazy\" width=\"800\" height=\"553\" title=\"\"><\/p>\n<p>\u0641\u0631\u0648 \u0631\u0641\u062a\u0646 \u0639\u0645\u06cc\u0642 \u062a\u0631 \u062f\u0631 \u0645\u0631\u062d\u0644\u0647 \u0633\u0627\u062e\u062a\u060c \u06af\u0632\u0627\u0631\u0634 \u0647\u0627\u06cc\u06cc \u0631\u0627 \u0628\u0647 \u062f\u0633\u062a \u0645\u06cc \u062f\u0647\u062f \u06a9\u0647 \u0646\u0634\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f \u0622\u0632\u0645\u0627\u06cc\u0634\u0627\u062a \u0634\u0645\u0627 \u0627\u062c\u0631\u0627 \u0634\u062f\u0647 \u0627\u0633\u062a.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/nabfollower.com\/blog\/wp-content\/uploads\/2023\/04\/1681530884_912_\u062a\u0633\u062a-\u06a9\u0631\u062f\u0646-\u06af\u0631\u062f\u0634-\u06a9\u0627\u0631-\u062a\u0627\u0628\u0639-\u0645\u0631\u062d\u0644\u0647-\u0628\u0647-\u0635\u0648\u0631\u062a-\u0645\u062d\u0644\u06cc.png\" alt=\"\u062a\u0648\u0627\u0628\u0639 \u0645\u0631\u062d\u0644\u0647 \u062a\u0633\u062a \u06a9\u062f \u0628\u06cc\u0644\u062f \u0628\u0647 \u0635\u0648\u0631\u062a \u0645\u062d\u0644\u06cc\" loading=\"lazy\" width=\"800\" height=\"422\" title=\"\"><\/p>\n<p>\u0639\u0644\u0627\u0648\u0647 \u0628\u0631 \u0627\u06cc\u0646\u060c \u0645\u0646 \u0645\u06cc\u200c\u062e\u0648\u0627\u0633\u062a\u0645 \u0628\u062a\u0648\u0627\u0646\u0645 \u0628\u0631\u062e\u06cc \u0627\u0632 \u0645\u062d\u062f\u0648\u062f\u06cc\u062a\u200c\u0647\u0627\u06cc \u06a9\u0634\u0634 Docker \u0631\u0627 \u062f\u0648\u0631 \u0628\u0632\u0646\u0645 \u0648 \u0627\u0632 \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc Node 16 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u0645\u060c \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0627\u06cc\u0646 \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0631\u0627 \u062f\u0631 CodeBuild Definition \u0627\u0646\u062c\u0627\u0645 \u062f\u0627\u062f\u0645.  \u062a\u0648\u062c\u0647 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u062f \u06a9\u0647 \u0645\u0646 \u062f\u0648\u0628\u0627\u0631\u0647 \u0627\u0632 SecretsManager \u0628\u0631\u0627\u06cc \u0628\u06cc\u0631\u0648\u0646 \u06a9\u0634\u06cc\u062f\u0646 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u06a9\u0627\u0631\u0628\u0631\u06cc \u062d\u0633\u0627\u0633 Docker \u062e\u0648\u062f \u0645\u0627\u0646\u0646\u062f \u0631\u0645\u0632 \u062f\u0633\u062a\u0631\u0633\u06cc \u0634\u062e\u0635\u06cc GitHub \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u0645.  \u0686\u0646\u06cc\u0646 \u0633\u0631\u0648\u06cc\u0633 \u0628\u0627\u062d\u0627\u0644\u06cc<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight typescript\"><code><span class=\"nx\">synthCodeBuildDefaults<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\n    <span class=\"nl\">buildEnvironment<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\n        <span class=\"na\">buildImage<\/span><span class=\"p\">:<\/span> <span class=\"nx\">LinuxBuildImage<\/span><span class=\"p\">.<\/span><span class=\"nx\">STANDARD_6_0<\/span><span class=\"p\">,<\/span>\n        <span class=\"na\">environmentVariables<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\n            <span class=\"na\">DOCKERHUB_USERNAME<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\n                <span class=\"na\">type<\/span><span class=\"p\">:<\/span> <span class=\"nx\">BuildEnvironmentVariableType<\/span><span class=\"p\">.<\/span><span class=\"nx\">SECRETS_MANAGER<\/span><span class=\"p\">,<\/span>\n                <span class=\"na\">value<\/span><span class=\"p\">:<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">dockerhub:username<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span>\n            <span class=\"p\">},<\/span>\n            <span class=\"na\">DOCKERHUB_PASSWORD<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\n                <span class=\"na\">type<\/span><span class=\"p\">:<\/span> <span class=\"nx\">BuildEnvironmentVariableType<\/span><span class=\"p\">.<\/span><span class=\"nx\">SECRETS_MANAGER<\/span><span class=\"p\">,<\/span>\n                <span class=\"na\">value<\/span><span class=\"p\">:<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">dockerhub:password<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span>\n            <span class=\"p\">},<\/span>\n        <span class=\"p\">},<\/span>\n    <span class=\"p\">},<\/span>\n    <span class=\"nx\">partialBuildSpec<\/span><span class=\"p\">:<\/span> <span class=\"nx\">BuildSpec<\/span><span class=\"p\">.<\/span><span class=\"nx\">fromObject<\/span><span class=\"p\">({<\/span>\n        <span class=\"na\">phases<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\n            <span class=\"na\">install<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\n                <span class=\"dl\">\"<\/span><span class=\"s2\">runtime-versions<\/span><span class=\"dl\">\"<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\n                    <span class=\"na\">nodejs<\/span><span class=\"p\">:<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">16<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span>\n                <span class=\"p\">},<\/span>\n                <span class=\"na\">commands<\/span><span class=\"p\">:<\/span> <span class=\"p\">[<\/span>\n                    <span class=\"dl\">\"<\/span><span class=\"s2\">docker login --username $DOCKERHUB_USERNAME --password $DOCKERHUB_PASSWORD<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span>\n                <span class=\"p\">],<\/span>\n            <span class=\"p\">},<\/span>\n        <span class=\"p\">},<\/span>\n    <span class=\"p\">}),<\/span>\n<span class=\"p\">},<\/span>\n\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<h2><span class=\"ez-toc-section\" id=\"%D8%AA%D8%A3%DB%8C%DB%8C%D8%AF_%D9%85%D8%A7%D8%B4%DB%8C%D9%86_%D8%AF%D9%88%D9%84%D8%AA%DB%8C_%D9%85%D8%B3%D8%AA%D9%82%D8%B1_%D8%B4%D8%AF\"><\/span>\n<p>  \u062a\u0623\u06cc\u06cc\u062f \u0645\u0627\u0634\u06cc\u0646 \u062f\u0648\u0644\u062a\u06cc \u0645\u0633\u062a\u0642\u0631 \u0634\u062f<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0622\u062e\u0631\u06cc\u0646 \u0642\u0637\u0639\u0647 \u0627\u0632 \u0627\u06cc\u0646 \u062d\u06a9\u06cc\u0645 \u0627\u06cc\u0646 \u0627\u0633\u062a \u06a9\u0647 \u062a\u0623\u06cc\u06cc\u062f \u06a9\u0646\u062f \u06a9\u0647 CodePipeline \u0645\u0627 \u0645\u0627\u0634\u06cc\u0646 State \u0645\u0627 \u0631\u0627 \u0628\u0647 \u062f\u0631\u0633\u062a\u06cc \u0628\u06cc\u0631\u0648\u0646 \u0632\u062f\u0647 \u0627\u0633\u062a.<\/p>\n<p>\u0648 \u0622\u0646\u062c\u0627\u0633\u062a!  \u0628\u0627 \u06af\u0631\u062f\u0634 \u06a9\u0627\u0631<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/nabfollower.com\/blog\/wp-content\/uploads\/2023\/04\/1681530884_600_\u062a\u0633\u062a-\u06a9\u0631\u062f\u0646-\u06af\u0631\u062f\u0634-\u06a9\u0627\u0631-\u062a\u0627\u0628\u0639-\u0645\u0631\u062d\u0644\u0647-\u0628\u0647-\u0635\u0648\u0631\u062a-\u0645\u062d\u0644\u06cc.png\" alt=\"\u062a\u0627\u06cc\u06cc\u062f \u0634\u062f\u0647 \u0627\u0633\u062a\" loading=\"lazy\" width=\"800\" height=\"150\" title=\"\"><br \/><img decoding=\"async\" src=\"https:\/\/nabfollower.com\/blog\/wp-content\/uploads\/2023\/04\/\u062a\u0633\u062a-\u06a9\u0631\u062f\u0646-\u06af\u0631\u062f\u0634-\u06a9\u0627\u0631-\u062a\u0627\u0628\u0639-\u0645\u0631\u062d\u0644\u0647-\u0628\u0647-\u0635\u0648\u0631\u062a-\u0645\u062d\u0644\u06cc.png\" alt=\"\u06af\u0631\u062f\u0634 \u06a9\u0627\u0631 \u0645\u0627\u0634\u06cc\u0646 \u062d\u0627\u0644\u062a\" loading=\"lazy\" width=\"528\" height=\"620\" title=\"\"><\/p>\n<p>\u0645\u0627 \u0628\u0647 \u062f\u0627\u06cc\u0631\u0647 \u06a9\u0627\u0645\u0644 \u0631\u0633\u06cc\u062f\u0647 \u0627\u06cc\u0645!<\/p>\n<h2><span class=\"ez-toc-section\" id=\"%D8%A8%D8%B3%D8%AA%D9%87_%D8%A8%D9%86%D8%AF%DB%8C\"><\/span>\n<p>  \u0628\u0633\u062a\u0647 \u0628\u0646\u062f\u06cc<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0627\u06af\u0631 \u062a\u0645\u0627\u0645 \u0627\u06cc\u0646 \u0633\u0641\u0631 \u0631\u0627 \u062f\u0646\u0628\u0627\u0644 \u06a9\u0631\u062f\u0647\u200c\u0627\u06cc\u062f\u060c \u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u0645\u062e\u0632\u0646 GitHub \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u067e\u0627\u062f\u0627\u0634 \u0634\u0645\u0627 \u0627\u0633\u062a \u06a9\u0647 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u062f \u0622\u0646 \u0631\u0627 \u0686\u0646\u06af\u0627\u0644\u060c \u0628\u06a9\u0634\u06cc\u062f \u06cc\u0627 \u0647\u0631 \u0686\u06cc\u0632 \u062f\u06cc\u06af\u0631\u06cc \u0628\u0627 \u0627\u06cc\u0646 \u06a9\u062f \u0628\u0627\u0632\u06cc \u06a9\u0646\u06cc\u062f.<\/p>\n<p>\u0645\u0646 \u0627\u0645\u06cc\u062f\u0648\u0627\u0631\u0645 \u06a9\u0647 \u0628\u062a\u0648\u0627\u0646\u06cc\u062f \u0686\u06af\u0648\u0646\u0647 \u062a\u0633\u062a \u06a9\u0631\u062f\u0646 \u06af\u0631\u062f\u0634 \u0647\u0627\u06cc \u06a9\u0627\u0631\u06cc Step Function \u0628\u0647 \u0635\u0648\u0631\u062a \u0645\u062d\u0644\u06cc \u0646\u0647 \u062a\u0646\u0647\u0627 \u0627\u0645\u06a9\u0627\u0646 \u067e\u0630\u06cc\u0631 \u0627\u0633\u062a \u0628\u0644\u06a9\u0647 \u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u062f\u0631 \u067e\u0644\u062a\u0641\u0631\u0645 CI\/CD \u0634\u0645\u0627 \u0646\u06cc\u0632 \u06af\u0646\u062c\u0627\u0646\u062f\u0647 \u0634\u0648\u062f.  \u0648 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0627\u0628\u0632\u0627\u0631\u06cc \u06a9\u0647 \u0628\u0627 \u0622\u0646 \u0631\u0627\u062d\u062a\u200c\u062a\u0631 \u0647\u0633\u062a\u06cc\u062f\u060c \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u062f \u062f\u0631 \u0627\u062c\u0631\u0627\u06cc \u0686\u06cc\u0632\u06cc \u0634\u0628\u06cc\u0647 \u0628\u0647 \u0627\u06cc\u0646 \u06a9\u0627\u0631\u0627\u06cc\u06cc \u0628\u0647 \u062f\u0633\u062a \u0622\u0648\u0631\u06cc\u062f.  \u0645\u0646 \u0645\u0637\u0645\u0626\u0646\u0627\u064b \u0645\u06cc \u062f\u0627\u0646\u0645 \u06a9\u0647 \u062a\u0648\u0627\u0646\u0627\u06cc\u06cc \u0622\u0632\u0645\u0627\u06cc\u0634 \u0645\u062d\u0644\u06cc \u0628\u0631\u0627\u06cc \u0645\u0646 \u0634\u062e\u0635\u0627\u064b \u0627\u0632 \u0646\u0638\u0631 \u06a9\u0627\u0631\u0627\u06cc\u06cc \u0648 \u062a\u062c\u0631\u0628\u0647 \u062a\u0648\u0633\u0639\u0647 \u062f\u0647\u0646\u062f\u0647 \u062a\u0641\u0627\u0648\u062a \u0632\u06cc\u0627\u062f\u06cc \u0627\u06cc\u062c\u0627\u062f \u06a9\u0631\u062f\u0647 \u0627\u0633\u062a.<\/p>\n<p>\u0627\u0645\u06cc\u062f\u0648\u0627\u0631\u0645 \u0627\u0632 \u062e\u0648\u0627\u0646\u062f\u0646 \u0644\u0630\u062a \u0628\u0631\u062f\u0647 \u0628\u0627\u0634\u06cc\u062f \u0648 \u0627\u06cc\u0646 \u0645\u0637\u0644\u0628 \u0645\u0641\u06cc\u062f \u0628\u0648\u062f\u0647 \u0628\u0627\u0634\u062f!<\/p>\n<p>\u0622\u0632\u0645\u0627\u06cc\u0634 \u06af\u0631\u062f\u0634 \u06a9\u0627\u0631 \u062a\u0627\u0628\u0639 \u0645\u0631\u062d\u0644\u0647 \u0628\u0647 \u0635\u0648\u0631\u062a \u0645\u062d\u0644\u06cc \u0644\u0627\u0632\u0645 \u0646\u06cc\u0633\u062a \u0633\u062e\u062a \u0628\u0627\u0634\u062f.  \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 CDK\u060c Docker \u0648 \u06cc\u06a9 \u062a\u0635\u0648\u06cc\u0631 \u0645\u062d\u0644\u06cc\u060c \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0628\u0627 \u062f\u0646\u0628\u0627\u0644 \u06a9\u0631\u062f\u0646 \u0645\u0642\u0627\u0644\u0647 \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0631\u0627 \u0627\u0646\u062c\u0627\u0645 \u062f\u0647\u06cc\u062f<\/p>\n<\/p><\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u0627\u06af\u0631 \u0645\u062f\u062a\u06cc \u0627\u0633\u062a \u06a9\u0647 \u062f\u0646\u0628\u0627\u0644 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u062f\u060c \u0645\u06cc\u200c\u062f\u0627\u0646\u06cc\u062f \u06a9\u0647 \u0645\u0646 \u0686\u0642\u062f\u0631 \u0627\u0632 \u0637\u0631\u0641\u062f\u0627\u0631\u0627\u0646 \u0633\u0631\u0648\u0631\u0647\u0627\u06cc \u0628\u062f\u0648\u0646 \u0633\u0631\u0648\u0631 \u0647\u0633\u062a\u0645. \u0648 \u062d\u062a\u06cc \u0628\u0647 \u0637\u0648\u0631 \u062e\u0627\u0635 \u062a\u0631\u060c \u0645\u0646 \u0686\u0642\u062f\u0631 \u062a\u0648\u0627\u0628\u0639 Step \u0631\u0627 \u062f\u0648\u0633\u062a \u062f\u0627\u0631\u0645. \u0627\u06af\u0631 \u0645\u0634\u06a9\u0644 \u0646\u06cc\u0627\u0632 \u0628\u0647 \u06cc\u06a9 \u0647\u0645\u0627\u0647\u0646\u06af \u06a9\u0646\u0646\u062f\u0647 \u06af\u0631\u062f\u0634 \u06a9\u0627\u0631 \u0628\u0633\u06cc\u0627\u0631 \u062f\u0631 \u062f\u0633\u062a\u0631\u0633 \u0631\u0627 \u062f\u0627\u0631\u06cc\u062f\u060c \u0646\u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u06a9\u0627\u0631\u06cc \u0628\u0647\u062a\u0631 \u0627\u0632 \u0627\u0646\u062a\u062e\u0627\u0628 \u0622\u0646 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0627\u0628\u0632\u0627\u0631 \u0627\u0646\u062a\u062e\u0627\u0628\u06cc \u062e\u0648\u062f &hellip;<\/p>\n","protected":false},"author":2,"featured_media":17645,"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-17644","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\/17644","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=17644"}],"version-history":[{"count":0,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/17644\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media\/17645"}],"wp:attachment":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media?parent=17644"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/categories?post=17644"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/tags?post=17644"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}