{"id":20571,"date":"2023-05-01T11:30:23","date_gmt":"2023-05-01T08:00:23","guid":{"rendered":"https:\/\/nabfollower.com\/blog\/deploy-your-application-to-ecs-via-cicd-with-ecspresso-34n0\/"},"modified":"2023-05-01T11:30:23","modified_gmt":"2023-05-01T08:00:23","slug":"deploy-your-application-to-ecs-via-cicd-with-ecspresso-34n0","status":"publish","type":"post","link":"https:\/\/nabfollower.com\/blog\/deploy-your-application-to-ecs-via-cicd-with-ecspresso-34n0\/","title":{"rendered":"\u0628\u0631\u0646\u0627\u0645\u0647 \u062e\u0648\u062f \u0631\u0627 \u0627\u0632 \u0637\u0631\u06cc\u0642 CI\/CD \u0628\u0627 Ecspresso \u062f\u0631 ECS \u0642\u0631\u0627\u0631 \u062f\u0647\u06cc\u062f"},"content":{"rendered":"<div data-article-id=\"1434260\" id=\"article-body\">\n<p>\u0622\u06cc\u0627 \u0634\u0645\u0627 \u0639\u0644\u0627\u0642\u0647 \u0645\u0646\u062f \u0647\u0633\u062a\u06cc\u062f \u06a9\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u062e\u0648\u062f \u0631\u0627 \u0627\u0632 \u0637\u0631\u06cc\u0642 CI\/CD \u062f\u0631 ECS \u0645\u0633\u062a\u0642\u0631 \u06a9\u0646\u06cc\u062f\u061f<br \/>\u0627\u06af\u0631 \u0686\u0646\u06cc\u0646 \u0627\u0633\u062a\u060c \u0627\u0633\u067e\u0631\u0633\u0648 \u0627\u0628\u0632\u0627\u0631\u06cc \u0628\u0631\u0627\u06cc \u0634\u0645\u0627\u0633\u062a!<\/p>\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=\"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\/deploy-your-application-to-ecs-via-cicd-with-ecspresso-34n0\/#%D8%A7%D8%B3%D9%BE%D8%B1%D8%B3%D9%88_%DA%86%DB%8C%D8%B3%D8%AA%D8%9F\" >\u0627\u0633\u067e\u0631\u0633\u0648 \u0686\u06cc\u0633\u062a\u061f<\/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\/deploy-your-application-to-ecs-via-cicd-with-ecspresso-34n0\/#%D8%A7%D9%86%DA%AF%DB%8C%D8%B2%D9%87\" >\u0627\u0646\u06af\u06cc\u0632\u0647<\/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\/deploy-your-application-to-ecs-via-cicd-with-ecspresso-34n0\/#%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87\" >\u0627\u0633\u062a\u0641\u0627\u062f\u0647<\/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\/deploy-your-application-to-ecs-via-cicd-with-ecspresso-34n0\/#%DA%86%DA%AF%D9%88%D9%86%D9%87_%D8%A7%D8%B3%D9%BE%D8%B1%D8%B3%D9%88_%D8%B1%D8%A7_%D8%AF%D8%B1_CICD_%D8%A7%D8%AF%D8%BA%D8%A7%D9%85_%DA%A9%D9%86%DB%8C%D9%85%D8%9F\" >\u0686\u06af\u0648\u0646\u0647 \u0627\u0633\u067e\u0631\u0633\u0648 \u0631\u0627 \u062f\u0631 CI\/CD \u0627\u062f\u063a\u0627\u0645 \u06a9\u0646\u06cc\u0645\u061f<\/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\/deploy-your-application-to-ecs-via-cicd-with-ecspresso-34n0\/#%D9%86%D8%B5%D8%A8\" >\u0646\u0635\u0628<\/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\/deploy-your-application-to-ecs-via-cicd-with-ecspresso-34n0\/#%D8%A8%D8%B1%D8%A7%DB%8C_%D8%AA%D9%88%D9%84%DB%8C%D8%AF_%D9%81%D8%A7%DB%8C%D9%84_yml_%D8%A7%D9%82%D8%AF%D8%A7%D9%85_%D8%A8%D9%87_%D8%A7%DB%8C%D9%86%DB%8C%D8%AA_%DA%A9%D9%86%DB%8C%D8%AF\" >\u0628\u0631\u0627\u06cc \u062a\u0648\u0644\u06cc\u062f \u0641\u0627\u06cc\u0644 yml \u0627\u0642\u062f\u0627\u0645 \u0628\u0647 \u0627\u06cc\u0646\u06cc\u062a \u06a9\u0646\u06cc\u062f<\/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\/deploy-your-application-to-ecs-via-cicd-with-ecspresso-34n0\/#tfstate_%D8%AE%D9%88%D8%AF_%D8%B1%D8%A7_%D9%88%D8%A7%D8%B1%D8%AF_%DA%A9%D9%86%DB%8C%D8%AF\" >tfstate \u062e\u0648\u062f \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\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\/deploy-your-application-to-ecs-via-cicd-with-ecspresso-34n0\/#%D8%B1%D8%A7%D9%87_%D8%A7%D9%86%D8%AF%D8%A7%D8%B2%DB%8C_cicd\" >\u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc ci\/cd<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/nabfollower.com\/blog\/deploy-your-application-to-ecs-via-cicd-with-ecspresso-34n0\/#%D9%86%D8%AA%DB%8C%D8%AC%D9%87\" >\u0646\u062a\u06cc\u062c\u0647<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/nabfollower.com\/blog\/deploy-your-application-to-ecs-via-cicd-with-ecspresso-34n0\/#%D8%A7%D8%B1%D8%AC%D8%A7%D8%B9\" >\u0627\u0631\u062c\u0627\u0639:<\/a><\/li><\/ul><\/li><\/ul><\/nav><\/div>\n<h2><span class=\"ez-toc-section\" id=\"%D8%A7%D8%B3%D9%BE%D8%B1%D8%B3%D9%88_%DA%86%DB%8C%D8%B3%D8%AA%D8%9F\"><\/span>\n<p>  \u0627\u0633\u067e\u0631\u0633\u0648 \u0686\u06cc\u0633\u062a\u061f<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>ecspresso \u0627\u0628\u0632\u0627\u0631\u06cc \u0627\u0633\u062a \u06a9\u0647 \u0628\u0647 \u0627\u0633\u062a\u0642\u0631\u0627\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u0634\u0645\u0627 \u062f\u0631 ECS \u06a9\u0645\u06a9 \u0645\u06cc \u06a9\u0646\u062f.<br \/>\u0648 \u0628\u0647 \u0631\u0627\u062d\u062a\u06cc \u0622\u0646 \u0631\u0627 \u0628\u0647 \u0631\u0627\u062d\u062a\u06cc \u062f\u0631 CI\/CD \u062e\u0648\u062f \u0627\u062f\u063a\u0627\u0645 \u06a9\u0646\u06cc\u062f.<\/p>\n<p>\u0627\u0633\u067e\u0631\u0633\u0648<\/p>\n<h2><span class=\"ez-toc-section\" id=\"%D8%A7%D9%86%DA%AF%DB%8C%D8%B2%D9%87\"><\/span>\n<p>  \u0627\u0646\u06af\u06cc\u0632\u0647<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0686\u0631\u0627 \u0628\u0627\u06cc\u062f \u0627\u0632 \u0627\u06a9\u0633\u067e\u0631\u0633\u0648 \u0628\u0631\u0627\u06cc \u0627\u0633\u062a\u0642\u0631\u0627\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u062e\u0648\u062f \u062f\u0631 ECS \u0628\u0647 \u062c\u0627\u06cc \u0627\u0628\u0632\u0627\u0631 \u0627\u0633\u062a\u0642\u0631\u0627\u0631 \u062f\u06cc\u06af\u0631\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f\u061f<br \/>\u0632\u06cc\u0631\u0627 \u0627\u06a9\u0633\u067e\u0631\u0633\u0648 \u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u0645\u0646\u0628\u0639 ECS \u0634\u0645\u0627 \u0631\u0627 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u06a9\u062f \u0645\u062f\u06cc\u0631\u06cc\u062a \u06a9\u0646\u062f.  \u0686\u0631\u0627 \u0645\u0641\u06cc\u062f \u0627\u0633\u062a\u061f<br \/>\u062a\u0635\u0648\u0631 \u06a9\u0646\u06cc\u062f\u060c \u062a\u06cc\u0645 \u0634\u0645\u0627 \u0628\u0647 \u0637\u0648\u0631 \u0645\u06a9\u0631\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u0634\u0645\u0627 \u0631\u0627 \u0645\u0633\u062a\u0642\u0631 \u0645\u06cc \u06a9\u0646\u062f \u0648 \u06cc\u06a9 \u0644\u062d\u0638\u0647 \u0628\u0631\u0627\u06cc \u062a\u063a\u06cc\u06cc\u0631 \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc ECS \u0645\u0631\u0628\u0648\u0637 \u0628\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0645\u0627\u0646\u0646\u062f \u062d\u0627\u0641\u0638\u0647 \u06cc\u0627 CPU \u0648 \u063a\u06cc\u0631\u0647 \u0627\u0633\u062a. \u0627\u06af\u0631 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0645\u0646\u0627\u0628\u0639 ECS \u062e\u0648\u062f \u0631\u0627 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u06a9\u062f \u0645\u062f\u06cc\u0631\u06cc\u062a \u06a9\u0646\u06cc\u062f\u060c \u0627\u0645\u06a9\u0627\u0646 \u062a\u063a\u06cc\u06cc\u0631 \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u062f\u0631 \u0647\u0631 \u0627\u0633\u062a\u0642\u0631\u0627\u0631 \u0628\u0647 \u0631\u0627\u062d\u062a\u06cc \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u062f.<br \/>\u0641\u0642\u0637 \u0628\u0645\u0627\u0646\u06cc\u062f\u060c \u0627\u06cc\u0646 \u0627\u0628\u0632\u0627\u0631 \u0628\u0631\u0627\u06cc \u0634\u0645\u0627\u0633\u062a \u06a9\u0647 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 Terraform \u06cc\u0627 \u0627\u0628\u0632\u0627\u0631\u06cc \u0645\u0627\u0646\u0646\u062f CloudFormation \u0645\u0646\u0627\u0628\u0639 \u0632\u06cc\u0631\u0633\u0627\u062e\u062a\u06cc \u0631\u0627 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0645\u06cc \u06a9\u0646\u06cc\u062f.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87\"><\/span>\n<p>  \u0627\u0633\u062a\u0641\u0627\u062f\u0647<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>Usage: ecspresso &lt;command&gt;\n\nFlags:\n  -h, --help                      Show context-sensitive help.\n      --envfile=ENVFILE,...       environment files\n      --debug                     enable debug log\n      --ext-str=KEY=VALUE;...     external string values for Jsonnet\n      --ext-code=KEY=VALUE;...    external code values for Jsonnet\n      --config=\"ecspresso.yml\"    config file\n      --assume-role-arn=\"\"        the ARN of the role to assume\n      --option=OPTION\n\nCommands:\n\n  - deploy\n    - deploy service\n  - diff\n    - show diff between task definition, service definition with current running service and task definition\n  - exec\n    - execute command on task\n  - init --service=SERVICE\n    - create configuration files from existing ECS service\n  - register\n    - register task definition\n  - rollback\n    - rollback service\n  - run\n    - run task\n  - wait\n    - wait until service stable\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=\"%DA%86%DA%AF%D9%88%D9%86%D9%87_%D8%A7%D8%B3%D9%BE%D8%B1%D8%B3%D9%88_%D8%B1%D8%A7_%D8%AF%D8%B1_CICD_%D8%A7%D8%AF%D8%BA%D8%A7%D9%85_%DA%A9%D9%86%DB%8C%D9%85%D8%9F\"><\/span>\n<p>  \u0686\u06af\u0648\u0646\u0647 \u0627\u0633\u067e\u0631\u0633\u0648 \u0631\u0627 \u062f\u0631 CI\/CD \u0627\u062f\u063a\u0627\u0645 \u06a9\u0646\u06cc\u0645\u061f<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0645\u0631\u062d\u0644\u0647 \u0628\u0647 \u0645\u0631\u062d\u0644\u0647 \u0628\u0631\u0627\u062a\u0648\u0646 \u062a\u0648\u0636\u06cc\u062d \u0645\u06cc\u062f\u0645!<\/p>\n<p>\u062a\u0648\u062c\u0647 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u062f:<br \/>\u0634\u0645\u0627 \u0628\u0627\u06cc\u062f \u0627\u0639\u062a\u0628\u0627\u0631 aws \u062e\u0648\u062f \u0631\u0627 \u062a\u0646\u0638\u06cc\u0645 \u06a9\u0646\u06cc\u062f <code>(~\/.aws\/credentials)<\/code><br \/>\u0641\u0631\u0636 \u06a9\u0646\u06cc\u062f ECS \u0634\u0645\u0627 \u0642\u0628\u0644\u0627\u064b \u0631\u0648\u06cc AWS \u0627\u062c\u0631\u0627 \u0645\u06cc \u0634\u0648\u062f<\/p>\n<h2><span class=\"ez-toc-section\" id=\"%D9%86%D8%B5%D8%A8\"><\/span>\n<p>  \u0646\u0635\u0628<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>\/\/ brew\nbrew install kayac\/tap\/ecspresso\n\nor\n\n\/\/ asdf\nasdf plugin add ecspresso\nasdf install ecspresso 2.0.0\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%A8%D8%B1%D8%A7%DB%8C_%D8%AA%D9%88%D9%84%DB%8C%D8%AF_%D9%81%D8%A7%DB%8C%D9%84_yml_%D8%A7%D9%82%D8%AF%D8%A7%D9%85_%D8%A8%D9%87_%D8%A7%DB%8C%D9%86%DB%8C%D8%AA_%DA%A9%D9%86%DB%8C%D8%AF\"><\/span>\n<p>  \u0628\u0631\u0627\u06cc \u062a\u0648\u0644\u06cc\u062f \u0641\u0627\u06cc\u0644 yml \u0627\u0642\u062f\u0627\u0645 \u0628\u0647 \u0627\u06cc\u0646\u06cc\u062a \u06a9\u0646\u06cc\u062f<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u0633\u0631\u0648\u06cc\u0633 ECS \u0641\u0639\u0644\u06cc \u062e\u0648\u062f \u0631\u0627 \u0628\u0647 \u0641\u0627\u06cc\u0644 yml \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>ecspresso init --region ap-northeast-1 --cluster your-cluster-name --service your-service-name --config ecspresso.yml\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\u062c\u0631\u0627\u06cc \u062f\u0633\u062a\u0648\u0631 \u0628\u0627\u0644\u0627 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0641\u0627\u06cc\u0644 \u0647\u0627\u06cc \u062a\u0648\u0644\u06cc\u062f \u0634\u062f\u0647 \u0632\u06cc\u0631 \u0631\u0627 \u0645\u0634\u0627\u0647\u062f\u0647 \u06a9\u0646\u06cc\u062f.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>- ecspresso.yml\n- ecs-service-def.json\n- ecs-task-def.json.\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=\"tfstate_%D8%AE%D9%88%D8%AF_%D8%B1%D8%A7_%D9%88%D8%A7%D8%B1%D8%AF_%DA%A9%D9%86%DB%8C%D8%AF\"><\/span>\n<p>  tfstate \u062e\u0648\u062f \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0627\u0645\u06a9\u0627\u0646 \u0646\u0648\u0634\u062a\u0646 \u0628\u0631\u062e\u06cc \u0627\u0632 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0645\u0646\u0627\u0628\u0639 \u062e\u0627\u0631\u062c\u06cc \u0645\u0627\u0646\u0646\u062f VPC\u060c \u0634\u0646\u0627\u0633\u0647 \u06af\u0631\u0648\u0647 \u0627\u0645\u0646\u06cc\u062a\u06cc \u0648 \u063a\u06cc\u0631\u0647&#8230;<br \/>\u0628\u0627 \u0627\u06cc\u0646 \u062d\u0627\u0644\u060c \u0642\u0627\u0628\u0644\u06cc\u062a \u0646\u06af\u0647\u062f\u0627\u0631\u06cc \u0648 \u062e\u0648\u0627\u0646\u0627\u06cc\u06cc \u0631\u0627 \u06a9\u0627\u0647\u0634 \u0645\u06cc \u062f\u0647\u062f.  ecspresso \u0627\u062c\u0627\u0632\u0647 \u0645\u06cc \u062f\u0647\u062f \u062a\u0627 \u0628\u0647 \u062e\u0648\u0627\u0646\u062f\u0646 tfstate \u0628\u0631\u0627\u06cc \u062d\u0644 \u0627\u06cc\u0646 \u0645\u0634\u06a9\u0644!<\/p>\n<p>\u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0645\u0633\u06cc\u0631 \u0641\u0627\u06cc\u0644 \u062e\u0648\u062f \u0631\u0627 \u062f\u0631 ecspresso.yml \u0631\u0648\u06cc tfstate \u062a\u0646\u0638\u06cc\u0645 \u06a9\u0646\u06cc\u062f \u0648 \u0633\u067e\u0633 \u0628\u062a\u0648\u0627\u0646\u06cc\u062f \u0622\u0646 \u0631\u0627 \u062f\u0631 \u0641\u0627\u06cc\u0644 json. \u0628\u062e\u0648\u0627\u0646\u06cc\u062f.<br \/>\u062a\u0646\u0638\u06cc\u0645 func_prefix \u0631\u0627 \u062a\u0631\u062c\u06cc\u062d \u0645\u06cc \u062f\u0647\u062f.<\/p>\n<p>ecspresso.yml<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>region: ap-northeast-1\ncluster: your-cluster-name\nservice: your-service-name\nservice_definition: ecs-service-def.json\ntask_definition: ecs-task-def.json\ntimeout: \"10m0s\"\nplugins:\n  - name: tfstate\n    config:\n      url: s3:\/\/path-to-terraform.tfstate\n    func_prefix: sg\n  - name: tfstate\n    config:\n      url: s3:\/\/path-to-terraform.tfstate\n    func_prefix: network\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>ecs-service-def.json<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>  \"networkConfiguration\": {\n    \"awsvpcConfiguration\": {\n      \"assignPublicIp\": \"DISABLED\",\n      \"securityGroups\": [\n        \"{{ sg_tfstate `aws_security_group.service.id` }}\"\n      ],\n      \"subnets\": [\n        \"{{ network_tfstate `aws_subnet.private['private'].id` }}\",\n      ]\n    }\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%B1%D8%A7%D9%87_%D8%A7%D9%86%D8%AF%D8%A7%D8%B2%DB%8C_cicd\"><\/span>\n<p>  \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc ci\/cd<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0633\u0627\u062f\u0647 \u0627\u0633\u062a \u0627\u0645\u0627 \u06cc\u06a9 \u0686\u06cc\u0632 \u0645\u0647\u0645 \u0627\u06cc\u0646 \u0627\u0633\u062a \u06a9\u0647 \u0627\u06a9\u062b\u0631 \u0645\u0648\u0627\u0631\u062f \u0645\u06cc \u062e\u0648\u0627\u0647\u0646\u062f \u0622\u062e\u0631\u06cc\u0646 \u062a\u0635\u0648\u06cc\u0631 \u0631\u0627 \u0628\u0631\u0627\u06cc \u06a9\u0627\u0631 ECS \u062a\u0646\u0638\u06cc\u0645 \u06a9\u0646\u0646\u062f<br \/>\u0628\u0627\u06cc\u062f \u0622\u062e\u0631\u06cc\u0646 \u062a\u0635\u0648\u06cc\u0631 \u0631\u0627 \u0628\u0647 \u0635\u0648\u0631\u062a \u067e\u0648\u06cc\u0627 \u062a\u0646\u0638\u06cc\u0645 \u06a9\u0646\u06cc\u062f.<\/p>\n<p>\u0646\u06af\u0627\u0647 \u06a9\u0646 \u0628\u0647 <code>export IMAGE_TAG=$ECR_REGISTRY\/$ECR_REPOSITORY:$IMAGE_TAG<\/code><br \/>\u0645\u0646 IMAGE_TAG \u0631\u0627 \u062a\u0639\u0631\u06cc\u0641 \u0645\u06cc \u06a9\u0646\u0645.  \u06a9\u0644\u06cc\u062f \u062e\u0648\u0627\u0647\u062f \u0628\u0648\u062f.<br \/>\u062f\u0631 ecs-task-def.json \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0627\u0632 must_env \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f \u0648 IMAGE_TAG \u0628\u0647 \u0635\u0648\u0631\u062a \u067e\u0648\u06cc\u0627 \u0628\u0627\u0631\u06af\u06cc\u0631\u06cc \u0645\u06cc \u0634\u0648\u062f!<\/p>\n<p>ecs-task-def.json<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>  \"image\": \"{{ must_env `IMAGE_TAG` }}\",\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>GitHubActions<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>  deploy:\n    runs-on: ubuntu-latest\n    timeout-minutes: 10\n    steps:\n      - name: checkout\n        uses: actions\/checkout@v3\n\n      - name: configure aws credentials\n        uses: aws-actions\/configure-aws-credentials@v1-node16\n        with:\n          role-to-assume: arn:aws:iam::${{ secrets.AWS_ACCOUNT_ID }}:role\/role\n          aws-region: ap-northeast-1\n\n      - name: login to ecr\n        id: login-ecr\n        uses: aws-actions\/amazon-ecr-login@v1\n\n      - uses: actions\/checkout@v3\n      - uses: kayac\/ecspresso@v2\n        with:\n          version: v2.0.0 # or latest\n          # version-file: .ecspresso-version\n\n      - name: deploy\n        env:\n          ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }}\n          ECR_REPOSITORY: dev\n          IMAGE_TAG: api-${{ github.sha }}\n        run: |\n            export IMAGE_TAG=$ECR_REGISTRY\/$ECR_REPOSITORY:$IMAGE_TAG\n            ecspresso deploy --config ecspresso\/ecspresso.yal\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=\"%D9%86%D8%AA%DB%8C%D8%AC%D9%87\"><\/span>\n<p>  \u0646\u062a\u06cc\u062c\u0647<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>ecspresso \u0628\u0631\u0627\u06cc \u0645\u062f\u06cc\u0631\u06cc\u062a \u0648 \u0627\u0633\u062a\u0642\u0631\u0627\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u0634\u0645\u0627 \u062f\u0631 ECS \u0645\u0641\u06cc\u062f \u0627\u0633\u062a.<br \/>\u0634\u0645\u0627 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0645\u0646\u0627\u0628\u0639 ECS \u062e\u0648\u062f \u0631\u0627 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u06a9\u062f \u0645\u062f\u06cc\u0631\u06cc\u062a \u06a9\u0646\u06cc\u062f \u0648 \u0628\u0647 \u0631\u0627\u062d\u062a\u06cc \u062c\u0631\u06cc\u0627\u0646 \u0627\u0633\u062a\u0642\u0631\u0627\u0631 \u062e\u0648\u062f \u0631\u0627 \u062f\u0631 CI\/CD \u0627\u062f\u063a\u0627\u0645 \u06a9\u0646\u06cc\u062f<\/p>\n<p>\u0628\u0627 \u062a\u0634\u06a9\u0631 \u0627\u0632 \u0634\u0645\u0627 \u0628\u0631\u0627\u06cc \u062e\u0648\u0627\u0646\u062f\u0646 \u0645\u0642\u0627\u0644\u0647 \u0645\u0646\u060c \u06a9\u062f \u0646\u0648\u06cc\u0633\u06cc \u0645\u0628\u0627\u0631\u06a9!<\/p>\n<h3><span class=\"ez-toc-section\" id=\"%D8%A7%D8%B1%D8%AC%D8%A7%D8%B9\"><\/span>\n<p>  \u0627\u0631\u062c\u0627\u0639:<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>kayac\/ecspresso: ecspresso \u06cc\u06a9 \u0627\u0628\u0632\u0627\u0631 \u0627\u0633\u062a\u0642\u0631\u0627\u0631 \u0628\u0631\u0627\u06cc Amazon ECS \u0627\u0633\u062a<\/p>\n<\/p><\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u0622\u06cc\u0627 \u0634\u0645\u0627 \u0639\u0644\u0627\u0642\u0647 \u0645\u0646\u062f \u0647\u0633\u062a\u06cc\u062f \u06a9\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u062e\u0648\u062f \u0631\u0627 \u0627\u0632 \u0637\u0631\u06cc\u0642 CI\/CD \u062f\u0631 ECS \u0645\u0633\u062a\u0642\u0631 \u06a9\u0646\u06cc\u062f\u061f\u0627\u06af\u0631 \u0686\u0646\u06cc\u0646 \u0627\u0633\u062a\u060c \u0627\u0633\u067e\u0631\u0633\u0648 \u0627\u0628\u0632\u0627\u0631\u06cc \u0628\u0631\u0627\u06cc \u0634\u0645\u0627\u0633\u062a! \u0627\u0633\u067e\u0631\u0633\u0648 \u0686\u06cc\u0633\u062a\u061f ecspresso \u0627\u0628\u0632\u0627\u0631\u06cc \u0627\u0633\u062a \u06a9\u0647 \u0628\u0647 \u0627\u0633\u062a\u0642\u0631\u0627\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u0634\u0645\u0627 \u062f\u0631 ECS \u06a9\u0645\u06a9 \u0645\u06cc \u06a9\u0646\u062f.\u0648 \u0628\u0647 \u0631\u0627\u062d\u062a\u06cc \u0622\u0646 \u0631\u0627 \u0628\u0647 \u0631\u0627\u062d\u062a\u06cc \u062f\u0631 CI\/CD \u062e\u0648\u062f \u0627\u062f\u063a\u0627\u0645 \u06a9\u0646\u06cc\u062f. \u0627\u0633\u067e\u0631\u0633\u0648 \u0627\u0646\u06af\u06cc\u0632\u0647 \u0686\u0631\u0627 \u0628\u0627\u06cc\u062f \u0627\u0632 \u0627\u06a9\u0633\u067e\u0631\u0633\u0648 \u0628\u0631\u0627\u06cc &hellip;<\/p>\n","protected":false},"author":2,"featured_media":20572,"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-20571","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\/20571","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=20571"}],"version-history":[{"count":0,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/20571\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media\/20572"}],"wp:attachment":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media?parent=20571"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/categories?post=20571"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/tags?post=20571"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}