{"id":2242,"date":"2025-03-24T08:47:54","date_gmt":"2025-03-23T23:47:54","guid":{"rendered":"https:\/\/dexall.co.jp\/articles\/?p=2242"},"modified":"2025-03-24T08:48:18","modified_gmt":"2025-03-23T23:48:18","slug":"aws-codepipeline%e5%ae%8c%e5%85%a8%e3%82%ac%e3%82%a4%e3%83%892024%ef%bc%9a7%e3%81%a4%e3%81%ae%e5%85%b7%e4%bd%93%e4%be%8b%e3%81%a7%e5%ad%a6%e3%81%b6%e6%9c%80%e6%96%b0ci-cd%e6%a7%8b%e7%af%89%e6%89%8b","status":"publish","type":"post","link":"https:\/\/dexall.co.jp\/articles\/?p=2242","title":{"rendered":"AWS CodePipeline\u5b8c\u5168\u30ac\u30a4\u30c92024\uff1a7\u3064\u306e\u5177\u4f53\u4f8b\u3067\u5b66\u3076\u6700\u65b0CI\/CD\u69cb\u7bc9\u624b\u6cd5"},"content":{"rendered":"\n<div class=\"toc\"><br \/>\n<b>Warning<\/b>:  Undefined array key \"is_admin\" in <b>\/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>116<\/b><br \/>\n<br \/>\n<b>Warning<\/b>:  Undefined array key \"is_category_top\" in <b>\/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>121<\/b><br \/>\n<br \/>\n<b>Warning<\/b>:  Undefined array key \"is_top\" in <b>\/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>128<\/b><br \/>\n    <div id=\"toc_container\" class=\"sgb-toc--bullets js-smooth-scroll\" data-dialog-title=\"\u76ee\u6b21\">\n      <p class=\"toc_title\">\u76ee\u6b21 <\/p>\n      <ul class=\"toc_list\">  <li class=\"first\">    <a href=\"#i-0\">AWS CodePipeline \u3068\u306f\uff1a\u6982\u8981\u3068\u4e3b\u8981\u6a5f\u80fd<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-1\">\u4e3b\u8981\u6a5f\u80fd\u3068\u7279\u5fb4<\/a>      <\/li>      <li>        <a href=\"#i-2\">\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u306e\u7279\u5fb4<\/a>      <\/li>      <li>        <a href=\"#i-3\">\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u3068\u7d71\u5408\u6a5f\u80fd<\/a>      <\/li>      <li>        <a href=\"#i-4\">\u30b3\u30b9\u30c8\u6700\u9069\u5316\u6a5f\u80fd<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-5\">\u307e\u3068\u3081<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-6\">AWS CodePipeline \u3068\u306f\uff1a\u6982\u8981\u3068\u4e3b\u8981\u6a5f\u80fd<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-7\">\u4e3b\u8981\u6a5f\u80fd\u3068\u7279\u5fb4<\/a>      <\/li>      <li>        <a href=\"#i-8\">\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u306e\u7279\u5fb4<\/a>      <\/li>      <li>        <a href=\"#i-9\">\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u3068\u7d71\u5408\u6a5f\u80fd<\/a>      <\/li>      <li>        <a href=\"#i-10\">\u30b3\u30b9\u30c8\u6700\u9069\u5316\u6a5f\u80fd<\/a>      <\/li>      <li>        <a href=\"#i-11\">CI\/CD \u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u81ea\u52d5\u5316\u306e\u6c7a\u5b9a\u7248\uff1aCodePipeline \u306e\u7279\u5fb4<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-17\">\u307e\u3068\u3081<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-18\">AWS CodePipeline \u3068\u306f\uff1a\u6982\u8981\u3068\u4e3b\u8981\u6a5f\u80fd<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-19\">\u4e3b\u8981\u6a5f\u80fd\u3068\u7279\u5fb4<\/a>      <\/li>      <li>        <a href=\"#i-20\">\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u306e\u7279\u5fb4<\/a>      <\/li>      <li>        <a href=\"#i-21\">\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u3068\u7d71\u5408\u6a5f\u80fd<\/a>      <\/li>      <li>        <a href=\"#i-22\">\u30b3\u30b9\u30c8\u6700\u9069\u5316\u6a5f\u80fd<\/a>      <\/li>      <li>        <a href=\"#i-23\">CI\/CD \u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u81ea\u52d5\u5316\u306e\u6c7a\u5b9a\u7248\uff1aCodePipeline \u306e\u7279\u5fb4<\/a>      <\/li>      <li>        <a href=\"#i-29\">\u4ed6\u306eCI\/CD\u30c4\u30fc\u30eb\u3068\u306e\u6bd4\u8f03\u3067\u308f\u304b\u308b\u512a\u4f4d\u6027<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-34\">\u307e\u3068\u3081<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-35\">CodePipeline\u306b\u3088\u308bCI\/CD\u74b0\u5883\u69cb\u7bc9\u306e\u624b\u9806<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-36\">\u524d\u63d0\u6761\u4ef6\u306e\u78ba\u8a8d<\/a>      <\/li>      <li>        <a href=\"#i-37\">\u57fa\u672c\u7684\u306a\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u624b\u9806<\/a>      <\/li>      <li>        <a href=\"#i-38\">\u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u306e\u4f5c\u6210<\/a>      <\/li>      <li>        <a href=\"#i-39\">\u91cd\u8981\u306a\u8a2d\u5b9a\u30dd\u30a4\u30f3\u30c8<\/a>      <\/li>      <li>        <a href=\"#i-40\">\u30c1\u30a7\u30c3\u30af\u30dd\u30a4\u30f3\u30c8<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-41\">\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u306e\u30dd\u30a4\u30f3\u30c8<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-42\">CodePipeline\u306b\u3088\u308bCI\/CD\u74b0\u5883\u69cb\u7bc9\u306e\u624b\u9806<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-43\">\u524d\u63d0\u6761\u4ef6\u306e\u78ba\u8a8d<\/a>      <\/li>      <li>        <a href=\"#i-44\">\u57fa\u672c\u7684\u306a\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u624b\u9806<\/a>      <\/li>      <li>        <a href=\"#i-45\">\u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u306e\u4f5c\u6210<\/a>      <\/li>      <li>        <a href=\"#i-46\">\u91cd\u8981\u306a\u8a2d\u5b9a\u30dd\u30a4\u30f3\u30c8<\/a>      <\/li>      <li>        <a href=\"#i-47\">\u30c1\u30a7\u30c3\u30af\u30dd\u30a4\u30f3\u30c8<\/a>      <\/li>      <li>        <a href=\"#i-48\">\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u306e\u30dd\u30a4\u30f3\u30c8<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-49\">15\u5206\u3067\u4f5c\u308b\uff1a\u6700\u5c0f\u69cb\u6210\u306e\u30d1\u30a4\u30d7\u30e9\u30a4\u30f3<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-58\">CodePipeline\u306b\u3088\u308bCI\/CD\u74b0\u5883\u69cb\u7bc9\u306e\u624b\u9806<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-59\">\u524d\u63d0\u6761\u4ef6\u306e\u78ba\u8a8d<\/a>      <\/li>      <li>        <a href=\"#i-60\">\u57fa\u672c\u7684\u306a\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u624b\u9806<\/a>      <\/li>      <li>        <a href=\"#i-61\">\u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u306e\u4f5c\u6210<\/a>      <\/li>      <li>        <a href=\"#i-62\">\u91cd\u8981\u306a\u8a2d\u5b9a\u30dd\u30a4\u30f3\u30c8<\/a>      <\/li>      <li>        <a href=\"#i-63\">\u30c1\u30a7\u30c3\u30af\u30dd\u30a4\u30f3\u30c8<\/a>      <\/li>      <li>        <a href=\"#i-64\">\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u306e\u30dd\u30a4\u30f3\u30c8<\/a>      <\/li>      <li>        <a href=\"#i-65\">15\u5206\u3067\u4f5c\u308b\uff1a\u6700\u5c0f\u69cb\u6210\u306e\u30d1\u30a4\u30d7\u30e9\u30a4\u30f3<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-74\">\u30bd\u30fc\u30b9\u7ba1\u7406\u304b\u3089\u30c7\u30d7\u30ed\u30a4\u307e\u3067\u306e\u8a2d\u5b9a\u30dd\u30a4\u30f3\u30c8<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-90\">CodePipeline\u306b\u3088\u308bCI\/CD\u74b0\u5883\u69cb\u7bc9\u306e\u624b\u9806<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-91\">\u524d\u63d0\u6761\u4ef6\u306e\u78ba\u8a8d<\/a>      <\/li>      <li>        <a href=\"#i-92\">\u57fa\u672c\u7684\u306a\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u624b\u9806<\/a>      <\/li>      <li>        <a href=\"#i-93\">\u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u306e\u4f5c\u6210<\/a>      <\/li>      <li>        <a href=\"#i-94\">\u91cd\u8981\u306a\u8a2d\u5b9a\u30dd\u30a4\u30f3\u30c8<\/a>      <\/li>      <li>        <a href=\"#i-95\">\u30c1\u30a7\u30c3\u30af\u30dd\u30a4\u30f3\u30c8<\/a>      <\/li>      <li>        <a href=\"#i-96\">\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u306e\u30dd\u30a4\u30f3\u30c8<\/a>      <\/li>      <li>        <a href=\"#i-97\">15\u5206\u3067\u4f5c\u308b\uff1a\u6700\u5c0f\u69cb\u6210\u306e\u30d1\u30a4\u30d7\u30e9\u30a4\u30f3<\/a>      <\/li>      <li>        <a href=\"#i-106\">\u30bd\u30fc\u30b9\u7ba1\u7406\u304b\u3089\u30c7\u30d7\u30ed\u30a4\u307e\u3067\u306e\u8a2d\u5b9a\u30dd\u30a4\u30f3\u30c8<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-122\">IAM\u30ed\u30fc\u30eb\u3068\u6a29\u9650\u8a2d\u5b9a\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-135\">\u5b9f\u8df5\u7684\u306a7\u3064\u306eCodePipeline\u6559\u8a13<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-136\">\u5171\u901a\u306e\u69cb\u6210\u8981\u7d20<\/a>      <\/li>      <li>        <a href=\"#i-137\">1. Web\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u81ea\u52d5\u30c7\u30d7\u30ed\u30a4\u69cb\u6210<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-141\">2. \u30de\u30a4\u30af\u30ed\u30b5\u30fc\u30d3\u30b9\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u3067\u306e\u6d3b\u7528\u6cd5<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-144\">\u5b9f\u8df5\u7684\u306a7\u3064\u306eCodePipeline\u6559\u8a13<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-145\">\u5171\u901a\u306e\u69cb\u6210\u8981\u7d20<\/a>      <\/li>      <li>        <a href=\"#i-146\">1. Web\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u81ea\u52d5\u30c7\u30d7\u30ed\u30a4\u69cb\u6210<\/a>      <\/li>      <li>        <a href=\"#i-150\">2. \u30de\u30a4\u30af\u30ed\u30b5\u30fc\u30d3\u30b9\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u3067\u306e\u6d3b\u7528\u6cd5<\/a>      <\/li>      <li>        <a href=\"#i-153\">3. \u30b3\u30f3\u30c6\u30ca\u30d9\u30fc\u30b9\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306eCI\/CD\u69cb\u7bc9<\/a>      <\/li>      <li>        <a href=\"#i-157\">4. \u30b5\u30fc\u30d0\u30fc\u30ec\u30b9\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u81ea\u52d5\u30c7\u30d7\u30ed\u30a4<\/a>      <\/li>      <li>        <a href=\"#i-161\">5. \u30af\u30ed\u30b9\u30a2\u30ab\u30a6\u30f3\u30c8\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u306e\u5b9f\u88c5<\/a>      <\/li>      <li>        <a href=\"#i-164\">6. \u30d6\u30eb\u30fc\/\u30b0\u30ea\u30fc\u30f3\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u306e\u81ea\u52d5\u5316<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-167\">7. \u30de\u30eb\u30c1\u30d6\u30e9\u30f3\u30c1\u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u306e\u69cb\u7bc9<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-171\">CodePipeline\u306e\u904b\u7528\u7ba1\u7406\u3068\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-172\">\u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u306e\u76e3\u8996\u3068\u30a2\u30e9\u30fc\u30c8\u8a2d\u5b9a<\/a>      <\/li>      <li>        <a href=\"#i-176\">\u30b3\u30b9\u30c8\u6700\u9069\u5316\u306e\u305f\u3081\u306e\u8a2d\u5b9a\u3068\u30d2\u30f3\u30c8<\/a>      <\/li>      <li>        <a href=\"#i-180\">\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u5f37\u5316\u306e\u305f\u3081\u306e\u5177\u4f53\u7684\u306a\u8a2d\u5b9a<\/a>      <\/li>      <li>        <a href=\"#i-184\">\u904b\u7528\u52b9\u7387\u5316\u306e\u305f\u3081\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-187\">\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u30ac\u30a4\u30c9<\/a>      <\/li>    <\/ul>  <\/li>  <li class=\"last\">    <a href=\"#i-190\">\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u3068\u3088\u304f\u3042\u308b\u8cea\u554f<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-191\">\u3088\u304f\u3042\u308b\u30a8\u30e9\u30fc\u3068\u89e3\u6c7a\u65b9\u6cd5<\/a>      <\/li>      <li>        <a href=\"#i-197\">\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u5411\u4e0a\u306e\u305f\u3081\u306e\u30c1\u30e5\u30fc\u30cb\u30f3\u30b0\u30dd\u30a4\u30f3\u30c8<\/a>      <\/li>      <li>        <a href=\"#i-202\">AWS \u30b5\u30dd\u30fc\u30c8\u3078\u306e\u52b9\u679c\u7684\u306a\u304a\u554f\u3044\u5408\u308f\u305b\u65b9\u6cd5<\/a>      <\/li>      <li>        <a href=\"#i-206\">\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u5411\u4e0a\u306e\u305f\u3081\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-209\">\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u306e\u305f\u3081\u306e\u30e2\u30cb\u30bf\u30ea\u30f3\u30b0\u8a2d\u5b9a<\/a>      <\/li>    <\/ul>  <\/li><\/ul>\n      <a href=\"#\" class=\"sgb-toc-button js-toc-button\" rel=\"nofollow\" data-open-dialog=\"true\"><i class=\"fa fa-list\"><\/i><span class=\"sgb-toc-button__text\">\u76ee\u6b21\u3078<\/span><\/a>\n    <\/div><\/div><h2 class=\"wp-block-heading\" id=\"i-0\">AWS CodePipeline \u3068\u306f\uff1a\u6982\u8981\u3068\u4e3b\u8981\u6a5f\u80fd<\/h2>\n\n\n\n<p>AWS CodePipeline\u306f\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3084\u30a4\u30f3\u30d5\u30e9\u30b9\u30c8\u30e9\u30af\u30c1\u30e3\u306e\u66f4\u65b0\u306b\u5fc5\u8981\u306a\u7d99\u7d9a\u7684\u30c7\u30ea\u30d0\u30ea\u30fc\u30b5\u30fc\u30d3\u30b9\u3067\u3059\u3002\u30b3\u30fc\u30c9\u306e\u5909\u66f4\u304c\u767a\u751f\u3059\u308b\u305f\u3073\u306b\u3001\u30d3\u30eb\u30c9\u3001\u30c6\u30b9\u30c8\u3001\u30c7\u30d7\u30ed\u30a4\u3092\u81ea\u52d5\u7684\u306b\u5b9f\u884c\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u672c\u8a18\u4e8b\u3067\u306f\u3001CodePipeline\u306e\u4e3b\u8981\u6a5f\u80fd\u3068\u7279\u5fb4\u3092\u8a73\u3057\u304f\u89e3\u8aac\u3057\u3066\u3044\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-1\">\u4e3b\u8981\u6a5f\u80fd\u3068\u7279\u5fb4<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u5b8c\u5168\u30de\u30cd\u30fc\u30b8\u30c9\u578b\u30b5\u30fc\u30d3\u30b9<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30a4\u30f3\u30d5\u30e9\u30b9\u30c8\u30e9\u30af\u30c1\u30e3\u306e\u7ba1\u7406\u304c\u4e0d\u8981<\/li>\n\n\n\n<li>AWS\u306b\u3088\u308b\u9ad8\u53ef\u7528\u6027\u306e\u4fdd\u8a3c<\/li>\n\n\n\n<li>\u30b5\u30fc\u30d0\u30fc\u30ec\u30b9\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u306b\u3088\u308b\u67d4\u8edf\u306a\u30b9\u30b1\u30fc\u30ea\u30f3\u30b0<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u8c4a\u5bcc\u306a\u9023\u643a\u6a5f\u80fd<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30bd\u30fc\u30b9\u7ba1\u7406\uff1aGitHub\u3001CodeCommit\u3001Amazon S3\u3001Bitbucket<\/li>\n\n\n\n<li>\u30d3\u30eb\u30c9\uff1aAWS CodeBuild\u3001Jenkins<\/li>\n\n\n\n<li>\u30c7\u30d7\u30ed\u30a4\uff1aAWS CodeDeploy\u3001AWS Elastic Beanstalk\u3001AWS CloudFormation<\/li>\n\n\n\n<li>\u30c6\u30b9\u30c8\uff1aAWS CodeBuild\u3001Jenkins\u3001\u305d\u306e\u4ed6\u30b5\u30fc\u30c9\u30d1\u30fc\u30c6\u30a3\u30c4\u30fc\u30eb<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u53ef\u80fd\u306a\u30ef\u30fc\u30af\u30d5\u30ed\u30fc<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u4e26\u5217\u30a2\u30af\u30b7\u30e7\u30f3\u306e\u5b9f\u884c<\/li>\n\n\n\n<li>\u627f\u8a8d\u30a2\u30af\u30b7\u30e7\u30f3\u306e\u8ffd\u52a0<\/li>\n\n\n\n<li>\u30ab\u30b9\u30bf\u30e0\u30a2\u30af\u30b7\u30e7\u30f3\u306e\u5b9a\u7fa9<\/li>\n\n\n\n<li>\u6761\u4ef6\u4ed8\u304d\u30a2\u30af\u30b7\u30e7\u30f3\u306e\u8a2d\u5b9a<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u9ad8\u5ea6\u306a\u53ef\u8996\u6027\u3068\u30b3\u30f3\u30c8\u30ed\u30fc\u30eb<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u8a73\u7d30\u306a\u5b9f\u884c\u5c65\u6b74<\/li>\n\n\n\n<li>\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u306e\u30b9\u30c6\u30fc\u30bf\u30b9\u78ba\u8a8d<\/li>\n\n\n\n<li>AWS CloudWatch\u3068\u306e\u9023\u643a\u306b\u3088\u308b\u76e3\u8996<\/li>\n\n\n\n<li>AWS EventBridge\u3068\u306e\u9023\u643a\u306b\u3088\u308b\u30a4\u30d9\u30f3\u30c8\u51e6\u7406<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-2\">\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u306e\u7279\u5fb4<\/h3>\n\n\n\n<p>CodePipeline\u306f\u4ee5\u4e0b\u306e\u4e3b\u8981\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u3067\u69cb\u6210\u3055\u308c\u3066\u3044\u307e\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30d1\u30a4\u30d7\u30e9\u30a4\u30f3<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5168\u4f53\u306e\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u3092\u5b9a\u7fa9<\/li>\n\n\n\n<li>\u8907\u6570\u306e\u30b9\u30c6\u30fc\u30b8\u3067\u69cb\u6210<\/li>\n\n\n\n<li>\u30d0\u30fc\u30b8\u30e7\u30f3\u7ba1\u7406\u3055\u308c\u305f\u6210\u679c\u7269\u306e\u8ffd\u8de1<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30b9\u30c6\u30fc\u30b8<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u8ad6\u7406\u7684\u306a\u30e6\u30cb\u30c3\u30c8\u3068\u3057\u3066\u306e\u5b9f\u884c\u30b0\u30eb\u30fc\u30d7<\/li>\n\n\n\n<li>\u4e26\u5217\u307e\u305f\u306f\u9806\u6b21\u5b9f\u884c\u53ef\u80fd<\/li>\n\n\n\n<li>\u627f\u8a8d\u30b2\u30fc\u30c8\u306e\u8a2d\u5b9a\u304c\u53ef\u80fd<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30a2\u30af\u30b7\u30e7\u30f3<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5177\u4f53\u7684\u306a\u30bf\u30b9\u30af\u3092\u5b9f\u884c<\/li>\n\n\n\n<li>Source\/Build\/Test\/Deploy\/Approval\u306a\u3069\u306e\u30ab\u30c6\u30b4\u30ea<\/li>\n\n\n\n<li>\u5165\u529b\u3068\u51fa\u529b\u306e\u30a2\u30fc\u30c6\u30a3\u30d5\u30a1\u30af\u30c8\u5b9a\u7fa9<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-3\">\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u3068\u7d71\u5408\u6a5f\u80fd<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u6a5f\u80fd<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>AWS IAM\u3068\u306e\u7dca\u5bc6\u306a\u7d71\u5408<\/li>\n\n\n\n<li>\u6697\u53f7\u5316\u3055\u308c\u305f\u30a2\u30fc\u30c6\u30a3\u30d5\u30a1\u30af\u30c8\u30b9\u30c8\u30ec\u30fc\u30b8<\/li>\n\n\n\n<li>\u30af\u30ed\u30b9\u30a2\u30ab\u30a6\u30f3\u30c8\u30a2\u30af\u30bb\u30b9\u306e\u5236\u5fa1<\/li>\n\n\n\n<li>AWS KMS\u306b\u3088\u308b\u6697\u53f7\u5316\u30ad\u30fc\u306e\u7ba1\u7406<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30e2\u30cb\u30bf\u30ea\u30f3\u30b0\u3068\u901a\u77e5<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Amazon CloudWatch\u3068\u306e\u7d71\u5408<\/li>\n\n\n\n<li>SNS\u306b\u3088\u308b\u901a\u77e5\u6a5f\u80fd<\/li>\n\n\n\n<li>\u8a73\u7d30\u306a\u76e3\u67fb\u30ed\u30b0\u306e\u8a18\u9332<\/li>\n\n\n\n<li>\u30ab\u30b9\u30bf\u30e0\u30e1\u30c8\u30ea\u30af\u30b9\u306e\u8a2d\u5b9a<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-4\">\u30b3\u30b9\u30c8\u6700\u9069\u5316\u6a5f\u80fd<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u5f93\u91cf\u8ab2\u91d1\u5236<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30a2\u30af\u30c6\u30a3\u30d6\u306a\u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u306e\u307f\u306b\u8ab2\u91d1<\/li>\n\n\n\n<li>\u7121\u6599\u5229\u7528\u67a0\u306e\u63d0\u4f9b<\/li>\n\n\n\n<li>\u4f7f\u7528\u91cf\u306b\u5fdc\u3058\u305f\u67d4\u8edf\u306a\u8ab2\u91d1<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30ea\u30bd\u30fc\u30b9\u6700\u9069\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5fc5\u8981\u6642\u306e\u307f\u30ea\u30bd\u30fc\u30b9\u3092\u4f7f\u7528<\/li>\n\n\n\n<li>\u4e26\u5217\u5b9f\u884c\u306b\u3088\u308b\u6642\u9593\u52b9\u7387\u306e\u5411\u4e0a<\/li>\n\n\n\n<li>\u4e0d\u8981\u306a\u30d3\u30eb\u30c9\/\u30c7\u30d7\u30ed\u30a4\u306e\u9632\u6b62<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-5\">\u307e\u3068\u3081<\/h3>\n\n\n\n<p>AWS CodePipeline\u306f\u3001\u30e2\u30c0\u30f3\u306aCI\/CD\u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u306b\u6c42\u3081\u3089\u308c\u308b\u8981\u4ef6\u3092\u6e80\u305f\u3059\u3001\u67d4\u8edf\u3067\u62e1\u5f35\u6027\u306e\u9ad8\u3044\u30b5\u30fc\u30d3\u30b9\u3067\u3059\u3002\u5b8c\u5168\u30de\u30cd\u30fc\u30b8\u30c9\u578b\u3067\u3042\u308b\u3053\u3068\u304b\u3089\u3001\u904b\u7528\u8ca0\u8377\u3092\u6700\u5c0f\u9650\u306b\u6291\u3048\u306a\u304c\u3089\u3001\u9ad8\u5ea6\u306a\u81ea\u52d5\u5316\u3092\u5b9f\u73fe\u3067\u304d\u307e\u3059\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u5177\u4f53\u7684\u306a\u74b0\u5883\u69cb\u7bc9\u624b\u9806\u306b\u3064\u3044\u3066\u8a73\u3057\u304f\u89e3\u8aac\u3057\u3066\u3044\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-6\">AWS CodePipeline \u3068\u306f\uff1a\u6982\u8981\u3068\u4e3b\u8981\u6a5f\u80fd<\/h2>\n\n\n\n<p>AWS CodePipeline\u306f\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3084\u30a4\u30f3\u30d5\u30e9\u30b9\u30c8\u30e9\u30af\u30c1\u30e3\u306e\u66f4\u65b0\u306b\u5fc5\u8981\u306a\u7d99\u7d9a\u7684\u30c7\u30ea\u30d0\u30ea\u30fc\u30b5\u30fc\u30d3\u30b9\u3067\u3059\u3002\u30b3\u30fc\u30c9\u306e\u5909\u66f4\u304c\u767a\u751f\u3059\u308b\u305f\u3073\u306b\u3001\u30d3\u30eb\u30c9\u3001\u30c6\u30b9\u30c8\u3001\u30c7\u30d7\u30ed\u30a4\u3092\u81ea\u52d5\u7684\u306b\u5b9f\u884c\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u672c\u8a18\u4e8b\u3067\u306f\u3001CodePipeline\u306e\u4e3b\u8981\u6a5f\u80fd\u3068\u7279\u5fb4\u3092\u8a73\u3057\u304f\u89e3\u8aac\u3057\u3066\u3044\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-7\">\u4e3b\u8981\u6a5f\u80fd\u3068\u7279\u5fb4<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u5b8c\u5168\u30de\u30cd\u30fc\u30b8\u30c9\u578b\u30b5\u30fc\u30d3\u30b9<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30a4\u30f3\u30d5\u30e9\u30b9\u30c8\u30e9\u30af\u30c1\u30e3\u306e\u7ba1\u7406\u304c\u4e0d\u8981<\/li>\n\n\n\n<li>AWS\u306b\u3088\u308b\u9ad8\u53ef\u7528\u6027\u306e\u4fdd\u8a3c<\/li>\n\n\n\n<li>\u30b5\u30fc\u30d0\u30fc\u30ec\u30b9\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u306b\u3088\u308b\u67d4\u8edf\u306a\u30b9\u30b1\u30fc\u30ea\u30f3\u30b0<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u8c4a\u5bcc\u306a\u9023\u643a\u6a5f\u80fd<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30bd\u30fc\u30b9\u7ba1\u7406\uff1aGitHub\u3001CodeCommit\u3001Amazon S3\u3001Bitbucket<\/li>\n\n\n\n<li>\u30d3\u30eb\u30c9\uff1aAWS CodeBuild\u3001Jenkins<\/li>\n\n\n\n<li>\u30c7\u30d7\u30ed\u30a4\uff1aAWS CodeDeploy\u3001AWS Elastic Beanstalk\u3001AWS CloudFormation<\/li>\n\n\n\n<li>\u30c6\u30b9\u30c8\uff1aAWS CodeBuild\u3001Jenkins\u3001\u305d\u306e\u4ed6\u30b5\u30fc\u30c9\u30d1\u30fc\u30c6\u30a3\u30c4\u30fc\u30eb<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u53ef\u80fd\u306a\u30ef\u30fc\u30af\u30d5\u30ed\u30fc<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u4e26\u5217\u30a2\u30af\u30b7\u30e7\u30f3\u306e\u5b9f\u884c<\/li>\n\n\n\n<li>\u627f\u8a8d\u30a2\u30af\u30b7\u30e7\u30f3\u306e\u8ffd\u52a0<\/li>\n\n\n\n<li>\u30ab\u30b9\u30bf\u30e0\u30a2\u30af\u30b7\u30e7\u30f3\u306e\u5b9a\u7fa9<\/li>\n\n\n\n<li>\u6761\u4ef6\u4ed8\u304d\u30a2\u30af\u30b7\u30e7\u30f3\u306e\u8a2d\u5b9a<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u9ad8\u5ea6\u306a\u53ef\u8996\u6027\u3068\u30b3\u30f3\u30c8\u30ed\u30fc\u30eb<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u8a73\u7d30\u306a\u5b9f\u884c\u5c65\u6b74<\/li>\n\n\n\n<li>\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u306e\u30b9\u30c6\u30fc\u30bf\u30b9\u78ba\u8a8d<\/li>\n\n\n\n<li>AWS CloudWatch\u3068\u306e\u9023\u643a\u306b\u3088\u308b\u76e3\u8996<\/li>\n\n\n\n<li>AWS EventBridge\u3068\u306e\u9023\u643a\u306b\u3088\u308b\u30a4\u30d9\u30f3\u30c8\u51e6\u7406<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-8\">\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u306e\u7279\u5fb4<\/h3>\n\n\n\n<p>CodePipeline\u306f\u4ee5\u4e0b\u306e\u4e3b\u8981\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u3067\u69cb\u6210\u3055\u308c\u3066\u3044\u307e\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30d1\u30a4\u30d7\u30e9\u30a4\u30f3<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5168\u4f53\u306e\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u3092\u5b9a\u7fa9<\/li>\n\n\n\n<li>\u8907\u6570\u306e\u30b9\u30c6\u30fc\u30b8\u3067\u69cb\u6210<\/li>\n\n\n\n<li>\u30d0\u30fc\u30b8\u30e7\u30f3\u7ba1\u7406\u3055\u308c\u305f\u6210\u679c\u7269\u306e\u8ffd\u8de1<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30b9\u30c6\u30fc\u30b8<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u8ad6\u7406\u7684\u306a\u30e6\u30cb\u30c3\u30c8\u3068\u3057\u3066\u306e\u5b9f\u884c\u30b0\u30eb\u30fc\u30d7<\/li>\n\n\n\n<li>\u4e26\u5217\u307e\u305f\u306f\u9806\u6b21\u5b9f\u884c\u53ef\u80fd<\/li>\n\n\n\n<li>\u627f\u8a8d\u30b2\u30fc\u30c8\u306e\u8a2d\u5b9a\u304c\u53ef\u80fd<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30a2\u30af\u30b7\u30e7\u30f3<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5177\u4f53\u7684\u306a\u30bf\u30b9\u30af\u3092\u5b9f\u884c<\/li>\n\n\n\n<li>Source\/Build\/Test\/Deploy\/Approval\u306a\u3069\u306e\u30ab\u30c6\u30b4\u30ea<\/li>\n\n\n\n<li>\u5165\u529b\u3068\u51fa\u529b\u306e\u30a2\u30fc\u30c6\u30a3\u30d5\u30a1\u30af\u30c8\u5b9a\u7fa9<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-9\">\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u3068\u7d71\u5408\u6a5f\u80fd<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u6a5f\u80fd<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>AWS IAM\u3068\u306e\u7dca\u5bc6\u306a\u7d71\u5408<\/li>\n\n\n\n<li>\u6697\u53f7\u5316\u3055\u308c\u305f\u30a2\u30fc\u30c6\u30a3\u30d5\u30a1\u30af\u30c8\u30b9\u30c8\u30ec\u30fc\u30b8<\/li>\n\n\n\n<li>\u30af\u30ed\u30b9\u30a2\u30ab\u30a6\u30f3\u30c8\u30a2\u30af\u30bb\u30b9\u306e\u5236\u5fa1<\/li>\n\n\n\n<li>AWS KMS\u306b\u3088\u308b\u6697\u53f7\u5316\u30ad\u30fc\u306e\u7ba1\u7406<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30e2\u30cb\u30bf\u30ea\u30f3\u30b0\u3068\u901a\u77e5<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Amazon CloudWatch\u3068\u306e\u7d71\u5408<\/li>\n\n\n\n<li>SNS\u306b\u3088\u308b\u901a\u77e5\u6a5f\u80fd<\/li>\n\n\n\n<li>\u8a73\u7d30\u306a\u76e3\u67fb\u30ed\u30b0\u306e\u8a18\u9332<\/li>\n\n\n\n<li>\u30ab\u30b9\u30bf\u30e0\u30e1\u30c8\u30ea\u30af\u30b9\u306e\u8a2d\u5b9a<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-10\">\u30b3\u30b9\u30c8\u6700\u9069\u5316\u6a5f\u80fd<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u5f93\u91cf\u8ab2\u91d1\u5236<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30a2\u30af\u30c6\u30a3\u30d6\u306a\u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u306e\u307f\u306b\u8ab2\u91d1<\/li>\n\n\n\n<li>\u7121\u6599\u5229\u7528\u67a0\u306e\u63d0\u4f9b<\/li>\n\n\n\n<li>\u4f7f\u7528\u91cf\u306b\u5fdc\u3058\u305f\u67d4\u8edf\u306a\u8ab2\u91d1<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30ea\u30bd\u30fc\u30b9\u6700\u9069\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5fc5\u8981\u6642\u306e\u307f\u30ea\u30bd\u30fc\u30b9\u3092\u4f7f\u7528<\/li>\n\n\n\n<li>\u4e26\u5217\u5b9f\u884c\u306b\u3088\u308b\u6642\u9593\u52b9\u7387\u306e\u5411\u4e0a<\/li>\n\n\n\n<li>\u4e0d\u8981\u306a\u30d3\u30eb\u30c9\/\u30c7\u30d7\u30ed\u30a4\u306e\u9632\u6b62<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-11\">CI\/CD \u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u81ea\u52d5\u5316\u306e\u6c7a\u5b9a\u7248\uff1aCodePipeline \u306e\u7279\u5fb4<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-12\">1. \u5b8c\u5168\u81ea\u52d5\u5316\u3055\u308c\u305f\u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u7ba1\u7406<\/h4>\n\n\n\n<p>CodePipeline\u306f\u3001\u30b3\u30fc\u30c9\u306e\u30b3\u30df\u30c3\u30c8\u304b\u3089\u672c\u756a\u74b0\u5883\u3078\u306e\u30c7\u30d7\u30ed\u30a4\u307e\u3067\u3092\u5b8c\u5168\u306b\u81ea\u52d5\u5316\u3057\u307e\u3059\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u81ea\u52d5\u30c8\u30ea\u30ac\u30fc\u6a5f\u80fd<\/strong><\/li>\n\n\n\n<li>GitHub\u3084CodeCommit\u3078\u306e\u30b3\u30fc\u30c9\u30d7\u30c3\u30b7\u30e5<\/li>\n\n\n\n<li>S3\u30d0\u30b1\u30c3\u30c8\u3078\u306e\u30d5\u30a1\u30a4\u30eb\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9<\/li>\n\n\n\n<li>\u30b9\u30b1\u30b8\u30e5\u30fc\u30eb\u30d9\u30fc\u30b9\u306e\u5b9f\u884c<\/li>\n\n\n\n<li>Webhook\u306b\u3088\u308b\u30ab\u30b9\u30bf\u30e0\u30c8\u30ea\u30acE<\/li>\n\n\n\n<li><strong>\u30a4\u30f3\u30c6\u30ea\u30b8\u30a7\u30f3\u30c8\u306a\u5b9f\u884c\u5236\u5fa1<\/strong><\/li>\n\n\n\n<li>\u4e26\u5217\u5b9f\u884c\u306b\u3088\u308b\u51e6\u7406\u306e\u9ad8\u901f\u5316<\/li>\n\n\n\n<li>\u6761\u4ef6\u4ed8\u304d\u30b9\u30c6\u30fc\u30b8\u306e\u5b9f\u884c<\/li>\n\n\n\n<li>\u5931\u6557\u6642\u306e\u81ea\u52d5\u30ea\u30c8\u30e9\u30a4<\/li>\n\n\n\n<li>\u30ed\u30fc\u30eb\u30d0\u30c3\u30af\u6a5f\u80fd<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-13\">2. \u8c4a\u5bcc\u306a\u81ea\u52d5\u5316\u30aa\u30d7\u30b7\u30e7\u30f3<\/h4>\n\n\n\n<p>\u958b\u767a\u30c1\u30fc\u30e0\u306e\u30cb\u30fc\u30ba\u306b\u5fdc\u3058\u3066\u67d4\u8edf\u306a\u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u69cb\u6210\u304c\u53ef\u80fd\u3067\u3059\uff1a<\/p>\n\n\n<div id=\"id-1db638b5-c90e-4bb0-b626-635af558da65\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u81ea\u52d5\u5316\u30aa\u30d7\u30b7\u30e7\u30f3<\/th><th>\u7528\u9014<\/th><th>\u30e1\u30ea\u30c3\u30c8<\/th><\/tr><\/thead><tbody><tr><td>\u627f\u8a8d\u30a2\u30af\u30b7\u30e7\u30f3<\/td><td>\u672c\u756a\u30c7\u30d7\u30ed\u30a4\u524d\u306e\u627f\u8a8d<\/td><td>\u30ea\u30b9\u30af\u7ba1\u7406\u306e\u5f37\u5316<\/td><\/tr><tr><td>\u4e26\u5217\u30a2\u30af\u30b7\u30e7\u30f3<\/td><td>\u8907\u6570\u74b0\u5883\u3078\u306e\u540c\u6642\u30c7\u30d7\u30ed\u30a4<\/td><td>\u30c7\u30d7\u30ed\u30a4\u6642\u9593\u306e\u77ed\u7e2e<\/td><\/tr><tr><td>\u6761\u4ef6\u4ed8\u304d\u30a2\u30af\u30b7\u30e7\u30f3<\/td><td>\u74b0\u5883\u306b\u5fdc\u3058\u305f\u51e6\u7406\u5206\u5c90<\/td><td>\u67d4\u8edf\u306a\u30ef\u30fc\u30af\u30d5\u30ed\u30fc<\/td><\/tr><tr><td>\u30ab\u30b9\u30bf\u30e0\u30a2\u30af\u30b7\u30e7\u30f3<\/td><td>\u72ec\u81ea\u306e\u51e6\u7406\u306e\u7d44\u307f\u8fbc\u307f<\/td><td>\u65e2\u5b58\u30d7\u30ed\u30bb\u30b9\u3068\u306e\u7d71\u5408<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<h4 class=\"wp-block-heading\" id=\"i-14\">3. AWS\u30b5\u30fc\u30d3\u30b9\u3068\u306e\u7dca\u5bc6\u306a\u9023\u643a<\/h4>\n\n\n\n<p>CodePipeline\u306f\u4ed6\u306eAWS\u30b5\u30fc\u30d3\u30b9\u3068\u7dca\u5bc6\u306b\u9023\u643a\u3057\u3001\u5305\u62ec\u7684\u306a\u958b\u767a\u74b0\u5883\u3092\u63d0\u4f9b\u3057\u307e\u3059\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">graph LR\n    A[CodeCommit] --&gt; B[CodePipeline]\n    B --&gt; C[CodeBuild]\n    B --&gt; D[CodeDeploy]\n    B --&gt; E[CloudFormation]\n    B --&gt; F[Elastic Beanstalk]\n    G[CloudWatch] --&gt; B\n    H[EventBridge] --&gt; B<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-15\">4. \u5b9f\u8df5\u7684\u306a\u81ea\u52d5\u5316\u30b7\u30ca\u30ea\u30aa<\/h4>\n\n\n\n<p>\u5b9f\u969b\u306e\u958b\u767a\u73fe\u5834\u3067\u306e\u6d3b\u7528\u4f8b\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30de\u30a4\u30af\u30ed\u30b5\u30fc\u30d3\u30b9\u306e\u30c7\u30d7\u30ed\u30a4\u81ea\u52d5\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u8907\u6570\u306e\u30b5\u30fc\u30d3\u30b9\u3092\u500b\u5225\u306b\u30d3\u30eb\u30c9<\/li>\n\n\n\n<li>\u4f9d\u5b58\u95a2\u4fc2\u306b\u57fa\u3065\u304f\u9806\u6b21\u30c7\u30d7\u30ed\u30a4<\/li>\n\n\n\n<li>\u5065\u5168\u6027\u30c1\u30a7\u30c3\u30af\u306e\u81ea\u52d5\u5b9f\u884c<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30af\u30ed\u30b9\u30a2\u30ab\u30a6\u30f3\u30c8\u30c7\u30d7\u30ed\u30a4<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u958b\u767a\u74b0\u5883\u304b\u3089\u672c\u756a\u74b0\u5883\u3078\u306e\u5b89\u5168\u306a\u30c7\u30d7\u30ed\u30a4<\/li>\n\n\n\n<li>\u30a2\u30ab\u30a6\u30f3\u30c8\u9593\u306e\u9069\u5207\u306a\u6a29\u9650\u7ba1\u7406<\/li>\n\n\n\n<li>\u74b0\u5883\u3054\u3068\u306e\u8a2d\u5b9a\u306e\u81ea\u52d5\u9069\u7528<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30a4\u30f3\u30d5\u30e9\u30b9\u30c8\u30e9\u30af\u30c1\u30e3\u306e\u81ea\u52d5\u66f4\u65b0<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>CloudFormation\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306e\u81ea\u52d5\u30c7\u30d7\u30ed\u30a4<\/li>\n\n\n\n<li>\u30a4\u30f3\u30d5\u30e9\u30b9\u30c8\u30e9\u30af\u30c1\u30e3\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u7ba1\u7406<\/li>\n\n\n\n<li>\u8a2d\u5b9a\u5909\u66f4\u306e\u81ea\u52d5\u9069\u7528<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-16\">5. \u958b\u767a\u52b9\u7387\u306e\u5411\u4e0a<\/h4>\n\n\n\n<p>CodePipeline\u306b\u3088\u308b\u81ea\u52d5\u5316\u304c\u3082\u305f\u3089\u3059\u5177\u4f53\u7684\u306a\u52b9\u679c\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30c7\u30d7\u30ed\u30a4\u6642\u9593\u306e\u77ed\u7e2e\uff1a\u624b\u52d5\u4f5c\u696d\u306e\u524a\u6e1b\u306b\u3088\u308a\u3001\u5e73\u574730-50%\u306e\u6642\u9593\u524a\u6e1b<\/li>\n\n\n\n<li>\u30a8\u30e9\u30fc\u7387\u306e\u4f4e\u4e0b\uff1a\u4eba\u7684\u30df\u30b9\u306e\u6392\u9664\u306b\u3088\u308b\u54c1\u8cea\u5411\u4e0a<\/li>\n\n\n\n<li>\u4e00\u8cab\u6027\u306e\u78ba\u4fdd\uff1a\u6a19\u6e96\u5316\u3055\u308c\u305f\u30d7\u30ed\u30bb\u30b9\u306e\u5b9f\u73fe<\/li>\n\n\n\n<li>\u30c1\u30fc\u30e0\u751f\u7523\u6027\u306e\u5411\u4e0a\uff1a\u958b\u767a\u8005\u304c\u672c\u8cea\u7684\u306a\u696d\u52d9\u306b\u96c6\u4e2d\u53ef\u80fd<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-17\">\u307e\u3068\u3081<\/h3>\n\n\n\n<p>AWS CodePipeline\u306f\u3001\u30e2\u30c0\u30f3\u306aCI\/CD\u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u306b\u6c42\u3081\u3089\u308c\u308b\u8981\u4ef6\u3092\u6e80\u305f\u3059\u3001\u67d4\u8edf\u3067\u62e1\u5f35\u6027\u306e\u9ad8\u3044\u30b5\u30fc\u30d3\u30b9\u3067\u3059\u3002\u5b8c\u5168\u30de\u30cd\u30fc\u30b8\u30c9\u578b\u3067\u3042\u308b\u3053\u3068\u304b\u3089\u3001\u904b\u7528\u8ca0\u8377\u3092\u6700\u5c0f\u9650\u306b\u6291\u3048\u306a\u304c\u3089\u3001\u9ad8\u5ea6\u306a\u81ea\u52d5\u5316\u3092\u5b9f\u73fe\u3067\u304d\u307e\u3059\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u5177\u4f53\u7684\u306a\u74b0\u5883\u69cb\u7bc9\u624b\u9806\u306b\u3064\u3044\u3066\u8a73\u3057\u304f\u89e3\u8aac\u3057\u3066\u3044\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-18\">AWS CodePipeline \u3068\u306f\uff1a\u6982\u8981\u3068\u4e3b\u8981\u6a5f\u80fd<\/h2>\n\n\n\n<p>AWS CodePipeline\u306f\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3084\u30a4\u30f3\u30d5\u30e9\u30b9\u30c8\u30e9\u30af\u30c1\u30e3\u306e\u66f4\u65b0\u306b\u5fc5\u8981\u306a\u7d99\u7d9a\u7684\u30c7\u30ea\u30d0\u30ea\u30fc\u30b5\u30fc\u30d3\u30b9\u3067\u3059\u3002\u30b3\u30fc\u30c9\u306e\u5909\u66f4\u304c\u767a\u751f\u3059\u308b\u305f\u3073\u306b\u3001\u30d3\u30eb\u30c9\u3001\u30c6\u30b9\u30c8\u3001\u30c7\u30d7\u30ed\u30a4\u3092\u81ea\u52d5\u7684\u306b\u5b9f\u884c\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u672c\u8a18\u4e8b\u3067\u306f\u3001CodePipeline\u306e\u4e3b\u8981\u6a5f\u80fd\u3068\u7279\u5fb4\u3092\u8a73\u3057\u304f\u89e3\u8aac\u3057\u3066\u3044\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-19\">\u4e3b\u8981\u6a5f\u80fd\u3068\u7279\u5fb4<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u5b8c\u5168\u30de\u30cd\u30fc\u30b8\u30c9\u578b\u30b5\u30fc\u30d3\u30b9<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30a4\u30f3\u30d5\u30e9\u30b9\u30c8\u30e9\u30af\u30c1\u30e3\u306e\u7ba1\u7406\u304c\u4e0d\u8981<\/li>\n\n\n\n<li>AWS\u306b\u3088\u308b\u9ad8\u53ef\u7528\u6027\u306e\u4fdd\u8a3c<\/li>\n\n\n\n<li>\u30b5\u30fc\u30d0\u30fc\u30ec\u30b9\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u306b\u3088\u308b\u67d4\u8edf\u306a\u30b9\u30b1\u30fc\u30ea\u30f3\u30b0<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u8c4a\u5bcc\u306a\u9023\u643a\u6a5f\u80fd<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30bd\u30fc\u30b9\u7ba1\u7406\uff1aGitHub\u3001CodeCommit\u3001Amazon S3\u3001Bitbucket<\/li>\n\n\n\n<li>\u30d3\u30eb\u30c9\uff1aAWS CodeBuild\u3001Jenkins<\/li>\n\n\n\n<li>\u30c7\u30d7\u30ed\u30a4\uff1aAWS CodeDeploy\u3001AWS Elastic Beanstalk\u3001AWS CloudFormation<\/li>\n\n\n\n<li>\u30c6\u30b9\u30c8\uff1aAWS CodeBuild\u3001Jenkins\u3001\u305d\u306e\u4ed6\u30b5\u30fc\u30c9\u30d1\u30fc\u30c6\u30a3\u30c4\u30fc\u30eb<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u53ef\u80fd\u306a\u30ef\u30fc\u30af\u30d5\u30ed\u30fc<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u4e26\u5217\u30a2\u30af\u30b7\u30e7\u30f3\u306e\u5b9f\u884c<\/li>\n\n\n\n<li>\u627f\u8a8d\u30a2\u30af\u30b7\u30e7\u30f3\u306e\u8ffd\u52a0<\/li>\n\n\n\n<li>\u30ab\u30b9\u30bf\u30e0\u30a2\u30af\u30b7\u30e7\u30f3\u306e\u5b9a\u7fa9<\/li>\n\n\n\n<li>\u6761\u4ef6\u4ed8\u304d\u30a2\u30af\u30b7\u30e7\u30f3\u306e\u8a2d\u5b9a<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u9ad8\u5ea6\u306a\u53ef\u8996\u6027\u3068\u30b3\u30f3\u30c8\u30ed\u30fc\u30eb<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u8a73\u7d30\u306a\u5b9f\u884c\u5c65\u6b74<\/li>\n\n\n\n<li>\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u306e\u30b9\u30c6\u30fc\u30bf\u30b9\u78ba\u8a8d<\/li>\n\n\n\n<li>AWS CloudWatch\u3068\u306e\u9023\u643a\u306b\u3088\u308b\u76e3\u8996<\/li>\n\n\n\n<li>AWS EventBridge\u3068\u306e\u9023\u643a\u306b\u3088\u308b\u30a4\u30d9\u30f3\u30c8\u51e6\u7406<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-20\">\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u306e\u7279\u5fb4<\/h3>\n\n\n\n<p>CodePipeline\u306f\u4ee5\u4e0b\u306e\u4e3b\u8981\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u3067\u69cb\u6210\u3055\u308c\u3066\u3044\u307e\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30d1\u30a4\u30d7\u30e9\u30a4\u30f3<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5168\u4f53\u306e\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u3092\u5b9a\u7fa9<\/li>\n\n\n\n<li>\u8907\u6570\u306e\u30b9\u30c6\u30fc\u30b8\u3067\u69cb\u6210<\/li>\n\n\n\n<li>\u30d0\u30fc\u30b8\u30e7\u30f3\u7ba1\u7406\u3055\u308c\u305f\u6210\u679c\u7269\u306e\u8ffd\u8de1<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30b9\u30c6\u30fc\u30b8<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u8ad6\u7406\u7684\u306a\u30e6\u30cb\u30c3\u30c8\u3068\u3057\u3066\u306e\u5b9f\u884c\u30b0\u30eb\u30fc\u30d7<\/li>\n\n\n\n<li>\u4e26\u5217\u307e\u305f\u306f\u9806\u6b21\u5b9f\u884c\u53ef\u80fd<\/li>\n\n\n\n<li>\u627f\u8a8d\u30b2\u30fc\u30c8\u306e\u8a2d\u5b9a\u304c\u53ef\u80fd<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30a2\u30af\u30b7\u30e7\u30f3<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5177\u4f53\u7684\u306a\u30bf\u30b9\u30af\u3092\u5b9f\u884c<\/li>\n\n\n\n<li>Source\/Build\/Test\/Deploy\/Approval\u306a\u3069\u306e\u30ab\u30c6\u30b4\u30ea<\/li>\n\n\n\n<li>\u5165\u529b\u3068\u51fa\u529b\u306e\u30a2\u30fc\u30c6\u30a3\u30d5\u30a1\u30af\u30c8\u5b9a\u7fa9<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-21\">\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u3068\u7d71\u5408\u6a5f\u80fd<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u6a5f\u80fd<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>AWS IAM\u3068\u306e\u7dca\u5bc6\u306a\u7d71\u5408<\/li>\n\n\n\n<li>\u6697\u53f7\u5316\u3055\u308c\u305f\u30a2\u30fc\u30c6\u30a3\u30d5\u30a1\u30af\u30c8\u30b9\u30c8\u30ec\u30fc\u30b8<\/li>\n\n\n\n<li>\u30af\u30ed\u30b9\u30a2\u30ab\u30a6\u30f3\u30c8\u30a2\u30af\u30bb\u30b9\u306e\u5236\u5fa1<\/li>\n\n\n\n<li>AWS KMS\u306b\u3088\u308b\u6697\u53f7\u5316\u30ad\u30fc\u306e\u7ba1\u7406<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30e2\u30cb\u30bf\u30ea\u30f3\u30b0\u3068\u901a\u77e5<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Amazon CloudWatch\u3068\u306e\u7d71\u5408<\/li>\n\n\n\n<li>SNS\u306b\u3088\u308b\u901a\u77e5\u6a5f\u80fd<\/li>\n\n\n\n<li>\u8a73\u7d30\u306a\u76e3\u67fb\u30ed\u30b0\u306e\u8a18\u9332<\/li>\n\n\n\n<li>\u30ab\u30b9\u30bf\u30e0\u30e1\u30c8\u30ea\u30af\u30b9\u306e\u8a2d\u5b9a<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-22\">\u30b3\u30b9\u30c8\u6700\u9069\u5316\u6a5f\u80fd<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u5f93\u91cf\u8ab2\u91d1\u5236<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30a2\u30af\u30c6\u30a3\u30d6\u306a\u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u306e\u307f\u306b\u8ab2\u91d1<\/li>\n\n\n\n<li>\u7121\u6599\u5229\u7528\u67a0\u306e\u63d0\u4f9b<\/li>\n\n\n\n<li>\u4f7f\u7528\u91cf\u306b\u5fdc\u3058\u305f\u67d4\u8edf\u306a\u8ab2\u91d1<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30ea\u30bd\u30fc\u30b9\u6700\u9069\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5fc5\u8981\u6642\u306e\u307f\u30ea\u30bd\u30fc\u30b9\u3092\u4f7f\u7528<\/li>\n\n\n\n<li>\u4e26\u5217\u5b9f\u884c\u306b\u3088\u308b\u6642\u9593\u52b9\u7387\u306e\u5411\u4e0a<\/li>\n\n\n\n<li>\u4e0d\u8981\u306a\u30d3\u30eb\u30c9\/\u30c7\u30d7\u30ed\u30a4\u306e\u9632\u6b62<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-23\">CI\/CD \u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u81ea\u52d5\u5316\u306e\u6c7a\u5b9a\u7248\uff1aCodePipeline \u306e\u7279\u5fb4<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-24\">1. \u5b8c\u5168\u81ea\u52d5\u5316\u3055\u308c\u305f\u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u7ba1\u7406<\/h4>\n\n\n\n<p>CodePipeline\u306f\u3001\u30b3\u30fc\u30c9\u306e\u30b3\u30df\u30c3\u30c8\u304b\u3089\u672c\u756a\u74b0\u5883\u3078\u306e\u30c7\u30d7\u30ed\u30a4\u307e\u3067\u3092\u5b8c\u5168\u306b\u81ea\u52d5\u5316\u3057\u307e\u3059\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u81ea\u52d5\u30c8\u30ea\u30ac\u30fc\u6a5f\u80fd<\/strong><\/li>\n\n\n\n<li>GitHub\u3084CodeCommit\u3078\u306e\u30b3\u30fc\u30c9\u30d7\u30c3\u30b7\u30e5<\/li>\n\n\n\n<li>S3\u30d0\u30b1\u30c3\u30c8\u3078\u306e\u30d5\u30a1\u30a4\u30eb\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9<\/li>\n\n\n\n<li>\u30b9\u30b1\u30b8\u30e5\u30fc\u30eb\u30d9\u30fc\u30b9\u306e\u5b9f\u884c<\/li>\n\n\n\n<li>Webhook\u306b\u3088\u308b\u30ab\u30b9\u30bf\u30e0\u30c8\u30ea\u30acE<\/li>\n\n\n\n<li><strong>\u30a4\u30f3\u30c6\u30ea\u30b8\u30a7\u30f3\u30c8\u306a\u5b9f\u884c\u5236\u5fa1<\/strong><\/li>\n\n\n\n<li>\u4e26\u5217\u5b9f\u884c\u306b\u3088\u308b\u51e6\u7406\u306e\u9ad8\u901f\u5316<\/li>\n\n\n\n<li>\u6761\u4ef6\u4ed8\u304d\u30b9\u30c6\u30fc\u30b8\u306e\u5b9f\u884c<\/li>\n\n\n\n<li>\u5931\u6557\u6642\u306e\u81ea\u52d5\u30ea\u30c8\u30e9\u30a4<\/li>\n\n\n\n<li>\u30ed\u30fc\u30eb\u30d0\u30c3\u30af\u6a5f\u80fd<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-25\">2. \u8c4a\u5bcc\u306a\u81ea\u52d5\u5316\u30aa\u30d7\u30b7\u30e7\u30f3<\/h4>\n\n\n\n<p>\u958b\u767a\u30c1\u30fc\u30e0\u306e\u30cb\u30fc\u30ba\u306b\u5fdc\u3058\u3066\u67d4\u8edf\u306a\u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u69cb\u6210\u304c\u53ef\u80fd\u3067\u3059\uff1a<\/p>\n\n\n<div id=\"id-eb0d5a8d-a433-45e8-8138-47996f9c7aa7\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u81ea\u52d5\u5316\u30aa\u30d7\u30b7\u30e7\u30f3<\/th><th>\u7528\u9014<\/th><th>\u30e1\u30ea\u30c3\u30c8<\/th><\/tr><\/thead><tbody><tr><td>\u627f\u8a8d\u30a2\u30af\u30b7\u30e7\u30f3<\/td><td>\u672c\u756a\u30c7\u30d7\u30ed\u30a4\u524d\u306e\u627f\u8a8d<\/td><td>\u30ea\u30b9\u30af\u7ba1\u7406\u306e\u5f37\u5316<\/td><\/tr><tr><td>\u4e26\u5217\u30a2\u30af\u30b7\u30e7\u30f3<\/td><td>\u8907\u6570\u74b0\u5883\u3078\u306e\u540c\u6642\u30c7\u30d7\u30ed\u30a4<\/td><td>\u30c7\u30d7\u30ed\u30a4\u6642\u9593\u306e\u77ed\u7e2e<\/td><\/tr><tr><td>\u6761\u4ef6\u4ed8\u304d\u30a2\u30af\u30b7\u30e7\u30f3<\/td><td>\u74b0\u5883\u306b\u5fdc\u3058\u305f\u51e6\u7406\u5206\u5c90<\/td><td>\u67d4\u8edf\u306a\u30ef\u30fc\u30af\u30d5\u30ed\u30fc<\/td><\/tr><tr><td>\u30ab\u30b9\u30bf\u30e0\u30a2\u30af\u30b7\u30e7\u30f3<\/td><td>\u72ec\u81ea\u306e\u51e6\u7406\u306e\u7d44\u307f\u8fbc\u307f<\/td><td>\u65e2\u5b58\u30d7\u30ed\u30bb\u30b9\u3068\u306e\u7d71\u5408<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<h4 class=\"wp-block-heading\" id=\"i-26\">3. AWS\u30b5\u30fc\u30d3\u30b9\u3068\u306e\u7dca\u5bc6\u306a\u9023\u643a<\/h4>\n\n\n\n<p>CodePipeline\u306f\u4ed6\u306eAWS\u30b5\u30fc\u30d3\u30b9\u3068\u7dca\u5bc6\u306b\u9023\u643a\u3057\u3001\u5305\u62ec\u7684\u306a\u958b\u767a\u74b0\u5883\u3092\u63d0\u4f9b\u3057\u307e\u3059\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">graph LR\n    A[CodeCommit] --&gt; B[CodePipeline]\n    B --&gt; C[CodeBuild]\n    B --&gt; D[CodeDeploy]\n    B --&gt; E[CloudFormation]\n    B --&gt; F[Elastic Beanstalk]\n    G[CloudWatch] --&gt; B\n    H[EventBridge] --&gt; B<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-27\">4. \u5b9f\u8df5\u7684\u306a\u81ea\u52d5\u5316\u30b7\u30ca\u30ea\u30aa<\/h4>\n\n\n\n<p>\u5b9f\u969b\u306e\u958b\u767a\u73fe\u5834\u3067\u306e\u6d3b\u7528\u4f8b\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30de\u30a4\u30af\u30ed\u30b5\u30fc\u30d3\u30b9\u306e\u30c7\u30d7\u30ed\u30a4\u81ea\u52d5\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u8907\u6570\u306e\u30b5\u30fc\u30d3\u30b9\u3092\u500b\u5225\u306b\u30d3\u30eb\u30c9<\/li>\n\n\n\n<li>\u4f9d\u5b58\u95a2\u4fc2\u306b\u57fa\u3065\u304f\u9806\u6b21\u30c7\u30d7\u30ed\u30a4<\/li>\n\n\n\n<li>\u5065\u5168\u6027\u30c1\u30a7\u30c3\u30af\u306e\u81ea\u52d5\u5b9f\u884c<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30af\u30ed\u30b9\u30a2\u30ab\u30a6\u30f3\u30c8\u30c7\u30d7\u30ed\u30a4<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u958b\u767a\u74b0\u5883\u304b\u3089\u672c\u756a\u74b0\u5883\u3078\u306e\u5b89\u5168\u306a\u30c7\u30d7\u30ed\u30a4<\/li>\n\n\n\n<li>\u30a2\u30ab\u30a6\u30f3\u30c8\u9593\u306e\u9069\u5207\u306a\u6a29\u9650\u7ba1\u7406<\/li>\n\n\n\n<li>\u74b0\u5883\u3054\u3068\u306e\u8a2d\u5b9a\u306e\u81ea\u52d5\u9069\u7528<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30a4\u30f3\u30d5\u30e9\u30b9\u30c8\u30e9\u30af\u30c1\u30e3\u306e\u81ea\u52d5\u66f4\u65b0<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>CloudFormation\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306e\u81ea\u52d5\u30c7\u30d7\u30ed\u30a4<\/li>\n\n\n\n<li>\u30a4\u30f3\u30d5\u30e9\u30b9\u30c8\u30e9\u30af\u30c1\u30e3\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u7ba1\u7406<\/li>\n\n\n\n<li>\u8a2d\u5b9a\u5909\u66f4\u306e\u81ea\u52d5\u9069\u7528<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-28\">5. \u958b\u767a\u52b9\u7387\u306e\u5411\u4e0a<\/h4>\n\n\n\n<p>CodePipeline\u306b\u3088\u308b\u81ea\u52d5\u5316\u304c\u3082\u305f\u3089\u3059\u5177\u4f53\u7684\u306a\u52b9\u679c\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30c7\u30d7\u30ed\u30a4\u6642\u9593\u306e\u77ed\u7e2e\uff1a\u624b\u52d5\u4f5c\u696d\u306e\u524a\u6e1b\u306b\u3088\u308a\u3001\u5e73\u574730-50%\u306e\u6642\u9593\u524a\u6e1b<\/li>\n\n\n\n<li>\u30a8\u30e9\u30fc\u7387\u306e\u4f4e\u4e0b\uff1a\u4eba\u7684\u30df\u30b9\u306e\u6392\u9664\u306b\u3088\u308b\u54c1\u8cea\u5411\u4e0a<\/li>\n\n\n\n<li>\u4e00\u8cab\u6027\u306e\u78ba\u4fdd\uff1a\u6a19\u6e96\u5316\u3055\u308c\u305f\u30d7\u30ed\u30bb\u30b9\u306e\u5b9f\u73fe<\/li>\n\n\n\n<li>\u30c1\u30fc\u30e0\u751f\u7523\u6027\u306e\u5411\u4e0a\uff1a\u958b\u767a\u8005\u304c\u672c\u8cea\u7684\u306a\u696d\u52d9\u306b\u96c6\u4e2d\u53ef\u80fd<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-29\">\u4ed6\u306eCI\/CD\u30c4\u30fc\u30eb\u3068\u306e\u6bd4\u8f03\u3067\u308f\u304b\u308b\u512a\u4f4d\u6027<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-30\">\u4e3b\u8981CI\/CD\u30c4\u30fc\u30eb\u3068\u306e\u6a5f\u80fd\u6bd4\u8f03<\/h4>\n\n\n\n<p>\u4ee5\u4e0b\u306e\u8868\u3067\u3001\u4e3b\u8981\u306aCI\/CD\u30c4\u30fc\u30eb\u3068CodePipeline\u306e\u6a5f\u80fd\u3092\u6bd4\u8f03\u3057\u307e\u3059\uff1a<\/p>\n\n\n<div id=\"id-32f13073-78f2-4196-aff4-3b837832fad2\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u6a5f\u80fd<\/th><th>AWS CodePipeline<\/th><th>Jenkins<\/th><th>GitLab CI<\/th><th>CircleCI<\/th><\/tr><\/thead><tbody><tr><td>\u30de\u30cd\u30fc\u30b8\u30c9\u30b5\u30fc\u30d3\u30b9<\/td><td>\u25cb<\/td><td>\u00d7<\/td><td>\u25b3(SaaS)<\/td><td>\u25cb<\/td><\/tr><tr><td>AWS\u30b5\u30fc\u30d3\u30b9\u7d71\u5408<\/td><td>\u25ce<\/td><td>\u25cb<\/td><td>\u25cb<\/td><td>\u25cb<\/td><\/tr><tr><td>\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u6027<\/td><td>\u25cb<\/td><td>\u25ce<\/td><td>\u25cb<\/td><td>\u25cb<\/td><\/tr><tr><td>\u5b66\u7fd2\u66f2\u7dda<\/td><td>\u7de9\u3084\u304b<\/td><td>\u6025<\/td><td>\u4e2d\u7a0b\u5ea6<\/td><td>\u4e2d\u7a0b\u5ea6<\/td><\/tr><tr><td>\u30a4\u30f3\u30d5\u30e9\u7ba1\u7406<\/td><td>\u4e0d\u8981<\/td><td>\u5fc5\u8981<\/td><td>SaaS\u306f\u4e0d\u8981<\/td><td>\u4e0d\u8981<\/td><\/tr><tr><td>\u30b3\u30b9\u30c8\u4e88\u6e2c\u6027<\/td><td>\u25ce<\/td><td>\u25b3<\/td><td>\u25cb<\/td><td>\u25cb<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<h4 class=\"wp-block-heading\" id=\"i-31\">CodePipeline\u306e\u72ec\u81ea\u306e\u5f37\u307f<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>AWS\u30a8\u30b3\u30b7\u30b9\u30c6\u30e0\u3068\u306e\u7d71\u5408<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>IAM\u306b\u3088\u308b\u4e00\u5143\u7684\u306a\u6a29\u9650\u7ba1\u7406<\/li>\n\n\n\n<li>AWS KMS\u306b\u3088\u308b\u6697\u53f7\u5316\u306e\u6a19\u6e96\u5316<\/li>\n\n\n\n<li>CloudWatch\u306b\u3088\u308b\u7d71\u5408\u76e3\u8996<\/li>\n\n\n\n<li>EventBridge\u306b\u3088\u308b\u30a4\u30d9\u30f3\u30c8\u9023\u643a<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u904b\u7528\u7ba1\u7406\u306e\u5bb9\u6613\u3055<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30a4\u30f3\u30d5\u30e9\u30b9\u30c8\u30e9\u30af\u30c1\u30e3\u7ba1\u7406\u304c\u4e0d\u8981<\/li>\n\n\n\n<li>\u30d0\u30fc\u30b8\u30e7\u30cb\u30f3\u30b0\u306e\u81ea\u52d5\u5316<\/li>\n\n\n\n<li>\u76e3\u8996\u3068\u30a2\u30e9\u30fc\u30c8\u306e\u6a19\u6e96\u88c5\u5099<\/li>\n\n\n\n<li>\u30b9\u30b1\u30fc\u30ea\u30f3\u30b0\u306e\u81ea\u52d5\u5316<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30b3\u30b9\u30c8\u6700\u9069\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u4f7f\u7528\u91cf\u30d9\u30fc\u30b9\u306e\u8ab2\u91d1<\/li>\n\n\n\n<li>\u30b5\u30fc\u30d0\u30fc\u30ec\u30b9\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3<\/li>\n\n\n\n<li>\u30ea\u30bd\u30fc\u30b9\u306e\u81ea\u52d5\u6700\u9069\u5316<\/li>\n\n\n\n<li>\u7121\u99c4\u306a\u30d3\u30eb\u30c9\u5b9f\u884c\u306e\u9632\u6b62<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-32\">\u30e6\u30fc\u30b9\u30b1\u30fc\u30b9\u5225\u306e\u63a8\u5968\u30c4\u30fc\u30eb<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>AWS\u4e2d\u5fc3\u306e\u958b\u767a\u74b0\u5883<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u63a8\u5968: CodePipeline<\/li>\n\n\n\n<li>\u7406\u7531:\n<ul class=\"wp-block-list\">\n<li>AWS\u30b5\u30fc\u30d3\u30b9\u3068\u306e\u30b7\u30fc\u30e0\u30ec\u30b9\u306a\u7d71\u5408<\/li>\n\n\n\n<li>IAM\u306b\u3088\u308b\u4e00\u5143\u7684\u306a\u6a29\u9650\u7ba1\u7406<\/li>\n\n\n\n<li>\u904b\u7528\u30b3\u30b9\u30c8\u306e\u6700\u5c0f\u5316<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30de\u30eb\u30c1\u30af\u30e9\u30a6\u30c9\u74b0\u5883<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u63a8\u5968: Jenkins\/GitLab CI<\/li>\n\n\n\n<li>\u7406\u7531:\n<ul class=\"wp-block-list\">\n<li>\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u975e\u4f9d\u5b58<\/li>\n\n\n\n<li>\u8c4a\u5bcc\u306a\u30d7\u30e9\u30b0\u30a4\u30f3<\/li>\n\n\n\n<li>\u67d4\u8edf\u306a\u74b0\u5883\u8a2d\u5b9a<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u5c0f\u898f\u6a21\u30d7\u30ed\u30b8\u30a7\u30af\u30c8<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u63a8\u5968: CircleCI\/GitLab CI<\/li>\n\n\n\n<li>\u7406\u7531:\n<ul class=\"wp-block-list\">\n<li>\u5c0e\u5165\u306e\u5bb9\u6613\u3055<\/li>\n\n\n\n<li>\u7121\u6599\u30d7\u30e9\u30f3\u306e\u5145\u5b9f<\/li>\n\n\n\n<li>\u8a2d\u5b9a\u306e\u7c21\u7d20\u3055<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-33\">\u79fb\u884c\u30b7\u30ca\u30ea\u30aa\u3068\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Jenkins\u304b\u3089\u306e\u79fb\u884c<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u6bb5\u968e\u7684\u306a\u79fb\u884c\u30a2\u30d7\u30ed\u30fc\u30c1<\/li>\n\n\n\n<li>\u4e26\u884c\u904b\u7528\u671f\u9593\u306e\u8a2d\u5b9a<\/li>\n\n\n\n<li>\u30d7\u30e9\u30b0\u30a4\u30f3\u76f8\u5f53\u6a5f\u80fd\u306e\u78ba\u8a8d<\/li>\n\n\n\n<li>\u30ab\u30b9\u30bf\u30e0\u30a2\u30af\u30b7\u30e7\u30f3\u306e\u6d3b\u7528<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u65b0\u898f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u306e\u63a1\u7528<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>AWS\u30b5\u30fc\u30d3\u30b9\u306e\u7a4d\u6975\u6d3b\u7528<\/li>\n\n\n\n<li>Infrastructure as Code\u306e\u5c0e\u5165<\/li>\n\n\n\n<li>\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u306e\u9069\u7528<\/li>\n\n\n\n<li>\u30e2\u30cb\u30bf\u30ea\u30f3\u30b0\u4f53\u5236\u306e\u78ba\u7acb<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-34\">\u307e\u3068\u3081<\/h3>\n\n\n\n<p>AWS CodePipeline\u306f\u3001\u7279\u306bAWS\u30af\u30e9\u30a6\u30c9\u74b0\u5883\u306b\u304a\u3044\u3066\u3001\u4ed6\u306eCI\/CD\u30c4\u30fc\u30eb\u3068\u6bd4\u8f03\u3057\u3066\u660e\u78ba\u306a\u512a\u4f4d\u6027\u3092\u6301\u3063\u3066\u3044\u307e\u3059\u3002\u5b8c\u5168\u30de\u30cd\u30fc\u30b8\u30c9\u578b\u30b5\u30fc\u30d3\u30b9\u3068\u3057\u3066\u306e\u5229\u70b9\u3001AWS\u30b5\u30fc\u30d3\u30b9\u3068\u306e\u7dca\u5bc6\u306a\u7d71\u5408\u3001\u305d\u3057\u3066\u4e88\u6e2c\u53ef\u80fd\u306a\u30b3\u30b9\u30c8\u69cb\u9020\u306b\u3088\u308a\u3001\u591a\u304f\u306e\u7d44\u7e54\u306b\u3068\u3063\u3066\u6700\u9069\u306a\u9078\u629e\u80a2\u3068\u306a\u3063\u3066\u3044\u307e\u3059\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u5177\u4f53\u7684\u306a\u74b0\u5883\u69cb\u7bc9\u624b\u9806\u306b\u3064\u3044\u3066\u8a73\u3057\u304f\u89e3\u8aac\u3057\u3066\u3044\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-35\">CodePipeline\u306b\u3088\u308bCI\/CD\u74b0\u5883\u69cb\u7bc9\u306e\u624b\u9806<\/h2>\n\n\n\n<p>AWS CodePipeline\u306b\u3088\u308bCI\/CD\u74b0\u5883\u306e\u69cb\u7bc9\u306f\u3001\u9069\u5207\u306a\u624b\u9806\u3068\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u306b\u5f93\u3046\u3053\u3068\u3067\u3001\u52b9\u7387\u7684\u304b\u3064\u5b89\u5168\u306b\u5b9f\u65bd\u3067\u304d\u307e\u3059\u3002\u672c\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u57fa\u672c\u7684\u306a\u74b0\u5883\u69cb\u7bc9\u304b\u3089\u5b9f\u8df5\u7684\u306a\u8a2d\u5b9a\u307e\u3067\u3001\u6bb5\u968e\u7684\u306b\u89e3\u8aac\u3057\u3066\u3044\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-36\">\u524d\u63d0\u6761\u4ef6\u306e\u78ba\u8a8d<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u5fc5\u8981\u306aAWS\u30b5\u30fc\u30d3\u30b9\u3078\u306e\u30a2\u30af\u30bb\u30b9\u6a29\u9650<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>CodePipeline<\/li>\n\n\n\n<li>CodeCommit\uff08\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u7ba1\u7406\uff09<\/li>\n\n\n\n<li>CodeBuild\uff08\u30d3\u30eb\u30c9\u51e6\u7406\uff09<\/li>\n\n\n\n<li>CodeDeploy\uff08\u30c7\u30d7\u30ed\u30a4\uff09<\/li>\n\n\n\n<li>IAM\uff08\u6a29\u9650\u7ba1\u7406\uff09<\/li>\n\n\n\n<li>S3\uff08\u30a2\u30fc\u30c6\u30a3\u30d5\u30a1\u30af\u30c8\u4fdd\u5b58\uff09<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u958b\u767a\u74b0\u5883\u306e\u6e96\u5099<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>AWS CLI<\/li>\n\n\n\n<li>Git<\/li>\n\n\n\n<li>\u7d71\u5408\u958b\u767a\u74b0\u5883\uff08IDE\uff09<\/li>\n\n\n\n<li>AWS\u8a8d\u8a3c\u60c5\u5831\u306e\u8a2d\u5b9a<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-37\">\u57fa\u672c\u7684\u306a\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u624b\u9806<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>S3\u30d0\u30b1\u30c3\u30c8\u306e\u4f5c\u6210<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u30a2\u30fc\u30c6\u30a3\u30d5\u30a1\u30af\u30c8\u4fdd\u5b58\u7528\u306eS3\u30d0\u30b1\u30c3\u30c8\u3092\u4f5c\u6210\naws s3 mb s3:\/\/my-codepipeline-artifacts --region ap-northeast-1<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30bd\u30fc\u30b9\u30ea\u30dd\u30b8\u30c8\u30ea\u306e\u6e96\u5099<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># CodeCommit\u30ea\u30dd\u30b8\u30c8\u30ea\u306e\u4f5c\u6210\naws codecommit create-repository \\\n    --repository-name my-application \\\n    --repository-description \"Application source code\"<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>CodeBuild\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u8a2d\u5b9a<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># buildspec.yml\nversion: 0.2\nphases:\n  install:\n    runtime-versions:\n      nodejs: 16\n  pre_build:\n    commands:\n      - npm install\n  build:\n    commands:\n      - npm run build\n  post_build:\n    commands:\n      - echo Build completed\nartifacts:\n  files:\n    - '**\/*'\n  base-directory: 'dist'<\/pre>\n\n\n\n<ol start=\"4\" class=\"wp-block-list\">\n<li><strong>\u30c7\u30d7\u30ed\u30a4\u74b0\u5883\u306e\u6e96\u5099<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># CodeDeploy\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u4f5c\u6210\naws deploy create-application \\\n    --application-name my-application<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-38\">\u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u306e\u4f5c\u6210<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u57fa\u672c\u8a2d\u5b9a<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">{\n  \"pipeline\": {\n    \"name\": \"my-application-pipeline\",\n    \"roleArn\": \"arn:aws:iam::ACCOUNT_ID:role\/AWS-CodePipeline-Service\",\n    \"artifactStore\": {\n      \"type\": \"S3\",\n      \"location\": \"my-codepipeline-artifacts\"\n    },\n    \"stages\": [\n      {\n        \"name\": \"Source\",\n        \"actions\": [\n          {\n            \"name\": \"Source\",\n            \"actionTypeId\": {\n              \"category\": \"Source\",\n              \"owner\": \"AWS\",\n              \"provider\": \"CodeCommit\",\n              \"version\": \"1\"\n            },\n            \"configuration\": {\n              \"RepositoryName\": \"my-application\",\n              \"BranchName\": \"main\"\n            },\n            \"outputArtifacts\": [\n              {\n                \"name\": \"SourceOutput\"\n              }\n            ]\n          }\n        ]\n      },\n      {\n        \"name\": \"Build\",\n        \"actions\": [\n          {\n            \"name\": \"Build\",\n            \"actionTypeId\": {\n              \"category\": \"Build\",\n              \"owner\": \"AWS\",\n              \"provider\": \"CodeBuild\",\n              \"version\": \"1\"\n            },\n            \"configuration\": {\n              \"ProjectName\": \"my-application-build\"\n            },\n            \"inputArtifacts\": [\n              {\n                \"name\": \"SourceOutput\"\n              }\n            ],\n            \"outputArtifacts\": [\n              {\n                \"name\": \"BuildOutput\"\n              }\n            ]\n          }\n        ]\n      }\n    ]\n  }\n}<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>IAM\u30ed\u30fc\u30eb\u306e\u8a2d\u5b9a<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">{\n  \"Version\": \"2012-10-17\",\n  \"Statement\": [\n    {\n      \"Effect\": \"Allow\",\n      \"Action\": [\n        \"codecommit:CancelUploadArchive\",\n        \"codecommit:GetBranch\",\n        \"codecommit:GetCommit\",\n        \"codecommit:GetUploadArchiveStatus\",\n        \"codecommit:UploadArchive\"\n      ],\n      \"Resource\": \"*\"\n    },\n    {\n      \"Effect\": \"Allow\",\n      \"Action\": [\n        \"codebuild:BatchGetBuilds\",\n        \"codebuild:StartBuild\"\n      ],\n      \"Resource\": \"*\"\n    }\n  ]\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-39\">\u91cd\u8981\u306a\u8a2d\u5b9a\u30dd\u30a4\u30f3\u30c8<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u8a2d\u5b9a<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u6700\u5c0f\u6a29\u9650\u306e\u539f\u5247\u306b\u57fa\u3065\u304fIAM\u30ed\u30fc\u30eb\u306e\u8a2d\u5b9a<\/li>\n\n\n\n<li>\u30a2\u30fc\u30c6\u30a3\u30d5\u30a1\u30af\u30c8\u306e\u6697\u53f7\u5316\u8a2d\u5b9a<\/li>\n\n\n\n<li>\u30af\u30ed\u30b9\u30a2\u30ab\u30a6\u30f3\u30c8\u30a2\u30af\u30bb\u30b9\u306e\u9069\u5207\u306a\u8a2d\u5b9a<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u30b9\u30c6\u30fc\u30b8\u306e\u9069\u5207\u306a\u5206\u5272<\/li>\n\n\n\n<li>\u4e26\u5217\u5b9f\u884c\u306e\u6d3b\u7528<\/li>\n\n\n\n<li>\u30ad\u30e3\u30c3\u30b7\u30e5\u8a2d\u5b9a\u306e\u6700\u9069\u5316<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30e2\u30cb\u30bf\u30ea\u30f3\u30b0\u8a2d\u5b9a<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>CloudWatch\u30a2\u30e9\u30fc\u30e0\u306e\u8a2d\u5b9a<\/li>\n\n\n\n<li>\u30e1\u30c8\u30ea\u30af\u30b9\u306e\u53ce\u96c6<\/li>\n\n\n\n<li>\u30ed\u30b0\u306e\u96c6\u4e2d\u7ba1\u7406<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-40\">\u30c1\u30a7\u30c3\u30af\u30dd\u30a4\u30f3\u30c8<\/h3>\n\n\n\n<p>\u74b0\u5883\u69cb\u7bc9\u5b8c\u4e86\u524d\u306b\u4ee5\u4e0b\u306e\u9805\u76ee\u3092\u78ba\u8a8d\u3057\u307e\u3057\u3087\u3046\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>[ ] IAM\u30ed\u30fc\u30eb\u306e\u6a29\u9650\u304c\u6700\u5c0f\u9650\u306b\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u304b<\/li>\n\n\n\n<li>[ ] S3\u30d0\u30b1\u30c3\u30c8\u306e\u6697\u53f7\u5316\u304c\u6709\u52b9\u306b\u306a\u3063\u3066\u3044\u308b\u304b<\/li>\n\n\n\n<li>[ ] \u30a2\u30fc\u30c6\u30a3\u30d5\u30a1\u30af\u30c8\u306e\u4fdd\u6301\u671f\u9593\u304c\u9069\u5207\u306b\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u304b<\/li>\n\n\n\n<li>[ ] \u901a\u77e5\u8a2d\u5b9a\u304c\u5fc5\u8981\u306a\u95a2\u4fc2\u8005\u306b\u5bfe\u3057\u3066\u884c\u308f\u308c\u3066\u3044\u308b\u304b<\/li>\n\n\n\n<li>[ ] \u30ed\u30fc\u30eb\u30d0\u30c3\u30af\u624b\u9806\u304c\u78ba\u7acb\u3055\u308c\u3066\u3044\u308b\u304b<\/li>\n\n\n\n<li>[ ] \u76e3\u8996\u30e1\u30c8\u30ea\u30af\u30b9\u304c\u9069\u5207\u306b\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u304b<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-41\">\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u306e\u30dd\u30a4\u30f3\u30c8<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u3088\u304f\u3042\u308b\u30a8\u30e9\u30fc<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>IAM\u6a29\u9650\u306e\u4e0d\u8db3<\/li>\n\n\n\n<li>S3\u30d0\u30b1\u30c3\u30c8\u306e\u30a2\u30af\u30bb\u30b9\u6a29\u9650<\/li>\n\n\n\n<li>\u30d3\u30eb\u30c9\u74b0\u5883\u306e\u8a2d\u5b9a\u30df\u30b9<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u89e3\u6c7a\u306e\u30a2\u30d7\u30ed\u30fc\u30c1<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>CloudWatch\u30ed\u30b0\u306e\u78ba\u8a8d<\/li>\n\n\n\n<li>IAM\u30dd\u30ea\u30b7\u30fc\u30b7\u30df\u30e5\u30ec\u30fc\u30bf\u306e\u6d3b\u7528<\/li>\n\n\n\n<li>\u30c6\u30b9\u30c8\u74b0\u5883\u3067\u306e\u4e8b\u524d\u691c\u8a3c<\/li>\n<\/ul>\n\n\n\n<p>\u4ee5\u964d\u306e\u30b5\u30d6\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u3088\u308a\u5177\u4f53\u7684\u306a\u5b9f\u88c5\u4f8b\u3068\u904b\u7528\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u306b\u3064\u3044\u3066\u89e3\u8aac\u3057\u3066\u3044\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-42\">CodePipeline\u306b\u3088\u308bCI\/CD\u74b0\u5883\u69cb\u7bc9\u306e\u624b\u9806<\/h2>\n\n\n\n<p>AWS CodePipeline\u306b\u3088\u308bCI\/CD\u74b0\u5883\u306e\u69cb\u7bc9\u306f\u3001\u9069\u5207\u306a\u624b\u9806\u3068\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u306b\u5f93\u3046\u3053\u3068\u3067\u3001\u52b9\u7387\u7684\u304b\u3064\u5b89\u5168\u306b\u5b9f\u65bd\u3067\u304d\u307e\u3059\u3002\u672c\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u57fa\u672c\u7684\u306a\u74b0\u5883\u69cb\u7bc9\u304b\u3089\u5b9f\u8df5\u7684\u306a\u8a2d\u5b9a\u307e\u3067\u3001\u6bb5\u968e\u7684\u306b\u89e3\u8aac\u3057\u3066\u3044\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-43\">\u524d\u63d0\u6761\u4ef6\u306e\u78ba\u8a8d<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u5fc5\u8981\u306aAWS\u30b5\u30fc\u30d3\u30b9\u3078\u306e\u30a2\u30af\u30bb\u30b9\u6a29\u9650<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>CodePipeline<\/li>\n\n\n\n<li>CodeCommit\uff08\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u7ba1\u7406\uff09<\/li>\n\n\n\n<li>CodeBuild\uff08\u30d3\u30eb\u30c9\u51e6\u7406\uff09<\/li>\n\n\n\n<li>CodeDeploy\uff08\u30c7\u30d7\u30ed\u30a4\uff09<\/li>\n\n\n\n<li>IAM\uff08\u6a29\u9650\u7ba1\u7406\uff09<\/li>\n\n\n\n<li>S3\uff08\u30a2\u30fc\u30c6\u30a3\u30d5\u30a1\u30af\u30c8\u4fdd\u5b58\uff09<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u958b\u767a\u74b0\u5883\u306e\u6e96\u5099<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>AWS CLI<\/li>\n\n\n\n<li>Git<\/li>\n\n\n\n<li>\u7d71\u5408\u958b\u767a\u74b0\u5883\uff08IDE\uff09<\/li>\n\n\n\n<li>AWS\u8a8d\u8a3c\u60c5\u5831\u306e\u8a2d\u5b9a<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-44\">\u57fa\u672c\u7684\u306a\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u624b\u9806<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>S3\u30d0\u30b1\u30c3\u30c8\u306e\u4f5c\u6210<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u30a2\u30fc\u30c6\u30a3\u30d5\u30a1\u30af\u30c8\u4fdd\u5b58\u7528\u306eS3\u30d0\u30b1\u30c3\u30c8\u3092\u4f5c\u6210\naws s3 mb s3:\/\/my-codepipeline-artifacts --region ap-northeast-1<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30bd\u30fc\u30b9\u30ea\u30dd\u30b8\u30c8\u30ea\u306e\u6e96\u5099<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># CodeCommit\u30ea\u30dd\u30b8\u30c8\u30ea\u306e\u4f5c\u6210\naws codecommit create-repository \\\n    --repository-name my-application \\\n    --repository-description \"Application source code\"<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>CodeBuild\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u8a2d\u5b9a<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># buildspec.yml\nversion: 0.2\nphases:\n  install:\n    runtime-versions:\n      nodejs: 16\n  pre_build:\n    commands:\n      - npm install\n  build:\n    commands:\n      - npm run build\n  post_build:\n    commands:\n      - echo Build completed\nartifacts:\n  files:\n    - '**\/*'\n  base-directory: 'dist'<\/pre>\n\n\n\n<ol start=\"4\" class=\"wp-block-list\">\n<li><strong>\u30c7\u30d7\u30ed\u30a4\u74b0\u5883\u306e\u6e96\u5099<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># CodeDeploy\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u4f5c\u6210\naws deploy create-application \\\n    --application-name my-application<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-45\">\u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u306e\u4f5c\u6210<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u57fa\u672c\u8a2d\u5b9a<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">{\n  \"pipeline\": {\n    \"name\": \"my-application-pipeline\",\n    \"roleArn\": \"arn:aws:iam::ACCOUNT_ID:role\/AWS-CodePipeline-Service\",\n    \"artifactStore\": {\n      \"type\": \"S3\",\n      \"location\": \"my-codepipeline-artifacts\"\n    },\n    \"stages\": [\n      {\n        \"name\": \"Source\",\n        \"actions\": [\n          {\n            \"name\": \"Source\",\n            \"actionTypeId\": {\n              \"category\": \"Source\",\n              \"owner\": \"AWS\",\n              \"provider\": \"CodeCommit\",\n              \"version\": \"1\"\n            },\n            \"configuration\": {\n              \"RepositoryName\": \"my-application\",\n              \"BranchName\": \"main\"\n            },\n            \"outputArtifacts\": [\n              {\n                \"name\": \"SourceOutput\"\n              }\n            ]\n          }\n        ]\n      },\n      {\n        \"name\": \"Build\",\n        \"actions\": [\n          {\n            \"name\": \"Build\",\n            \"actionTypeId\": {\n              \"category\": \"Build\",\n              \"owner\": \"AWS\",\n              \"provider\": \"CodeBuild\",\n              \"version\": \"1\"\n            },\n            \"configuration\": {\n              \"ProjectName\": \"my-application-build\"\n            },\n            \"inputArtifacts\": [\n              {\n                \"name\": \"SourceOutput\"\n              }\n            ],\n            \"outputArtifacts\": [\n              {\n                \"name\": \"BuildOutput\"\n              }\n            ]\n          }\n        ]\n      }\n    ]\n  }\n}<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>IAM\u30ed\u30fc\u30eb\u306e\u8a2d\u5b9a<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">{\n  \"Version\": \"2012-10-17\",\n  \"Statement\": [\n    {\n      \"Effect\": \"Allow\",\n      \"Action\": [\n        \"codecommit:CancelUploadArchive\",\n        \"codecommit:GetBranch\",\n        \"codecommit:GetCommit\",\n        \"codecommit:GetUploadArchiveStatus\",\n        \"codecommit:UploadArchive\"\n      ],\n      \"Resource\": \"*\"\n    },\n    {\n      \"Effect\": \"Allow\",\n      \"Action\": [\n        \"codebuild:BatchGetBuilds\",\n        \"codebuild:StartBuild\"\n      ],\n      \"Resource\": \"*\"\n    }\n  ]\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-46\">\u91cd\u8981\u306a\u8a2d\u5b9a\u30dd\u30a4\u30f3\u30c8<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u8a2d\u5b9a<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u6700\u5c0f\u6a29\u9650\u306e\u539f\u5247\u306b\u57fa\u3065\u304fIAM\u30ed\u30fc\u30eb\u306e\u8a2d\u5b9a<\/li>\n\n\n\n<li>\u30a2\u30fc\u30c6\u30a3\u30d5\u30a1\u30af\u30c8\u306e\u6697\u53f7\u5316\u8a2d\u5b9a<\/li>\n\n\n\n<li>\u30af\u30ed\u30b9\u30a2\u30ab\u30a6\u30f3\u30c8\u30a2\u30af\u30bb\u30b9\u306e\u9069\u5207\u306a\u8a2d\u5b9a<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u30b9\u30c6\u30fc\u30b8\u306e\u9069\u5207\u306a\u5206\u5272<\/li>\n\n\n\n<li>\u4e26\u5217\u5b9f\u884c\u306e\u6d3b\u7528<\/li>\n\n\n\n<li>\u30ad\u30e3\u30c3\u30b7\u30e5\u8a2d\u5b9a\u306e\u6700\u9069\u5316<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30e2\u30cb\u30bf\u30ea\u30f3\u30b0\u8a2d\u5b9a<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>CloudWatch\u30a2\u30e9\u30fc\u30e0\u306e\u8a2d\u5b9a<\/li>\n\n\n\n<li>\u30e1\u30c8\u30ea\u30af\u30b9\u306e\u53ce\u96c6<\/li>\n\n\n\n<li>\u30ed\u30b0\u306e\u96c6\u4e2d\u7ba1\u7406<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-47\">\u30c1\u30a7\u30c3\u30af\u30dd\u30a4\u30f3\u30c8<\/h3>\n\n\n\n<p>\u74b0\u5883\u69cb\u7bc9\u5b8c\u4e86\u524d\u306b\u4ee5\u4e0b\u306e\u9805\u76ee\u3092\u78ba\u8a8d\u3057\u307e\u3057\u3087\u3046\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>[ ] IAM\u30ed\u30fc\u30eb\u306e\u6a29\u9650\u304c\u6700\u5c0f\u9650\u306b\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u304b<\/li>\n\n\n\n<li>[ ] S3\u30d0\u30b1\u30c3\u30c8\u306e\u6697\u53f7\u5316\u304c\u6709\u52b9\u306b\u306a\u3063\u3066\u3044\u308b\u304b<\/li>\n\n\n\n<li>[ ] \u30a2\u30fc\u30c6\u30a3\u30d5\u30a1\u30af\u30c8\u306e\u4fdd\u6301\u671f\u9593\u304c\u9069\u5207\u306b\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u304b<\/li>\n\n\n\n<li>[ ] \u901a\u77e5\u8a2d\u5b9a\u304c\u5fc5\u8981\u306a\u95a2\u4fc2\u8005\u306b\u5bfe\u3057\u3066\u884c\u308f\u308c\u3066\u3044\u308b\u304b<\/li>\n\n\n\n<li>[ ] \u30ed\u30fc\u30eb\u30d0\u30c3\u30af\u624b\u9806\u304c\u78ba\u7acb\u3055\u308c\u3066\u3044\u308b\u304b<\/li>\n\n\n\n<li>[ ] \u76e3\u8996\u30e1\u30c8\u30ea\u30af\u30b9\u304c\u9069\u5207\u306b\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u304b<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-48\">\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u306e\u30dd\u30a4\u30f3\u30c8<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u3088\u304f\u3042\u308b\u30a8\u30e9\u30fc<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>IAM\u6a29\u9650\u306e\u4e0d\u8db3<\/li>\n\n\n\n<li>S3\u30d0\u30b1\u30c3\u30c8\u306e\u30a2\u30af\u30bb\u30b9\u6a29\u9650<\/li>\n\n\n\n<li>\u30d3\u30eb\u30c9\u74b0\u5883\u306e\u8a2d\u5b9a\u30df\u30b9<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u89e3\u6c7a\u306e\u30a2\u30d7\u30ed\u30fc\u30c1<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>CloudWatch\u30ed\u30b0\u306e\u78ba\u8a8d<\/li>\n\n\n\n<li>IAM\u30dd\u30ea\u30b7\u30fc\u30b7\u30df\u30e5\u30ec\u30fc\u30bf\u306e\u6d3b\u7528<\/li>\n\n\n\n<li>\u30c6\u30b9\u30c8\u74b0\u5883\u3067\u306e\u4e8b\u524d\u691c\u8a3c<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-49\">15\u5206\u3067\u4f5c\u308b\uff1a\u6700\u5c0f\u69cb\u6210\u306e\u30d1\u30a4\u30d7\u30e9\u30a4\u30f3<\/h3>\n\n\n\n<p>\u6700\u5c0f\u69cb\u6210\u306eCodePipeline\u3092\u7d20\u65e9\u304f\u69cb\u7bc9\u3057\u3001CI\/CD\u306e\u57fa\u672c\u7684\u306a\u6d41\u308c\u3092\u4f53\u9a13\u3057\u3066\u307f\u307e\u3057\u3087\u3046\u3002\u3053\u306e\u30ac\u30a4\u30c9\u3067\u306f\u3001\u30b7\u30f3\u30d7\u30eb\u306aNode.js\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u4f8b\u306b\u3001\u30bd\u30fc\u30b9\u7ba1\u7406\u304b\u3089\u30c7\u30d7\u30ed\u30a4\u307e\u3067\u306e\u57fa\u672c\u7684\u306a\u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u3092\u69cb\u7bc9\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-50\">1. \u6700\u5c0f\u69cb\u6210\u306e\u6982\u8981<\/h4>\n\n\n\n<p>\u3053\u306e\u69cb\u6210\u306b\u306f\u4ee5\u4e0b\u306e\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u304c\u542b\u307e\u308c\u307e\u3059\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30bd\u30fc\u30b9\u30b9\u30c6\u30fc\u30b8\uff08CodeCommit\uff09<\/li>\n\n\n\n<li>\u30d3\u30eb\u30c9\u30b9\u30c6\u30fc\u30b8\uff08CodeBuild\uff09<\/li>\n\n\n\n<li>\u30c7\u30d7\u30ed\u30a4\u30b9\u30c6\u30fc\u30b8\uff08S3\u3078\u9759\u7684\u30db\u30b9\u30c6\u30a3\u30f3\u30b0\uff09<\/li>\n<\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">graph LR\n    A[CodeCommit] --&gt; B[CodeBuild]\n    B --&gt; C[S3 Hosting]\n    D[CloudWatch] --&gt; E[Monitoring]<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-51\">2. \u624b\u9806\u8a73\u7d30<\/h4>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-52\">Step 1: \u30b5\u30f3\u30d7\u30eb\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u6e96\u5099<\/h5>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306e\u4f5c\u6210\nmkdir quick-pipeline-demo\ncd quick-pipeline-demo\n\n# package.json\u306e\u4f5c\u6210\ncat &lt;&lt; EOF &gt; package.json\n{\n  \"name\": \"quick-pipeline-demo\",\n  \"version\": \"1.0.0\",\n  \"scripts\": {\n    \"build\": \"echo '&lt;h1&gt;Hello CodePipeline!&lt;\/h1&gt;' &gt; index.html\"\n  }\n}\nEOF\n\n# buildspec.yml\u306e\u4f5c\u6210\ncat &lt;&lt; EOF &gt; buildspec.yml\nversion: 0.2\nphases:\n  build:\n    commands:\n      - npm run build\nartifacts:\n  files:\n    - index.html\nEOF<\/pre>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-53\">Step 2: AWS\u30de\u30cd\u30b8\u30e1\u30f3\u30c8\u30b3\u30f3\u30bd\u30fc\u30eb\u3067\u306e\u8a2d\u5b9a<\/h5>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>CodeCommit\u30ea\u30dd\u30b8\u30c8\u30ea\u306e\u4f5c\u6210<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>AWS\u30b3\u30f3\u30bd\u30fc\u30eb\u3067CodeCommit\u3092\u958b\u304f<\/li>\n\n\n\n<li>[\u30ea\u30dd\u30b8\u30c8\u30ea\u306e\u4f5c\u6210]\u3092\u30af\u30ea\u30c3\u30af<\/li>\n\n\n\n<li>\u540d\u524d\uff1a<code>quick-pipeline-demo<\/code><\/li>\n\n\n\n<li>\u4f5c\u6210\u5f8c\u3001\u30b3\u30fc\u30c9\u3092\u30d7\u30c3\u30b7\u30e5:<\/li>\n<\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   git init\n   git add .\n   git commit -m \"Initial commit\"\n   git remote add origin [\u30ea\u30dd\u30b8\u30c8\u30ea\u306eURL]\n   git push -u origin main<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>S3\u30d0\u30b1\u30c3\u30c8\u306e\u8a2d\u5b9a<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   # \u9759\u7684\u30db\u30b9\u30c6\u30a3\u30f3\u30b0\u7528\u30d0\u30b1\u30c3\u30c8\u306e\u4f5c\u6210\n   aws s3 mb s3:\/\/quick-pipeline-demo-[\u56fa\u6709\u306e\u6587\u5b57\u5217]\n\n   # \u9759\u7684\u30a6\u30a7\u30d6\u30b5\u30a4\u30c8\u30db\u30b9\u30c6\u30a3\u30f3\u30b0\u306e\u6709\u52b9\u5316\n   aws s3 website s3:\/\/quick-pipeline-demo-[\u56fa\u6709\u306e\u6587\u5b57\u5217] \\\n       --index-document index.html<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>CodeBuild\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u4f5c\u6210<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>[\u30d3\u30eb\u30c9\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u4f5c\u6210]\u3092\u30af\u30ea\u30c3\u30af<\/li>\n\n\n\n<li>\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u540d\uff1a<code>quick-pipeline-build<\/code><\/li>\n\n\n\n<li>\u30bd\u30fc\u30b9\uff1aCodeCommit<\/li>\n\n\n\n<li>\u74b0\u5883\uff1aAmazon Linux 2<\/li>\n\n\n\n<li>\u30d3\u30eb\u30c9\u4ed5\u69d8\uff1abuildspec.yml\u3092\u4f7f\u7528<\/li>\n<\/ul>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-54\">Step 3: \u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u306e\u4f5c\u6210<\/h5>\n\n\n\n<ol class=\"wp-block-list\">\n<li>CodePipeline\u30b3\u30f3\u30bd\u30fc\u30eb\u3067[\u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u306e\u4f5c\u6210]\u3092\u30af\u30ea\u30c3\u30af<\/li>\n\n\n\n<li>\u57fa\u672c\u8a2d\u5b9a:<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u540d\uff1a<code>quick-demo-pipeline<\/code><\/li>\n\n\n\n<li>\u65b0\u898f\u30b5\u30fc\u30d3\u30b9\u30ed\u30fc\u30eb\uff1a\u81ea\u52d5\u4f5c\u6210\u3092\u9078\u629e<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u30bd\u30fc\u30b9\u30b9\u30c6\u30fc\u30b8\u306e\u8a2d\u5b9a:<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30bd\u30fc\u30b9\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\uff1aAWS CodeCommit<\/li>\n\n\n\n<li>\u30ea\u30dd\u30b8\u30c8\u30ea\u540d\uff1a<code>quick-pipeline-demo<\/code><\/li>\n\n\n\n<li>\u30d6\u30e9\u30f3\u30c1\u540d\uff1a<code>main<\/code><\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u30d3\u30eb\u30c9\u30b9\u30c6\u30fc\u30b8\u306e\u8a2d\u5b9a:<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30d3\u30eb\u30c9\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\uff1aAWS CodeBuild<\/li>\n\n\n\n<li>\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u540d\uff1a<code>quick-pipeline-build<\/code><\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u30c7\u30d7\u30ed\u30a4\u30b9\u30c6\u30fc\u30b8\u306e\u8a2d\u5b9a:<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30c7\u30d7\u30ed\u30a4\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\uff1aAmazon S3<\/li>\n\n\n\n<li>\u30d0\u30b1\u30c3\u30c8\u540d\uff1a<code>quick-pipeline-demo-[\u56fa\u6709\u306e\u6587\u5b57\u5217]<\/code><\/li>\n\n\n\n<li>[\u62bd\u51fa\u304c\u5fc5\u8981]\u306b\u30c1\u30a7\u30c3\u30af<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-55\">3. \u52d5\u4f5c\u78ba\u8a8d<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u306e\u521d\u56de\u5b9f\u884c<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u4f5c\u6210\u5b8c\u4e86\u5f8c\u3001\u81ea\u52d5\u7684\u306b\u5b9f\u884c\u958b\u59cb<\/li>\n\n\n\n<li>\u5404\u30b9\u30c6\u30fc\u30b8\u306e\u5b9f\u884c\u72b6\u6cc1\u3092\u78ba\u8a8d<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u5909\u66f4\u306e\u30c6\u30b9\u30c8<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   # index.html\u306e\u5185\u5bb9\u3092\u66f4\u65b0\n   echo '&lt;h1&gt;Updated via CodePipeline!&lt;\/h1&gt;' &gt; index.html\n\n   # \u5909\u66f4\u3092\u30d7\u30c3\u30b7\u30e5\n   git add index.html\n   git commit -m \"Update content\"\n   git push<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u7d50\u679c\u306e\u78ba\u8a8d<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>S3\u30d0\u30b1\u30c3\u30c8\u306eURL\u306b\u30a2\u30af\u30bb\u30b9\u3057\u3066\u8868\u793a\u3092\u78ba\u8a8d<\/li>\n\n\n\n<li>CloudWatch\u3067\u30ed\u30b0\u3092\u78ba\u8a8d<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-56\">4. \u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0<\/h4>\n\n\n\n<p>\u3088\u304f\u3042\u308b\u30a8\u30e9\u30fc\u3068\u89e3\u6c7a\u65b9\u6cd5\uff1a<\/p>\n\n\n<div id=\"id-0c7539d3-c7ae-4ce2-b3a2-0f4d04cb8773\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u30a8\u30e9\u30fc<\/th><th>\u539f\u56e0<\/th><th>\u89e3\u6c7a\u65b9\u6cd5<\/th><\/tr><\/thead><tbody><tr><td>\u30bd\u30fc\u30b9\u30a2\u30af\u30bb\u30b9\u30a8\u30e9\u30fc<\/td><td>IAM\u6a29\u9650\u4e0d\u8db3<\/td><td>CodePipeline\u306e\u30ed\u30fc\u30eb\u306bCodeCommit\u6a29\u9650\u3092\u8ffd\u52a0<\/td><\/tr><tr><td>\u30d3\u30eb\u30c9\u5931\u6557<\/td><td>buildspec.yml\u306e\u554f\u984c<\/td><td>\u30ed\u30b0\u3092\u78ba\u8a8d\u3057\u3001\u30b3\u30de\u30f3\u30c9\u3092\u4fee\u6b63<\/td><\/tr><tr><td>\u30c7\u30d7\u30ed\u30a4\u5931\u6557<\/td><td>S3\u6a29\u9650\u4e0d\u8db3<\/td><td>\u30d0\u30b1\u30c3\u30c8\u30dd\u30ea\u30b7\u30fc\u3068IAM\u6a29\u9650\u3092\u78ba\u8a8d<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<h4 class=\"wp-block-heading\" id=\"i-57\">5. \u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u306e\u30d2\u30f3\u30c8<\/h4>\n\n\n\n<p>\u3053\u306e\u6700\u5c0f\u69cb\u6210\u3092\u30d9\u30fc\u30b9\u306b\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u62e1\u5f35\u304c\u53ef\u80fd\u3067\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30c6\u30b9\u30c8\u306e\u8ffd\u52a0<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Jest\u7b49\u306e\u30c6\u30b9\u30c8\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u5c0e\u5165<\/li>\n\n\n\n<li>\u30c6\u30b9\u30c8\u30b9\u30c6\u30fc\u30b8\u306e\u8ffd\u52a0<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u627f\u8a8d\u30d7\u30ed\u30bb\u30b9\u306e\u8ffd\u52a0<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u624b\u52d5\u627f\u8a8d\u30b9\u30c6\u30fc\u30b8\u306e\u8ffd\u52a0<\/li>\n\n\n\n<li>SNS\u901a\u77e5\u306e\u8a2d\u5b9a<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u5f37\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30a2\u30fc\u30c6\u30a3\u30d5\u30a1\u30af\u30c8\u306e\u6697\u53f7\u5316<\/li>\n\n\n\n<li>VPC\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8\u306e\u4f7f\u7528<\/li>\n<\/ul>\n\n\n\n<p>\u4ee5\u964d\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u3088\u308a\u8a73\u7d30\u306a\u8a2d\u5b9a\u3068\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u306b\u3064\u3044\u3066\u89e3\u8aac\u3057\u3066\u3044\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-58\">CodePipeline\u306b\u3088\u308bCI\/CD\u74b0\u5883\u69cb\u7bc9\u306e\u624b\u9806<\/h2>\n\n\n\n<p>AWS CodePipeline\u306b\u3088\u308bCI\/CD\u74b0\u5883\u306e\u69cb\u7bc9\u306f\u3001\u9069\u5207\u306a\u624b\u9806\u3068\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u306b\u5f93\u3046\u3053\u3068\u3067\u3001\u52b9\u7387\u7684\u304b\u3064\u5b89\u5168\u306b\u5b9f\u65bd\u3067\u304d\u307e\u3059\u3002\u672c\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u57fa\u672c\u7684\u306a\u74b0\u5883\u69cb\u7bc9\u304b\u3089\u5b9f\u8df5\u7684\u306a\u8a2d\u5b9a\u307e\u3067\u3001\u6bb5\u968e\u7684\u306b\u89e3\u8aac\u3057\u3066\u3044\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-59\">\u524d\u63d0\u6761\u4ef6\u306e\u78ba\u8a8d<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u5fc5\u8981\u306aAWS\u30b5\u30fc\u30d3\u30b9\u3078\u306e\u30a2\u30af\u30bb\u30b9\u6a29\u9650<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>CodePipeline<\/li>\n\n\n\n<li>CodeCommit\uff08\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u7ba1\u7406\uff09<\/li>\n\n\n\n<li>CodeBuild\uff08\u30d3\u30eb\u30c9\u51e6\u7406\uff09<\/li>\n\n\n\n<li>CodeDeploy\uff08\u30c7\u30d7\u30ed\u30a4\uff09<\/li>\n\n\n\n<li>IAM\uff08\u6a29\u9650\u7ba1\u7406\uff09<\/li>\n\n\n\n<li>S3\uff08\u30a2\u30fc\u30c6\u30a3\u30d5\u30a1\u30af\u30c8\u4fdd\u5b58\uff09<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u958b\u767a\u74b0\u5883\u306e\u6e96\u5099<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>AWS CLI<\/li>\n\n\n\n<li>Git<\/li>\n\n\n\n<li>\u7d71\u5408\u958b\u767a\u74b0\u5883\uff08IDE\uff09<\/li>\n\n\n\n<li>AWS\u8a8d\u8a3c\u60c5\u5831\u306e\u8a2d\u5b9a<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-60\">\u57fa\u672c\u7684\u306a\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u624b\u9806<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>S3\u30d0\u30b1\u30c3\u30c8\u306e\u4f5c\u6210<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u30a2\u30fc\u30c6\u30a3\u30d5\u30a1\u30af\u30c8\u4fdd\u5b58\u7528\u306eS3\u30d0\u30b1\u30c3\u30c8\u3092\u4f5c\u6210\naws s3 mb s3:\/\/my-codepipeline-artifacts --region ap-northeast-1<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30bd\u30fc\u30b9\u30ea\u30dd\u30b8\u30c8\u30ea\u306e\u6e96\u5099<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># CodeCommit\u30ea\u30dd\u30b8\u30c8\u30ea\u306e\u4f5c\u6210\naws codecommit create-repository \\\n    --repository-name my-application \\\n    --repository-description \"Application source code\"<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>CodeBuild\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u8a2d\u5b9a<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># buildspec.yml\nversion: 0.2\nphases:\n  install:\n    runtime-versions:\n      nodejs: 16\n  pre_build:\n    commands:\n      - npm install\n  build:\n    commands:\n      - npm run build\n  post_build:\n    commands:\n      - echo Build completed\nartifacts:\n  files:\n    - '**\/*'\n  base-directory: 'dist'<\/pre>\n\n\n\n<ol start=\"4\" class=\"wp-block-list\">\n<li><strong>\u30c7\u30d7\u30ed\u30a4\u74b0\u5883\u306e\u6e96\u5099<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># CodeDeploy\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u4f5c\u6210\naws deploy create-application \\\n    --application-name my-application<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-61\">\u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u306e\u4f5c\u6210<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u57fa\u672c\u8a2d\u5b9a<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">{\n  \"pipeline\": {\n    \"name\": \"my-application-pipeline\",\n    \"roleArn\": \"arn:aws:iam::ACCOUNT_ID:role\/AWS-CodePipeline-Service\",\n    \"artifactStore\": {\n      \"type\": \"S3\",\n      \"location\": \"my-codepipeline-artifacts\"\n    },\n    \"stages\": [\n      {\n        \"name\": \"Source\",\n        \"actions\": [\n          {\n            \"name\": \"Source\",\n            \"actionTypeId\": {\n              \"category\": \"Source\",\n              \"owner\": \"AWS\",\n              \"provider\": \"CodeCommit\",\n              \"version\": \"1\"\n            },\n            \"configuration\": {\n              \"RepositoryName\": \"my-application\",\n              \"BranchName\": \"main\"\n            },\n            \"outputArtifacts\": [\n              {\n                \"name\": \"SourceOutput\"\n              }\n            ]\n          }\n        ]\n      },\n      {\n        \"name\": \"Build\",\n        \"actions\": [\n          {\n            \"name\": \"Build\",\n            \"actionTypeId\": {\n              \"category\": \"Build\",\n              \"owner\": \"AWS\",\n              \"provider\": \"CodeBuild\",\n              \"version\": \"1\"\n            },\n            \"configuration\": {\n              \"ProjectName\": \"my-application-build\"\n            },\n            \"inputArtifacts\": [\n              {\n                \"name\": \"SourceOutput\"\n              }\n            ],\n            \"outputArtifacts\": [\n              {\n                \"name\": \"BuildOutput\"\n              }\n            ]\n          }\n        ]\n      }\n    ]\n  }\n}<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>IAM\u30ed\u30fc\u30eb\u306e\u8a2d\u5b9a<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">{\n  \"Version\": \"2012-10-17\",\n  \"Statement\": [\n    {\n      \"Effect\": \"Allow\",\n      \"Action\": [\n        \"codecommit:CancelUploadArchive\",\n        \"codecommit:GetBranch\",\n        \"codecommit:GetCommit\",\n        \"codecommit:GetUploadArchiveStatus\",\n        \"codecommit:UploadArchive\"\n      ],\n      \"Resource\": \"*\"\n    },\n    {\n      \"Effect\": \"Allow\",\n      \"Action\": [\n        \"codebuild:BatchGetBuilds\",\n        \"codebuild:StartBuild\"\n      ],\n      \"Resource\": \"*\"\n    }\n  ]\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-62\">\u91cd\u8981\u306a\u8a2d\u5b9a\u30dd\u30a4\u30f3\u30c8<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u8a2d\u5b9a<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u6700\u5c0f\u6a29\u9650\u306e\u539f\u5247\u306b\u57fa\u3065\u304fIAM\u30ed\u30fc\u30eb\u306e\u8a2d\u5b9a<\/li>\n\n\n\n<li>\u30a2\u30fc\u30c6\u30a3\u30d5\u30a1\u30af\u30c8\u306e\u6697\u53f7\u5316\u8a2d\u5b9a<\/li>\n\n\n\n<li>\u30af\u30ed\u30b9\u30a2\u30ab\u30a6\u30f3\u30c8\u30a2\u30af\u30bb\u30b9\u306e\u9069\u5207\u306a\u8a2d\u5b9a<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u30b9\u30c6\u30fc\u30b8\u306e\u9069\u5207\u306a\u5206\u5272<\/li>\n\n\n\n<li>\u4e26\u5217\u5b9f\u884c\u306e\u6d3b\u7528<\/li>\n\n\n\n<li>\u30ad\u30e3\u30c3\u30b7\u30e5\u8a2d\u5b9a\u306e\u6700\u9069\u5316<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30e2\u30cb\u30bf\u30ea\u30f3\u30b0\u8a2d\u5b9a<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>CloudWatch\u30a2\u30e9\u30fc\u30e0\u306e\u8a2d\u5b9a<\/li>\n\n\n\n<li>\u30e1\u30c8\u30ea\u30af\u30b9\u306e\u53ce\u96c6<\/li>\n\n\n\n<li>\u30ed\u30b0\u306e\u96c6\u4e2d\u7ba1\u7406<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-63\">\u30c1\u30a7\u30c3\u30af\u30dd\u30a4\u30f3\u30c8<\/h3>\n\n\n\n<p>\u74b0\u5883\u69cb\u7bc9\u5b8c\u4e86\u524d\u306b\u4ee5\u4e0b\u306e\u9805\u76ee\u3092\u78ba\u8a8d\u3057\u307e\u3057\u3087\u3046\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>[ ] IAM\u30ed\u30fc\u30eb\u306e\u6a29\u9650\u304c\u6700\u5c0f\u9650\u306b\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u304b<\/li>\n\n\n\n<li>[ ] S3\u30d0\u30b1\u30c3\u30c8\u306e\u6697\u53f7\u5316\u304c\u6709\u52b9\u306b\u306a\u3063\u3066\u3044\u308b\u304b<\/li>\n\n\n\n<li>[ ] \u30a2\u30fc\u30c6\u30a3\u30d5\u30a1\u30af\u30c8\u306e\u4fdd\u6301\u671f\u9593\u304c\u9069\u5207\u306b\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u304b<\/li>\n\n\n\n<li>[ ] \u901a\u77e5\u8a2d\u5b9a\u304c\u5fc5\u8981\u306a\u95a2\u4fc2\u8005\u306b\u5bfe\u3057\u3066\u884c\u308f\u308c\u3066\u3044\u308b\u304b<\/li>\n\n\n\n<li>[ ] \u30ed\u30fc\u30eb\u30d0\u30c3\u30af\u624b\u9806\u304c\u78ba\u7acb\u3055\u308c\u3066\u3044\u308b\u304b<\/li>\n\n\n\n<li>[ ] \u76e3\u8996\u30e1\u30c8\u30ea\u30af\u30b9\u304c\u9069\u5207\u306b\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u304b<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-64\">\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u306e\u30dd\u30a4\u30f3\u30c8<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u3088\u304f\u3042\u308b\u30a8\u30e9\u30fc<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>IAM\u6a29\u9650\u306e\u4e0d\u8db3<\/li>\n\n\n\n<li>S3\u30d0\u30b1\u30c3\u30c8\u306e\u30a2\u30af\u30bb\u30b9\u6a29\u9650<\/li>\n\n\n\n<li>\u30d3\u30eb\u30c9\u74b0\u5883\u306e\u8a2d\u5b9a\u30df\u30b9<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u89e3\u6c7a\u306e\u30a2\u30d7\u30ed\u30fc\u30c1<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>CloudWatch\u30ed\u30b0\u306e\u78ba\u8a8d<\/li>\n\n\n\n<li>IAM\u30dd\u30ea\u30b7\u30fc\u30b7\u30df\u30e5\u30ec\u30fc\u30bf\u306e\u6d3b\u7528<\/li>\n\n\n\n<li>\u30c6\u30b9\u30c8\u74b0\u5883\u3067\u306e\u4e8b\u524d\u691c\u8a3c<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-65\">15\u5206\u3067\u4f5c\u308b\uff1a\u6700\u5c0f\u69cb\u6210\u306e\u30d1\u30a4\u30d7\u30e9\u30a4\u30f3<\/h3>\n\n\n\n<p>\u6700\u5c0f\u69cb\u6210\u306eCodePipeline\u3092\u7d20\u65e9\u304f\u69cb\u7bc9\u3057\u3001CI\/CD\u306e\u57fa\u672c\u7684\u306a\u6d41\u308c\u3092\u4f53\u9a13\u3057\u3066\u307f\u307e\u3057\u3087\u3046\u3002\u3053\u306e\u30ac\u30a4\u30c9\u3067\u306f\u3001\u30b7\u30f3\u30d7\u30eb\u306aNode.js\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u4f8b\u306b\u3001\u30bd\u30fc\u30b9\u7ba1\u7406\u304b\u3089\u30c7\u30d7\u30ed\u30a4\u307e\u3067\u306e\u57fa\u672c\u7684\u306a\u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u3092\u69cb\u7bc9\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-66\">1. \u6700\u5c0f\u69cb\u6210\u306e\u6982\u8981<\/h4>\n\n\n\n<p>\u3053\u306e\u69cb\u6210\u306b\u306f\u4ee5\u4e0b\u306e\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u304c\u542b\u307e\u308c\u307e\u3059\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30bd\u30fc\u30b9\u30b9\u30c6\u30fc\u30b8\uff08CodeCommit\uff09<\/li>\n\n\n\n<li>\u30d3\u30eb\u30c9\u30b9\u30c6\u30fc\u30b8\uff08CodeBuild\uff09<\/li>\n\n\n\n<li>\u30c7\u30d7\u30ed\u30a4\u30b9\u30c6\u30fc\u30b8\uff08S3\u3078\u9759\u7684\u30db\u30b9\u30c6\u30a3\u30f3\u30b0\uff09<\/li>\n<\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">graph LR\n    A[CodeCommit] --&gt; B[CodeBuild]\n    B --&gt; C[S3 Hosting]\n    D[CloudWatch] --&gt; E[Monitoring]<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-67\">2. \u624b\u9806\u8a73\u7d30<\/h4>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-68\">Step 1: \u30b5\u30f3\u30d7\u30eb\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u6e96\u5099<\/h5>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306e\u4f5c\u6210\nmkdir quick-pipeline-demo\ncd quick-pipeline-demo\n\n# package.json\u306e\u4f5c\u6210\ncat &lt;&lt; EOF &gt; package.json\n{\n  \"name\": \"quick-pipeline-demo\",\n  \"version\": \"1.0.0\",\n  \"scripts\": {\n    \"build\": \"echo '&lt;h1&gt;Hello CodePipeline!&lt;\/h1&gt;' &gt; index.html\"\n  }\n}\nEOF\n\n# buildspec.yml\u306e\u4f5c\u6210\ncat &lt;&lt; EOF &gt; buildspec.yml\nversion: 0.2\nphases:\n  build:\n    commands:\n      - npm run build\nartifacts:\n  files:\n    - index.html\nEOF<\/pre>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-69\">Step 2: AWS\u30de\u30cd\u30b8\u30e1\u30f3\u30c8\u30b3\u30f3\u30bd\u30fc\u30eb\u3067\u306e\u8a2d\u5b9a<\/h5>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>CodeCommit\u30ea\u30dd\u30b8\u30c8\u30ea\u306e\u4f5c\u6210<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>AWS\u30b3\u30f3\u30bd\u30fc\u30eb\u3067CodeCommit\u3092\u958b\u304f<\/li>\n\n\n\n<li>[\u30ea\u30dd\u30b8\u30c8\u30ea\u306e\u4f5c\u6210]\u3092\u30af\u30ea\u30c3\u30af<\/li>\n\n\n\n<li>\u540d\u524d\uff1a<code>quick-pipeline-demo<\/code><\/li>\n\n\n\n<li>\u4f5c\u6210\u5f8c\u3001\u30b3\u30fc\u30c9\u3092\u30d7\u30c3\u30b7\u30e5:<\/li>\n<\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   git init\n   git add .\n   git commit -m \"Initial commit\"\n   git remote add origin [\u30ea\u30dd\u30b8\u30c8\u30ea\u306eURL]\n   git push -u origin main<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>S3\u30d0\u30b1\u30c3\u30c8\u306e\u8a2d\u5b9a<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   # \u9759\u7684\u30db\u30b9\u30c6\u30a3\u30f3\u30b0\u7528\u30d0\u30b1\u30c3\u30c8\u306e\u4f5c\u6210\n   aws s3 mb s3:\/\/quick-pipeline-demo-[\u56fa\u6709\u306e\u6587\u5b57\u5217]\n\n   # \u9759\u7684\u30a6\u30a7\u30d6\u30b5\u30a4\u30c8\u30db\u30b9\u30c6\u30a3\u30f3\u30b0\u306e\u6709\u52b9\u5316\n   aws s3 website s3:\/\/quick-pipeline-demo-[\u56fa\u6709\u306e\u6587\u5b57\u5217] \\\n       --index-document index.html<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>CodeBuild\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u4f5c\u6210<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>[\u30d3\u30eb\u30c9\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u4f5c\u6210]\u3092\u30af\u30ea\u30c3\u30af<\/li>\n\n\n\n<li>\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u540d\uff1a<code>quick-pipeline-build<\/code><\/li>\n\n\n\n<li>\u30bd\u30fc\u30b9\uff1aCodeCommit<\/li>\n\n\n\n<li>\u74b0\u5883\uff1aAmazon Linux 2<\/li>\n\n\n\n<li>\u30d3\u30eb\u30c9\u4ed5\u69d8\uff1abuildspec.yml\u3092\u4f7f\u7528<\/li>\n<\/ul>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-70\">Step 3: \u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u306e\u4f5c\u6210<\/h5>\n\n\n\n<ol class=\"wp-block-list\">\n<li>CodePipeline\u30b3\u30f3\u30bd\u30fc\u30eb\u3067[\u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u306e\u4f5c\u6210]\u3092\u30af\u30ea\u30c3\u30af<\/li>\n\n\n\n<li>\u57fa\u672c\u8a2d\u5b9a:<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u540d\uff1a<code>quick-demo-pipeline<\/code><\/li>\n\n\n\n<li>\u65b0\u898f\u30b5\u30fc\u30d3\u30b9\u30ed\u30fc\u30eb\uff1a\u81ea\u52d5\u4f5c\u6210\u3092\u9078\u629e<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u30bd\u30fc\u30b9\u30b9\u30c6\u30fc\u30b8\u306e\u8a2d\u5b9a:<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30bd\u30fc\u30b9\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\uff1aAWS CodeCommit<\/li>\n\n\n\n<li>\u30ea\u30dd\u30b8\u30c8\u30ea\u540d\uff1a<code>quick-pipeline-demo<\/code><\/li>\n\n\n\n<li>\u30d6\u30e9\u30f3\u30c1\u540d\uff1a<code>main<\/code><\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u30d3\u30eb\u30c9\u30b9\u30c6\u30fc\u30b8\u306e\u8a2d\u5b9a:<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30d3\u30eb\u30c9\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\uff1aAWS CodeBuild<\/li>\n\n\n\n<li>\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u540d\uff1a<code>quick-pipeline-build<\/code><\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u30c7\u30d7\u30ed\u30a4\u30b9\u30c6\u30fc\u30b8\u306e\u8a2d\u5b9a:<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30c7\u30d7\u30ed\u30a4\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\uff1aAmazon S3<\/li>\n\n\n\n<li>\u30d0\u30b1\u30c3\u30c8\u540d\uff1a<code>quick-pipeline-demo-[\u56fa\u6709\u306e\u6587\u5b57\u5217]<\/code><\/li>\n\n\n\n<li>[\u62bd\u51fa\u304c\u5fc5\u8981]\u306b\u30c1\u30a7\u30c3\u30af<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-71\">3. \u52d5\u4f5c\u78ba\u8a8d<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u306e\u521d\u56de\u5b9f\u884c<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u4f5c\u6210\u5b8c\u4e86\u5f8c\u3001\u81ea\u52d5\u7684\u306b\u5b9f\u884c\u958b\u59cb<\/li>\n\n\n\n<li>\u5404\u30b9\u30c6\u30fc\u30b8\u306e\u5b9f\u884c\u72b6\u6cc1\u3092\u78ba\u8a8d<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u5909\u66f4\u306e\u30c6\u30b9\u30c8<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   # index.html\u306e\u5185\u5bb9\u3092\u66f4\u65b0\n   echo '&lt;h1&gt;Updated via CodePipeline!&lt;\/h1&gt;' &gt; index.html\n\n   # \u5909\u66f4\u3092\u30d7\u30c3\u30b7\u30e5\n   git add index.html\n   git commit -m \"Update content\"\n   git push<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u7d50\u679c\u306e\u78ba\u8a8d<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>S3\u30d0\u30b1\u30c3\u30c8\u306eURL\u306b\u30a2\u30af\u30bb\u30b9\u3057\u3066\u8868\u793a\u3092\u78ba\u8a8d<\/li>\n\n\n\n<li>CloudWatch\u3067\u30ed\u30b0\u3092\u78ba\u8a8d<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-72\">4. \u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0<\/h4>\n\n\n\n<p>\u3088\u304f\u3042\u308b\u30a8\u30e9\u30fc\u3068\u89e3\u6c7a\u65b9\u6cd5\uff1a<\/p>\n\n\n<div id=\"id-5c39b684-b830-45a0-a9aa-b61e2bd7ea18\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u30a8\u30e9\u30fc<\/th><th>\u539f\u56e0<\/th><th>\u89e3\u6c7a\u65b9\u6cd5<\/th><\/tr><\/thead><tbody><tr><td>\u30bd\u30fc\u30b9\u30a2\u30af\u30bb\u30b9\u30a8\u30e9\u30fc<\/td><td>IAM\u6a29\u9650\u4e0d\u8db3<\/td><td>CodePipeline\u306e\u30ed\u30fc\u30eb\u306bCodeCommit\u6a29\u9650\u3092\u8ffd\u52a0<\/td><\/tr><tr><td>\u30d3\u30eb\u30c9\u5931\u6557<\/td><td>buildspec.yml\u306e\u554f\u984c<\/td><td>\u30ed\u30b0\u3092\u78ba\u8a8d\u3057\u3001\u30b3\u30de\u30f3\u30c9\u3092\u4fee\u6b63<\/td><\/tr><tr><td>\u30c7\u30d7\u30ed\u30a4\u5931\u6557<\/td><td>S3\u6a29\u9650\u4e0d\u8db3<\/td><td>\u30d0\u30b1\u30c3\u30c8\u30dd\u30ea\u30b7\u30fc\u3068IAM\u6a29\u9650\u3092\u78ba\u8a8d<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<h4 class=\"wp-block-heading\" id=\"i-73\">5. \u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u306e\u30d2\u30f3\u30c8<\/h4>\n\n\n\n<p>\u3053\u306e\u6700\u5c0f\u69cb\u6210\u3092\u30d9\u30fc\u30b9\u306b\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u62e1\u5f35\u304c\u53ef\u80fd\u3067\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30c6\u30b9\u30c8\u306e\u8ffd\u52a0<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Jest\u7b49\u306e\u30c6\u30b9\u30c8\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u5c0e\u5165<\/li>\n\n\n\n<li>\u30c6\u30b9\u30c8\u30b9\u30c6\u30fc\u30b8\u306e\u8ffd\u52a0<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u627f\u8a8d\u30d7\u30ed\u30bb\u30b9\u306e\u8ffd\u52a0<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u624b\u52d5\u627f\u8a8d\u30b9\u30c6\u30fc\u30b8\u306e\u8ffd\u52a0<\/li>\n\n\n\n<li>SNS\u901a\u77e5\u306e\u8a2d\u5b9a<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u5f37\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30a2\u30fc\u30c6\u30a3\u30d5\u30a1\u30af\u30c8\u306e\u6697\u53f7\u5316<\/li>\n\n\n\n<li>VPC\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8\u306e\u4f7f\u7528<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-74\">\u30bd\u30fc\u30b9\u7ba1\u7406\u304b\u3089\u30c7\u30d7\u30ed\u30a4\u307e\u3067\u306e\u8a2d\u5b9a\u30dd\u30a4\u30f3\u30c8<\/h3>\n\n\n\n<p>CodePipeline\u306e\u5404\u30b9\u30c6\u30fc\u30b8\u306b\u304a\u3051\u308b\u91cd\u8981\u306a\u8a2d\u5b9a\u30dd\u30a4\u30f3\u30c8\u3068\u3001\u5b9f\u8df5\u7684\u306a\u30ce\u30a6\u30cf\u30a6\u3092\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-75\">1. \u30bd\u30fc\u30b9\u30b9\u30c6\u30fc\u30b8\u306e\u8a2d\u5b9a\u30dd\u30a4\u30f3\u30c8<\/h4>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-76\">\u30b3\u30fc\u30c9\u30ea\u30dd\u30b8\u30c8\u30ea\u306e\u8a2d\u5b9a<\/h5>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># CodeCommit\u306e\u5834\u5408\u306eCloudFormation\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u4f8b\nResources:\n  SourceRepository:\n    Type: AWS::CodeCommit::Repository\n    Properties:\n      RepositoryName: !Sub ${ProjectName}-repo\n      RepositoryDescription: Source code repository\n      Tags:\n        - Key: Project\n          Value: !Ref ProjectName\n      Triggers:\n        - Name: PipelineTrigger\n          Events: \n            - all\n          DestinationArn: !Ref NotificationTopic<\/pre>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-77\">\u30d6\u30e9\u30f3\u30c1\u6226\u7565\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/h5>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u958b\u767a\u30d5\u30ed\u30fc\u5225\u306e\u63a8\u5968\u8a2d\u5b9a<\/strong> \u958b\u767a\u30d5\u30ed\u30fc \u30d6\u30e9\u30f3\u30c1\u69cb\u6210 \u30c8\u30ea\u30ac\u30fc\u8a2d\u5b9a \u30d5\u30a3\u30fc\u30c1\u30e3\u30fc\u30d6\u30e9\u30f3\u30c1 feature\/* \u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8\u6642 GitFlow develop, main \u30d7\u30c3\u30b7\u30e5\u6642 \u30c8\u30e9\u30f3\u30af\u30d9\u30fc\u30b9 main \u5373\u6642\u30c8\u30ea\u30ac\u30fc<\/li>\n\n\n\n<li><strong>\u30bd\u30fc\u30b9\u30a2\u30af\u30b7\u30e7\u30f3\u8a2d\u5b9a\u306e\u30dd\u30a4\u30f3\u30c8<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   {\n     \"actions\": [\n       {\n         \"name\": \"Source\",\n         \"configuration\": {\n           \"PollForSourceChanges\": \"false\",\n           \"DetectChanges\": \"true\",\n           \"BranchName\": \"main\",\n           \"OutputArtifactFormat\": \"CODE_ZIP\"\n         }\n       }\n     ]\n   }<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-78\">2. \u30d3\u30eb\u30c9\u30b9\u30c6\u30fc\u30b8\u306e\u6700\u9069\u5316<\/h4>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-79\">\u30d3\u30eb\u30c9\u74b0\u5883\u306e\u8a2d\u5b9a<\/h5>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># buildspec.yml\u306e\u6700\u9069\u5316\u4f8b\nversion: 0.2\nenv:\n  variables:\n    NODE_ENV: \"production\"\n  parameter-store:\n    DEPLOY_KEY: \"\/myapp\/deploy\/key\"\nphases:\n  install:\n    runtime-versions:\n      nodejs: 16\n    commands:\n      - npm ci --production\n  pre_build:\n    commands:\n      - npm run lint\n      - npm run test\n  build:\n    commands:\n      - npm run build\n  post_build:\n    commands:\n      - aws s3 sync dist\/ s3:\/\/${DEPLOY_BUCKET}\/\ncache:\n  paths:\n    - 'node_modules\/**\/*'\n    - '.npm\/**\/*'<\/pre>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-80\">\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316\u306e\u30dd\u30a4\u30f3\u30c8<\/h5>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30ad\u30e3\u30c3\u30b7\u30e5\u6226\u7565<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30ed\u30fc\u30ab\u30eb\u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u6d3b\u7528<\/li>\n\n\n\n<li>S3\u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u8a2d\u5b9a<\/li>\n\n\n\n<li>\u30ab\u30b9\u30bf\u30e0\u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u5b9f\u88c5<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u4e26\u5217\u30d3\u30eb\u30c9\u306e\u8a2d\u5b9a<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   {\n     \"actions\": [\n       {\n         \"name\": \"BuildFrontend\",\n         \"runOrder\": 1\n       },\n       {\n         \"name\": \"BuildBackend\",\n         \"runOrder\": 1\n       }\n     ]\n   }<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-81\">3. \u30c7\u30d7\u30ed\u30a4\u30b9\u30c6\u30fc\u30b8\u306e\u69cb\u6210<\/h4>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-82\">\u30c7\u30d7\u30ed\u30a4\u6226\u7565\u306e\u5b9f\u88c5<\/h5>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30d6\u30eb\u30fc\/\u30b0\u30ea\u30fc\u30f3\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># CodeDeploy\u306e\u8a2d\u5b9a\u4f8b\nResources:\n  DeploymentGroup:\n    Type: AWS::CodeDeploy::DeploymentGroup\n    Properties:\n      DeploymentStyle:\n        DeploymentOption: WITH_TRAFFIC_CONTROL\n        DeploymentType: BLUE_GREEN\n      BlueGreenDeploymentConfiguration:\n        DeploymentReadyOption:\n          ActionOnTimeout: CONTINUE_DEPLOYMENT\n          WaitTimeInMinutes: 5\n        TerminateBlueInstancesOnDeploymentSuccess:\n          Action: TERMINATE\n          TerminationWaitTimeInMinutes: 5<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30ab\u30ca\u30ea\u30a2\u30c7\u30d7\u30ed\u30a4\u8a2d\u5b9a<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">{\n  \"deploymentSettings\": {\n    \"type\": \"LINEAR\",\n    \"linearPercentage\": 10,\n    \"intervalMinutes\": 15\n  }\n}<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-83\">4. \u7d71\u5408\u30dd\u30a4\u30f3\u30c8\u306e\u30c1\u30a7\u30c3\u30af\u30ea\u30b9\u30c8<\/h4>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-84\">\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u8a2d\u5b9a<\/h5>\n\n\n\n<ul class=\"wp-block-list\">\n<li>[ ] \u30af\u30ed\u30b9\u30a2\u30ab\u30a6\u30f3\u30c8\u30ed\u30fc\u30eb\u306e\u6700\u5c0f\u6a29\u9650\u8a2d\u5b9a<\/li>\n\n\n\n<li>[ ] \u30a2\u30fc\u30c6\u30a3\u30d5\u30a1\u30af\u30c8\u306e\u6697\u53f7\u5316<\/li>\n\n\n\n<li>[ ] VPC\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8\u306e\u4f7f\u7528<\/li>\n\n\n\n<li>[ ] \u30b7\u30fc\u30af\u30ec\u30c3\u30c8\u7ba1\u7406\u306e\u9069\u5207\u306a\u5b9f\u88c5<\/li>\n<\/ul>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-85\">\u76e3\u8996\u8a2d\u5b9a<\/h5>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># CloudWatch\u30a2\u30e9\u30fc\u30e0\u8a2d\u5b9a\u4f8b\nResources:\n  PipelineFailureAlarm:\n    Type: AWS::CloudWatch::Alarm\n    Properties:\n      AlarmName: !Sub ${ProjectName}-pipeline-failure\n      MetricName: FailedPipeline\n      Namespace: AWS\/CodePipeline\n      Statistic: Sum\n      Period: 300\n      EvaluationPeriods: 1\n      Threshold: 1\n      AlarmActions:\n        - !Ref NotificationTopic<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-86\">5. \u9ad8\u5ea6\u306a\u8a2d\u5b9a\u30aa\u30d7\u30b7\u30e7\u30f3<\/h4>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-87\">\u6761\u4ef6\u4ed8\u304d\u30c7\u30d7\u30ed\u30a4\u306e\u5b9f\u88c5<\/h5>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">{\n  \"actions\": [\n    {\n      \"name\": \"Deploy\",\n      \"configuration\": {\n        \"CustomData\": \"#{BuildVariables.DEPLOY_FLAG}\",\n        \"SkipFlag\": \"#{BuildVariables.SKIP_DEPLOY}\"\n      }\n    }\n  ]\n}<\/pre>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-88\">\u627f\u8a8d\u30d5\u30ed\u30fc\u306e\u7d44\u307f\u8fbc\u307f<\/h5>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u627f\u8a8d\u30b9\u30c6\u30fc\u30b8\u306e\u8a2d\u5b9a\u4f8b\n- name: Approve\n  actions:\n    - name: ManualApproval\n      actionTypeId:\n        category: Approval\n        owner: AWS\n        version: '1'\n        provider: Manual\n      configuration:\n        CustomData: Please review the changes\n        ExternalEntityLink: #{BuildVariables.CHANGE_URL}\n      runOrder: 1<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-89\">6. \u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30c7\u30d0\u30c3\u30b0\u624b\u6cd5<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>CloudWatch\u30ed\u30b0\u306e\u7d71\u5408<\/li>\n\n\n\n<li>\u30a8\u30e9\u30fc\u30d1\u30bf\u30fc\u30f3\u306e\u5206\u6790<\/li>\n\n\n\n<li>\u30ed\u30fc\u30eb\u30d0\u30c3\u30af\u30d7\u30ed\u30bb\u30b9\u306e\u78ba\u7acb<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u3088\u304f\u3042\u308b\u30a8\u30e9\u30fc\u3068\u5bfe\u7b56<\/strong> \u30a8\u30e9\u30fc\u7a2e\u5225 \u8003\u3048\u3089\u308c\u308b\u539f\u56e0 \u5bfe\u7b56 \u30a2\u30fc\u30c6\u30a3\u30d5\u30a1\u30af\u30c8\u5931\u6557 S3\u30d0\u30b1\u30c3\u30c8\u6a29\u9650 \u30d0\u30b1\u30c3\u30c8\u30dd\u30ea\u30b7\u30fc\u306e\u898b\u76f4\u3057 \u30d3\u30eb\u30c9\u5931\u6557 \u4f9d\u5b58\u95a2\u4fc2\u30a8\u30e9\u30fc \u30ad\u30e3\u30c3\u30b7\u30e5\u30af\u30ea\u30a2\u3001\u4f9d\u5b58\u95a2\u4fc2\u66f4\u65b0 \u30c7\u30d7\u30ed\u30a4\u5931\u6557 IAM\u30ed\u30fc\u30eb\u6a29\u9650 \u5fc5\u8981\u306a\u6a29\u9650\u306e\u8ffd\u52a0<\/li>\n<\/ol>\n\n\n\n<p>\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001IAM\u30ed\u30fc\u30eb\u3068\u6a29\u9650\u8a2d\u5b9a\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u306b\u3064\u3044\u3066\u8a73\u3057\u304f\u89e3\u8aac\u3057\u3066\u3044\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-90\">CodePipeline\u306b\u3088\u308bCI\/CD\u74b0\u5883\u69cb\u7bc9\u306e\u624b\u9806<\/h2>\n\n\n\n<p>AWS CodePipeline\u306b\u3088\u308bCI\/CD\u74b0\u5883\u306e\u69cb\u7bc9\u306f\u3001\u9069\u5207\u306a\u624b\u9806\u3068\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u306b\u5f93\u3046\u3053\u3068\u3067\u3001\u52b9\u7387\u7684\u304b\u3064\u5b89\u5168\u306b\u5b9f\u65bd\u3067\u304d\u307e\u3059\u3002\u672c\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u57fa\u672c\u7684\u306a\u74b0\u5883\u69cb\u7bc9\u304b\u3089\u5b9f\u8df5\u7684\u306a\u8a2d\u5b9a\u307e\u3067\u3001\u6bb5\u968e\u7684\u306b\u89e3\u8aac\u3057\u3066\u3044\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-91\">\u524d\u63d0\u6761\u4ef6\u306e\u78ba\u8a8d<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u5fc5\u8981\u306aAWS\u30b5\u30fc\u30d3\u30b9\u3078\u306e\u30a2\u30af\u30bb\u30b9\u6a29\u9650<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>CodePipeline<\/li>\n\n\n\n<li>CodeCommit\uff08\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u7ba1\u7406\uff09<\/li>\n\n\n\n<li>CodeBuild\uff08\u30d3\u30eb\u30c9\u51e6\u7406\uff09<\/li>\n\n\n\n<li>CodeDeploy\uff08\u30c7\u30d7\u30ed\u30a4\uff09<\/li>\n\n\n\n<li>IAM\uff08\u6a29\u9650\u7ba1\u7406\uff09<\/li>\n\n\n\n<li>S3\uff08\u30a2\u30fc\u30c6\u30a3\u30d5\u30a1\u30af\u30c8\u4fdd\u5b58\uff09<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u958b\u767a\u74b0\u5883\u306e\u6e96\u5099<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>AWS CLI<\/li>\n\n\n\n<li>Git<\/li>\n\n\n\n<li>\u7d71\u5408\u958b\u767a\u74b0\u5883\uff08IDE\uff09<\/li>\n\n\n\n<li>AWS\u8a8d\u8a3c\u60c5\u5831\u306e\u8a2d\u5b9a<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-92\">\u57fa\u672c\u7684\u306a\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u624b\u9806<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>S3\u30d0\u30b1\u30c3\u30c8\u306e\u4f5c\u6210<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u30a2\u30fc\u30c6\u30a3\u30d5\u30a1\u30af\u30c8\u4fdd\u5b58\u7528\u306eS3\u30d0\u30b1\u30c3\u30c8\u3092\u4f5c\u6210\naws s3 mb s3:\/\/my-codepipeline-artifacts --region ap-northeast-1<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30bd\u30fc\u30b9\u30ea\u30dd\u30b8\u30c8\u30ea\u306e\u6e96\u5099<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># CodeCommit\u30ea\u30dd\u30b8\u30c8\u30ea\u306e\u4f5c\u6210\naws codecommit create-repository \\\n    --repository-name my-application \\\n    --repository-description \"Application source code\"<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>CodeBuild\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u8a2d\u5b9a<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># buildspec.yml\nversion: 0.2\nphases:\n  install:\n    runtime-versions:\n      nodejs: 16\n  pre_build:\n    commands:\n      - npm install\n  build:\n    commands:\n      - npm run build\n  post_build:\n    commands:\n      - echo Build completed\nartifacts:\n  files:\n    - '**\/*'\n  base-directory: 'dist'<\/pre>\n\n\n\n<ol start=\"4\" class=\"wp-block-list\">\n<li><strong>\u30c7\u30d7\u30ed\u30a4\u74b0\u5883\u306e\u6e96\u5099<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># CodeDeploy\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u4f5c\u6210\naws deploy create-application \\\n    --application-name my-application<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-93\">\u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u306e\u4f5c\u6210<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u57fa\u672c\u8a2d\u5b9a<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">{\n  \"pipeline\": {\n    \"name\": \"my-application-pipeline\",\n    \"roleArn\": \"arn:aws:iam::ACCOUNT_ID:role\/AWS-CodePipeline-Service\",\n    \"artifactStore\": {\n      \"type\": \"S3\",\n      \"location\": \"my-codepipeline-artifacts\"\n    },\n    \"stages\": [\n      {\n        \"name\": \"Source\",\n        \"actions\": [\n          {\n            \"name\": \"Source\",\n            \"actionTypeId\": {\n              \"category\": \"Source\",\n              \"owner\": \"AWS\",\n              \"provider\": \"CodeCommit\",\n              \"version\": \"1\"\n            },\n            \"configuration\": {\n              \"RepositoryName\": \"my-application\",\n              \"BranchName\": \"main\"\n            },\n            \"outputArtifacts\": [\n              {\n                \"name\": \"SourceOutput\"\n              }\n            ]\n          }\n        ]\n      },\n      {\n        \"name\": \"Build\",\n        \"actions\": [\n          {\n            \"name\": \"Build\",\n            \"actionTypeId\": {\n              \"category\": \"Build\",\n              \"owner\": \"AWS\",\n              \"provider\": \"CodeBuild\",\n              \"version\": \"1\"\n            },\n            \"configuration\": {\n              \"ProjectName\": \"my-application-build\"\n            },\n            \"inputArtifacts\": [\n              {\n                \"name\": \"SourceOutput\"\n              }\n            ],\n            \"outputArtifacts\": [\n              {\n                \"name\": \"BuildOutput\"\n              }\n            ]\n          }\n        ]\n      }\n    ]\n  }\n}<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>IAM\u30ed\u30fc\u30eb\u306e\u8a2d\u5b9a<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">{\n  \"Version\": \"2012-10-17\",\n  \"Statement\": [\n    {\n      \"Effect\": \"Allow\",\n      \"Action\": [\n        \"codecommit:CancelUploadArchive\",\n        \"codecommit:GetBranch\",\n        \"codecommit:GetCommit\",\n        \"codecommit:GetUploadArchiveStatus\",\n        \"codecommit:UploadArchive\"\n      ],\n      \"Resource\": \"*\"\n    },\n    {\n      \"Effect\": \"Allow\",\n      \"Action\": [\n        \"codebuild:BatchGetBuilds\",\n        \"codebuild:StartBuild\"\n      ],\n      \"Resource\": \"*\"\n    }\n  ]\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-94\">\u91cd\u8981\u306a\u8a2d\u5b9a\u30dd\u30a4\u30f3\u30c8<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u8a2d\u5b9a<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u6700\u5c0f\u6a29\u9650\u306e\u539f\u5247\u306b\u57fa\u3065\u304fIAM\u30ed\u30fc\u30eb\u306e\u8a2d\u5b9a<\/li>\n\n\n\n<li>\u30a2\u30fc\u30c6\u30a3\u30d5\u30a1\u30af\u30c8\u306e\u6697\u53f7\u5316\u8a2d\u5b9a<\/li>\n\n\n\n<li>\u30af\u30ed\u30b9\u30a2\u30ab\u30a6\u30f3\u30c8\u30a2\u30af\u30bb\u30b9\u306e\u9069\u5207\u306a\u8a2d\u5b9a<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u30b9\u30c6\u30fc\u30b8\u306e\u9069\u5207\u306a\u5206\u5272<\/li>\n\n\n\n<li>\u4e26\u5217\u5b9f\u884c\u306e\u6d3b\u7528<\/li>\n\n\n\n<li>\u30ad\u30e3\u30c3\u30b7\u30e5\u8a2d\u5b9a\u306e\u6700\u9069\u5316<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30e2\u30cb\u30bf\u30ea\u30f3\u30b0\u8a2d\u5b9a<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>CloudWatch\u30a2\u30e9\u30fc\u30e0\u306e\u8a2d\u5b9a<\/li>\n\n\n\n<li>\u30e1\u30c8\u30ea\u30af\u30b9\u306e\u53ce\u96c6<\/li>\n\n\n\n<li>\u30ed\u30b0\u306e\u96c6\u4e2d\u7ba1\u7406<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-95\">\u30c1\u30a7\u30c3\u30af\u30dd\u30a4\u30f3\u30c8<\/h3>\n\n\n\n<p>\u74b0\u5883\u69cb\u7bc9\u5b8c\u4e86\u524d\u306b\u4ee5\u4e0b\u306e\u9805\u76ee\u3092\u78ba\u8a8d\u3057\u307e\u3057\u3087\u3046\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>[ ] IAM\u30ed\u30fc\u30eb\u306e\u6a29\u9650\u304c\u6700\u5c0f\u9650\u306b\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u304b<\/li>\n\n\n\n<li>[ ] S3\u30d0\u30b1\u30c3\u30c8\u306e\u6697\u53f7\u5316\u304c\u6709\u52b9\u306b\u306a\u3063\u3066\u3044\u308b\u304b<\/li>\n\n\n\n<li>[ ] \u30a2\u30fc\u30c6\u30a3\u30d5\u30a1\u30af\u30c8\u306e\u4fdd\u6301\u671f\u9593\u304c\u9069\u5207\u306b\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u304b<\/li>\n\n\n\n<li>[ ] \u901a\u77e5\u8a2d\u5b9a\u304c\u5fc5\u8981\u306a\u95a2\u4fc2\u8005\u306b\u5bfe\u3057\u3066\u884c\u308f\u308c\u3066\u3044\u308b\u304b<\/li>\n\n\n\n<li>[ ] \u30ed\u30fc\u30eb\u30d0\u30c3\u30af\u624b\u9806\u304c\u78ba\u7acb\u3055\u308c\u3066\u3044\u308b\u304b<\/li>\n\n\n\n<li>[ ] \u76e3\u8996\u30e1\u30c8\u30ea\u30af\u30b9\u304c\u9069\u5207\u306b\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u304b<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-96\">\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u306e\u30dd\u30a4\u30f3\u30c8<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u3088\u304f\u3042\u308b\u30a8\u30e9\u30fc<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>IAM\u6a29\u9650\u306e\u4e0d\u8db3<\/li>\n\n\n\n<li>S3\u30d0\u30b1\u30c3\u30c8\u306e\u30a2\u30af\u30bb\u30b9\u6a29\u9650<\/li>\n\n\n\n<li>\u30d3\u30eb\u30c9\u74b0\u5883\u306e\u8a2d\u5b9a\u30df\u30b9<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u89e3\u6c7a\u306e\u30a2\u30d7\u30ed\u30fc\u30c1<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>CloudWatch\u30ed\u30b0\u306e\u78ba\u8a8d<\/li>\n\n\n\n<li>IAM\u30dd\u30ea\u30b7\u30fc\u30b7\u30df\u30e5\u30ec\u30fc\u30bf\u306e\u6d3b\u7528<\/li>\n\n\n\n<li>\u30c6\u30b9\u30c8\u74b0\u5883\u3067\u306e\u4e8b\u524d\u691c\u8a3c<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-97\">15\u5206\u3067\u4f5c\u308b\uff1a\u6700\u5c0f\u69cb\u6210\u306e\u30d1\u30a4\u30d7\u30e9\u30a4\u30f3<\/h3>\n\n\n\n<p>\u6700\u5c0f\u69cb\u6210\u306eCodePipeline\u3092\u7d20\u65e9\u304f\u69cb\u7bc9\u3057\u3001CI\/CD\u306e\u57fa\u672c\u7684\u306a\u6d41\u308c\u3092\u4f53\u9a13\u3057\u3066\u307f\u307e\u3057\u3087\u3046\u3002\u3053\u306e\u30ac\u30a4\u30c9\u3067\u306f\u3001\u30b7\u30f3\u30d7\u30eb\u306aNode.js\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u4f8b\u306b\u3001\u30bd\u30fc\u30b9\u7ba1\u7406\u304b\u3089\u30c7\u30d7\u30ed\u30a4\u307e\u3067\u306e\u57fa\u672c\u7684\u306a\u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u3092\u69cb\u7bc9\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-98\">1. \u6700\u5c0f\u69cb\u6210\u306e\u6982\u8981<\/h4>\n\n\n\n<p>\u3053\u306e\u69cb\u6210\u306b\u306f\u4ee5\u4e0b\u306e\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u304c\u542b\u307e\u308c\u307e\u3059\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30bd\u30fc\u30b9\u30b9\u30c6\u30fc\u30b8\uff08CodeCommit\uff09<\/li>\n\n\n\n<li>\u30d3\u30eb\u30c9\u30b9\u30c6\u30fc\u30b8\uff08CodeBuild\uff09<\/li>\n\n\n\n<li>\u30c7\u30d7\u30ed\u30a4\u30b9\u30c6\u30fc\u30b8\uff08S3\u3078\u9759\u7684\u30db\u30b9\u30c6\u30a3\u30f3\u30b0\uff09<\/li>\n<\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">graph LR\n    A[CodeCommit] --&gt; B[CodeBuild]\n    B --&gt; C[S3 Hosting]\n    D[CloudWatch] --&gt; E[Monitoring]<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-99\">2. \u624b\u9806\u8a73\u7d30<\/h4>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-100\">Step 1: \u30b5\u30f3\u30d7\u30eb\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u6e96\u5099<\/h5>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306e\u4f5c\u6210\nmkdir quick-pipeline-demo\ncd quick-pipeline-demo\n\n# package.json\u306e\u4f5c\u6210\ncat &lt;&lt; EOF &gt; package.json\n{\n  \"name\": \"quick-pipeline-demo\",\n  \"version\": \"1.0.0\",\n  \"scripts\": {\n    \"build\": \"echo '&lt;h1&gt;Hello CodePipeline!&lt;\/h1&gt;' &gt; index.html\"\n  }\n}\nEOF\n\n# buildspec.yml\u306e\u4f5c\u6210\ncat &lt;&lt; EOF &gt; buildspec.yml\nversion: 0.2\nphases:\n  build:\n    commands:\n      - npm run build\nartifacts:\n  files:\n    - index.html\nEOF<\/pre>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-101\">Step 2: AWS\u30de\u30cd\u30b8\u30e1\u30f3\u30c8\u30b3\u30f3\u30bd\u30fc\u30eb\u3067\u306e\u8a2d\u5b9a<\/h5>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>CodeCommit\u30ea\u30dd\u30b8\u30c8\u30ea\u306e\u4f5c\u6210<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>AWS\u30b3\u30f3\u30bd\u30fc\u30eb\u3067CodeCommit\u3092\u958b\u304f<\/li>\n\n\n\n<li>[\u30ea\u30dd\u30b8\u30c8\u30ea\u306e\u4f5c\u6210]\u3092\u30af\u30ea\u30c3\u30af<\/li>\n\n\n\n<li>\u540d\u524d\uff1a<code>quick-pipeline-demo<\/code><\/li>\n\n\n\n<li>\u4f5c\u6210\u5f8c\u3001\u30b3\u30fc\u30c9\u3092\u30d7\u30c3\u30b7\u30e5:<\/li>\n<\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   git init\n   git add .\n   git commit -m \"Initial commit\"\n   git remote add origin [\u30ea\u30dd\u30b8\u30c8\u30ea\u306eURL]\n   git push -u origin main<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>S3\u30d0\u30b1\u30c3\u30c8\u306e\u8a2d\u5b9a<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   # \u9759\u7684\u30db\u30b9\u30c6\u30a3\u30f3\u30b0\u7528\u30d0\u30b1\u30c3\u30c8\u306e\u4f5c\u6210\n   aws s3 mb s3:\/\/quick-pipeline-demo-[\u56fa\u6709\u306e\u6587\u5b57\u5217]\n\n   # \u9759\u7684\u30a6\u30a7\u30d6\u30b5\u30a4\u30c8\u30db\u30b9\u30c6\u30a3\u30f3\u30b0\u306e\u6709\u52b9\u5316\n   aws s3 website s3:\/\/quick-pipeline-demo-[\u56fa\u6709\u306e\u6587\u5b57\u5217] \\\n       --index-document index.html<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>CodeBuild\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u4f5c\u6210<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>[\u30d3\u30eb\u30c9\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u4f5c\u6210]\u3092\u30af\u30ea\u30c3\u30af<\/li>\n\n\n\n<li>\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u540d\uff1a<code>quick-pipeline-build<\/code><\/li>\n\n\n\n<li>\u30bd\u30fc\u30b9\uff1aCodeCommit<\/li>\n\n\n\n<li>\u74b0\u5883\uff1aAmazon Linux 2<\/li>\n\n\n\n<li>\u30d3\u30eb\u30c9\u4ed5\u69d8\uff1abuildspec.yml\u3092\u4f7f\u7528<\/li>\n<\/ul>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-102\">Step 3: \u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u306e\u4f5c\u6210<\/h5>\n\n\n\n<ol class=\"wp-block-list\">\n<li>CodePipeline\u30b3\u30f3\u30bd\u30fc\u30eb\u3067[\u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u306e\u4f5c\u6210]\u3092\u30af\u30ea\u30c3\u30af<\/li>\n\n\n\n<li>\u57fa\u672c\u8a2d\u5b9a:<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u540d\uff1a<code>quick-demo-pipeline<\/code><\/li>\n\n\n\n<li>\u65b0\u898f\u30b5\u30fc\u30d3\u30b9\u30ed\u30fc\u30eb\uff1a\u81ea\u52d5\u4f5c\u6210\u3092\u9078\u629e<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u30bd\u30fc\u30b9\u30b9\u30c6\u30fc\u30b8\u306e\u8a2d\u5b9a:<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30bd\u30fc\u30b9\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\uff1aAWS CodeCommit<\/li>\n\n\n\n<li>\u30ea\u30dd\u30b8\u30c8\u30ea\u540d\uff1a<code>quick-pipeline-demo<\/code><\/li>\n\n\n\n<li>\u30d6\u30e9\u30f3\u30c1\u540d\uff1a<code>main<\/code><\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u30d3\u30eb\u30c9\u30b9\u30c6\u30fc\u30b8\u306e\u8a2d\u5b9a:<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30d3\u30eb\u30c9\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\uff1aAWS CodeBuild<\/li>\n\n\n\n<li>\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u540d\uff1a<code>quick-pipeline-build<\/code><\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u30c7\u30d7\u30ed\u30a4\u30b9\u30c6\u30fc\u30b8\u306e\u8a2d\u5b9a:<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30c7\u30d7\u30ed\u30a4\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\uff1aAmazon S3<\/li>\n\n\n\n<li>\u30d0\u30b1\u30c3\u30c8\u540d\uff1a<code>quick-pipeline-demo-[\u56fa\u6709\u306e\u6587\u5b57\u5217]<\/code><\/li>\n\n\n\n<li>[\u62bd\u51fa\u304c\u5fc5\u8981]\u306b\u30c1\u30a7\u30c3\u30af<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-103\">3. \u52d5\u4f5c\u78ba\u8a8d<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u306e\u521d\u56de\u5b9f\u884c<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u4f5c\u6210\u5b8c\u4e86\u5f8c\u3001\u81ea\u52d5\u7684\u306b\u5b9f\u884c\u958b\u59cb<\/li>\n\n\n\n<li>\u5404\u30b9\u30c6\u30fc\u30b8\u306e\u5b9f\u884c\u72b6\u6cc1\u3092\u78ba\u8a8d<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u5909\u66f4\u306e\u30c6\u30b9\u30c8<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   # index.html\u306e\u5185\u5bb9\u3092\u66f4\u65b0\n   echo '&lt;h1&gt;Updated via CodePipeline!&lt;\/h1&gt;' &gt; index.html\n\n   # \u5909\u66f4\u3092\u30d7\u30c3\u30b7\u30e5\n   git add index.html\n   git commit -m \"Update content\"\n   git push<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u7d50\u679c\u306e\u78ba\u8a8d<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>S3\u30d0\u30b1\u30c3\u30c8\u306eURL\u306b\u30a2\u30af\u30bb\u30b9\u3057\u3066\u8868\u793a\u3092\u78ba\u8a8d<\/li>\n\n\n\n<li>CloudWatch\u3067\u30ed\u30b0\u3092\u78ba\u8a8d<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-104\">4. \u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0<\/h4>\n\n\n\n<p>\u3088\u304f\u3042\u308b\u30a8\u30e9\u30fc\u3068\u89e3\u6c7a\u65b9\u6cd5\uff1a<\/p>\n\n\n<div id=\"id-f8c78db0-7082-4419-8f6a-469848be3330\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u30a8\u30e9\u30fc<\/th><th>\u539f\u56e0<\/th><th>\u89e3\u6c7a\u65b9\u6cd5<\/th><\/tr><\/thead><tbody><tr><td>\u30bd\u30fc\u30b9\u30a2\u30af\u30bb\u30b9\u30a8\u30e9\u30fc<\/td><td>IAM\u6a29\u9650\u4e0d\u8db3<\/td><td>CodePipeline\u306e\u30ed\u30fc\u30eb\u306bCodeCommit\u6a29\u9650\u3092\u8ffd\u52a0<\/td><\/tr><tr><td>\u30d3\u30eb\u30c9\u5931\u6557<\/td><td>buildspec.yml\u306e\u554f\u984c<\/td><td>\u30ed\u30b0\u3092\u78ba\u8a8d\u3057\u3001\u30b3\u30de\u30f3\u30c9\u3092\u4fee\u6b63<\/td><\/tr><tr><td>\u30c7\u30d7\u30ed\u30a4\u5931\u6557<\/td><td>S3\u6a29\u9650\u4e0d\u8db3<\/td><td>\u30d0\u30b1\u30c3\u30c8\u30dd\u30ea\u30b7\u30fc\u3068IAM\u6a29\u9650\u3092\u78ba\u8a8d<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<h4 class=\"wp-block-heading\" id=\"i-105\">5. \u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u306e\u30d2\u30f3\u30c8<\/h4>\n\n\n\n<p>\u3053\u306e\u6700\u5c0f\u69cb\u6210\u3092\u30d9\u30fc\u30b9\u306b\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u62e1\u5f35\u304c\u53ef\u80fd\u3067\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30c6\u30b9\u30c8\u306e\u8ffd\u52a0<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Jest\u7b49\u306e\u30c6\u30b9\u30c8\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u5c0e\u5165<\/li>\n\n\n\n<li>\u30c6\u30b9\u30c8\u30b9\u30c6\u30fc\u30b8\u306e\u8ffd\u52a0<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u627f\u8a8d\u30d7\u30ed\u30bb\u30b9\u306e\u8ffd\u52a0<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u624b\u52d5\u627f\u8a8d\u30b9\u30c6\u30fc\u30b8\u306e\u8ffd\u52a0<\/li>\n\n\n\n<li>SNS\u901a\u77e5\u306e\u8a2d\u5b9a<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u5f37\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30a2\u30fc\u30c6\u30a3\u30d5\u30a1\u30af\u30c8\u306e\u6697\u53f7\u5316<\/li>\n\n\n\n<li>VPC\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8\u306e\u4f7f\u7528<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-106\">\u30bd\u30fc\u30b9\u7ba1\u7406\u304b\u3089\u30c7\u30d7\u30ed\u30a4\u307e\u3067\u306e\u8a2d\u5b9a\u30dd\u30a4\u30f3\u30c8<\/h3>\n\n\n\n<p>CodePipeline\u306e\u5404\u30b9\u30c6\u30fc\u30b8\u306b\u304a\u3051\u308b\u91cd\u8981\u306a\u8a2d\u5b9a\u30dd\u30a4\u30f3\u30c8\u3068\u3001\u5b9f\u8df5\u7684\u306a\u30ce\u30a6\u30cf\u30a6\u3092\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-107\">1. \u30bd\u30fc\u30b9\u30b9\u30c6\u30fc\u30b8\u306e\u8a2d\u5b9a\u30dd\u30a4\u30f3\u30c8<\/h4>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-108\">\u30b3\u30fc\u30c9\u30ea\u30dd\u30b8\u30c8\u30ea\u306e\u8a2d\u5b9a<\/h5>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># CodeCommit\u306e\u5834\u5408\u306eCloudFormation\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u4f8b\nResources:\n  SourceRepository:\n    Type: AWS::CodeCommit::Repository\n    Properties:\n      RepositoryName: !Sub ${ProjectName}-repo\n      RepositoryDescription: Source code repository\n      Tags:\n        - Key: Project\n          Value: !Ref ProjectName\n      Triggers:\n        - Name: PipelineTrigger\n          Events: \n            - all\n          DestinationArn: !Ref NotificationTopic<\/pre>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-109\">\u30d6\u30e9\u30f3\u30c1\u6226\u7565\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/h5>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u958b\u767a\u30d5\u30ed\u30fc\u5225\u306e\u63a8\u5968\u8a2d\u5b9a<\/strong> \u958b\u767a\u30d5\u30ed\u30fc \u30d6\u30e9\u30f3\u30c1\u69cb\u6210 \u30c8\u30ea\u30ac\u30fc\u8a2d\u5b9a \u30d5\u30a3\u30fc\u30c1\u30e3\u30fc\u30d6\u30e9\u30f3\u30c1 feature\/* \u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8\u6642 GitFlow develop, main \u30d7\u30c3\u30b7\u30e5\u6642 \u30c8\u30e9\u30f3\u30af\u30d9\u30fc\u30b9 main \u5373\u6642\u30c8\u30ea\u30ac\u30fc<\/li>\n\n\n\n<li><strong>\u30bd\u30fc\u30b9\u30a2\u30af\u30b7\u30e7\u30f3\u8a2d\u5b9a\u306e\u30dd\u30a4\u30f3\u30c8<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   {\n     \"actions\": [\n       {\n         \"name\": \"Source\",\n         \"configuration\": {\n           \"PollForSourceChanges\": \"false\",\n           \"DetectChanges\": \"true\",\n           \"BranchName\": \"main\",\n           \"OutputArtifactFormat\": \"CODE_ZIP\"\n         }\n       }\n     ]\n   }<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-110\">2. \u30d3\u30eb\u30c9\u30b9\u30c6\u30fc\u30b8\u306e\u6700\u9069\u5316<\/h4>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-111\">\u30d3\u30eb\u30c9\u74b0\u5883\u306e\u8a2d\u5b9a<\/h5>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># buildspec.yml\u306e\u6700\u9069\u5316\u4f8b\nversion: 0.2\nenv:\n  variables:\n    NODE_ENV: \"production\"\n  parameter-store:\n    DEPLOY_KEY: \"\/myapp\/deploy\/key\"\nphases:\n  install:\n    runtime-versions:\n      nodejs: 16\n    commands:\n      - npm ci --production\n  pre_build:\n    commands:\n      - npm run lint\n      - npm run test\n  build:\n    commands:\n      - npm run build\n  post_build:\n    commands:\n      - aws s3 sync dist\/ s3:\/\/${DEPLOY_BUCKET}\/\ncache:\n  paths:\n    - 'node_modules\/**\/*'\n    - '.npm\/**\/*'<\/pre>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-112\">\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316\u306e\u30dd\u30a4\u30f3\u30c8<\/h5>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30ad\u30e3\u30c3\u30b7\u30e5\u6226\u7565<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30ed\u30fc\u30ab\u30eb\u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u6d3b\u7528<\/li>\n\n\n\n<li>S3\u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u8a2d\u5b9a<\/li>\n\n\n\n<li>\u30ab\u30b9\u30bf\u30e0\u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u5b9f\u88c5<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u4e26\u5217\u30d3\u30eb\u30c9\u306e\u8a2d\u5b9a<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   {\n     \"actions\": [\n       {\n         \"name\": \"BuildFrontend\",\n         \"runOrder\": 1\n       },\n       {\n         \"name\": \"BuildBackend\",\n         \"runOrder\": 1\n       }\n     ]\n   }<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-113\">3. \u30c7\u30d7\u30ed\u30a4\u30b9\u30c6\u30fc\u30b8\u306e\u69cb\u6210<\/h4>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-114\">\u30c7\u30d7\u30ed\u30a4\u6226\u7565\u306e\u5b9f\u88c5<\/h5>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30d6\u30eb\u30fc\/\u30b0\u30ea\u30fc\u30f3\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># CodeDeploy\u306e\u8a2d\u5b9a\u4f8b\nResources:\n  DeploymentGroup:\n    Type: AWS::CodeDeploy::DeploymentGroup\n    Properties:\n      DeploymentStyle:\n        DeploymentOption: WITH_TRAFFIC_CONTROL\n        DeploymentType: BLUE_GREEN\n      BlueGreenDeploymentConfiguration:\n        DeploymentReadyOption:\n          ActionOnTimeout: CONTINUE_DEPLOYMENT\n          WaitTimeInMinutes: 5\n        TerminateBlueInstancesOnDeploymentSuccess:\n          Action: TERMINATE\n          TerminationWaitTimeInMinutes: 5<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30ab\u30ca\u30ea\u30a2\u30c7\u30d7\u30ed\u30a4\u8a2d\u5b9a<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">{\n  \"deploymentSettings\": {\n    \"type\": \"LINEAR\",\n    \"linearPercentage\": 10,\n    \"intervalMinutes\": 15\n  }\n}<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-115\">4. \u7d71\u5408\u30dd\u30a4\u30f3\u30c8\u306e\u30c1\u30a7\u30c3\u30af\u30ea\u30b9\u30c8<\/h4>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-116\">\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u8a2d\u5b9a<\/h5>\n\n\n\n<ul class=\"wp-block-list\">\n<li>[ ] \u30af\u30ed\u30b9\u30a2\u30ab\u30a6\u30f3\u30c8\u30ed\u30fc\u30eb\u306e\u6700\u5c0f\u6a29\u9650\u8a2d\u5b9a<\/li>\n\n\n\n<li>[ ] \u30a2\u30fc\u30c6\u30a3\u30d5\u30a1\u30af\u30c8\u306e\u6697\u53f7\u5316<\/li>\n\n\n\n<li>[ ] VPC\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8\u306e\u4f7f\u7528<\/li>\n\n\n\n<li>[ ] \u30b7\u30fc\u30af\u30ec\u30c3\u30c8\u7ba1\u7406\u306e\u9069\u5207\u306a\u5b9f\u88c5<\/li>\n<\/ul>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-117\">\u76e3\u8996\u8a2d\u5b9a<\/h5>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># CloudWatch\u30a2\u30e9\u30fc\u30e0\u8a2d\u5b9a\u4f8b\nResources:\n  PipelineFailureAlarm:\n    Type: AWS::CloudWatch::Alarm\n    Properties:\n      AlarmName: !Sub ${ProjectName}-pipeline-failure\n      MetricName: FailedPipeline\n      Namespace: AWS\/CodePipeline\n      Statistic: Sum\n      Period: 300\n      EvaluationPeriods: 1\n      Threshold: 1\n      AlarmActions:\n        - !Ref NotificationTopic<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-118\">5. \u9ad8\u5ea6\u306a\u8a2d\u5b9a\u30aa\u30d7\u30b7\u30e7\u30f3<\/h4>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-119\">\u6761\u4ef6\u4ed8\u304d\u30c7\u30d7\u30ed\u30a4\u306e\u5b9f\u88c5<\/h5>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">{\n  \"actions\": [\n    {\n      \"name\": \"Deploy\",\n      \"configuration\": {\n        \"CustomData\": \"#{BuildVariables.DEPLOY_FLAG}\",\n        \"SkipFlag\": \"#{BuildVariables.SKIP_DEPLOY}\"\n      }\n    }\n  ]\n}<\/pre>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-120\">\u627f\u8a8d\u30d5\u30ed\u30fc\u306e\u7d44\u307f\u8fbc\u307f<\/h5>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u627f\u8a8d\u30b9\u30c6\u30fc\u30b8\u306e\u8a2d\u5b9a\u4f8b\n- name: Approve\n  actions:\n    - name: ManualApproval\n      actionTypeId:\n        category: Approval\n        owner: AWS\n        version: '1'\n        provider: Manual\n      configuration:\n        CustomData: Please review the changes\n        ExternalEntityLink: #{BuildVariables.CHANGE_URL}\n      runOrder: 1<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-121\">6. \u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30c7\u30d0\u30c3\u30b0\u624b\u6cd5<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>CloudWatch\u30ed\u30b0\u306e\u7d71\u5408<\/li>\n\n\n\n<li>\u30a8\u30e9\u30fc\u30d1\u30bf\u30fc\u30f3\u306e\u5206\u6790<\/li>\n\n\n\n<li>\u30ed\u30fc\u30eb\u30d0\u30c3\u30af\u30d7\u30ed\u30bb\u30b9\u306e\u78ba\u7acb<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u3088\u304f\u3042\u308b\u30a8\u30e9\u30fc\u3068\u5bfe\u7b56<\/strong> \u30a8\u30e9\u30fc\u7a2e\u5225 \u8003\u3048\u3089\u308c\u308b\u539f\u56e0 \u5bfe\u7b56 \u30a2\u30fc\u30c6\u30a3\u30d5\u30a1\u30af\u30c8\u5931\u6557 S3\u30d0\u30b1\u30c3\u30c8\u6a29\u9650 \u30d0\u30b1\u30c3\u30c8\u30dd\u30ea\u30b7\u30fc\u306e\u898b\u76f4\u3057 \u30d3\u30eb\u30c9\u5931\u6557 \u4f9d\u5b58\u95a2\u4fc2\u30a8\u30e9\u30fc \u30ad\u30e3\u30c3\u30b7\u30e5\u30af\u30ea\u30a2\u3001\u4f9d\u5b58\u95a2\u4fc2\u66f4\u65b0 \u30c7\u30d7\u30ed\u30a4\u5931\u6557 IAM\u30ed\u30fc\u30eb\u6a29\u9650 \u5fc5\u8981\u306a\u6a29\u9650\u306e\u8ffd\u52a0<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-122\">IAM\u30ed\u30fc\u30eb\u3068\u6a29\u9650\u8a2d\u5b9a\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/h3>\n\n\n\n<p>CodePipeline\u306e\u5b89\u5168\u306a\u904b\u7528\u306b\u306f\u3001\u9069\u5207\u306aIAM\u6a29\u9650\u306e\u8a2d\u5b9a\u304c\u4e0d\u53ef\u6b20\u3067\u3059\u3002\u3053\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u306b\u57fa\u3065\u3044\u305f\u6a29\u9650\u8a2d\u5b9a\u306b\u3064\u3044\u3066\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-123\">1. \u57fa\u672c\u7684\u306aIAM\u30ed\u30fc\u30eb\u69cb\u6210<\/h4>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-124\">\u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u5b9f\u884c\u30ed\u30fc\u30eb<\/h5>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">{\n    \"Version\": \"2012-10-17\",\n    \"Statement\": [\n        {\n            \"Effect\": \"Allow\",\n            \"Action\": [\n                \"codecommit:CancelUploadArchive\",\n                \"codecommit:GetBranch\",\n                \"codecommit:GetCommit\",\n                \"codecommit:GetUploadArchiveStatus\",\n                \"codecommit:UploadArchive\"\n            ],\n            \"Resource\": \"arn:aws:codecommit:${AWS::Region}:${AWS::AccountId}:${RepositoryName}\"\n        },\n        {\n            \"Effect\": \"Allow\",\n            \"Action\": [\n                \"s3:GetObject*\",\n                \"s3:PutObject*\",\n                \"s3:GetBucket*\"\n            ],\n            \"Resource\": [\n                \"arn:aws:s3:::${ArtifactBucket}\",\n                \"arn:aws:s3:::${ArtifactBucket}\/*\"\n            ]\n        }\n    ]\n}<\/pre>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-125\">\u30b9\u30c6\u30fc\u30b8\u5225\u306e\u6700\u5c0f\u6a29\u9650\u8a2d\u5b9a<\/h5>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30bd\u30fc\u30b9\u30b9\u30c6\u30fc\u30b8\u7528\u30dd\u30ea\u30b7\u30fc<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">{\n    \"Version\": \"2012-10-17\",\n    \"Statement\": [\n        {\n            \"Sid\": \"SourceStageAccess\",\n            \"Effect\": \"Allow\",\n            \"Action\": [\n                \"codecommit:GetBranch\",\n                \"codecommit:GetCommit\",\n                \"codecommit:GetRepository\",\n                \"codecommit:ListBranches\"\n            ],\n            \"Resource\": \"arn:aws:codecommit:${Region}:${AccountId}:${RepoName}\"\n        }\n    ]\n}<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30d3\u30eb\u30c9\u30b9\u30c6\u30fc\u30b8\u7528\u30dd\u30ea\u30b7\u30fc<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">{\n    \"Version\": \"2012-10-17\",\n    \"Statement\": [\n        {\n            \"Sid\": \"CodeBuildAccess\",\n            \"Effect\": \"Allow\",\n            \"Action\": [\n                \"codebuild:BatchGetBuilds\",\n                \"codebuild:StartBuild\",\n                \"codebuild:StopBuild\"\n            ],\n            \"Resource\": \"arn:aws:codebuild:${Region}:${AccountId}:project\/${ProjectName}\"\n        },\n        {\n            \"Sid\": \"CloudWatchLogsAccess\",\n            \"Effect\": \"Allow\",\n            \"Action\": [\n                \"logs:CreateLogGroup\",\n                \"logs:CreateLogStream\",\n                \"logs:PutLogEvents\"\n            ],\n            \"Resource\": \"arn:aws:logs:${Region}:${AccountId}:log-group:\/aws\/codebuild\/${ProjectName}:*\"\n        }\n    ]\n}<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-126\">2. \u30af\u30ed\u30b9\u30a2\u30ab\u30a6\u30f3\u30c8\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u306e\u8a2d\u5b9a<\/h4>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-127\">\u672c\u756a\u74b0\u5883\u7528\u306e\u30ed\u30fc\u30eb\u8a2d\u5b9a<\/h5>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># CloudFormation\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u4f8b\nResources:\n  CrossAccountRole:\n    Type: AWS::IAM::Role\n    Properties:\n      AssumeRolePolicyDocument:\n        Version: \"2012-10-17\"\n        Statement:\n          - Effect: Allow\n            Principal:\n              AWS: !Sub arn:aws:iam::${DevAccountId}:root\n            Action: sts:AssumeRole\n            Condition:\n              StringEquals:\n                \"aws:PrincipalOrgID\": \"${OrganizationId}\"<\/pre>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-128\">\u6a29\u9650\u306e\u59d4\u8b72\u8a2d\u5b9a<\/h5>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">{\n    \"Version\": \"2012-10-17\",\n    \"Statement\": [\n        {\n            \"Effect\": \"Allow\",\n            \"Action\": \"sts:AssumeRole\",\n            \"Resource\": \"arn:aws:iam::${ProdAccountId}:role\/${CrossAccountRole}\"\n        }\n    ]\n}<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-129\">3. \u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u5f37\u5316\u306e\u305f\u3081\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30d1\u30fc\u30df\u30c3\u30b7\u30e7\u30f3\u5883\u754c\u306e\u8a2d\u5b9a<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">{\n    \"Version\": \"2012-10-17\",\n    \"Statement\": [\n        {\n            \"Effect\": \"Allow\",\n            \"Action\": [\n                \"s3:*\",\n                \"codecommit:*\",\n                \"codebuild:*\"\n            ],\n            \"Resource\": \"*\",\n            \"Condition\": {\n                \"StringEquals\": {\n                    \"aws:RequestedRegion\": [\"ap-northeast-1\"]\n                }\n            }\n        }\n    ]\n}<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u76e3\u67fb\u8a2d\u5b9a<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># CloudWatch\u30a4\u30d9\u30f3\u30c8\u30eb\u30fc\u30eb\u8a2d\u5b9a\nResources:\n  SecurityAuditRule:\n    Type: AWS::Events::Rule\n    Properties:\n      Description: \"Monitor IAM policy changes in CodePipeline roles\"\n      EventPattern:\n        source:\n          - \"aws.iam\"\n        detail-type:\n          - \"AWS API Call via CloudTrail\"\n        detail:\n          eventSource:\n            - \"iam.amazonaws.com\"\n          eventName:\n            - \"PutRolePolicy\"\n            - \"DeleteRolePolicy\"\n            - \"UpdateAssumeRolePolicy\"\n          requestParameters:\n            roleName:\n              - prefix: \"CodePipeline-\"<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-130\">4. \u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u30ac\u30a4\u30c9<\/h4>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-131\">\u3088\u304f\u3042\u308b\u6a29\u9650\u30a8\u30e9\u30fc\u3068\u89e3\u6c7a\u65b9\u6cd5<\/h5>\n\n\n<div id=\"id-312d3292-76aa-419d-8891-736d00f55a83\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u30a8\u30e9\u30fc<\/th><th>\u539f\u56e0<\/th><th>\u89e3\u6c7a\u7b56<\/th><\/tr><\/thead><tbody><tr><td>AccessDenied<\/td><td>\u30ed\u30fc\u30eb\u306e\u6a29\u9650\u4e0d\u8db3<\/td><td>\u5fc5\u8981\u306a\u6a29\u9650\u306e\u8ffd\u52a0\u3068\u30ea\u30bd\u30fc\u30b9ARN\u306e\u78ba\u8a8d<\/td><\/tr><tr><td>AssumeRoleFailed<\/td><td>\u4fe1\u983c\u95a2\u4fc2\u306e\u554f\u984c<\/td><td>\u4fe1\u983c\u30dd\u30ea\u30b7\u30fc\u306e\u78ba\u8a8d\u3068\u66f4\u65b0<\/td><\/tr><tr><td>ResourceNotFound<\/td><td>\u30ea\u30bd\u30fc\u30b9ARN\u306e\u8aa4\u308a<\/td><td>ARN\u306e\u6b63\u78ba\u6027\u78ba\u8a8d\u3068\u30ea\u30fc\u30b8\u30e7\u30f3\u306e\u78ba\u8a8d<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<h5 class=\"wp-block-heading\" id=\"i-132\">\u30c7\u30d0\u30c3\u30b0\u7528\u306e\u4e00\u6642\u7684\u306a\u6a29\u9650\u8a2d\u5b9a<\/h5>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">{\n    \"Version\": \"2012-10-17\",\n    \"Statement\": [\n        {\n            \"Effect\": \"Allow\",\n            \"Action\": [\n                \"iam:GetRolePolicy\",\n                \"iam:ListRolePolicies\",\n                \"iam:ListAttachedRolePolicies\"\n            ],\n            \"Resource\": \"arn:aws:iam::${AccountId}:role\/CodePipeline-*\",\n            \"Condition\": {\n                \"DateLessThan\": {\n                    \"aws:CurrentTime\": \"${ExpirationDate}\"\n                }\n            }\n        }\n    ]\n}<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-133\">5. \u6a29\u9650\u7ba1\u7406\u306e\u81ea\u52d5\u5316<\/h4>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-134\">\u30a4\u30f3\u30d5\u30e9\u30b9\u30c8\u30e9\u30af\u30c1\u30e3\u30a2\u30ba\u30b3\u30fc\u30c9\u3067\u306e\u7ba1\u7406<\/h5>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># AWS CDK\u4f8b\nimport * as cdk from 'aws-cdk-lib';\nimport * as iam from 'aws-cdk-lib\/aws-iam';\n\nexport class PipelineStack extends cdk.Stack {\n  constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {\n    super(scope, id, props);\n\n    const pipeline = new codepipeline.Pipeline(this, 'Pipeline', {\n      pipelineName: 'MyPipeline',\n      crossAccountKeys: true,\n    });\n\n    const pipelineRole = new iam.Role(this, 'PipelineRole', {\n      assumedBy: new iam.ServicePrincipal('codepipeline.amazonaws.com'),\n      description: 'Pipeline execution role',\n    });\n\n    pipelineRole.addToPolicy(new iam.PolicyStatement({\n      effect: iam.Effect.ALLOW,\n      actions: [\n        's3:GetObject',\n        's3:PutObject'\n      ],\n      resources: [\n        `${artifactBucket.bucketArn}\/*`\n      ],\n    }));\n  }\n}<\/pre>\n\n\n\n<p>\u3053\u308c\u3067CodePipeline\u306e\u57fa\u672c\u7684\u306a\u74b0\u5883\u69cb\u7bc9\u306b\u95a2\u3059\u308b\u30bb\u30af\u30b7\u30e7\u30f3\u304c\u5b8c\u4e86\u3057\u307e\u3057\u305f\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u5b9f\u8df5\u7684\u306a7\u3064\u306eCodePipeline\u6d3b\u7528\u4e8b\u4f8b\u306b\u3064\u3044\u3066\u89e3\u8aac\u3057\u3066\u3044\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-135\">\u5b9f\u8df5\u7684\u306a7\u3064\u306eCodePipeline\u6559\u8a13<\/h2>\n\n\n\n<p>AWS CodePipeline\u3092\u5b9f\u969b\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u6d3b\u7528\u3059\u308b\u969b\u306e\u5177\u4f53\u7684\u306a\u5b9f\u88c5\u4f8b\u3068\u3001\u73fe\u5834\u304b\u3089\u5f97\u3089\u308c\u305f\u91cd\u8981\u306a\u6559\u8a13\u3092\u7d39\u4ecb\u3057\u307e\u3059\u3002\u5404\u30b1\u30fc\u30b9\u306b\u3064\u3044\u3066\u3001\u5b9f\u88c5\u65b9\u6cd5\u3001\u6ce8\u610f\u70b9\u3001\u305d\u3057\u3066\u5b9f\u8df5\u7684\u306a\u30a2\u30c9\u30d0\u30a4\u30b9\u3092\u89e3\u8aac\u3057\u3066\u3044\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-136\">\u5171\u901a\u306e\u69cb\u6210\u8981\u7d20<\/h3>\n\n\n\n<p>\u5404\u5b9f\u88c5\u4f8b\u3067\u4f7f\u7528\u3059\u308b\u5171\u901a\u306e\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u306b\u3064\u3044\u3066\u8aac\u660e\u3057\u307e\u3059\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u5171\u901a\u306eCloudFormation\u30d1\u30e9\u30e1\u30fc\u30bf\nParameters:\n  ProjectName:\n    Type: String\n    Description: Name of the project\n  Environment:\n    Type: String\n    AllowedValues: [dev, staging, prod]\n    Description: Deployment environment\n\n# \u5171\u901a\u306e\u30bf\u30b0\u8a2d\u5b9a\nMappings:\n  EnvironmentMap:\n    dev:\n      INSTANCE_TYPE: t3.micro\n    staging:\n      INSTANCE_TYPE: t3.small\n    prod:\n      INSTANCE_TYPE: t3.medium\n\n# \u5171\u901a\u306eIAM\u6a29\u9650\u8a2d\u5b9a\nResources:\n  PipelineExecutionRole:\n    Type: AWS::IAM::Role\n    Properties:\n      AssumeRolePolicyDocument:\n        Version: '2012-10-17'\n        Statement:\n          - Effect: Allow\n            Principal:\n              Service: codepipeline.amazonaws.com\n            Action: sts:AssumeRole\n      ManagedPolicyArns:\n        - arn:aws:iam::aws:policy\/service-role\/AWSCodePipelineServiceRole<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-137\">1. Web\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u81ea\u52d5\u30c7\u30d7\u30ed\u30a4\u69cb\u6210<\/h3>\n\n\n\n<p>\u6700\u3082\u4e00\u822c\u7684\u306a\u30e6\u30fc\u30b9\u30b1\u30fc\u30b9\u3067\u3042\u308bWeb\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30c7\u30d7\u30ed\u30a4\u81ea\u52d5\u5316\u306b\u3064\u3044\u3066\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-138\">\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u6982\u8981<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">graph LR\n    A[GitHub\/CodeCommit] --&gt; B[CodeBuild]\n    B --&gt; C[CodeDeploy]\n    C --&gt; D[EC2\/ECS]\n    E[CloudWatch] --&gt; F[Monitoring]<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-139\">\u5b9f\u88c5\u4f8b<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># buildspec.yml\nversion: 0.2\nphases:\n  install:\n    runtime-versions:\n      nodejs: 16\n  pre_build:\n    commands:\n      - npm ci\n      - npm run test\n  build:\n    commands:\n      - npm run build\n      - aws s3 cp dist s3:\/\/${DEPLOY_BUCKET}\/ --recursive\n  post_build:\n    commands:\n      - aws cloudfront create-invalidation --distribution-id ${CF_DIST_ID} --paths \"\/*\"\n\n# appspec.yml\nversion: 0.0\nos: linux\nfiles:\n  - source: \/\n    destination: \/var\/www\/html\/\nhooks:\n  BeforeInstall:\n    - location: scripts\/before_install.sh\n      timeout: 300\n      runas: root\n  AfterInstall:\n    - location: scripts\/after_install.sh\n      timeout: 300\n      runas: root<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-140\">\u6559\u8a13\u30dd\u30a4\u30f3\u30c8<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30c7\u30d7\u30ed\u30a4\u524d\u306e\u81ea\u52d5\u30c6\u30b9\u30c8<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30e6\u30cb\u30c3\u30c8\u30c6\u30b9\u30c8\u306e\u5fc5\u9808\u5316<\/li>\n\n\n\n<li>E2E\u30c6\u30b9\u30c8\u306e\u6bb5\u968e\u7684\u5c0e\u5165<\/li>\n\n\n\n<li>\u30c6\u30b9\u30c8\u30ab\u30d0\u30ec\u30c3\u30b8\u306e\u76e3\u8996<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30ed\u30fc\u30eb\u30d0\u30c3\u30af\u6226\u7565<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u81ea\u52d5\u30ed\u30fc\u30eb\u30d0\u30c3\u30af\u306e\u6761\u4ef6\u8a2d\u5b9a<\/li>\n\n\n\n<li>\u30d0\u30fc\u30b8\u30e7\u30f3\u7ba1\u7406\u306e\u5fb9\u5e95<\/li>\n\n\n\n<li>\u969c\u5bb3\u691c\u77e5\u306e\u4ed5\u7d44\u307f<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u76e3\u8996\u3068\u30a2\u30e9\u30fc\u30c8<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   {\n     \"alarms\": [\n       {\n         \"name\": \"HighErrorRate\",\n         \"metric\": \"Errors\",\n         \"threshold\": 5,\n         \"evaluationPeriods\": 2,\n         \"period\": 300\n       }\n     ]\n   }<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-141\">2. \u30de\u30a4\u30af\u30ed\u30b5\u30fc\u30d3\u30b9\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u3067\u306e\u6d3b\u7528\u6cd5<\/h3>\n\n\n\n<p>\u30de\u30a4\u30af\u30ed\u30b5\u30fc\u30d3\u30b9\u306e\u52b9\u7387\u7684\u306a\u30c7\u30d7\u30ed\u30a4\u3068\u7ba1\u7406\u65b9\u6cd5\u306b\u3064\u3044\u3066\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-142\">\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u69cb\u6210<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u30de\u30a4\u30af\u30ed\u30b5\u30fc\u30d3\u30b9\u7528\u306eECS\u30bf\u30b9\u30af\u5b9a\u7fa9\nResources:\n  TaskDefinition:\n    Type: AWS::ECS::TaskDefinition\n    Properties:\n      Family: !Sub ${ProjectName}-service\n      ContainerDefinitions:\n        - Name: !Sub ${ProjectName}-container\n          Image: !Sub ${AWS::AccountId}.dkr.ecr.${AWS::Region}.amazonaws.com\/${ProjectName}:latest\n          Memory: 512\n          PortMappings:\n            - ContainerPort: 8080\n          LogConfiguration:\n            LogDriver: awslogs\n            Options:\n              awslogs-group: !Ref LogGroup\n              awslogs-region: !Ref AWS::Region\n              awslogs-stream-prefix: ecs<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-143\">\u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u8a2d\u5b9a<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">{\n  \"pipeline\": {\n    \"stages\": [\n      {\n        \"name\": \"Source\",\n        \"actions\": [\n          {\n            \"name\": \"Source\",\n            \"actionTypeId\": {\n              \"category\": \"Source\",\n              \"owner\": \"AWS\",\n              \"provider\": \"CodeCommit\",\n              \"version\": \"1\"\n            }\n          }\n        ]\n      },\n      {\n        \"name\": \"Build\",\n        \"actions\": [\n          {\n            \"name\": \"BuildAndTest\",\n            \"actionTypeId\": {\n              \"category\": \"Build\",\n              \"owner\": \"AWS\",\n              \"provider\": \"CodeBuild\",\n              \"version\": \"1\"\n            }\n          }\n        ]\n      },\n      {\n        \"name\": \"Deploy\",\n        \"actions\": [\n          {\n            \"name\": \"DeployToECS\",\n            \"actionTypeId\": {\n              \"category\": \"Deploy\",\n              \"owner\": \"AWS\",\n              \"provider\": \"ECS\",\n              \"version\": \"1\"\n            }\n          }\n        ]\n      }\n    ]\n  }\n}<\/pre>\n\n\n\n<p>\uff08\u4ee5\u964d\u3001\u5404\u30e6\u30fc\u30b9\u30b1\u30fc\u30b9\u306e\u8a73\u7d30\u306a\u5b9f\u88c5\u4f8b\u3068\u6559\u8a13\u304c\u7d9a\u304d\u307e\u3059\u3002\u7d9a\u3051\u3066\u3088\u308d\u3057\u3044\u3067\u3057\u3087\u3046\u304b\uff1f\uff09<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-144\">\u5b9f\u8df5\u7684\u306a7\u3064\u306eCodePipeline\u6559\u8a13<\/h2>\n\n\n\n<p>AWS CodePipeline\u3092\u5b9f\u969b\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u6d3b\u7528\u3059\u308b\u969b\u306e\u5177\u4f53\u7684\u306a\u5b9f\u88c5\u4f8b\u3068\u3001\u73fe\u5834\u304b\u3089\u5f97\u3089\u308c\u305f\u91cd\u8981\u306a\u6559\u8a13\u3092\u7d39\u4ecb\u3057\u307e\u3059\u3002\u5404\u30b1\u30fc\u30b9\u306b\u3064\u3044\u3066\u3001\u5b9f\u88c5\u65b9\u6cd5\u3001\u6ce8\u610f\u70b9\u3001\u305d\u3057\u3066\u5b9f\u8df5\u7684\u306a\u30a2\u30c9\u30d0\u30a4\u30b9\u3092\u89e3\u8aac\u3057\u3066\u3044\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-145\">\u5171\u901a\u306e\u69cb\u6210\u8981\u7d20<\/h3>\n\n\n\n<p>\u5404\u5b9f\u88c5\u4f8b\u3067\u4f7f\u7528\u3059\u308b\u5171\u901a\u306e\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u306b\u3064\u3044\u3066\u8aac\u660e\u3057\u307e\u3059\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u5171\u901a\u306eCloudFormation\u30d1\u30e9\u30e1\u30fc\u30bf\nParameters:\n  ProjectName:\n    Type: String\n    Description: Name of the project\n  Environment:\n    Type: String\n    AllowedValues: [dev, staging, prod]\n    Description: Deployment environment\n\n# \u5171\u901a\u306e\u30bf\u30b0\u8a2d\u5b9a\nMappings:\n  EnvironmentMap:\n    dev:\n      INSTANCE_TYPE: t3.micro\n    staging:\n      INSTANCE_TYPE: t3.small\n    prod:\n      INSTANCE_TYPE: t3.medium\n\n# \u5171\u901a\u306eIAM\u6a29\u9650\u8a2d\u5b9a\nResources:\n  PipelineExecutionRole:\n    Type: AWS::IAM::Role\n    Properties:\n      AssumeRolePolicyDocument:\n        Version: '2012-10-17'\n        Statement:\n          - Effect: Allow\n            Principal:\n              Service: codepipeline.amazonaws.com\n            Action: sts:AssumeRole\n      ManagedPolicyArns:\n        - arn:aws:iam::aws:policy\/service-role\/AWSCodePipelineServiceRole<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-146\">1. Web\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u81ea\u52d5\u30c7\u30d7\u30ed\u30a4\u69cb\u6210<\/h3>\n\n\n\n<p>\u6700\u3082\u4e00\u822c\u7684\u306a\u30e6\u30fc\u30b9\u30b1\u30fc\u30b9\u3067\u3042\u308bWeb\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30c7\u30d7\u30ed\u30a4\u81ea\u52d5\u5316\u306b\u3064\u3044\u3066\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-147\">\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u6982\u8981<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">graph LR\n    A[GitHub\/CodeCommit] --&gt; B[CodeBuild]\n    B --&gt; C[CodeDeploy]\n    C --&gt; D[EC2\/ECS]\n    E[CloudWatch] --&gt; F[Monitoring]<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-148\">\u5b9f\u88c5\u4f8b<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># buildspec.yml\nversion: 0.2\nphases:\n  install:\n    runtime-versions:\n      nodejs: 16\n  pre_build:\n    commands:\n      - npm ci\n      - npm run test\n  build:\n    commands:\n      - npm run build\n      - aws s3 cp dist s3:\/\/${DEPLOY_BUCKET}\/ --recursive\n  post_build:\n    commands:\n      - aws cloudfront create-invalidation --distribution-id ${CF_DIST_ID} --paths \"\/*\"\n\n# appspec.yml\nversion: 0.0\nos: linux\nfiles:\n  - source: \/\n    destination: \/var\/www\/html\/\nhooks:\n  BeforeInstall:\n    - location: scripts\/before_install.sh\n      timeout: 300\n      runas: root\n  AfterInstall:\n    - location: scripts\/after_install.sh\n      timeout: 300\n      runas: root<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-149\">\u6559\u8a13\u30dd\u30a4\u30f3\u30c8<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30c7\u30d7\u30ed\u30a4\u524d\u306e\u81ea\u52d5\u30c6\u30b9\u30c8<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30e6\u30cb\u30c3\u30c8\u30c6\u30b9\u30c8\u306e\u5fc5\u9808\u5316<\/li>\n\n\n\n<li>E2E\u30c6\u30b9\u30c8\u306e\u6bb5\u968e\u7684\u5c0e\u5165<\/li>\n\n\n\n<li>\u30c6\u30b9\u30c8\u30ab\u30d0\u30ec\u30c3\u30b8\u306e\u76e3\u8996<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30ed\u30fc\u30eb\u30d0\u30c3\u30af\u6226\u7565<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u81ea\u52d5\u30ed\u30fc\u30eb\u30d0\u30c3\u30af\u306e\u6761\u4ef6\u8a2d\u5b9a<\/li>\n\n\n\n<li>\u30d0\u30fc\u30b8\u30e7\u30f3\u7ba1\u7406\u306e\u5fb9\u5e95<\/li>\n\n\n\n<li>\u969c\u5bb3\u691c\u77e5\u306e\u4ed5\u7d44\u307f<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u76e3\u8996\u3068\u30a2\u30e9\u30fc\u30c8<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   {\n     \"alarms\": [\n       {\n         \"name\": \"HighErrorRate\",\n         \"metric\": \"Errors\",\n         \"threshold\": 5,\n         \"evaluationPeriods\": 2,\n         \"period\": 300\n       }\n     ]\n   }<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-150\">2. \u30de\u30a4\u30af\u30ed\u30b5\u30fc\u30d3\u30b9\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u3067\u306e\u6d3b\u7528\u6cd5<\/h3>\n\n\n\n<p>\u30de\u30a4\u30af\u30ed\u30b5\u30fc\u30d3\u30b9\u306e\u52b9\u7387\u7684\u306a\u30c7\u30d7\u30ed\u30a4\u3068\u7ba1\u7406\u65b9\u6cd5\u306b\u3064\u3044\u3066\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-151\">\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u69cb\u6210<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u30de\u30a4\u30af\u30ed\u30b5\u30fc\u30d3\u30b9\u7528\u306eECS\u30bf\u30b9\u30af\u5b9a\u7fa9\nResources:\n  TaskDefinition:\n    Type: AWS::ECS::TaskDefinition\n    Properties:\n      Family: !Sub ${ProjectName}-service\n      ContainerDefinitions:\n        - Name: !Sub ${ProjectName}-container\n          Image: !Sub ${AWS::AccountId}.dkr.ecr.${AWS::Region}.amazonaws.com\/${ProjectName}:latest\n          Memory: 512\n          PortMappings:\n            - ContainerPort: 8080\n          LogConfiguration:\n            LogDriver: awslogs\n            Options:\n              awslogs-group: !Ref LogGroup\n              awslogs-region: !Ref AWS::Region\n              awslogs-stream-prefix: ecs<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-152\">\u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u8a2d\u5b9a<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">{\n  \"pipeline\": {\n    \"stages\": [\n      {\n        \"name\": \"Source\",\n        \"actions\": [\n          {\n            \"name\": \"Source\",\n            \"actionTypeId\": {\n              \"category\": \"Source\",\n              \"owner\": \"AWS\",\n              \"provider\": \"CodeCommit\",\n              \"version\": \"1\"\n            }\n          }\n        ]\n      },\n      {\n        \"name\": \"Build\",\n        \"actions\": [\n          {\n            \"name\": \"BuildAndTest\",\n            \"actionTypeId\": {\n              \"category\": \"Build\",\n              \"owner\": \"AWS\",\n              \"provider\": \"CodeBuild\",\n              \"version\": \"1\"\n            }\n          }\n        ]\n      },\n      {\n        \"name\": \"Deploy\",\n        \"actions\": [\n          {\n            \"name\": \"DeployToECS\",\n            \"actionTypeId\": {\n              \"category\": \"Deploy\",\n              \"owner\": \"AWS\",\n              \"provider\": \"ECS\",\n              \"version\": \"1\"\n            }\n          }\n        ]\n      }\n    ]\n  }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-153\">3. \u30b3\u30f3\u30c6\u30ca\u30d9\u30fc\u30b9\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306eCI\/CD\u69cb\u7bc9<\/h3>\n\n\n\n<p>Docker\u30b3\u30f3\u30c6\u30ca\u3092\u4f7f\u7528\u3057\u305f\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306eCI\/CD\u74b0\u5883\u69cb\u7bc9\u306b\u3064\u3044\u3066\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-154\">\u30b3\u30f3\u30c6\u30ca\u30d3\u30eb\u30c9\u306e\u8a2d\u5b9a<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># buildspec.yml for container build\nversion: 0.2\nphases:\n  pre_build:\n    commands:\n      - aws ecr get-login-password --region ${AWS::Region} | docker login --username AWS --password-stdin ${AWS::AccountId}.dkr.ecr.${AWS::Region}.amazonaws.com\n      - REPOSITORY_URI=${AWS::AccountId}.dkr.ecr.${AWS::Region}.amazonaws.com\/${ProjectName}\n      - IMAGE_TAG=$(echo $CODEBUILD_RESOLVED_SOURCE_VERSION | cut -c 1-7)\n  build:\n    commands:\n      - docker build -t $REPOSITORY_URI:$IMAGE_TAG .\n      - docker tag $REPOSITORY_URI:$IMAGE_TAG $REPOSITORY_URI:latest\n  post_build:\n    commands:\n      - docker push $REPOSITORY_URI:$IMAGE_TAG\n      - docker push $REPOSITORY_URI:latest\n      - printf '{\"ImageURI\":\"%s\"}' $REPOSITORY_URI:$IMAGE_TAG &gt; imageDefinitions.json\nartifacts:\n  files:\n    - imageDefinitions.json<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-155\">ECS\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u8a2d\u5b9a<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">{\n  \"taskDefinition\": {\n    \"containerDefinitions\": [\n      {\n        \"name\": \"application\",\n        \"image\": \"${REPOSITORY_URI}:${IMAGE_TAG}\",\n        \"cpu\": 256,\n        \"memory\": 512,\n        \"essential\": true,\n        \"portMappings\": [\n          {\n            \"containerPort\": 80,\n            \"hostPort\": 80,\n            \"protocol\": \"tcp\"\n          }\n        ],\n        \"logConfiguration\": {\n          \"logDriver\": \"awslogs\",\n          \"options\": {\n            \"awslogs-group\": \"\/ecs\/application\",\n            \"awslogs-region\": \"${AWS::Region}\",\n            \"awslogs-stream-prefix\": \"ecs\"\n          }\n        }\n      }\n    ]\n  }\n}<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-156\">\u91cd\u8981\u306a\u6559\u8a13<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30a4\u30e1\u30fc\u30b8\u30bf\u30b0\u6226\u7565<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30b3\u30df\u30c3\u30c8\u30cf\u30c3\u30b7\u30e5\u306e\u4f7f\u7528<\/li>\n\n\n\n<li>\u30bb\u30de\u30f3\u30c6\u30a3\u30c3\u30af\u30d0\u30fc\u30b8\u30e7\u30cb\u30f3\u30b0\u306e\u63a1\u7528<\/li>\n\n\n\n<li>latest \u30bf\u30b0\u306e\u9069\u5207\u306a\u7ba1\u7406<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30b9\u30ad\u30e3\u30f3<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   # \u30a4\u30e1\u30fc\u30b8\u30b9\u30ad\u30e3\u30f3\u8a2d\u5b9a\n   Resources:\n     ECRRepository:\n       Type: AWS::ECR::Repository\n       Properties:\n         RepositoryName: !Ref ProjectName\n         ImageScanningConfiguration:\n           ScanOnPush: true\n         ImageTagMutability: IMMUTABLE<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u30ad\u30e3\u30c3\u30b7\u30e5\u6226\u7565<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30de\u30eb\u30c1\u30b9\u30c6\u30fc\u30b8\u30d3\u30eb\u30c9\u306e\u6d3b\u7528<\/li>\n\n\n\n<li>\u30ec\u30a4\u30e4\u30fc\u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u6700\u9069\u5316<\/li>\n\n\n\n<li>\u30d3\u30eb\u30c9\u6642\u9593\u306e\u77ed\u7e2e<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-157\">4. \u30b5\u30fc\u30d0\u30fc\u30ec\u30b9\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u81ea\u52d5\u30c7\u30d7\u30ed\u30a4<\/h3>\n\n\n\n<p>AWS Lambda\u3092\u4e2d\u5fc3\u3068\u3057\u305f\u30b5\u30fc\u30d0\u30fc\u30ec\u30b9\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30c7\u30d7\u30ed\u30a4\u81ea\u52d5\u5316\u306b\u3064\u3044\u3066\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-158\">SAM\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u4f8b<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># template.yaml\nAWSTemplateFormatVersion: '2010-09-09'\nTransform: AWS::Serverless-2016-10-31\n\nResources:\n  ApiFunction:\n    Type: AWS::Serverless::Function\n    Properties:\n      CodeUri: .\/src\n      Handler: app.handler\n      Runtime: nodejs16.x\n      Architectures:\n        - x86_64\n      Events:\n        Api:\n          Type: Api\n          Properties:\n            Path: \/\n            Method: GET\n\n  DynamoDBTable:\n    Type: AWS::Serverless::SimpleTable\n    Properties:\n      PrimaryKey:\n        Name: id\n        Type: String<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-159\">\u30d3\u30eb\u30c9\u8a2d\u5b9a<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># buildspec.yml\nversion: 0.2\nphases:\n  install:\n    runtime-versions:\n      nodejs: 16\n  pre_build:\n    commands:\n      - npm ci\n      - npm run test\n  build:\n    commands:\n      - sam build\n      - sam package --s3-bucket ${ARTIFACT_BUCKET} --output-template-file packaged.yaml\nartifacts:\n  files:\n    - packaged.yaml\n    - samconfig.toml<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-160\">\u30c7\u30d7\u30ed\u30a4\u6226\u7565\u306e\u30dd\u30a4\u30f3\u30c8<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u6bb5\u968e\u7684\u30c7\u30d7\u30ed\u30a4<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   # \u30c7\u30d7\u30ed\u30a4\u30b9\u30af\u30ea\u30d7\u30c8\u4f8b\n   #!\/bin\/bash\n   sam deploy \\\n     --template-file packaged.yaml \\\n     --stack-name ${STACK_NAME} \\\n     --capabilities CAPABILITY_IAM \\\n     --parameter-overrides \\\n       Environment=${ENVIRONMENT} \\\n       ApiStageName=${STAGE_NAME} \\\n     --no-fail-on-empty-changeset<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u74b0\u5883\u5909\u6570\u7ba1\u7406<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   {\n     \"Parameters\": {\n       \"Environment\": {\n         \"Type\": \"String\",\n         \"AllowedValues\": [\"dev\", \"staging\", \"prod\"]\n       },\n       \"ApiStageName\": {\n         \"Type\": \"String\",\n         \"Default\": \"v1\"\n       }\n     }\n   }<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-161\">5. \u30af\u30ed\u30b9\u30a2\u30ab\u30a6\u30f3\u30c8\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u306e\u5b9f\u88c5<\/h3>\n\n\n\n<p>\u8907\u6570\u306eAWS\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u8de8\u3044\u3060\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u306e\u5b9f\u88c5\u65b9\u6cd5\u306b\u3064\u3044\u3066\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-162\">\u30a2\u30ab\u30a6\u30f3\u30c8\u9593\u306e\u4fe1\u983c\u95a2\u4fc2\u8a2d\u5b9a<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">{\n  \"Version\": \"2012-10-17\",\n  \"Statement\": [\n    {\n      \"Effect\": \"Allow\",\n      \"Principal\": {\n        \"AWS\": \"arn:aws:iam::${DevAccountId}:root\"\n      },\n      \"Action\": \"sts:AssumeRole\",\n      \"Condition\": {\n        \"StringEquals\": {\n          \"aws:PrincipalOrgID\": \"${OrganizationId}\"\n        }\n      }\n    }\n  ]\n}<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-163\">\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u30ed\u30fc\u30eb\u8a2d\u5b9a<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">Resources:\n  CrossAccountRole:\n    Type: AWS::IAM::Role\n    Properties:\n      RoleName: !Sub ${ProjectName}-deployment-role\n      AssumeRolePolicyDocument:\n        Version: '2012-10-17'\n        Statement:\n          - Effect: Allow\n            Principal:\n              AWS: !Sub arn:aws:iam::${DevAccountId}:root\n            Action: sts:AssumeRole\n      Policies:\n        - PolicyName: DeploymentPolicy\n          PolicyDocument:\n            Version: '2012-10-17'\n            Statement:\n              - Effect: Allow\n                Action:\n                  - s3:PutObject\n                  - s3:GetObject\n                  - s3:ListBucket\n                Resource:\n                  - !Sub arn:aws:s3:::${ArtifactBucket}\n                  - !Sub arn:aws:s3:::${ArtifactBucket}\/*<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-164\">6. \u30d6\u30eb\u30fc\/\u30b0\u30ea\u30fc\u30f3\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u306e\u81ea\u52d5\u5316<\/h3>\n\n\n\n<p>\u30bc\u30ed\u30c0\u30a6\u30f3\u30bf\u30a4\u30e0\u30c7\u30d7\u30ed\u30a4\u3092\u5b9f\u73fe\u3059\u308b\u30d6\u30eb\u30fc\/\u30b0\u30ea\u30fc\u30f3\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u306e\u5b9f\u88c5\u306b\u3064\u3044\u3066\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-165\">CodeDeploy\u306e\u8a2d\u5b9a<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">Resources:\n  DeploymentGroup:\n    Type: AWS::CodeDeploy::DeploymentGroup\n    Properties:\n      ApplicationName: !Ref ApplicationName\n      ServiceRoleArn: !GetAtt CodeDeployServiceRole.Arn\n      DeploymentStyle:\n        DeploymentOption: WITH_TRAFFIC_CONTROL\n        DeploymentType: BLUE_GREEN\n      BlueGreenDeploymentConfiguration:\n        DeploymentReadyOption:\n          ActionOnTimeout: CONTINUE_DEPLOYMENT\n          WaitTimeInMinutes: 5\n        TerminateBlueInstancesOnDeploymentSuccess:\n          Action: TERMINATE\n          TerminationWaitTimeInMinutes: 5\n      AutoRollbackConfiguration:\n        Enabled: true\n        Events:\n          - DEPLOYMENT_FAILURE<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-166\">\u30c8\u30e9\u30d5\u30a3\u30c3\u30af\u79fb\u884c\u306e\u8a2d\u5b9a<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">{\n  \"version\": 0.0,\n  \"Resources\": [\n    {\n      \"TargetService\": {\n        \"Type\": \"AWS::ECS::Service\",\n        \"Properties\": {\n          \"TaskDefinition\": \"&lt;TASK_DEFINITION&gt;\",\n          \"LoadBalancerInfo\": {\n            \"ContainerName\": \"web\",\n            \"ContainerPort\": 80\n          }\n        }\n      }\n    }\n  ]\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-167\">7. \u30de\u30eb\u30c1\u30d6\u30e9\u30f3\u30c1\u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u306e\u69cb\u7bc9<\/h3>\n\n\n\n<p>\u8907\u6570\u306e\u30d6\u30e9\u30f3\u30c1\u306b\u5bfe\u5fdc\u3057\u305f\u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u306e\u5b9f\u88c5\u65b9\u6cd5\u306b\u3064\u3044\u3066\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-168\">\u52d5\u7684\u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u751f\u6210<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u751f\u6210\u30b9\u30af\u30ea\u30d7\u30c8\u4f8b\nimport boto3\nimport json\n\ndef create_pipeline_for_branch(branch_name):\n    client = boto3.client('codepipeline')\n\n    pipeline_name = f\"pipeline-{branch_name}\"\n\n    pipeline_config = {\n        \"pipeline\": {\n            \"name\": pipeline_name,\n            \"roleArn\": \"arn:aws:iam::ACCOUNT_ID:role\/service-role\/AWSCodePipelineServiceRole\",\n            \"stages\": [\n                {\n                    \"name\": \"Source\",\n                    \"actions\": [\n                        {\n                            \"name\": \"Source\",\n                            \"actionTypeId\": {\n                                \"category\": \"Source\",\n                                \"owner\": \"AWS\",\n                                \"provider\": \"CodeCommit\",\n                                \"version\": \"1\"\n                            },\n                            \"configuration\": {\n                                \"BranchName\": branch_name,\n                                \"RepositoryName\": \"my-repo\"\n                            }\n                        }\n                    ]\n                }\n            ]\n        }\n    }\n\n    response = client.create_pipeline(\n        pipeline=pipeline_config[\"pipeline\"]\n    )\n    return response<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-169\">\u30d6\u30e9\u30f3\u30c1\u691c\u51fa\u3068\u30c8\u30ea\u30ac\u30fc\u8a2d\u5b9a<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">Resources:\n  BranchDetectionFunction:\n    Type: AWS::Lambda::Function\n    Properties:\n      Handler: index.handler\n      Runtime: nodejs16.x\n      Code:\n        ZipFile: |\n          exports.handler = async (event) =&gt; {\n            const codecommit = new AWS.CodeCommit();\n            const branches = await codecommit.listBranches({\n              repositoryName: process.env.REPOSITORY_NAME\n            }).promise();\n\n            \/\/ \u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u4f5c\u6210\u30ed\u30b8\u30c3\u30af\n          }\n      Environment:\n        Variables:\n          REPOSITORY_NAME: !Ref RepositoryName<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-170\">\u6559\u8a13\u3068\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u7ba1\u7406<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u547d\u540d\u898f\u5247\u306e\u7d71\u4e00<\/li>\n\n\n\n<li>\u30ea\u30bd\u30fc\u30b9\u30bf\u30b0\u306e\u6d3b\u7528<\/li>\n\n\n\n<li>\u81ea\u52d5\u30af\u30ea\u30fc\u30f3\u30a2\u30c3\u30d7\u306e\u5b9f\u88c5<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30b3\u30b9\u30c8\u6700\u9069\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u4e0d\u8981\u306a\u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u306e\u524a\u9664<\/li>\n\n\n\n<li>\u30d3\u30eb\u30c9\u30ea\u30bd\u30fc\u30b9\u306e\u9069\u5207\u306a\u9078\u629e<\/li>\n\n\n\n<li>\u30ad\u30e3\u30c3\u30b7\u30e5\u6226\u7565\u306e\u6700\u9069\u5316<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u76e3\u8996\u3068\u901a\u77e5<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   Resources:\n     PipelineNotification:\n       Type: AWS::SNS::Topic\n       Properties:\n         TopicName: !Sub ${ProjectName}-pipeline-notifications\n         Subscription:\n           - Protocol: email\n             Endpoint: !Ref NotificationEmail<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u5b9f\u8df5\u7684\u306a\u5b9f\u88c5\u4f8b\u3068\u6559\u8a13\u3092\u6d3b\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u3088\u308a\u5805\u7262\u3067\u52b9\u7387\u7684\u306aCI\/CD\u74b0\u5883\u3092\u69cb\u7bc9\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001CodePipeline\u306e\u904b\u7528\u7ba1\u7406\u3068\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u306b\u3064\u3044\u3066\u89e3\u8aac\u3057\u3066\u3044\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-171\">CodePipeline\u306e\u904b\u7528\u7ba1\u7406\u3068\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/h2>\n\n\n\n<p>\u52b9\u7387\u7684\u306aCI\/CD\u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u306e\u904b\u7528\u306b\u306f\u3001\u9069\u5207\u306a\u76e3\u8996\u4f53\u5236\u3001\u30b3\u30b9\u30c8\u7ba1\u7406\u3001\u305d\u3057\u3066\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u5bfe\u7b56\u304c\u4e0d\u53ef\u6b20\u3067\u3059\u3002\u3053\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u5b9f\u8df5\u7684\u306a\u904b\u7528\u7ba1\u7406\u624b\u6cd5\u3068\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u306b\u3064\u3044\u3066\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-172\">\u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u306e\u76e3\u8996\u3068\u30a2\u30e9\u30fc\u30c8\u8a2d\u5b9a<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-173\">1. CloudWatch\u9023\u643a\u306b\u3088\u308b\u5305\u62ec\u7684\u306a\u76e3\u8996<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># CloudFormation\u306b\u3088\u308b\u76e3\u8996\u8a2d\u5b9a\u4f8b\nResources:\n  PipelineAlarm:\n    Type: AWS::CloudWatch::Alarm\n    Properties:\n      AlarmName: !Sub ${AWS::StackName}-pipeline-failure\n      MetricName: FailedPipeline\n      Namespace: AWS::CodePipeline\n      Statistic: Sum\n      Period: 300\n      EvaluationPeriods: 1\n      Threshold: 1\n      AlarmActions:\n        - !Ref NotificationTopic\n      Dimensions:\n        - Name: PipelineName\n          Value: !Ref PipelineName\n      ComparisonOperator: GreaterThanThreshold\n\n  NotificationTopic:\n    Type: AWS::SNS::Topic\n    Properties:\n      TopicName: !Sub ${AWS::StackName}-notifications<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-174\">2. \u30ab\u30b9\u30bf\u30e0\u30e1\u30c8\u30ea\u30af\u30b9\u306e\u8a2d\u5b9a<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u30ab\u30b9\u30bf\u30e0\u30e1\u30c8\u30ea\u30af\u30b9\u9001\u4fe1\u30b9\u30af\u30ea\u30d7\u30c8\nimport boto3\nfrom datetime import datetime\n\ndef publish_metrics():\n    cloudwatch = boto3.client('cloudwatch')\n\n    # \u30c7\u30d7\u30ed\u30a4\u6642\u9593\u306e\u8a08\u6e2c\n    cloudwatch.put_metric_data(\n        Namespace='CustomMetrics\/CodePipeline',\n        MetricData=[\n            {\n                'MetricName': 'DeploymentDuration',\n                'Value': calculate_deployment_duration(),\n                'Unit': 'Seconds',\n                'Timestamp': datetime.utcnow()\n            }\n        ]\n    )<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-175\">3. \u30c0\u30c3\u30b7\u30e5\u30dc\u30fc\u30c9\u8a2d\u5b9a<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">{\n  \"widgets\": [\n    {\n      \"type\": \"metric\",\n      \"properties\": {\n        \"metrics\": [\n          [\"AWS\/CodePipeline\", \"SuccessfulPipeline\", \"PipelineName\", \"${PipelineName}\"],\n          [\".\", \"FailedPipeline\", \".\", \".\"]\n        ],\n        \"period\": 300,\n        \"stat\": \"Sum\",\n        \"region\": \"${AWS::Region}\",\n        \"title\": \"Pipeline Execution Status\"\n      }\n    }\n  ]\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-176\">\u30b3\u30b9\u30c8\u6700\u9069\u5316\u306e\u305f\u3081\u306e\u8a2d\u5b9a\u3068\u30d2\u30f3\u30c8<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-177\">1. \u30ea\u30bd\u30fc\u30b9\u4f7f\u7528\u91cf\u306e\u6700\u9069\u5316<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># CodeBuild\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u6700\u9069\u5316\u8a2d\u5b9a\nResources:\n  BuildProject:\n    Type: AWS::CodeBuild::Project\n    Properties:\n      Environment:\n        ComputeType: BUILD_GENERAL1_SMALL  # \u5fc5\u8981\u6700\u5c0f\u9650\u306e\u30ea\u30bd\u30fc\u30b9\n        Type: LINUX_CONTAINER\n        Image: aws\/codebuild\/amazonlinux2-x86_64-standard:3.0\n      Cache:\n        Type: S3\n        Location: !Sub ${ArtifactBucket}\/cache\n      TimeoutInMinutes: 30  # \u9069\u5207\u306a\u30bf\u30a4\u30e0\u30a2\u30a6\u30c8\u8a2d\u5b9a<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-178\">2. \u30b3\u30b9\u30c8\u8ffd\u8de1\u3068\u4e88\u7b97\u8a2d\u5b9a<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">{\n  \"budgets\": [\n    {\n      \"name\": \"CodePipelineBudget\",\n      \"budgetType\": \"COST\",\n      \"budgetLimit\": {\n        \"amount\": \"100\",\n        \"unit\": \"USD\"\n      },\n      \"timeUnit\": \"MONTHLY\",\n      \"costFilters\": {\n        \"Service\": [\"AWS CodePipeline\", \"AWS CodeBuild\"]\n      }\n    }\n  ]\n}<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-179\">3. \u6700\u9069\u5316\u30c1\u30a7\u30c3\u30af\u30ea\u30b9\u30c8<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>[ ] \u30d3\u30eb\u30c9\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u30bf\u30a4\u30d7\u306e\u9069\u5207\u306a\u9078\u629e<\/li>\n\n\n\n<li>[ ] \u30a2\u30fc\u30c6\u30a3\u30d5\u30a1\u30af\u30c8\u306e\u4fdd\u6301\u671f\u9593\u8a2d\u5b9a<\/li>\n\n\n\n<li>[ ] \u4e0d\u8981\u306a\u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u306e\u524a\u9664<\/li>\n\n\n\n<li>[ ] \u30ad\u30e3\u30c3\u30b7\u30e5\u6226\u7565\u306e\u6700\u9069\u5316<\/li>\n\n\n\n<li>[ ] \u4e26\u5217\u5b9f\u884c\u306e\u9069\u5207\u306a\u4f7f\u7528<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-180\">\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u5f37\u5316\u306e\u305f\u3081\u306e\u5177\u4f53\u7684\u306a\u8a2d\u5b9a<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-181\">1. \u6697\u53f7\u5316\u8a2d\u5b9a<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># KMS\u6697\u53f7\u5316\u306e\u8a2d\u5b9a\nResources:\n  PipelineKey:\n    Type: AWS::KMS::Key\n    Properties:\n      Description: Key for CodePipeline artifacts\n      EnableKeyRotation: true\n      KeyPolicy:\n        Version: '2012-10-17'\n        Statement:\n          - Sid: Enable IAM User Permissions\n            Effect: Allow\n            Principal:\n              AWS: !Sub arn:aws:iam::${AWS::AccountId}:root\n            Action: kms:*\n            Resource: '*'<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-182\">2. \u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30a4\u30d9\u30f3\u30c8\u306e\u76e3\u8996<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># SecurityHub\u3068\u306e\u9023\u643a\u8a2d\u5b9a\nResources:\n  SecurityEventRule:\n    Type: AWS::Events::Rule\n    Properties:\n      Description: \"Monitor security events in CodePipeline\"\n      EventPattern:\n        source:\n          - aws.codepipeline\n        detail-type:\n          - \"CodePipeline Pipeline Execution State Change\"\n      State: ENABLED\n      Targets:\n        - Arn: !Sub arn:aws:securityhub:${AWS::Region}:${AWS::AccountId}:hub\/default\n          Id: SecurityHub<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-183\">3. \u30b3\u30f3\u30d7\u30e9\u30a4\u30a2\u30f3\u30b9\u30c1\u30a7\u30c3\u30af<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u30b3\u30f3\u30d7\u30e9\u30a4\u30a2\u30f3\u30b9\u30c1\u30a7\u30c3\u30af\u30b9\u30af\u30ea\u30d7\u30c8\ndef check_compliance():\n    # KMS\u6697\u53f7\u5316\u306e\u78ba\u8a8d\n    if not is_kms_encryption_enabled():\n        report_compliance_violation(\"KMS encryption not enabled\")\n\n    # IAM\u6a29\u9650\u306e\u78ba\u8a8d\n    if not check_iam_permissions():\n        report_compliance_violation(\"Excessive IAM permissions detected\")\n\n    # VPC\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8\u306e\u78ba\u8a8d\n    if not check_vpc_endpoints():\n        report_compliance_violation(\"VPC endpoints not properly configured\")<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-184\">\u904b\u7528\u52b9\u7387\u5316\u306e\u305f\u3081\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-185\">1. \u81ea\u52d5\u5fa9\u65e7\u8a2d\u5b9a<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u81ea\u52d5\u5fa9\u65e7Lambda\u95a2\u6570\u306e\u8a2d\u5b9a\nResources:\n  AutoRecoveryFunction:\n    Type: AWS::Lambda::Function\n    Properties:\n      Handler: index.handler\n      Runtime: nodejs16.x\n      Code:\n        ZipFile: |\n          exports.handler = async (event) =&gt; {\n            if (event.detail.state === 'FAILED') {\n              \/\/ \u81ea\u52d5\u30ea\u30c8\u30e9\u30a4\u30ed\u30b8\u30c3\u30af\n              await retryPipeline(event.detail.pipeline);\n            }\n          }<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-186\">2. \u5b9a\u671f\u7684\u306a\u30e1\u30f3\u30c6\u30ca\u30f3\u30b9\u81ea\u52d5\u5316<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u30e1\u30f3\u30c6\u30ca\u30f3\u30b9\u30bf\u30b9\u30af\u306e\u81ea\u52d5\u5316\nResources:\n  MaintenanceFunction:\n    Type: AWS::Lambda::Function\n    Properties:\n      Handler: index.handler\n      Runtime: nodejs16.x\n      Code:\n        ZipFile: |\n          exports.handler = async () =&gt; {\n            \/\/ \u30a2\u30fc\u30c6\u30a3\u30d5\u30a1\u30af\u30c8\u306e\u30af\u30ea\u30fc\u30f3\u30a2\u30c3\u30d7\n            await cleanupOldArtifacts();\n\n            \/\/ \u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u6700\u9069\u5316\n            await optimizeCache();\n\n            \/\/ \u30e1\u30c8\u30ea\u30af\u30b9\u306e\u96c6\u8a08\n            await aggregateMetrics();\n          }\n\n  MaintenanceSchedule:\n    Type: AWS::Events::Rule\n    Properties:\n      ScheduleExpression: \"rate(1 day)\"\n      Targets:\n        - Arn: !GetAtt MaintenanceFunction.Arn\n          Id: DailyMaintenance<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-187\">\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u30ac\u30a4\u30c9<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-188\">1. \u3088\u304f\u3042\u308b\u554f\u984c\u3068\u89e3\u6c7a\u7b56<\/h4>\n\n\n<div id=\"id-28280adc-c6f6-4c9d-bdb3-8f68d4da0e73\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u554f\u984c<\/th><th>\u539f\u56e0<\/th><th>\u89e3\u6c7a\u7b56<\/th><\/tr><\/thead><tbody><tr><td>\u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u5931\u6557<\/td><td>\u6a29\u9650\u4e0d\u8db3<\/td><td>IAM\u30dd\u30ea\u30b7\u30fc\u306e\u78ba\u8a8d\u3068\u4fee\u6b63<\/td><\/tr><tr><td>\u30d3\u30eb\u30c9\u9045\u5ef6<\/td><td>\u30ea\u30bd\u30fc\u30b9\u4e0d\u8db3<\/td><td>\u30b3\u30f3\u30d4\u30e5\u30fc\u30c8\u30bf\u30a4\u30d7\u306e\u898b\u76f4\u3057<\/td><\/tr><tr><td>\u30a2\u30fc\u30c6\u30a3\u30d5\u30a1\u30af\u30c8\u30a8\u30e9\u30fc<\/td><td>S3\u30d0\u30b1\u30c3\u30c8\u8a2d\u5b9a<\/td><td>\u30d0\u30b1\u30c3\u30c8\u30dd\u30ea\u30b7\u30fc\u306e\u78ba\u8a8d<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<h4 class=\"wp-block-heading\" id=\"i-189\">2. \u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u30ef\u30fc\u30af\u30d5\u30ed\u30fc<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">graph TD\n    A[\u554f\u984c\u691c\u77e5] --&gt; B{\u30a8\u30e9\u30fc\u30bf\u30a4\u30d7\u5224\u5225}\n    B --&gt;|\u30d3\u30eb\u30c9\u30a8\u30e9\u30fc| C[\u30d3\u30eb\u30c9\u30ed\u30b0\u78ba\u8a8d]\n    B --&gt;|\u30c7\u30d7\u30ed\u30a4\u30a8\u30e9\u30fc| D[\u30c7\u30d7\u30ed\u30a4\u30ed\u30b0\u78ba\u8a8d]\n    B --&gt;|\u6a29\u9650\u30a8\u30e9\u30fc| E[IAM\u78ba\u8a8d]\n    C --&gt; F[\u554f\u984c\u4fee\u6b63]\n    D --&gt; F\n    E --&gt; F\n    F --&gt; G[\u30c6\u30b9\u30c8\u5b9f\u884c]\n    G --&gt; H{\u6210\u529f\u78ba\u8a8d}\n    H --&gt;|\u5931\u6557| A\n    H --&gt;|\u6210\u529f| I[\u6587\u66f8\u5316]<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u904b\u7528\u7ba1\u7406\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u3092\u5b9f\u8df5\u3059\u308b\u3053\u3068\u3067\u3001\u3088\u308a\u5b89\u5b9a\u7684\u3067\u52b9\u7387\u7684\u306aCI\/CD\u74b0\u5883\u3092\u7dad\u6301\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u3088\u304f\u3042\u308b\u8cea\u554f\u3068\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u306b\u3064\u3044\u3066\u8a73\u3057\u304f\u89e3\u8aac\u3057\u3066\u3044\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-190\">\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u3068\u3088\u304f\u3042\u308b\u8cea\u554f<\/h2>\n\n\n\n<p>AWS CodePipeline\u3092\u904b\u7528\u3059\u308b\u4e2d\u3067\u906d\u9047\u3059\u308b\u53ef\u80fd\u6027\u306e\u3042\u308b\u554f\u984c\u3068\u3001\u305d\u306e\u52b9\u679c\u7684\u306a\u89e3\u6c7a\u65b9\u6cd5\u306b\u3064\u3044\u3066\u89e3\u8aac\u3057\u307e\u3059\u3002\u307e\u305f\u3001\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316\u306e\u305f\u3081\u306e\u30c1\u30e5\u30fc\u30cb\u30f3\u30b0\u30dd\u30a4\u30f3\u30c8\u3084\u3001AWS\u30b5\u30dd\u30fc\u30c8\u306e\u6d3b\u7528\u65b9\u6cd5\u306b\u3064\u3044\u3066\u3082\u8a73\u3057\u304f\u8aac\u660e\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-191\">\u3088\u304f\u3042\u308b\u30a8\u30e9\u30fc\u3068\u89e3\u6c7a\u65b9\u6cd5<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-192\">1. \u4e00\u822c\u7684\u306a\u30a8\u30e9\u30fc\u30d1\u30bf\u30fc\u30f3<\/h4>\n\n\n<div id=\"id-7205d08e-6ece-4e6f-8b1f-efdd4d681943\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u30a8\u30e9\u30fc\u30ab\u30c6\u30b4\u30ea<\/th><th>\u5177\u4f53\u7684\u306a\u30a8\u30e9\u30fc<\/th><th>\u4e3b\u306a\u539f\u56e0<\/th><th>\u89e3\u6c7a\u65b9\u6cd5<\/th><\/tr><\/thead><tbody><tr><td>\u6a29\u9650\u30a8\u30e9\u30fc<\/td><td>AccessDeniedException<\/td><td>IAM\u6a29\u9650\u4e0d\u8db3<\/td><td>\u5fc5\u8981\u306a\u6a29\u9650\u306e\u8ffd\u52a0\u3068\u30dd\u30ea\u30b7\u30fc\u306e\u898b\u76f4\u3057<\/td><\/tr><tr><td>\u30bd\u30fc\u30b9\u30a8\u30e9\u30fc<\/td><td>SourceActionFailed<\/td><td>\u30ea\u30dd\u30b8\u30c8\u30ea\u8a2d\u5b9a\u306e\u554f\u984c<\/td><td>\u30bd\u30fc\u30b9\u8a2d\u5b9a\u3068\u30d6\u30e9\u30f3\u30c1\u540d\u306e\u78ba\u8a8d<\/td><\/tr><tr><td>\u30d3\u30eb\u30c9\u30a8\u30e9\u30fc<\/td><td>BuildActionFailed<\/td><td>\u30d3\u30eb\u30c9\u74b0\u5883\u306e\u8a2d\u5b9a\u30df\u30b9<\/td><td>buildspec.yml\u306e\u4fee\u6b63\u3068\u30d3\u30eb\u30c9\u74b0\u5883\u306e\u78ba\u8a8d<\/td><\/tr><tr><td>\u30c7\u30d7\u30ed\u30a4\u30a8\u30e9\u30fc<\/td><td>DeployActionFailed<\/td><td>\u30c7\u30d7\u30ed\u30a4\u8a2d\u5b9a\u306e\u554f\u984c<\/td><td>\u30c7\u30d7\u30ed\u30a4\u8a2d\u5b9a\u3068\u30bf\u30fc\u30b2\u30c3\u30c8\u74b0\u5883\u306e\u78ba\u8a8d<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<h4 class=\"wp-block-heading\" id=\"i-193\">2. \u30a8\u30e9\u30fc\u5225\u306e\u8a73\u7d30\u306a\u5bfe\u51e6\u65b9\u6cd5<\/h4>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-194\">\u6a29\u9650\u95a2\u9023\u306e\u30a8\u30e9\u30fc\u5bfe\u5fdc<\/h5>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">{\n    \"Version\": \"2012-10-17\",\n    \"Statement\": [\n        {\n            \"Effect\": \"Allow\",\n            \"Action\": [\n                \"s3:GetObject\",\n                \"s3:GetObjectVersion\",\n                \"s3:PutObject\"\n            ],\n            \"Resource\": [\n                \"arn:aws:s3:::${ArtifactBucket}\/*\"\n            ]\n        }\n    ]\n}<\/pre>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-195\">\u30bd\u30fc\u30b9\u30b9\u30c6\u30fc\u30b8\u306e\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0<\/h5>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># CodeCommit\u30ea\u30dd\u30b8\u30c8\u30ea\u306e\u63a5\u7d9a\u78ba\u8a8d\naws codecommit get-branch \\\n    --repository-name ${REPOSITORY_NAME} \\\n    --branch-name ${BRANCH_NAME}\n\n# GitHub\u30a6\u30a7\u30d6\u30d5\u30c3\u30af\u306e\u78ba\u8a8d\naws codepipeline list-webhooks \\\n    --filters \"[{\\\"key\\\": \\\"targetPipeline\\\", \\\"value\\\": \\\"${PIPELINE_NAME}\\\"}]\"<\/pre>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-196\">\u30d3\u30eb\u30c9\u30b9\u30c6\u30fc\u30b8\u306e\u30c7\u30d0\u30c3\u30b0<\/h5>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u30c7\u30d0\u30c3\u30b0\u7528\u306ebuildspec.yml\nversion: 0.2\nphases:\n  install:\n    runtime-versions:\n      nodejs: 16\n    commands:\n      - echo \"Debugging environment...\"\n      - env\n      - pwd\n      - ls -la\n  pre_build:\n    commands:\n      - echo \"Testing dependencies...\"\n      - npm list || true\n  build:\n    commands:\n      - echo \"Starting build with debug info...\"\n      - npm run build --verbose<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-197\">\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u5411\u4e0a\u306e\u305f\u3081\u306e\u30c1\u30e5\u30fc\u30cb\u30f3\u30b0\u30dd\u30a4\u30f3\u30c8<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-198\">1. \u30d3\u30eb\u30c9\u6700\u9069\u5316<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u6700\u9069\u5316\u3055\u308c\u305f\u30d3\u30eb\u30c9\u8a2d\u5b9a\nResources:\n  OptimizedBuildProject:\n    Type: AWS::CodeBuild::Project\n    Properties:\n      Cache:\n        Type: LOCAL\n        Modes:\n          - LOCAL_DOCKER_LAYER_CACHE\n          - LOCAL_SOURCE_CACHE\n      Environment:\n        Type: LINUX_CONTAINER\n        ComputeType: BUILD_GENERAL1_MEDIUM\n        PrivilegedMode: true\n      ConcurrentBuildLimit: 5<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-199\">2. \u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u5b9f\u884c\u306e\u6700\u9069\u5316<\/h4>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-200\">\u4e26\u5217\u5b9f\u884c\u306e\u8a2d\u5b9a<\/h5>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">{\n  \"pipeline\": {\n    \"stages\": [\n      {\n        \"name\": \"Build\",\n        \"actions\": [\n          {\n            \"name\": \"BuildFrontend\",\n            \"runOrder\": 1\n          },\n          {\n            \"name\": \"BuildBackend\",\n            \"runOrder\": 1\n          },\n          {\n            \"name\": \"IntegrationTests\",\n            \"runOrder\": 2\n          }\n        ]\n      }\n    ]\n  }\n}<\/pre>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-201\">\u30ad\u30e3\u30c3\u30b7\u30e5\u6226\u7565<\/h5>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u30ad\u30e3\u30c3\u30b7\u30e5\u8a2d\u5b9a\u4f8b\ncache:\n  paths:\n    - '\/root\/.m2\/**\/*'\n    - '\/root\/.npm\/**\/*'\n    - 'node_modules\/**\/*'\n    - '.next\/cache\/**\/*'<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-202\">AWS \u30b5\u30dd\u30fc\u30c8\u3078\u306e\u52b9\u679c\u7684\u306a\u304a\u554f\u3044\u5408\u308f\u305b\u65b9\u6cd5<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-203\">1. \u554f\u984c\u5831\u544a\u306e\u6e96\u5099<\/h4>\n\n\n\n<p>\u5fc5\u8981\u306a\u60c5\u5831\u30c1\u30a7\u30c3\u30af\u30ea\u30b9\u30c8\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>[ ] \u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u540d\u3068ARN<\/li>\n\n\n\n<li>[ ] \u30a8\u30e9\u30fc\u30e1\u30c3\u30bb\u30fc\u30b8\u306e\u5168\u6587<\/li>\n\n\n\n<li>[ ] \u5b9f\u884cID<\/li>\n\n\n\n<li>[ ] \u30bf\u30a4\u30e0\u30b9\u30bf\u30f3\u30d7<\/li>\n\n\n\n<li>[ ] \u95a2\u9023\u3059\u308bCloudWatch\u30ed\u30b0<\/li>\n\n\n\n<li>[ ] IAM\u6a29\u9650\u8a2d\u5b9a<\/li>\n\n\n\n<li>[ ] \u6700\u8fd1\u306e\u8a2d\u5b9a\u5909\u66f4\u5c65\u6b74<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-204\">2. \u60c5\u5831\u53ce\u96c6\u30b9\u30af\u30ea\u30d7\u30c8<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u30b5\u30dd\u30fc\u30c8\u7528\u60c5\u5831\u53ce\u96c6\u30b9\u30af\u30ea\u30d7\u30c8\nimport boto3\nimport json\nfrom datetime import datetime, timedelta\n\ndef collect_pipeline_info(pipeline_name):\n    codepipeline = boto3.client('codepipeline')\n    cloudwatch = boto3.client('cloudwatch')\n\n    # \u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u5b9f\u884c\u5c65\u6b74\u306e\u53d6\u5f97\n    executions = codepipeline.list_pipeline_executions(\n        pipelineName=pipeline_name,\n        maxResults=10\n    )\n\n    # \u30e1\u30c8\u30ea\u30af\u30b9\u60c5\u5831\u306e\u53d6\u5f97\n    metrics = cloudwatch.get_metric_statistics(\n        Namespace='AWS\/CodePipeline',\n        MetricName='FailedPipeline',\n        Dimensions=[{'Name': 'PipelineName', 'Value': pipeline_name}],\n        StartTime=datetime.utcnow() - timedelta(days=1),\n        EndTime=datetime.utcnow(),\n        Period=300,\n        Statistics=['Sum']\n    )\n\n    return {\n        'executions': executions,\n        'metrics': metrics\n    }<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-205\">3. \u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u30ef\u30fc\u30af\u30d5\u30ed\u30fc<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">graph TD\n    A[\u554f\u984c\u767a\u751f] --&gt; B{\u30a8\u30e9\u30fc\u7a2e\u5225\u306e\u7279\u5b9a}\n    B --&gt; C[\u81ea\u5df1\u89e3\u6c7a\u53ef\u80fd?]\n    C --&gt;|Yes| D[\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u53c2\u7167]\n    C --&gt;|No| E[\u30b5\u30dd\u30fc\u30c8\u6e96\u5099]\n    D --&gt; F[\u89e3\u6c7a\u7b56\u5b9f\u65bd]\n    E --&gt; G[\u60c5\u5831\u53ce\u96c6]\n    G --&gt; H[\u30b5\u30dd\u30fc\u30c8\u554f\u3044\u5408\u308f\u305b]\n    H --&gt; I[\u89e3\u6c7a\u7b56\u5b9f\u65bd]\n    F --&gt; J[\u7d50\u679c\u78ba\u8a8d]\n    I --&gt; J\n    J --&gt;|\u5931\u6557| B\n    J --&gt;|\u6210\u529f| K[\u6587\u66f8\u5316]<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-206\">\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u5411\u4e0a\u306e\u305f\u3081\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-207\">1. \u30d3\u30eb\u30c9\u6642\u9593\u306e\u77ed\u7e2e<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u6700\u9069\u5316\u3055\u308c\u305fDockerfile\u4f8b\nFROM node:16-alpine AS builder\nWORKDIR \/app\nCOPY package*.json .\/\nRUN npm ci --only=production\nCOPY . .\nRUN npm run build\n\nFROM node:16-alpine\nWORKDIR \/app\nCOPY --from=builder \/app\/dist .\/dist\nCOPY --from=builder \/app\/node_modules .\/node_modules\nCMD [\"npm\", \"start\"]<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-208\">2. \u30ea\u30bd\u30fc\u30b9\u4f7f\u7528\u7387\u306e\u6700\u9069\u5316<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">{\n  \"compute\": {\n    \"type\": \"BUILD_GENERAL1_SMALL\",\n    \"configuration\": {\n      \"memory\": 3,\n      \"vcpus\": 2\n    }\n  },\n  \"timeout\": {\n    \"minutes\": 15\n  },\n  \"queueing\": {\n    \"enabled\": true,\n    \"maxConcurrentBuilds\": 5\n  }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-209\">\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u306e\u305f\u3081\u306e\u30e2\u30cb\u30bf\u30ea\u30f3\u30b0\u8a2d\u5b9a<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-210\">1. CloudWatch\u30a2\u30e9\u30fc\u30e0\u8a2d\u5b9a<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">Resources:\n  PipelineFailureAlarm:\n    Type: AWS::CloudWatch::Alarm\n    Properties:\n      AlarmDescription: \"Alert on pipeline failure\"\n      MetricName: FailedPipeline\n      Namespace: AWS\/CodePipeline\n      Statistic: Sum\n      Period: 300\n      EvaluationPeriods: 1\n      Threshold: 1\n      AlarmActions:\n        - !Ref AlertTopic\n      ComparisonOperator: GreaterThanThreshold<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-211\">2. \u30ed\u30b0\u96c6\u7d04\u306e\u8a2d\u5b9a<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># CloudWatch Logs\u8a2d\u5b9a\nResources:\n  LogGroup:\n    Type: AWS::Logs::LogGroup\n    Properties:\n      LogGroupName: !Sub \/aws\/codepipeline\/${PipelineName}\n      RetentionInDays: 14\n\n  LogSubscriptionFilter:\n    Type: AWS::Logs::SubscriptionFilter\n    Properties:\n      LogGroupName: !Ref LogGroup\n      FilterPattern: \"[timestamp, requestid, level, message]\"\n      DestinationArn: !GetAtt LogProcessor.Arn<\/pre>\n\n\n\n<p>\u4ee5\u4e0a\u306e\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u30ac\u30a4\u30c9\u3092\u6d3b\u7528\u3059\u308b\u3053\u3068\u3067\u3001AWS CodePipeline\u3067\u767a\u751f\u3059\u308b\u69d8\u3005\u306a\u554f\u984c\u306b\u52b9\u7387\u7684\u306b\u5bfe\u51e6\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u307e\u305f\u3001\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u306e\u6700\u9069\u5316\u3068AWS\u30b5\u30dd\u30fc\u30c8\u306e\u52b9\u679c\u7684\u306a\u6d3b\u7528\u306b\u3088\u308a\u3001\u3088\u308a\u5b89\u5b9a\u3057\u305fCI\/CD\u74b0\u5883\u3092\u7dad\u6301\u3059\u308b\u3053\u3068\u304c\u53ef\u80fd\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Warning: Undefined array key &#8220;is_admin&#8221; in \/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/ &#8230; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[],"class_list":{"0":"post-2242","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-aws","7":"nothumb"},"_links":{"self":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/2242","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2242"}],"version-history":[{"count":1,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/2242\/revisions"}],"predecessor-version":[{"id":2243,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/2242\/revisions\/2243"}],"wp:attachment":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2242"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2242"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2242"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}