{"id":2244,"date":"2025-03-24T08:47:54","date_gmt":"2025-03-23T23:47:54","guid":{"rendered":"https:\/\/dexall.co.jp\/articles\/?p=2244"},"modified":"2025-03-24T08:48:18","modified_gmt":"2025-03-23T23:48:18","slug":"aws-codebuild%e3%81%ae%e5%ae%8c%e5%85%a8%e3%82%ac%e3%82%a4%e3%83%89%ef%bc%9a%e5%a4%b1%e6%95%97%e3%81%97%e3%81%aa%e3%81%84%e5%b0%8e%e5%85%a5%e3%81%a8%e9%81%8b%e7%94%a8%e3%81%ae%e3%81%9f%e3%82%81","status":"publish","type":"post","link":"https:\/\/dexall.co.jp\/articles\/?p=2244","title":{"rendered":"AWS CodeBuild\u306e\u5b8c\u5168\u30ac\u30a4\u30c9\uff1a\u5931\u6557\u3057\u306a\u3044\u5c0e\u5165\u3068\u904b\u7528\u306e\u305f\u3081\u306e7\u3064\u306e\u30dd\u30a4\u30f3\u30c8"},"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 CodeBuild \u3068\u306f\uff1f\u521d\u5fc3\u8005\u3067\u3082\u308f\u304b\u308b\u57fa\u790e\u77e5\u8b58<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-1\">AWS CodeBuild \u306e\u4e3b\u306a\u7279\u5fb4\u3068\u5f37\u307f<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-2\">\u5f93\u6765\u306eCI\/CD\u30c4\u30fc\u30eb\u3068\u6bd4\u8f03\u3057\u305f\u30e1\u30ea\u30c3\u30c8<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-3\">AWS CodeBuild\u5c0e\u5165\u524d\u306e3\u3064\u306e\u91cd\u8981\u306a\u691c\u8a0e\u4e8b\u9805<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-4\">\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u6700\u9069\u306a\u30d3\u30eb\u30c9\u74b0\u5883\u306e\u9078\u629e\u65b9\u6cd5<\/a>      <\/li>      <li>        <a href=\"#i-5\">\u30b3\u30b9\u30c8\u8a66\u7b97\u3068\u30ea\u30bd\u30fc\u30b9\u8a2d\u8a08\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-6\">\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u8a2d\u5b9a\u3067\u62bc\u3055\u3048\u308b\u3079\u304d\u30dd\u30a4\u30f3\u30c8<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-7\">\u5b9f\u8df5\uff1aAWS CodeBuild\u306e\u5177\u4f53\u7684\u306a\u5b9f\u88c5\u624b\u9806<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-8\">CodeBuild\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u4f5c\u6210\u3068\u521d\u671f\u8a2d\u5b9a<\/a>      <\/li>      <li>        <a href=\"#i-9\">buildspec.yml\u306e\u66f8\u304d\u65b9\u3068\u5b9f\u88c5\u4f8b<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-10\">\u30bd\u30fc\u30b9\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u3068\u306e\u9023\u643a\u8a2d\u5b9a<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-11\">AWS CodeBuild\u306e\u904b\u7528\u52b9\u7387\u3092\u9ad8\u3081\u308b\u5b9f\u8df5\u7684\u306a\u30d2\u30f3\u30c8<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-12\">\u30d3\u30eb\u30c9\u30ad\u30e3\u30c3\u30b7\u30e5\u3092\u6d3b\u7528\u3057\u305f\u30d3\u30eb\u30c9\u6642\u9593\u306e\u77ed\u7e2e\u5316<\/a>      <\/li>      <li>        <a href=\"#i-13\">CloudWatch\u3068\u306e\u9023\u643a\u306b\u3088\u308b\u30e2\u30cb\u30bf\u30ea\u30f3\u30b0\u5f37\u5316<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-14\">\u30de\u30eb\u30c1\u30d6\u30e9\u30f3\u30c1\u30d3\u30eb\u30c9\u306e\u52b9\u7387\u7684\u306a\u7ba1\u7406\u65b9\u6cd5<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-15\">\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\uff1a\u3088\u304f\u3042\u308b\u554f\u984c\u3068\u89e3\u6c7a\u7b56<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-16\">\u30d3\u30eb\u30c9\u5931\u6557\u6642\u306e\u539f\u56e0\u7279\u5b9a\u3068\u5bfe\u51e6\u6cd5<\/a>      <\/li>      <li>        <a href=\"#i-17\">\u6a29\u9650\u95a2\u9023\u306e\u30c8\u30e9\u30d6\u30eb\u89e3\u6c7a\u30d5\u30ed\u30fc<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-18\">\u30ea\u30bd\u30fc\u30b9\u5236\u9650\u3078\u306e\u5bfe\u51e6\u65b9\u6cd5<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-19\">AWS CodeBuild\u306e\u30b3\u30b9\u30c8\u6700\u9069\u5316\u30ac\u30a4\u30c9<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-20\">\u30d3\u30eb\u30c9\u6642\u9593\u3068\u30b3\u30b9\u30c8\u306e\u95a2\u4fc2\u6027\u3092\u7406\u89e3\u3059\u308b<\/a>      <\/li>      <li>        <a href=\"#i-21\">\u30b3\u30f3\u30d4\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u30bf\u30a4\u30d7\u306e\u6700\u9069\u306a\u9078\u629e\u65b9\u6cd5<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-22\">\u4e0d\u8981\u306a\u30d3\u30eb\u30c9\u3092\u9632\u3050\u305f\u3081\u306e\u8a2d\u5b9a\u3068\u904b\u7528<\/a>      <\/li>    <\/ul>  <\/li>  <li class=\"last\">    <a href=\"#i-23\">\u5b9f\u8df5\u7684\u306a\u30e6\u30fc\u30b9\u30b1\u30fc\u30b9\u3068\u5fdc\u7528\u4f8b<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-24\">Docker\u30b3\u30f3\u30c6\u30ca\u306e\u30d3\u30eb\u30c9\u3068\u5c55\u958b<\/a>      <\/li>      <li>        <a href=\"#i-25\">\u30b9\u30c6\u30fc\u30b8\u30de\u30eb\u30c1\u30d3\u30eb\u30c9\u306e\u5b9f\u88c5\u65b9\u6cd5<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-26\">CodePipeline\u3068\u306e\u52b9\u679c\u7684\u306a\u9023\u643a\u65b9\u6cd5<\/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 CodeBuild \u3068\u306f\uff1f\u521d\u5fc3\u8005\u3067\u3082\u308f\u304b\u308b\u57fa\u790e\u77e5\u8b58<\/h2>\n\n\n\n<p>AWS CodeBuild\u306f\u3001\u30af\u30e9\u30a6\u30c9\u3067\u52d5\u4f5c\u3059\u308b\u30d5\u30eb\u30de\u30cd\u30fc\u30b8\u30c9\u306a\u30d3\u30eb\u30c9\u30b5\u30fc\u30d3\u30b9\u3067\u3059\u3002\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u3092\u30b3\u30f3\u30d1\u30a4\u30eb\u3057\u3001\u30c6\u30b9\u30c8\u3092\u5b9f\u884c\u3057\u3001\u30c7\u30d7\u30ed\u30a4\u53ef\u80fd\u306a\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u30d1\u30c3\u30b1\u30fc\u30b8\u3092\u4f5c\u6210\u3059\u308b\u4e00\u9023\u306e\u30d7\u30ed\u30bb\u30b9\u3092\u81ea\u52d5\u5316\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-1\">AWS CodeBuild \u306e\u4e3b\u306a\u7279\u5fb4\u3068\u5f37\u307f<\/h3>\n\n\n\n<p>AWS CodeBuild\u306b\u306f\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u7279\u5fb4\u304c\u3042\u308a\u307e\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30d5\u30eb\u30de\u30cd\u30fc\u30b8\u30c9\u74b0\u5883<\/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>\u81ea\u52d5\u30b9\u30b1\u30fc\u30ea\u30f3\u30b0\u306b\u3088\u308b\u30d3\u30eb\u30c9\u306e\u4e26\u5217\u5b9f\u884c<\/li>\n\n\n\n<li>\u30b5\u30fc\u30d0\u30fc\u30ec\u30b9\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u306b\u3088\u308b\u904b\u7528\u8ca0\u8377\u306e\u8efd\u6e1b<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u67d4\u8edf\u306a\u30d3\u30eb\u30c9\u74b0\u5883<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u591a\u69d8\u306a\u8a00\u8a9e\u3068\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u30b5\u30dd\u30fc\u30c8\uff08Java, Python, Node.js, Ruby, Go \u306a\u3069\uff09<\/li>\n\n\n\n<li>\u30ab\u30b9\u30bf\u30e0\u30d3\u30eb\u30c9\u74b0\u5883\u306e\u4f5c\u6210\u304c\u53ef\u80fd<\/li>\n\n\n\n<li>Docker\u30b3\u30f3\u30c6\u30ca\u30d9\u30fc\u30b9\u306e\u5b9f\u884c\u74b0\u5883<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30bb\u30ad\u30e5\u30a2\u306a\u5b9f\u884c\u74b0\u5883<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>VPC\u5185\u3067\u306e\u30d3\u30eb\u30c9\u5b9f\u884c\u304c\u53ef\u80fd<\/li>\n\n\n\n<li>KMS\u306b\u3088\u308b\u6697\u53f7\u5316<\/li>\n\n\n\n<li>IAM\u306b\u3088\u308b\u7d30\u304b\u306a\u30a2\u30af\u30bb\u30b9\u5236\u5fa1<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u512a\u308c\u305f\u62e1\u5f35\u6027<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>AWS \u306e\u5404\u7a2e\u30b5\u30fc\u30d3\u30b9\u3068\u306e\u9023\u643a<\/li>\n\n\n\n<li>Webhook\u306b\u3088\u308bGitHub\/BitBucket\u3068\u306e\u9023\u643a<\/li>\n\n\n\n<li>\u30ab\u30b9\u30bf\u30e0\u30d3\u30eb\u30c9\u30b3\u30de\u30f3\u30c9\u306e\u30b5\u30dd\u30fc\u30c8<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-2\">\u5f93\u6765\u306eCI\/CD\u30c4\u30fc\u30eb\u3068\u6bd4\u8f03\u3057\u305f\u30e1\u30ea\u30c3\u30c8<\/h3>\n\n\n\n<p>\u5f93\u6765\u306eCI\/CD\u30c4\u30fc\u30eb\u3068\u6bd4\u8f03\u3057\u305f\u969b\u306e AWS CodeBuild \u306e\u4e3b\u306a\u30e1\u30ea\u30c3\u30c8\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059\uff1a<\/p>\n\n\n<div id=\"id-4fe77172-935c-4622-a670-8e746e972556\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u6bd4\u8f03\u9805\u76ee<\/th><th>AWS CodeBuild<\/th><th>\u5f93\u6765\u578bCI\/CD\u30c4\u30fc\u30eb<\/th><\/tr><\/thead><tbody><tr><td>\u30a4\u30f3\u30d5\u30e9\u7ba1\u7406<\/td><td>\u4e0d\u8981\uff08\u30d5\u30eb\u30de\u30cd\u30fc\u30b8\u30c9\uff09<\/td><td>\u5fc5\u8981\uff08\u81ea\u5df1\u7ba1\u7406\uff09<\/td><\/tr><tr><td>\u30b9\u30b1\u30fc\u30ea\u30f3\u30b0<\/td><td>\u81ea\u52d5<\/td><td>\u624b\u52d5\u8a2d\u5b9a\u304c\u5fc5\u8981<\/td><\/tr><tr><td>\u30b3\u30b9\u30c8<\/td><td>\u4f7f\u7528\u5206\u306e\u307f\u8ab2\u91d1<\/td><td>\u56fa\u5b9a\u8cbb\u304c\u767a\u751f<\/td><\/tr><tr><td>\u521d\u671f\u8a2d\u5b9a<\/td><td>\u6700\u5c0f\u9650<\/td><td>\u6bd4\u8f03\u7684\u8907\u96d1<\/td><\/tr><tr><td>\u30e1\u30f3\u30c6\u30ca\u30f3\u30b9<\/td><td>AWS\u5074\u3067\u5bfe\u5fdc<\/td><td>\u81ea\u5df1\u8cac\u4efb<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<p>\u7279\u7b46\u3059\u3079\u304d\u5229\u70b9\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30b3\u30b9\u30c8\u52b9\u7387<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30d3\u30eb\u30c9\u6642\u9593\u306b\u5fdc\u3058\u305f\u5f93\u91cf\u8ab2\u91d1\u5236<\/li>\n\n\n\n<li>\u30a4\u30f3\u30d5\u30e9\u7dad\u6301\u8cbb\u306e\u524a\u6e1b<\/li>\n\n\n\n<li>\u30ea\u30bd\u30fc\u30b9\u306e\u52b9\u7387\u7684\u306a\u5229\u7528<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u904b\u7528\u52b9\u7387<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30a4\u30f3\u30d5\u30e9\u7ba1\u7406\u304b\u3089\u306e\u89e3\u653e<\/li>\n\n\n\n<li>\u81ea\u52d5\u30b9\u30b1\u30fc\u30ea\u30f3\u30b0\u306b\u3088\u308b\u5f85\u3061\u6642\u9593\u306e\u524a\u6e1b<\/li>\n\n\n\n<li>AWS \u30b5\u30fc\u30d3\u30b9\u3068\u306e\u30b7\u30fc\u30e0\u30ec\u30b9\u306a\u7d71\u5408<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u9ad8\u3044\u4fe1\u983c\u6027<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>AWS\u306b\u3088\u308b\u5197\u9577\u6027\u306e\u78ba\u4fdd<\/li>\n\n\n\n<li>\u30b0\u30ed\u30fc\u30d0\u30eb\u30a4\u30f3\u30d5\u30e9\u306e\u6d3b\u7528<\/li>\n\n\n\n<li>\u81ea\u52d5\u5316\u3055\u308c\u305f\u5fa9\u65e7\u30e1\u30ab\u30cb\u30ba\u30e0<\/li>\n<\/ul>\n\n\n\n<p>\u3053\u306e\u3088\u3046\u306b\u3001AWS CodeBuild\u306f\u7279\u306bAWS\u3092\u6d3b\u7528\u3057\u3066\u3044\u308b\u7d44\u7e54\u306b\u304a\u3044\u3066\u3001\u52b9\u7387\u7684\u3067\u4fe1\u983c\u6027\u306e\u9ad8\u3044\u30d3\u30eb\u30c9\u74b0\u5883\u3092\u5b9f\u73fe\u3067\u304d\u308b\u5f37\u529b\u306a\u30c4\u30fc\u30eb\u3068\u306a\u308a\u307e\u3059\u3002\u5f93\u6765\u578b\u306eCI\/CD\u30c4\u30fc\u30eb\u3068\u6bd4\u8f03\u3057\u3066\u3082\u3001\u904b\u7528\u8ca0\u8377\u3068\u30b3\u30b9\u30c8\u306e\u4e21\u9762\u3067\u512a\u4f4d\u6027\u304c\u3042\u308a\u3001\u591a\u304f\u306e\u958b\u767a\u30c1\u30fc\u30e0\u306b\u9069\u3057\u305f\u9078\u629e\u80a2\u3068\u3044\u3048\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-3\">AWS CodeBuild\u5c0e\u5165\u524d\u306e3\u3064\u306e\u91cd\u8981\u306a\u691c\u8a0e\u4e8b\u9805<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-4\">\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u6700\u9069\u306a\u30d3\u30eb\u30c9\u74b0\u5883\u306e\u9078\u629e\u65b9\u6cd5<\/h3>\n\n\n\n<p>\u30d3\u30eb\u30c9\u74b0\u5883\u306e\u9078\u629e\u306f\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u6210\u529f\u306b\u76f4\u7d50\u3059\u308b\u91cd\u8981\u306a\u6c7a\u5b9a\u4e8b\u9805\u3067\u3059\u3002\u4ee5\u4e0b\u306e\u8981\u7d20\u3092\u8003\u616e\u3057\u3066\u9078\u629e\u3092\u884c\u3044\u307e\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30b3\u30f3\u30d4\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u8981\u4ef6\u306e\u8a55\u4fa1<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>small: 3GB \u30e1\u30e2\u30ea, 2 vCPU<\/li>\n\n\n\n<li>medium: 7GB \u30e1\u30e2\u30ea, 4 vCPU<\/li>\n\n\n\n<li>large: 15GB \u30e1\u30e2\u30ea, 8 vCPU<\/li>\n\n\n\n<li>2xlarge: 145GB \u30e1\u30e2\u30ea, 72 vCPU<\/li>\n<\/ul>\n\n\n\n<p>\u9078\u629e\u306e\u5224\u65ad\u57fa\u6e96\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30d3\u30eb\u30c9\u51e6\u7406\u306e\u8907\u96d1\u3055<\/li>\n\n\n\n<li>\u5fc5\u8981\u306a\u30e1\u30e2\u30ea\u91cf<\/li>\n\n\n\n<li>\u4e26\u5217\u51e6\u7406\u306e\u8981\u4ef6<\/li>\n\n\n\n<li>\u30b3\u30f3\u30d1\u30a4\u30eb\u6642\u9593\u306e\u8981\u6c42<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30e9\u30f3\u30bf\u30a4\u30e0\u74b0\u5883\u306e\u6c7a\u5b9a<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u6a19\u6e96\u30e9\u30f3\u30bf\u30a4\u30e0\uff08Amazon Linux 2, Ubuntu\uff09<\/li>\n\n\n\n<li>\u30ab\u30b9\u30bf\u30e0\u30e9\u30f3\u30bf\u30a4\u30e0\uff08\u72ec\u81ea\u306eDocker \u30a4\u30e1\u30fc\u30b8\uff09<\/li>\n\n\n\n<li>GPU\u74b0\u5883\uff08\u6a5f\u68b0\u5b66\u7fd2\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u5411\u3051\uff09<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-5\">\u30b3\u30b9\u30c8\u8a66\u7b97\u3068\u30ea\u30bd\u30fc\u30b9\u8a2d\u8a08\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/h3>\n\n\n\n<p>CodeBuild\u306e\u30b3\u30b9\u30c8\u306f\u4ee5\u4e0b\u306e\u8981\u7d20\u304b\u3089\u69cb\u6210\u3055\u308c\u307e\u3059\uff1a<\/p>\n\n\n<div id=\"id-086c7640-2f5b-43f3-9826-0e7747236c37\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u30b3\u30f3\u30d4\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u30bf\u30a4\u30d7<\/th><th>\u6599\u91d1\uff08USD\/\u5206\uff09<\/th><th>\u6708\u9593\u30d3\u30eb\u30c9\u6642\u9593<\/th><th>\u6982\u7b97\u30b3\u30b9\u30c8\uff08USD\uff09<\/th><\/tr><\/thead><tbody><tr><td>small<\/td><td>$0.005<\/td><td>100\u6642\u9593<\/td><td>$30<\/td><\/tr><tr><td>medium<\/td><td>$0.01<\/td><td>100\u6642\u9593<\/td><td>$60<\/td><\/tr><tr><td>large<\/td><td>$0.02<\/td><td>100\u6642\u9593<\/td><td>$120<\/td><\/tr><tr><td>2xlarge<\/td><td>$0.20<\/td><td>100\u6642\u9593<\/td><td>$1,200<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<p>\u30b3\u30b9\u30c8\u6700\u9069\u5316\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30d3\u30eb\u30c9\u30b9\u30da\u30c3\u30af\u306e\u6700\u9069\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5fc5\u8981\u6700\u5c0f\u9650\u306e\u30b3\u30f3\u30d4\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u30bf\u30a4\u30d7\u3092\u9078\u629e<\/li>\n\n\n\n<li>\u30d3\u30eb\u30c9\u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u6d3b\u7528<\/li>\n\n\n\n<li>\u4e0d\u8981\u306a\u30d3\u30eb\u30c9\u30b9\u30c6\u30c3\u30d7\u306e\u524a\u9664<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30ea\u30bd\u30fc\u30b9\u4f7f\u7528\u306e\u52b9\u7387\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u4e26\u5217\u30d3\u30eb\u30c9\u306e\u9069\u5207\u306a\u8a2d\u5b9a<\/li>\n\n\n\n<li>\u30d3\u30eb\u30c9\u6642\u9593\u306e\u77ed\u7e2e\u5316<\/li>\n\n\n\n<li>\u30a2\u30fc\u30c6\u30a3\u30d5\u30a1\u30af\u30c8\u306e\u4fdd\u5b58\u671f\u9593\u306e\u6700\u9069\u5316<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-6\">\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u8a2d\u5b9a\u3067\u62bc\u3055\u3048\u308b\u3079\u304d\u30dd\u30a4\u30f3\u30c8<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30a2\u30af\u30bb\u30b9\u5236\u5fa1\u306e\u5b9f\u88c5<\/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            \"Principal\": {\n                \"Service\": \"codebuild.amazonaws.com\"\n            },\n            \"Action\": \"sts:AssumeRole\"\n        }\n    ]\n}<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u74b0\u5883\u5909\u6570\u306e\u5b89\u5168\u306a\u7ba1\u7406<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>AWS Systems Manager Parameter Store\u306e\u6d3b\u7528<\/li>\n\n\n\n<li>\u6a5f\u5bc6\u60c5\u5831\u306e\u6697\u53f7\u5316<\/li>\n\n\n\n<li>\u74b0\u5883\u5909\u6570\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u7ba1\u7406<\/li>\n<\/ul>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>VPC\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8\u306e\u8a2d\u5b9a<\/li>\n\n\n\n<li>\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30b0\u30eb\u30fc\u30d7\u306e\u9069\u5207\u306a\u69cb\u6210<\/li>\n\n\n\n<li>\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8\u30b5\u30d6\u30cd\u30c3\u30c8\u3067\u306e\u30d3\u30eb\u30c9\u5b9f\u884c<\/li>\n<\/ul>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u76e3\u67fb\u3068\u30b3\u30f3\u30d7\u30e9\u30a4\u30a2\u30f3\u30b9<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>AWS CloudTrail\u306b\u3088\u308b\u76e3\u67fb\u30ed\u30b0\u306e\u8a18\u9332<\/li>\n\n\n\n<li>\u30bf\u30b0\u4ed8\u3051\u306b\u3088\u308b\u30ea\u30bd\u30fc\u30b9\u7ba1\u7406<\/li>\n\n\n\n<li>\u30b3\u30f3\u30d7\u30e9\u30a4\u30a2\u30f3\u30b9\u8981\u4ef6\u3078\u306e\u5bfe\u5fdc<\/li>\n<\/ul>\n\n\n\n<p>\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30c1\u30a7\u30c3\u30af\u30ea\u30b9\u30c8\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>[ ] IAM\u30ed\u30fc\u30eb\u3068\u30dd\u30ea\u30b7\u30fc\u306e\u6700\u5c0f\u6a29\u9650\u8a2d\u5b9a<\/li>\n\n\n\n<li>[ ] \u6697\u53f7\u5316\u306e\u6709\u52b9\u5316\uff08\u4fdd\u5b58\u6642\u3068\u8ee2\u9001\u6642\uff09<\/li>\n\n\n\n<li>[ ] VPC\u8a2d\u5b9a\u306e\u78ba\u8a8d<\/li>\n\n\n\n<li>[ ] \u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30b0\u30eb\u30fc\u30d7\u306e\u8a2d\u5b9a<\/li>\n\n\n\n<li>[ ] \u76e3\u67fb\u30ed\u30b0\u306e\u6709\u52b9\u5316<\/li>\n\n\n\n<li>[ ] \u30b3\u30f3\u30d7\u30e9\u30a4\u30a2\u30f3\u30b9\u8981\u4ef6\u306e\u78ba\u8a8d<\/li>\n<\/ul>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u691c\u8a0e\u4e8b\u9805\u3092\u4e8b\u524d\u306b\u5341\u5206\u306b\u8a55\u4fa1\u3059\u308b\u3053\u3068\u3067\u3001AWS CodeBuild\u306e\u5c0e\u5165\u3092\u30b9\u30e0\u30fc\u30ba\u306b\u9032\u3081\u3001\u52b9\u7387\u7684\u3067\u5b89\u5168\u306a\u958b\u767a\u74b0\u5883\u3092\u69cb\u7bc9\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u7279\u306b\u3001\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u3068\u30b3\u30b9\u30c8\u306e\u9762\u3067\u306f\u3001\u958b\u767a\u521d\u671f\u6bb5\u968e\u3067\u306e\u9069\u5207\u306a\u8a2d\u8a08\u304c\u91cd\u8981\u3067\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-7\">\u5b9f\u8df5\uff1aAWS CodeBuild\u306e\u5177\u4f53\u7684\u306a\u5b9f\u88c5\u624b\u9806<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-8\">CodeBuild\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u4f5c\u6210\u3068\u521d\u671f\u8a2d\u5b9a<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\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=\"\"># AWS CLI\u3092\u4f7f\u7528\u3057\u305fCodeBuild\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u4f5c\u6210\naws codebuild create-project \\\n  --name \"my-first-build-project\" \\\n  --source \"type=GITHUB,location=https:\/\/github.com\/user\/repo.git\" \\\n  --environment \"type=LINUX_CONTAINER,image=aws\/codebuild\/amazonlinux2-x86_64-standard:3.0\" \\\n  --service-role \"arn:aws:iam::account-id:role\/service-role\/codebuild-service-role\"<\/pre>\n\n\n\n<p>\u5fc5\u8981\u306a\u8a2d\u5b9a\u9805\u76ee\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u540d<\/li>\n\n\n\n<li>\u30bd\u30fc\u30b9\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u306e\u9078\u629e<\/li>\n\n\n\n<li>\u30d3\u30eb\u30c9\u74b0\u5883\u306e\u6307\u5b9a<\/li>\n\n\n\n<li>\u30b5\u30fc\u30d3\u30b9\u30ed\u30fc\u30eb\u306e\u8a2d\u5b9a<\/li>\n\n\n\n<li>\u30a2\u30fc\u30c6\u30a3\u30d5\u30a1\u30af\u30c8\u306e\u4fdd\u5b58\u8a2d\u5b9a<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u74b0\u5883\u5909\u6570\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  \"environmentVariables\": [\n    {\n      \"name\": \"ENVIRONMENT\",\n      \"value\": \"production\",\n      \"type\": \"PLAINTEXT\"\n    },\n    {\n      \"name\": \"DB_PASSWORD\",\n      \"value\": \"db-password-parameter\",\n      \"type\": \"PARAMETER_STORE\"\n    }\n  ]\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-9\">buildspec.yml\u306e\u66f8\u304d\u65b9\u3068\u5b9f\u88c5\u4f8b<\/h3>\n\n\n\n<p>\u57fa\u672c\u7684\u306abuildspec.yml\u306e\u69cb\u9020\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=\"\">version: 0.2\n\nphases:\n  install:\n    runtime-versions:\n      nodejs: 14\n    commands:\n      - npm install -g yarn\n\n  pre_build:\n    commands:\n      - echo Logging in to Amazon ECR...\n      - aws ecr get-login-password --region $AWS_DEFAULT_REGION | docker login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com\n      - REPOSITORY_URI=$AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com\/$IMAGE_REPO_NAME\n\n  build:\n    commands:\n      - echo Build started on `date`\n      - yarn install\n      - yarn build\n      - docker build -t $REPOSITORY_URI:$IMAGE_TAG .\n\n  post_build:\n    commands:\n      - echo Build completed on `date`\n      - docker push $REPOSITORY_URI:$IMAGE_TAG\n      - printf '{\"imageTag\":\"%s\"}' $IMAGE_TAG &gt; build.json\n\nartifacts:\n  files:\n    - build.json\n    - appspec.yml\n  discard-paths: yes\n\ncache:\n  paths:\n    - 'node_modules\/**\/*'<\/pre>\n\n\n\n<p>\u4e3b\u8981\u306a\u30d5\u30a7\u30fc\u30ba\u306e\u8aac\u660e\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>install<\/strong>: \u30d3\u30eb\u30c9\u306b\u5fc5\u8981\u306a\u30c4\u30fc\u30eb\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb<\/li>\n\n\n\n<li><strong>pre_build<\/strong>: \u30d3\u30eb\u30c9\u524d\u306e\u6e96\u5099\u4f5c\u696d\uff08\u8a8d\u8a3c\u306a\u3069\uff09<\/li>\n\n\n\n<li><strong>build<\/strong>: \u30e1\u30a4\u30f3\u306e\u30d3\u30eb\u30c9\u51e6\u7406<\/li>\n\n\n\n<li><strong>post_build<\/strong>: \u30d3\u30eb\u30c9\u5f8c\u306e\u51e6\u7406\uff08\u30a2\u30fc\u30c6\u30a3\u30d5\u30a1\u30af\u30c8\u306e\u4fdd\u5b58\u306a\u3069\uff09<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-10\">\u30bd\u30fc\u30b9\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u3068\u306e\u9023\u643a\u8a2d\u5b9a<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>GitHub\u9023\u643a\u306e\u8a2d\u5b9a<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>OAuth\u8a8d\u8a3c\u306e\u8a2d\u5b9a<\/li>\n\n\n\n<li>Webhook\u306e\u8a2d\u5b9a<\/li>\n\n\n\n<li>\u30d6\u30e9\u30f3\u30c1\u30d5\u30a3\u30eb\u30bf\u30fc\u306e\u8a2d\u5b9a<\/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=\"\">{\n  \"filterGroups\": [\n    {\n      \"filters\": [\n        {\n          \"type\": \"EVENT\",\n          \"pattern\": \"PUSH, PULL_REQUEST_CREATED, PULL_REQUEST_UPDATED\"\n        },\n        {\n          \"type\": \"HEAD_REF\",\n          \"pattern\": \"^refs\/heads\/main$\"\n        }\n      ]\n    }\n  ]\n}<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>AWS CodeCommit\u9023\u643a<\/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-repo\" \\\n  --repository-description \"My application repository\"\n\n# CodeBuild\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u66f4\u65b0\naws codebuild update-project \\\n  --name \"my-first-build-project\" \\\n  --source \"type=CODECOMMIT,location=https:\/\/git-codecommit.region.amazonaws.com\/v1\/repos\/my-repo\"<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>BitBucket\u9023\u643a<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u8a8d\u8a3c\u60c5\u5831\u306e\u8a2d\u5b9a<\/li>\n\n\n\n<li>Webhook\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8\u306e\u8a2d\u5b9a<\/li>\n\n\n\n<li>\u30d3\u30eb\u30c9\u30c8\u30ea\u30ac\u30fc\u306e\u8a2d\u5b9a<\/li>\n<\/ul>\n\n\n\n<p>\u5b9f\u88c5\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u9069\u5207\u306aIAM\u30ed\u30fc\u30eb\u3068\u30dd\u30ea\u30b7\u30fc\u306e\u8a2d\u5b9a<\/li>\n\n\n\n<li>\u74b0\u5883\u5909\u6570\u306e\u5b89\u5168\u306a\u7ba1\u7406<\/li>\n\n\n\n<li>\u30d3\u30eb\u30c9\u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u6d3b\u7528<\/li>\n\n\n\n<li>\u30ed\u30b0\u3068\u30e1\u30c8\u30ea\u30af\u30b9\u306e\u6709\u52b9\u5316<\/li>\n\n\n\n<li>\u30bf\u30b0\u4ed8\u3051\u306b\u3088\u308b\u30ea\u30bd\u30fc\u30b9\u7ba1\u7406<\/li>\n\n\n\n<li>\u30a8\u30e9\u30fc\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0\u306e\u5b9f\u88c5<\/li>\n<\/ul>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u624b\u9806\u306b\u5f93\u3046\u3053\u3068\u3067\u3001\u57fa\u672c\u7684\u306aAWS CodeBuild\u306e\u74b0\u5883\u3092\u69cb\u7bc9\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u3088\u308a\u9ad8\u5ea6\u306a\u8981\u4ef6\u304c\u3042\u308b\u5834\u5408\u306f\u3001\u30ab\u30b9\u30bf\u30e0\u30d3\u30eb\u30c9\u74b0\u5883\u306e\u5229\u7528\u3084\u3001AWS CodePipeline\u3068\u306e\u9023\u643a\u3092\u691c\u8a0e\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-11\">AWS CodeBuild\u306e\u904b\u7528\u52b9\u7387\u3092\u9ad8\u3081\u308b\u5b9f\u8df5\u7684\u306a\u30d2\u30f3\u30c8<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-12\">\u30d3\u30eb\u30c9\u30ad\u30e3\u30c3\u30b7\u30e5\u3092\u6d3b\u7528\u3057\u305f\u30d3\u30eb\u30c9\u6642\u9593\u306e\u77ed\u7e2e\u5316<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30ed\u30fc\u30ab\u30eb\u30ad\u30e3\u30c3\u30b7\u30e5\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=\"\">version: 0.2\ncache:\n  paths:\n    - '\/root\/.m2\/**\/*'    # Maven\u306e\u4f9d\u5b58\u95a2\u4fc2\n    - 'node_modules\/**\/*'  # Node.js\u306e\u4f9d\u5b58\u95a2\u4fc2\n    - '.pip-cache\/**\/*'   # Python\u306e\u4f9d\u5b58\u95a2\u4fc2\n    - '\/go\/pkg\/mod\/**\/*'  # Go\u306e\u4f9d\u5b58\u95a2\u4fc2<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30ad\u30e3\u30c3\u30b7\u30e5\u30e2\u30fc\u30c9\u306e\u9078\u629e<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>LOCAL<\/strong>: \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u5185\u3067\u306e\u30ad\u30e3\u30c3\u30b7\u30e5<\/li>\n\n\n\n<li><strong>S3<\/strong>: S3\u30d0\u30b1\u30c3\u30c8\u3092\u4f7f\u7528\u3057\u305f\u30ad\u30e3\u30c3\u30b7\u30e5<\/li>\n\n\n\n<li><strong>NO_CACHE<\/strong>: \u30ad\u30e3\u30c3\u30b7\u30e5\u3092\u4f7f\u7528\u3057\u306a\u3044<\/li>\n<\/ul>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30ad\u30e3\u30c3\u30b7\u30e5\u6226\u7565\u306e\u6700\u9069\u5316<\/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  \"cache\": {\n    \"type\": \"S3\",\n    \"location\": \"my-bucket\/cache\",\n    \"modes\": [\n      \"LOCAL_DOCKER_LAYER_CACHE\",\n      \"LOCAL_SOURCE_CACHE\"\n    ]\n  }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-13\">CloudWatch\u3068\u306e\u9023\u643a\u306b\u3088\u308b\u30e2\u30cb\u30bf\u30ea\u30f3\u30b0\u5f37\u5316<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u4e3b\u8981\u30e1\u30c8\u30ea\u30af\u30b9\u306e\u76e3\u8996<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30d3\u30eb\u30c9\u6210\u529f\u7387<\/li>\n\n\n\n<li>\u30d3\u30eb\u30c9\u6642\u9593<\/li>\n\n\n\n<li>\u30ad\u30e5\u30fc\u5f85\u3061\u6642\u9593<\/li>\n\n\n\n<li>\u30ea\u30bd\u30fc\u30b9\u4f7f\u7528\u7387<\/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=\"\"># CloudWatch \u30e1\u30c8\u30ea\u30af\u30b9\u306e\u53d6\u5f97\u4f8b\naws cloudwatch get-metric-statistics \\\n  --namespace AWS\/CodeBuild \\\n  --metric-name BuildDuration \\\n  --dimensions Name=ProjectName,Value=my-project \\\n  --start-time 2025-01-13T00:00:00 \\\n  --end-time 2025-01-20T00:00:00 \\\n  --period 3600 \\\n  --statistics Average Maximum<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30a2\u30e9\u30fc\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=\"\">{\n  \"AlarmName\": \"BuildFailureAlert\",\n  \"ComparisonOperator\": \"GreaterThanThreshold\",\n  \"EvaluationPeriods\": 1,\n  \"MetricName\": \"FailedBuilds\",\n  \"Namespace\": \"AWS\/CodeBuild\",\n  \"Period\": 300,\n  \"Statistic\": \"Sum\",\n  \"Threshold\": 2,\n  \"ActionsEnabled\": true,\n  \"AlarmActions\": [\"arn:aws:sns:region:account-id:alert-topic\"]\n}<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u30ed\u30b0\u5206\u6790\u306e\u81ea\u52d5\u5316<\/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=\"\">import boto3\nimport json\n\ndef analyze_build_logs(project_name):\n    logs_client = boto3.client('logs')\n\n    response = logs_client.filter_log_events(\n        logGroupName=f'\/aws\/codebuild\/{project_name}',\n        filterPattern='ERROR'\n    )\n\n    return response['events']<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-14\">\u30de\u30eb\u30c1\u30d6\u30e9\u30f3\u30c1\u30d3\u30eb\u30c9\u306e\u52b9\u7387\u7684\u306a\u7ba1\u7406\u65b9\u6cd5<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30d6\u30e9\u30f3\u30c1\u5225\u306e\u30d3\u30eb\u30c9\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=\"\">version: 0.2\nphases:\n  build:\n    commands:\n      - |\n        if [ \"$CODEBUILD_WEBHOOK_HEAD_REF\" = \"refs\/heads\/main\" ]; then\n          echo \"Running production build\"\n          npm run build:prod\n        elif [ \"$CODEBUILD_WEBHOOK_HEAD_REF\" = \"refs\/heads\/staging\" ]; then\n          echo \"Running staging build\"\n          npm run build:staging\n        else\n          echo \"Running development build\"\n          npm run build:dev\n        fi<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u4e26\u5217\u30d3\u30eb\u30c9\u306e\u6700\u9069\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30d3\u30eb\u30c9\u30ad\u30e5\u30fc\u306e\u512a\u5148\u9806\u4f4d\u8a2d\u5b9a<\/li>\n\n\n\n<li>\u30ea\u30bd\u30fc\u30b9\u5236\u9650\u306e\u9069\u5207\u306a\u8a2d\u5b9a<\/li>\n\n\n\n<li>\u4f9d\u5b58\u95a2\u4fc2\u306e\u52b9\u7387\u7684\u306a\u7ba1\u7406<\/li>\n<\/ul>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30d3\u30eb\u30c9\u30de\u30c8\u30ea\u30c3\u30af\u30b9\u306e\u6d3b\u7528<\/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=\"\">matrix:\n  versions:\n    - node: 14\n      python: 3.8\n    - node: 16\n      python: 3.9\n    - node: 18\n      python: 3.10\n\nphases:\n  install:\n    runtime-versions:\n      nodejs: $node\n      python: $python<\/pre>\n\n\n\n<p>\u52b9\u7387\u5316\u306e\u305f\u3081\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30d3\u30eb\u30c9\u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u306e\u6700\u9069\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u4e0d\u8981\u306a\u30b9\u30c6\u30c3\u30d7\u306e\u524a\u9664<\/li>\n\n\n\n<li>\u4f9d\u5b58\u95a2\u4fc2\u306e\u4e26\u5217\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb<\/li>\n\n\n\n<li>\u30c6\u30b9\u30c8\u306e\u52b9\u7387\u7684\u306a\u5b9f\u884c<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30ea\u30bd\u30fc\u30b9\u4f7f\u7528\u306e\u6700\u9069\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u9069\u5207\u306a\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u30bf\u30a4\u30d7\u306e\u9078\u629e<\/li>\n\n\n\n<li>\u30aa\u30fc\u30c8\u30b9\u30b1\u30fc\u30ea\u30f3\u30b0\u306e\u8a2d\u5b9a<\/li>\n\n\n\n<li>\u30b3\u30b9\u30c8\u52b9\u7387\u306e\u76e3\u8996<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u958b\u767a\u8005\u4f53\u9a13\u306e\u5411\u4e0a<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u660e\u78ba\u306a\u30a8\u30e9\u30fc\u30e1\u30c3\u30bb\u30fc\u30b8<\/li>\n\n\n\n<li>\u30d3\u30eb\u30c9\u7d50\u679c\u306e\u8fc5\u901f\u306a\u30d5\u30a3\u30fc\u30c9\u30d0\u30c3\u30af<\/li>\n\n\n\n<li>\u30c7\u30d0\u30c3\u30b0\u60c5\u5831\u306e\u5145\u5b9f<\/li>\n<\/ul>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u65bd\u7b56\u3092\u9069\u5207\u306b\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u3067\u3001AWS CodeBuild\u306e\u904b\u7528\u52b9\u7387\u3092\u5927\u5e45\u306b\u5411\u4e0a\u3055\u305b\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u7279\u306b\u3001\u30ad\u30e3\u30c3\u30b7\u30e5\u6226\u7565\u3068\u30e2\u30cb\u30bf\u30ea\u30f3\u30b0\u306e\u9069\u5207\u306a\u8a2d\u5b9a\u306f\u3001\u30d3\u30eb\u30c9\u6642\u9593\u306e\u77ed\u7e2e\u3068\u30c8\u30e9\u30d6\u30eb\u306e\u65e9\u671f\u767a\u898b\u306b\u5927\u304d\u304f\u8ca2\u732e\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-15\">\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\uff1a\u3088\u304f\u3042\u308b\u554f\u984c\u3068\u89e3\u6c7a\u7b56<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-16\">\u30d3\u30eb\u30c9\u5931\u6557\u6642\u306e\u539f\u56e0\u7279\u5b9a\u3068\u5bfe\u51e6\u6cd5<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u4e00\u822c\u7684\u306a\u30d3\u30eb\u30c9\u30a8\u30e9\u30fc\u3068\u305d\u306e\u89e3\u6c7a\u7b56<\/strong><\/li>\n<\/ol>\n\n\n<div id=\"id-f28bcf63-18cd-4b0f-8f14-f4688603c8cc\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u30a8\u30e9\u30fc\u30bf\u30a4\u30d7<\/th><th>\u8003\u3048\u3089\u308c\u308b\u539f\u56e0<\/th><th>\u89e3\u6c7a\u7b56<\/th><\/tr><\/thead><tbody><tr><td>DOWNLOAD_SOURCE_FAILED<\/td><td>\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u3078\u306e\u30a2\u30af\u30bb\u30b9\u6a29\u9650\u4e0d\u8db3<\/td><td>IAM\u30ed\u30fc\u30eb\u306e\u6a29\u9650\u78ba\u8a8d\u3068GitHub\/BitBucket\u306e\u8a8d\u8a3c\u8a2d\u5b9a\u306e\u78ba\u8a8d<\/td><\/tr><tr><td>COMMAND_EXECUTION_ERROR<\/td><td>\u30d3\u30eb\u30c9\u30b3\u30de\u30f3\u30c9\u306e\u5931\u6557<\/td><td>buildspec.yml\u306e\u69cb\u6587\u78ba\u8a8d\u3068\u30b3\u30de\u30f3\u30c9\u306e\u59a5\u5f53\u6027\u691c\u8a3c<\/td><\/tr><tr><td>RESOURCE_NOT_FOUND<\/td><td>\u5fc5\u8981\u306a\u30ea\u30bd\u30fc\u30b9\u304c\u898b\u3064\u304b\u3089\u306a\u3044<\/td><td>\u4f9d\u5b58\u95a2\u4fc2\u306e\u78ba\u8a8d\u3068\u30d1\u30b9\u306e\u6b63\u78ba\u6027\u306e\u78ba\u8a8d<\/td><\/tr><tr><td>INSUFFICIENT_CAPACITY<\/td><td>\u30ea\u30bd\u30fc\u30b9\u5236\u9650\u306b\u5230\u9054<\/td><td>\u30b3\u30f3\u30d4\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u30bf\u30a4\u30d7\u306e\u5909\u66f4\u307e\u305f\u306f\u30af\u30a9\u30fc\u30bf\u5f15\u304d\u4e0a\u3052\u7533\u8acb<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30a8\u30e9\u30fc\u8a3a\u65ad\u624b\u9806<\/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=\"\"># \u30d3\u30eb\u30c9\u30ed\u30b0\u306e\u78ba\u8a8d\naws codebuild batch-get-builds --ids build-id \\\n  --query 'builds[].logs.cloudWatchLogs.deepLink'\n\n# \u30d3\u30eb\u30c9\u30b9\u30c6\u30fc\u30bf\u30b9\u306e\u78ba\u8a8d\naws codebuild list-builds-for-project \\\n  --project-name my-project \\\n  --sort-order DESCENDING \\\n  --max-items 5<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u306e\u57fa\u672c\u30b9\u30c6\u30c3\u30d7<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30d3\u30eb\u30c9\u30ed\u30b0\u306e\u8a73\u7d30\u306a\u78ba\u8a8d<\/li>\n\n\n\n<li>\u74b0\u5883\u5909\u6570\u306e\u5024\u306e\u691c\u8a3c<\/li>\n\n\n\n<li>\u4f9d\u5b58\u95a2\u4fc2\u306e\u78ba\u8a8d<\/li>\n\n\n\n<li>IAM\u6a29\u9650\u306e\u691c\u8a3c<\/li>\n\n\n\n<li>\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u63a5\u7d9a\u6027\u306e\u30c6\u30b9\u30c8<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-17\">\u6a29\u9650\u95a2\u9023\u306e\u30c8\u30e9\u30d6\u30eb\u89e3\u6c7a\u30d5\u30ed\u30fc<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>IAM\u30ed\u30fc\u30eb\u306e\u6a29\u9650\u4e0d\u8db3<\/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            \"Resource\": [\n                \"arn:aws:logs:region:account-id:log-group:\/aws\/codebuild\/*\",\n                \"arn:aws:logs:region:account-id:log-stream:*\"\n            ],\n            \"Action\": [\n                \"logs:CreateLogGroup\",\n                \"logs:CreateLogStream\",\n                \"logs:PutLogEvents\"\n            ]\n        },\n        {\n            \"Effect\": \"Allow\",\n            \"Resource\": [\n                \"arn:aws:s3:::codepipeline-region-*\"\n            ],\n            \"Action\": [\n                \"s3:PutObject\",\n                \"s3:GetObject\",\n                \"s3:GetObjectVersion\"\n            ]\n        }\n    ]\n}<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u6a29\u9650\u306e\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u30c1\u30a7\u30c3\u30af\u30ea\u30b9\u30c8<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>[ ] \u30b5\u30fc\u30d3\u30b9\u30ed\u30fc\u30eb\u306e\u6a29\u9650\u78ba\u8a8d<\/li>\n\n\n\n<li>[ ] \u30ea\u30bd\u30fc\u30b9\u30dd\u30ea\u30b7\u30fc\u306e\u78ba\u8a8d<\/li>\n\n\n\n<li>[ ] \u30af\u30ed\u30b9\u30a2\u30ab\u30a6\u30f3\u30c8\u30a2\u30af\u30bb\u30b9\u306e\u8a2d\u5b9a\u78ba\u8a8d<\/li>\n\n\n\n<li>[ ] VPC\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8\u306e\u6a29\u9650\u78ba\u8a8d<\/li>\n<\/ul>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u3088\u304f\u3042\u308b\u6a29\u9650\u30a8\u30e9\u30fc\u3068\u89e3\u6c7a\u7b56<\/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=\"\"># \u6a29\u9650\u30a8\u30e9\u30fc\u306e\u78ba\u8a8d\naws iam simulate-principal-policy \\\n  --policy-source-arn arn:aws:iam::account-id:role\/service-role\/codebuild-role \\\n  --action-names s3:PutObject \\\n  --resource-arns arn:aws:s3:::my-bucket\/*<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-18\">\u30ea\u30bd\u30fc\u30b9\u5236\u9650\u3078\u306e\u5bfe\u51e6\u65b9\u6cd5<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30ea\u30bd\u30fc\u30b9\u4f7f\u7528\u72b6\u6cc1\u306e\u76e3\u8996<\/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=\"\">import boto3\n\ndef check_resource_limits():\n    client = boto3.client('codebuild')\n\n    response = client.list_projects()\n    project_count = len(response['projects'])\n\n    print(f\"Total projects: {project_count}\")\n\n    # \u5404\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u30d3\u30eb\u30c9\u6570\u3092\u78ba\u8a8d\n    for project in response['projects']:\n        builds = client.list_builds_for_project(\n            projectName=project,\n            sortOrder='DESCENDING',\n            maxResults=10\n        )\n        print(f\"Project {project}: {len(builds['ids'])} recent builds\")<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30ea\u30bd\u30fc\u30b9\u6700\u9069\u5316\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u4e0d\u8981\u306a\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u524a\u9664<\/li>\n\n\n\n<li>\u30d3\u30eb\u30c9\u30bf\u30a4\u30e0\u30a2\u30a6\u30c8\u306e\u9069\u5207\u306a\u8a2d\u5b9a<\/li>\n\n\n\n<li>\u4e26\u5217\u30d3\u30eb\u30c9\u6570\u306e\u5236\u5fa1<\/li>\n\n\n\n<li>\u30a2\u30fc\u30c6\u30a3\u30d5\u30a1\u30af\u30c8\u306e\u4fdd\u6301\u671f\u9593\u306e\u8a2d\u5b9a<\/li>\n<\/ul>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30b9\u30b1\u30fc\u30ea\u30f3\u30b0\u6226\u7565<\/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\u3067\u306e\u30ea\u30bd\u30fc\u30b9\u8a2d\u5b9a\u4f8b\nphases:\n  build:\n    commands:\n      - |\n        if [ \"$BUILD_TYPE\" = \"small\" ]; then\n          export JAVA_OPTS=\"-Xmx512m\"\n        else\n          export JAVA_OPTS=\"-Xmx2g\"\n        fi\n      - .\/gradlew build\n\ncache:\n  paths:\n    - '\/root\/.gradle\/caches\/**\/*'\n    - '\/root\/.gradle\/wrapper\/**\/*'<\/pre>\n\n\n\n<p>\u30a8\u30e9\u30fc\u767a\u751f\u6642\u306e\u4e00\u822c\u7684\u306a\u5bfe\u51e6\u624b\u9806\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u521d\u671f\u8a3a\u65ad<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30a8\u30e9\u30fc\u30e1\u30c3\u30bb\u30fc\u30b8\u306e\u78ba\u8a8d<\/li>\n\n\n\n<li>\u30d3\u30eb\u30c9\u30ed\u30b0\u306e\u5206\u6790<\/li>\n\n\n\n<li>\u74b0\u5883\u5909\u6570\u306e\u78ba\u8a8d<\/li>\n\n\n\n<li>\u30b7\u30b9\u30c6\u30e0\u30ea\u30bd\u30fc\u30b9\u306e\u78ba\u8a8d<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u8a73\u7d30\u306a\u8abf\u67fb<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30c7\u30d0\u30c3\u30b0\u30ed\u30b0\u306e\u6709\u52b9\u5316<\/li>\n\n\n\n<li>\u30c6\u30b9\u30c8\u74b0\u5883\u3067\u306e\u518d\u73fe\u78ba\u8a8d<\/li>\n\n\n\n<li>\u4f9d\u5b58\u95a2\u4fc2\u306e\u691c\u8a3c<\/li>\n\n\n\n<li>\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u63a5\u7d9a\u6027\u306e\u30c6\u30b9\u30c8<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u89e3\u6c7a\u3068\u4e88\u9632<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u554f\u984c\u306e\u6839\u672c\u539f\u56e0\u306e\u7279\u5b9a<\/li>\n\n\n\n<li>\u518d\u767a\u9632\u6b62\u7b56\u306e\u5b9f\u88c5<\/li>\n\n\n\n<li>\u30e2\u30cb\u30bf\u30ea\u30f3\u30b0\u306e\u5f37\u5316<\/li>\n\n\n\n<li>\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306e\u66f4\u65b0<\/li>\n<\/ul>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u624b\u9806\u3092\u7406\u89e3\u3057\u3001\u5b9f\u8df5\u3059\u308b\u3053\u3068\u3067\u3001AWS CodeBuild\u306e\u554f\u984c\u3092\u52b9\u7387\u7684\u306b\u89e3\u6c7a\u3067\u304d\u307e\u3059\u3002\u307e\u305f\u3001\u4e88\u9632\u7684\u306a\u30a2\u30d7\u30ed\u30fc\u30c1\u3092\u63a1\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u554f\u984c\u306e\u767a\u751f\u81ea\u4f53\u3092\u6700\u5c0f\u9650\u306b\u6291\u3048\u308b\u3053\u3068\u304c\u53ef\u80fd\u3067\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-19\">AWS CodeBuild\u306e\u30b3\u30b9\u30c8\u6700\u9069\u5316\u30ac\u30a4\u30c9<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-20\">\u30d3\u30eb\u30c9\u6642\u9593\u3068\u30b3\u30b9\u30c8\u306e\u95a2\u4fc2\u6027\u3092\u7406\u89e3\u3059\u308b<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30b3\u30b9\u30c8\u69cb\u9020\u306e\u628a\u63e1<\/strong><\/li>\n<\/ol>\n\n\n<div id=\"id-dd1c417d-7d5e-4bc4-9603-4a01698309ae\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u30bf\u30a4\u30d7<\/th><th>\u30e1\u30e2\u30ea<\/th><th>vCPU<\/th><th>\u30b3\u30b9\u30c8($\/\u5206)<\/th><th>\u6708\u9593100\u6642\u9593\u4f7f\u7528\u6642\u306e\u30b3\u30b9\u30c8($)<\/th><\/tr><\/thead><tbody><tr><td>build.general1.small<\/td><td>3GB<\/td><td>2<\/td><td>0.005<\/td><td>30<\/td><\/tr><tr><td>build.general1.medium<\/td><td>7GB<\/td><td>4<\/td><td>0.01<\/td><td>60<\/td><\/tr><tr><td>build.general1.large<\/td><td>15GB<\/td><td>8<\/td><td>0.02<\/td><td>120<\/td><\/tr><tr><td>build.general1.2xlarge<\/td><td>145GB<\/td><td>72<\/td><td>0.20<\/td><td>1,200<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30b3\u30b9\u30c8\u5206\u6790\u30c4\u30fc\u30eb\u306e\u6d3b\u7528<\/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=\"\">import boto3\nfrom datetime import datetime, timedelta\n\ndef analyze_build_costs():\n    client = boto3.client('codebuild')\n    cloudwatch = boto3.client('cloudwatch')\n\n    # \u904e\u53bb30\u65e5\u9593\u306e\u30d3\u30eb\u30c9\u6642\u9593\u3092\u53d6\u5f97\n    response = cloudwatch.get_metric_statistics(\n        Namespace='AWS\/CodeBuild',\n        MetricName='BuildDuration',\n        Dimensions=[{'Name': 'ProjectName', 'Value': 'my-project'}],\n        StartTime=datetime.now() - timedelta(days=30),\n        EndTime=datetime.now(),\n        Period=86400,\n        Statistics=['Sum']\n    )\n\n    # \u30b3\u30b9\u30c8\u8a08\u7b97\n    total_minutes = sum([datapoint['Sum'] for datapoint in response['Datapoints']]) \/ 60\n    cost = total_minutes * 0.01  # medium \u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u5834\u5408\n\n    return {'total_minutes': total_minutes, 'estimated_cost': cost}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-21\">\u30b3\u30f3\u30d4\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u30bf\u30a4\u30d7\u306e\u6700\u9069\u306a\u9078\u629e\u65b9\u6cd5<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u30bf\u30a4\u30d7\u5225\u306e\u63a8\u5968\u8a2d\u5b9a<\/strong><\/li>\n<\/ol>\n\n\n<div id=\"id-d0a621a4-c222-466d-b76b-163d084d1c3c\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u30bf\u30a4\u30d7<\/th><th>\u63a8\u5968\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9<\/th><th>\u9078\u629e\u7406\u7531<\/th><\/tr><\/thead><tbody><tr><td>\u30d5\u30ed\u30f3\u30c8\u30a8\u30f3\u30c9 (Node.js)<\/td><td>small<\/td><td>\u6bd4\u8f03\u7684\u8efd\u91cf\u306a\u30d3\u30eb\u30c9\u51e6\u7406<\/td><\/tr><tr><td>\u30d0\u30c3\u30af\u30a8\u30f3\u30c9 (Java)<\/td><td>medium<\/td><td>\u30b3\u30f3\u30d1\u30a4\u30eb\u6642\u306e\u30e1\u30e2\u30ea\u8981\u4ef6<\/td><\/tr><tr><td>\u30e2\u30ce\u30ec\u30dd<\/td><td>large<\/td><td>\u8907\u6570\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u540c\u6642\u30d3\u30eb\u30c9<\/td><\/tr><tr><td>ML\/AI<\/td><td>2xlarge<\/td><td>\u5927\u898f\u6a21\u306a\u30ea\u30bd\u30fc\u30b9\u8981\u4ef6<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u9078\u629e\u306e\u5224\u65ad\u57fa\u6e96<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30d3\u30eb\u30c9\u51e6\u7406\u306e\u8981\u4ef6\u5206\u6790<\/li>\n\n\n\n<li>\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u306e\u76e3\u8996<\/li>\n\n\n\n<li>CPU\u4f7f\u7528\u7387\u306e\u78ba\u8a8d<\/li>\n\n\n\n<li>\u30d3\u30eb\u30c9\u6642\u9593\u306e\u6e2c\u5b9a<\/li>\n<\/ul>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316\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=\"\">version: 0.2\nphases:\n  install:\n    runtime-versions:\n      java: corretto11\n    commands:\n      # \u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u306e\u6700\u9069\u5316\n      - export GRADLE_OPTS=\"-Dorg.gradle.daemon=false -Dorg.gradle.workers.max=4\"\n      - export MAVEN_OPTS=\"-Xmx1024m\"\n\n  build:\n    commands:\n      # \u4e26\u5217\u30d3\u30eb\u30c9\u306e\u5236\u5fa1\n      - mvn -T 4 clean install\n\ncache:\n  paths:\n    # \u52b9\u7387\u7684\u306a\u30ad\u30e3\u30c3\u30b7\u30e5\u8a2d\u5b9a\n    - '\/root\/.m2\/**\/*'\n    - 'target\/generated-sources\/**\/*'<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-22\">\u4e0d\u8981\u306a\u30d3\u30eb\u30c9\u3092\u9632\u3050\u305f\u3081\u306e\u8a2d\u5b9a\u3068\u904b\u7528<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30d3\u30eb\u30c9\u30c8\u30ea\u30ac\u30fc\u306e\u6700\u9069\u5316<\/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  \"webhookFilter\": {\n    \"type\": \"EVENT\",\n    \"pattern\": \"PUSH\",\n    \"excludeMatchedPattern\": false\n  },\n  \"filterGroups\": [\n    {\n      \"filters\": [\n        {\n          \"type\": \"BASE_REF\",\n          \"pattern\": \"^refs\/heads\/main$\"\n        },\n        {\n          \"type\": \"FILE_PATH\",\n          \"pattern\": \"^(src\/|pom.xml|build.gradle).*\"\n        }\n      ]\n    }\n  ]\n}<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30b3\u30b9\u30c8\u524a\u6e1b\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30d3\u30eb\u30c9\u30bf\u30a4\u30e0\u30a2\u30a6\u30c8\u306e\u9069\u5207\u306a\u8a2d\u5b9a<\/li>\n\n\n\n<li>\u4e0d\u8981\u306a\u30d3\u30eb\u30c9\u30b9\u30c6\u30c3\u30d7\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>\u30ea\u30bd\u30fc\u30b9\u306e\u30af\u30ea\u30fc\u30f3\u30a2\u30c3\u30d7\u81ea\u52d5\u5316<\/li>\n<\/ul>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30b3\u30b9\u30c8\u30e2\u30cb\u30bf\u30ea\u30f3\u30b0\u306e\u5b9f\u88c5<\/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=\"\"># AWS CLI\u3092\u4f7f\u7528\u3057\u305f\u30b3\u30b9\u30c8\u76e3\u8996\naws cloudwatch get-metric-statistics \\\n  --namespace AWS\/CodeBuild \\\n  --metric-name BuildDuration \\\n  --dimensions Name=ProjectName,Value=my-project \\\n  --start-time $(date -v-30d +%Y-%m-%dT%H:%M:%S) \\\n  --end-time $(date +%Y-%m-%dT%H:%M:%S) \\\n  --period 86400 \\\n  --statistics Sum \\\n  --region us-west-2<\/pre>\n\n\n\n<p>\u30b3\u30b9\u30c8\u6700\u9069\u5316\u306e\u30c1\u30a7\u30c3\u30af\u30ea\u30b9\u30c8\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>[ ] \u9069\u5207\u306a\u30b3\u30f3\u30d4\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u30bf\u30a4\u30d7\u306e\u9078\u629e<\/li>\n\n\n\n<li>[ ] \u30d3\u30eb\u30c9\u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u6709\u52b9\u6d3b\u7528<\/li>\n\n\n\n<li>[ ] \u4e0d\u8981\u306a\u30d3\u30eb\u30c9\u306e\u9632\u6b62<\/li>\n\n\n\n<li>[ ] \u30ea\u30bd\u30fc\u30b9\u306e\u30af\u30ea\u30fc\u30f3\u30a2\u30c3\u30d7<\/li>\n\n\n\n<li>[ ] \u30b3\u30b9\u30c8\u30e2\u30cb\u30bf\u30ea\u30f3\u30b0\u306e\u5b9f\u88c5<\/li>\n\n\n\n<li>[ ] \u5b9a\u671f\u7684\u306a\u30b3\u30b9\u30c8\u5206\u6790\u306e\u5b9f\u65bd<\/li>\n<\/ul>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u6700\u9069\u5316\u7b56\u3092\u5b9f\u65bd\u3059\u308b\u3053\u3068\u3067\u3001AWS CodeBuild\u306e\u904b\u7528\u30b3\u30b9\u30c8\u3092\u52b9\u679c\u7684\u306b\u524a\u6e1b\u3057\u306a\u304c\u3089\u3001\u5fc5\u8981\u306a\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u7dad\u6301\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u5b9a\u671f\u7684\u306a\u30b3\u30b9\u30c8\u5206\u6790\u3068\u6700\u9069\u5316\u306e\u898b\u76f4\u3057\u3092\u884c\u3046\u3053\u3068\u3067\u3001\u9577\u671f\u7684\u306a\u8cbb\u7528\u5bfe\u52b9\u679c\u306e\u5411\u4e0a\u304c\u671f\u5f85\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-23\">\u5b9f\u8df5\u7684\u306a\u30e6\u30fc\u30b9\u30b1\u30fc\u30b9\u3068\u5fdc\u7528\u4f8b<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-24\">Docker\u30b3\u30f3\u30c6\u30ca\u306e\u30d3\u30eb\u30c9\u3068\u5c55\u958b<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30de\u30eb\u30c1\u30b9\u30c6\u30fc\u30b8\u30d3\u30eb\u30c9\u306e\u5b9f\u88c5<\/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=\"\"># \u30d3\u30eb\u30c9\u30b9\u30c6\u30fc\u30b8\nFROM node:16 AS builder\nWORKDIR \/app\nCOPY package*.json .\/\nRUN npm install\nCOPY . .\nRUN npm run build\n\n# \u5b9f\u884c\u30b9\u30c6\u30fc\u30b8\nFROM nginx:alpine\nCOPY --from=builder \/app\/build \/usr\/share\/nginx\/html\nEXPOSE 80\nCMD [\"nginx\", \"-g\", \"daemon off;\"]<\/pre>\n\n\n\n<p>\u5bfe\u5fdc\u3059\u308b<code>buildspec.yml<\/code>:<\/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=\"\">version: 0.2\n\nphases:\n  pre_build:\n    commands:\n      - aws ecr get-login-password --region ${AWS_DEFAULT_REGION} | docker login --username AWS --password-stdin ${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_DEFAULT_REGION}.amazonaws.com\n      - REPOSITORY_URI=${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_DEFAULT_REGION}.amazonaws.com\/${IMAGE_REPO_NAME}\n      - IMAGE_TAG=$(echo $CODEBUILD_RESOLVED_SOURCE_VERSION | cut -c 1-7)\n\n  build:\n    commands:\n      - docker build -t ${REPOSITORY_URI}:${IMAGE_TAG} .\n      - docker tag ${REPOSITORY_URI}:${IMAGE_TAG} ${REPOSITORY_URI}:latest\n\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\n\nartifacts:\n  files:\n    - imageDefinitions.json<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>ECR\u3068\u306e\u9023\u643a\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=\"\"># ECR\u30ea\u30dd\u30b8\u30c8\u30ea\u306e\u4f5c\u6210\naws ecr create-repository \\\n    --repository-name my-app \\\n    --image-scanning-configuration scanOnPush=true \\\n    --encryption-configuration encryptionType=KMS\n\n# \u30a4\u30e1\u30fc\u30b8\u306e\u30b9\u30ad\u30e3\u30f3\u7d50\u679c\u306e\u78ba\u8a8d\naws ecr describe-image-scan-findings \\\n    --repository-name my-app \\\n    --image-id imageTag=latest<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-25\">\u30b9\u30c6\u30fc\u30b8\u30de\u30eb\u30c1\u30d3\u30eb\u30c9\u306e\u5b9f\u88c5\u65b9\u6cd5<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u74b0\u5883\u5225\u306e\u30d3\u30eb\u30c9\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=\"\">version: 0.2\n\nphases:\n  install:\n    runtime-versions:\n      nodejs: 16\n\n  pre_build:\n    commands:\n      - if [ \"$ENV\" = \"prod\" ]; then\n          echo \"Running production build\"\n          export API_URL=https:\/\/api.prod.example.com\n        elif [ \"$ENV\" = \"staging\" ]; then\n          echo \"Running staging build\"\n          export API_URL=https:\/\/api.staging.example.com\n        else\n          echo \"Running development build\"\n          export API_URL=https:\/\/api.dev.example.com\n        fi\n      - npm install\n\n  build:\n    commands:\n      - echo \"Building for $ENV environment\"\n      - npm run build:$ENV\n\n  post_build:\n    commands:\n      - aws s3 sync build\/ s3:\/\/$BUCKET_NAME\/$ENV\/ --delete\n      - aws cloudfront create-invalidation --distribution-id $CF_DIST_ID --paths \"\/$ENV\/*\"\n\nartifacts:\n  base-directory: build\n  files:\n    - '**\/*'<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30c6\u30b9\u30c8\u81ea\u52d5\u5316\u306e\u5b9f\u88c5<\/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=\"\">version: 0.2\n\nphases:\n  install:\n    runtime-versions:\n      nodejs: 16\n\n  pre_build:\n    commands:\n      - npm install\n      - npm install -g jest\n\n  build:\n    commands:\n      - npm run test:unit\n      - npm run test:integration\n      - npm run test:e2e\n\nreports:\n  jest_reports:\n    files:\n      - 'junit.xml'\n    file-format: JUNITXML\n    base-directory: 'reports'<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-26\">CodePipeline\u3068\u306e\u52b9\u679c\u7684\u306a\u9023\u643a\u65b9\u6cd5<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u8907\u5408\u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u306e\u69cb\u7bc9<\/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\": \"MyAppPipeline\",\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                            \"RepositoryName\": \"MyApp\",\n                            \"BranchName\": \"main\"\n                        },\n                        \"outputArtifacts\": [\n                            {\n                                \"name\": \"SourceOutput\"\n                            }\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                        \"configuration\": {\n                            \"ProjectName\": \"MyAppBuild\"\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>\u627f\u8a8d\u30d5\u30ed\u30fc\u306e\u5b9f\u88c5<\/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=\"\">version: 0.2\n\nphases:\n  install:\n    runtime-versions:\n      nodejs: 16\n\n  build:\n    commands:\n      - |\n        if [ \"$CODEBUILD_WEBHOOK_EVENT\" = \"PULL_REQUEST_MERGED\" ]; then\n          echo \"Creating deployment approval notification\"\n          aws sns publish \\\n            --topic-arn $SNS_TOPIC_ARN \\\n            --message \"Deployment approval required for commit ${CODEBUILD_RESOLVED_SOURCE_VERSION}\"\n        fi\n\n  post_build:\n    commands:\n      - |\n        if [ \"$DEPLOYMENT_APPROVED\" = \"true\" ]; then\n          echo \"Deploying to production\"\n          .\/deploy.sh\n        fi<\/pre>\n\n\n\n<p>\u5b9f\u88c5\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u5bfe\u7b56<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30a4\u30e1\u30fc\u30b8\u30b9\u30ad\u30e3\u30f3\u306e\u6709\u52b9\u5316<\/li>\n\n\n\n<li>\u6a5f\u5bc6\u60c5\u5831\u306e\u5b89\u5168\u306a\u7ba1\u7406<\/li>\n\n\n\n<li>\u9069\u5207\u306a\u6a29\u9650\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>\u30d3\u30eb\u30c9\u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u6d3b\u7528<\/li>\n\n\n\n<li>\u4e26\u5217\u30d3\u30eb\u30c9\u306e\u5b9f\u88c5<\/li>\n\n\n\n<li>\u30ea\u30bd\u30fc\u30b9\u306e\u9069\u5207\u306a\u5272\u308a\u5f53\u3066<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u904b\u7528\u7ba1\u7406<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30e2\u30cb\u30bf\u30ea\u30f3\u30b0\u306e\u8a2d\u5b9a<\/li>\n\n\n\n<li>\u30a2\u30e9\u30fc\u30c8\u306e\u69cb\u6210<\/li>\n\n\n\n<li>\u30ed\u30b0\u7ba1\u7406\u306e\u5b9f\u88c5<\/li>\n<\/ul>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u30e6\u30fc\u30b9\u30b1\u30fc\u30b9\u3068\u5fdc\u7528\u4f8b\u3092\u53c2\u8003\u306b\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u8981\u4ef6\u306b\u5408\u308f\u305b\u305fAWS CodeBuild\u306e\u5b9f\u88c5\u3092\u884c\u3046\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u7279\u306b\u3001Docker\u30b3\u30f3\u30c6\u30ca\u306e\u30d3\u30eb\u30c9\u3084CodePipeline\u3068\u306e\u9023\u643a\u306f\u3001\u73fe\u4ee3\u306eCI\/CD\u74b0\u5883\u306b\u304a\u3044\u3066\u91cd\u8981\u306a\u8981\u7d20\u3068\u306a\u3063\u3066\u3044\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-2244","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\/2244","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=2244"}],"version-history":[{"count":1,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/2244\/revisions"}],"predecessor-version":[{"id":2245,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/2244\/revisions\/2245"}],"wp:attachment":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2244"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2244"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2244"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}