{"id":2225,"date":"2025-03-24T08:47:57","date_gmt":"2025-03-23T23:47:57","guid":{"rendered":"https:\/\/dexall.co.jp\/articles\/?p=2225"},"modified":"2025-03-24T08:48:22","modified_gmt":"2025-03-23T23:48:22","slug":"terraform%e3%81%a7%e5%ae%9f%e7%8f%be%e3%81%99%e3%82%8b-aws%e7%92%b0%e5%a2%83%e6%a7%8b%e7%af%89-%e5%ae%8c%e5%85%a8%e3%82%ac%e3%82%a4%e3%83%892024-%e5%b0%8e%e5%85%a5%e3%81%8b%e3%82%89%e5%ae%9f","status":"publish","type":"post","link":"https:\/\/dexall.co.jp\/articles\/?p=2225","title":{"rendered":"Terraform\u3067\u5b9f\u73fe\u3059\u308b AWS\u74b0\u5883\u69cb\u7bc9 \u5b8c\u5168\u30ac\u30a4\u30c92024 &#8211; \u5c0e\u5165\u304b\u3089\u5b9f\u8df5\u7684\u306a\u6d3b\u7528\u307e\u3067"},"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\">Terraform\u3068\u306f\uff1fAWS\u30a4\u30f3\u30d5\u30e9\u81ea\u52d5\u5316\u306e\u9769\u65b0\u7684\u30c4\u30fc\u30eb<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-1\">\u30a4\u30f3\u30d5\u30e9\u3092\u30b3\u30fc\u30c9\u5316\u3059\u308b\u91cd\u8981\u6027\u3068\u52b9\u679c<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-2\">Terraform\u304c\u9078\u3070\u308c\u308b3\u3064\u306e\u6c7a\u5b9a\u7684\u306a\u7406\u7531<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-6\">Terraform\u306e\u57fa\u672c\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u3068\u52d5\u4f5c\u74b0\u5883<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-7\">Windows\/Mac\/Linux\u3078\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u624b\u9806<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-11\">AWS\u3068\u306e\u63a5\u7d9a\u8a2d\u5b9a\u3068\u8a8d\u8a3c\u65b9\u6cd5<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-17\">\u5b9f\u8df5\uff01AWS\u30ea\u30bd\u30fc\u30b9\u306e\u4f5c\u6210\u3068\u7ba1\u7406<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-18\">VPC\u3068\u30b5\u30d6\u30cd\u30c3\u30c8\u306e\u69cb\u7bc9\u65b9\u6cd5<\/a>      <\/li>      <li>        <a href=\"#i-20\">EC2\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u4f5c\u6210\u3068\u8a2d\u5b9a<\/a>      <\/li>      <li>        <a href=\"#i-22\">S3\u30d0\u30b1\u30c3\u30c8\u306e\u4f5c\u6210\u3068\u30a2\u30af\u30bb\u30b9\u5236\u5fa1<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-24\">\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u306e\u5b9f\u884c<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-26\">Terraform\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u89e3\u8aac<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-27\">\u30e2\u30b8\u30e5\u30fc\u30eb\u5316\u306b\u3088\u308b\u518d\u5229\u7528\u53ef\u80fd\u306a\u30b3\u30fc\u30c9\u8a2d\u8a08<\/a>      <\/li>      <li>        <a href=\"#i-31\">\u72b6\u614b\u7ba1\u7406\u3068\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u306e\u8a2d\u5b9a\u65b9\u6cd5<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-34\">\u5909\u6570\u7ba1\u7406\u3068\u30ef\u30fc\u30af\u30b9\u30da\u30fc\u30b9\u306e\u6d3b\u7528\u8853<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-38\">\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u3068\u904b\u7528\u7ba1\u7406\u306e\u30dd\u30a4\u30f3\u30c8<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-39\">\u30bb\u30ad\u30e5\u30a2\u306a\u30a4\u30f3\u30d5\u30e9\u69cb\u7bc9\u306e\u305f\u3081\u306e\u30c1\u30a7\u30c3\u30af\u30ea\u30b9\u30c8<\/a>      <\/li>      <li>        <a href=\"#i-42\">\u30ea\u30bd\u30fc\u30b9\u306e\u4f9d\u5b58\u95a2\u4fc2\u7ba1\u7406\u3068\u524a\u9664\u4fdd\u8b77<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-45\">\u904b\u7528\u7ba1\u7406\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-49\">\u30c1\u30fc\u30e0\u958b\u767a\u306b\u304a\u3051\u308bTerraform\u6d3b\u7528\u8853<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-50\">GitHub\u3092\u4f7f\u7528\u3057\u305f\u30d0\u30fc\u30b8\u30e7\u30f3\u7ba1\u7406\u306e\u65b9\u6cd5<\/a>      <\/li>      <li>        <a href=\"#i-55\">CI\/CD\u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u3068\u306e\u9023\u643a\u65b9\u6cd5<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-59\">\u30c1\u30fc\u30e0\u958b\u767a\u6642\u306e\u91cd\u8981\u30dd\u30a4\u30f3\u30c8<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-60\">\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u30ac\u30a4\u30c9<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-61\">\u3088\u304f\u3042\u308b\u30a8\u30e9\u30fc\u3068\u305d\u306e\u89e3\u6c7a\u65b9\u6cd5<\/a>      <\/li>      <li>        <a href=\"#i-66\">\u30c7\u30d0\u30c3\u30b0\u3068\u30ed\u30b0\u78ba\u8a8d\u306e\u624b\u9806<\/a>      <\/li>      <li>        <a href=\"#i-72\">\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-73\">\u4e00\u822c\u7684\u306a\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u306e\u30d5\u30ed\u30fc<\/a>      <\/li>    <\/ul>  <\/li>  <li class=\"last\">    <a href=\"#i-74\">Terraform\u3092\u4f7f\u7528\u3057\u305f\u30b3\u30b9\u30c8\u6700\u9069\u5316<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-75\">\u30ea\u30bd\u30fc\u30b9\u306e\u30e9\u30a4\u30d5\u30b5\u30a4\u30af\u30eb\u7ba1\u7406\u65b9\u6cd5<\/a>      <\/li>      <li>        <a href=\"#i-78\">\u30b3\u30b9\u30c8\u898b\u7a4d\u3082\u308a\u3068\u4e88\u7b97\u7ba1\u7406\u306e\u5b9f\u8df5<\/a>      <\/li>      <li>        <a href=\"#i-81\">\u30b3\u30b9\u30c8\u6700\u9069\u5316\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-84\">\u30b3\u30b9\u30c8\u6700\u9069\u5316\u306e\u305f\u3081\u306e\u30c1\u30a7\u30c3\u30af\u30ea\u30b9\u30c8<\/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\">Terraform\u3068\u306f\uff1fAWS\u30a4\u30f3\u30d5\u30e9\u81ea\u52d5\u5316\u306e\u9769\u65b0\u7684\u30c4\u30fc\u30eb<\/h2>\n\n\n\n<p>\u30af\u30e9\u30a6\u30c9\u30a4\u30f3\u30d5\u30e9\u306e\u69cb\u7bc9\u30fb\u7ba1\u7406\u306b\u304a\u3044\u3066\u3001\u624b\u4f5c\u696d\u306b\u3088\u308b\u904b\u7528\u306f\u3082\u306f\u3084\u9650\u754c\u3092\u8fce\u3048\u3064\u3064\u3042\u308a\u307e\u3059\u3002\u8907\u96d1\u5316\u3059\u308b\u30a4\u30f3\u30d5\u30e9\u8981\u4ef6\u3001\u6025\u901f\u306a\u30d3\u30b8\u30cd\u30b9\u5909\u5316\u3078\u306e\u5bfe\u5fdc\u3001\u305d\u3057\u3066\u30d2\u30e5\u30fc\u30de\u30f3\u30a8\u30e9\u30fc\u306e\u30ea\u30b9\u30af\u4f4e\u6e1b \u2013 \u3053\u308c\u3089\u306e\u8ab2\u984c\u306b\u5bfe\u3059\u308b\u89e3\u6c7a\u7b56\u3068\u3057\u3066\u3001Terraform\u304c\u6ce8\u76ee\u3092\u96c6\u3081\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-1\">\u30a4\u30f3\u30d5\u30e9\u3092\u30b3\u30fc\u30c9\u5316\u3059\u308b\u91cd\u8981\u6027\u3068\u52b9\u679c<\/h3>\n\n\n\n<p>\u30a4\u30f3\u30d5\u30e9\u30b9\u30c8\u30e9\u30af\u30c1\u30e3\u30fb\u30a2\u30ba\u30fb\u30b3\u30fc\u30c9\uff08IaC\uff09\u306f\u3001\u30a4\u30f3\u30d5\u30e9\u69cb\u7bc9\u3092\u30d7\u30ed\u30b0\u30e9\u30de\u30d6\u30eb\u306b\u3059\u308b\u9769\u65b0\u7684\u306a\u30a2\u30d7\u30ed\u30fc\u30c1\u3067\u3059\u3002Terraform\u3092\u4f7f\u7528\u3057\u305fIaC\u306b\u306f\u3001\u4ee5\u4e0b\u306e\u91cd\u8981\u306a\u5229\u70b9\u304c\u3042\u308a\u307e\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u4e00\u8cab\u6027\u306e\u78ba\u4fdd<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u74b0\u5883\u9593\u306e\u69cb\u6210\u306e\u7d71\u4e00\u6027\u7dad\u6301<\/li>\n\n\n\n<li>\u4eba\u7684\u30df\u30b9\u306e\u5927\u5e45\u306a\u524a\u6e1b<\/li>\n\n\n\n<li>\u518d\u73fe\u6027\u306e\u9ad8\u3044\u30a4\u30f3\u30d5\u30e9\u69cb\u7bc9<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u52b9\u7387\u5316\u3068\u30b9\u30d4\u30fc\u30c9\u5411\u4e0a<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u6642\u9593\u306e\u77ed\u7e2e<\/li>\n\n\n\n<li>\u81ea\u52d5\u5316\u306b\u3088\u308b\u904b\u7528\u8ca0\u8377\u306e\u8efd\u6e1b<\/li>\n\n\n\n<li>\u30ea\u30bd\u30fc\u30b9\u69cb\u7bc9\u306e\u4e26\u5217\u51e6\u7406<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30d0\u30fc\u30b8\u30e7\u30f3\u7ba1\u7406\u3068\u76e3\u67fb\u6027<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30a4\u30f3\u30d5\u30e9\u306e\u5909\u66f4\u5c65\u6b74\u306e\u8ffd\u8de1<\/li>\n\n\n\n<li>\u30b3\u30fc\u30c9\u30ec\u30d3\u30e5\u30fc\u306b\u3088\u308b\u54c1\u8cea\u62c5\u4fdd<\/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<h3 class=\"wp-block-heading\" id=\"i-2\">Terraform\u304c\u9078\u3070\u308c\u308b3\u3064\u306e\u6c7a\u5b9a\u7684\u306a\u7406\u7531<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-3\">1. \u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u4e2d\u7acb\u6027<\/h4>\n\n\n\n<p>Terraform\u306e\u6700\u5927\u306e\u7279\u5fb4\u306f\u3001AWS\u3001Azure\u3001GCP\u306a\u3069\u3001\u8907\u6570\u306e\u30af\u30e9\u30a6\u30c9\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u306b\u5bfe\u5fdc\u3057\u3066\u3044\u308b\u70b9\u3067\u3059\u3002\u3053\u308c\u306b\u3088\u308a\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30de\u30eb\u30c1\u30af\u30e9\u30a6\u30c9\u74b0\u5883\u306e\u7d71\u4e00\u7684\u306a\u7ba1\u7406\u304c\u53ef\u80fd<\/li>\n\n\n\n<li>\u30d9\u30f3\u30c0\u30fc\u30ed\u30c3\u30af\u30a4\u30f3\u306e\u30ea\u30b9\u30af\u3092\u8efd\u6e1b<\/li>\n\n\n\n<li>\u65e2\u5b58\u306e\u77e5\u8b58\u30fb\u30b9\u30ad\u30eb\u306e\u8ee2\u7528\u304c\u5bb9\u6613<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-4\">2. \u5ba3\u8a00\u7684\u306a\u69cb\u6587<\/h4>\n\n\n\n<p>HCL\uff08HashiCorp Configuration Language\uff09\u306b\u3088\u308b\u76f4\u611f\u7684\u306a\u8a18\u8ff0\u304c\u53ef\u80fd\u3067\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=\"\"># VPC\u30ea\u30bd\u30fc\u30b9\u306e\u5b9a\u7fa9\u4f8b\nresource \"aws_vpc\" \"main\" {\n  cidr_block = \"10.0.0.0\/16\"\n\n  tags = {\n    Name = \"main-vpc\"\n    Environment = \"production\"\n  }\n}<\/pre>\n\n\n\n<p>\u3053\u306e\u5ba3\u8a00\u7684\u306a\u30a2\u30d7\u30ed\u30fc\u30c1\u306b\u3088\u308a\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30a4\u30f3\u30d5\u30e9\u306e\u671b\u307e\u3057\u3044\u72b6\u614b\u3092\u660e\u78ba\u306b\u5b9a\u7fa9<\/li>\n\n\n\n<li>\u30b3\u30fc\u30c9\u306e\u53ef\u8aad\u6027\u3068\u4fdd\u5b88\u6027\u304c\u5411\u4e0a<\/li>\n\n\n\n<li>\u5b66\u7fd2\u66f2\u7dda\u304c\u7de9\u3084\u304b<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-5\">3. \u8c4a\u5bcc\u306a\u30a8\u30b3\u30b7\u30b9\u30c6\u30e0<\/h4>\n\n\n\n<p>Terraform\u306f\u6d3b\u767a\u306a\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u3068\u5145\u5b9f\u3057\u305f\u30a8\u30b3\u30b7\u30b9\u30c6\u30e0\u3092\u6301\u3061\u307e\u3059\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>2,000\u4ee5\u4e0a\u306e\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u304c\u5229\u7528\u53ef\u80fd<\/li>\n\n\n\n<li>\u30e2\u30b8\u30e5\u30fc\u30eb\u30ec\u30b8\u30b9\u30c8\u30ea\u306b\u3088\u308b\u518d\u5229\u7528\u53ef\u80fd\u306a\u30b3\u30fc\u30c9\u306e\u5171\u6709<\/li>\n\n\n\n<li>\u5145\u5b9f\u3057\u305f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3068\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u30b5\u30dd\u30fc\u30c8<\/li>\n<\/ul>\n\n\n\n<p>Terraform\u306e\u63a1\u7528\u306f\u3001\u5358\u306a\u308b\u30c4\u30fc\u30eb\u306e\u5c0e\u5165\u3092\u8d85\u3048\u3066\u3001\u30a4\u30f3\u30d5\u30e9\u7ba1\u7406\u306e\u6587\u5316\u7684\u5909\u9769\u3092\u3082\u305f\u3089\u3057\u307e\u3059\u3002\u30c1\u30fc\u30e0\u5168\u4f53\u3067\u30b3\u30fc\u30c9\u30d9\u30fc\u30b9\u306e\u30a4\u30f3\u30d5\u30e9\u7ba1\u7406\u3092\u5b9f\u8df5\u3059\u308b\u3053\u3068\u3067\u3001\u904b\u7528\u52b9\u7387\u306e\u5411\u4e0a\u3068\u30a4\u30ce\u30d9\u30fc\u30b7\u30e7\u30f3\u306e\u52a0\u901f\u304c\u671f\u5f85\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-6\">Terraform\u306e\u57fa\u672c\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u3068\u52d5\u4f5c\u74b0\u5883<\/h2>\n\n\n\n<p>Terraform\u3092\u52b9\u679c\u7684\u306b\u6d3b\u7528\u3059\u308b\u305f\u3081\u306e\u7b2c\u4e00\u6b69\u306f\u3001\u9069\u5207\u306a\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u3067\u3059\u3002\u3053\u3053\u3067\u306f\u3001\u5404OS\u5225\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u624b\u9806\u304b\u3089\u3001AWS\u3068\u306e\u9023\u643a\u8a2d\u5b9a\u307e\u3067\u3001\u5b9f\u8df5\u7684\u306a\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u65b9\u6cd5\u3092\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-7\">Windows\/Mac\/Linux\u3078\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u624b\u9806<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-8\">Windows\u306e\u5834\u5408<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Chocolatey\u3092\u4f7f\u7528\u3059\u308b\u65b9\u6cd5<\/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=\"\"># Chocolatey\u304c\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u3066\u3044\u306a\u3044\u5834\u5408\u306f\u3001\u307e\u305a\u4ee5\u4e0b\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\nSet-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https:\/\/chocolatey.org\/install.ps1'))\n\n# Terraform\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\nchoco install terraform<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u624b\u52d5\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/www.terraform.io\/downloads.html\">Terraform\u516c\u5f0f\u30b5\u30a4\u30c8<\/a>\u304b\u3089Windows\u7528\u30d0\u30a4\u30ca\u30ea\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9<\/li>\n\n\n\n<li>ZIP\u30d5\u30a1\u30a4\u30eb\u3092\u5c55\u958b\u3057\u3001\u4efb\u610f\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u914d\u7f6e<\/li>\n\n\n\n<li>\u30b7\u30b9\u30c6\u30e0\u74b0\u5883\u5909\u6570\u306ePATH\u306b\u914d\u7f6e\u3057\u305f\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092\u8ffd\u52a0<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-9\">Mac\u306e\u5834\u5408<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Homebrew\u3092\u4f7f\u7528\u3059\u308b\u65b9\u6cd5\uff08\u63a8\u5968\uff09<\/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=\"\"># Homebrew\u304c\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u3066\u3044\u306a\u3044\u5834\u5408\n\/bin\/bash -c \"$(curl -fsSL https:\/\/raw.githubusercontent.com\/Homebrew\/install\/HEAD\/install.sh)\"\n\n# Terraform\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\nbrew install terraform<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u624b\u52d5\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb<\/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=\"\"># Intel Mac\u7528\ncurl -O https:\/\/releases.hashicorp.com\/terraform\/[VERSION]\/terraform_[VERSION]_darwin_amd64.zip\nunzip terraform_[VERSION]_darwin_amd64.zip\nsudo mv terraform \/usr\/local\/bin\/\n\n# Apple Silicon (M1\/M2) Mac\u7528\ncurl -O https:\/\/releases.hashicorp.com\/terraform\/[VERSION]\/terraform_[VERSION]_darwin_arm64.zip\nunzip terraform_[VERSION]_darwin_arm64.zip\nsudo mv terraform \/usr\/local\/bin\/<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-10\">Linux\u306e\u5834\u5408<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30d1\u30c3\u30b1\u30fc\u30b8\u30de\u30cd\u30fc\u30b8\u30e3\u30fc\u3092\u4f7f\u7528\u3059\u308b\u65b9\u6cd5<\/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=\"\"># Ubuntu\/Debian\ncurl -fsSL https:\/\/apt.releases.hashicorp.com\/gpg | sudo apt-key add -\nsudo apt-add-repository \"deb [arch=amd64] https:\/\/apt.releases.hashicorp.com $(lsb_release -cs) main\"\nsudo apt update\nsudo apt install terraform\n\n# RHEL\/CentOS\nsudo yum install -y yum-utils\nsudo yum-config-manager --add-repo https:\/\/rpm.releases.hashicorp.com\/RHEL\/hashicorp.repo\nsudo yum install terraform<\/pre>\n\n\n\n<p>\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u5f8c\u306e\u78ba\u8a8d\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=\"\">terraform version<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-11\">AWS\u3068\u306e\u63a5\u7d9a\u8a2d\u5b9a\u3068\u8a8d\u8a3c\u65b9\u6cd5<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-12\">1. AWS CLI\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3068\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=\"\"># AWS CLI\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u78ba\u8a8d\naws --version\n\n# \u8a8d\u8a3c\u60c5\u5831\u306e\u8a2d\u5b9a\naws configure<\/pre>\n\n\n\n<p>\u5fc5\u8981\u306a\u60c5\u5831\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>AWS Access Key ID<\/li>\n\n\n\n<li>AWS Secret Access Key<\/li>\n\n\n\n<li>Default region name<\/li>\n\n\n\n<li>Default output format<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-13\">2. Terraform\u7528\u306eIAM\u30e6\u30fc\u30b6\u30fc\u8a2d\u5b9a<\/h4>\n\n\n\n<p>\u4ee5\u4e0b\u306e\u6a29\u9650\u3092\u6301\u3064IAM\u30dd\u30ea\u30b7\u30fc\u3092\u4f5c\u6210\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=\"\">{\n    \"Version\": \"2012-10-17\",\n    \"Statement\": [\n        {\n            \"Effect\": \"Allow\",\n            \"Action\": [\n                \"ec2:*\",\n                \"s3:*\",\n                \"vpc:*\",\n                \"iam:*\",\n                \"rds:*\"\n                \/\/ \u5fc5\u8981\u306b\u5fdc\u3058\u3066\u8ffd\u52a0\n            ],\n            \"Resource\": \"*\"\n        }\n    ]\n}<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-14\">3. Terraform\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306e\u4f5c\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=\"\"># main.tf\nterraform {\n  required_providers {\n    aws = {\n      source  = \"hashicorp\/aws\"\n      version = \"~&gt; 4.0\"\n    }\n  }\n}\n\nprovider \"aws\" {\n  region = \"ap-northeast-1\"  # \u6771\u4eac\u30ea\u30fc\u30b8\u30e7\u30f3\n}<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-15\">4. \u8a8d\u8a3c\u65b9\u6cd5\u306e\u9078\u629e<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u74b0\u5883\u5909\u6570\u3092\u4f7f\u7528\u3059\u308b\u5834\u5408<\/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=\"\">export AWS_ACCESS_KEY_ID=\"your_access_key\"\nexport AWS_SECRET_ACCESS_KEY=\"your_secret_key\"\nexport AWS_DEFAULT_REGION=\"ap-northeast-1\"<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u5171\u6709\u8a8d\u8a3c\u60c5\u5831\u30d5\u30a1\u30a4\u30eb\u3092\u4f7f\u7528\u3059\u308b\u5834\u5408<\/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=\"\">provider \"aws\" {\n  shared_credentials_files = [\"~\/.aws\/credentials\"]\n  profile                 = \"default\"\n}<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>IAM\u30ed\u30fc\u30eb\u3092\u4f7f\u7528\u3059\u308b\u5834\u5408\uff08EC2\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u4e0a\uff09<\/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=\"\">provider \"aws\" {}  # \u81ea\u52d5\u7684\u306bIAM\u30ed\u30fc\u30eb\u304c\u4f7f\u7528\u3055\u308c\u308b<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-16\">5. \u52d5\u4f5c\u78ba\u8a8d<\/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=\"\"># \u521d\u671f\u5316\nterraform init\n\n# \u8a2d\u5b9a\u306e\u78ba\u8a8d\nterraform plan<\/pre>\n\n\n\n<p>\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u5b8c\u4e86\u5f8c\u306e\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30d0\u30fc\u30b8\u30e7\u30f3\u306e\u4e0d\u4e00\u81f4: <code>terraform init -upgrade<\/code>\u3067\u89e3\u6c7a<\/li>\n\n\n\n<li>\u8a8d\u8a3c\u30a8\u30e9\u30fc: AWS\u8a8d\u8a3c\u60c5\u5831\u306e\u8a2d\u5b9a\u3092\u78ba\u8a8d<\/li>\n\n\n\n<li>\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u30a8\u30e9\u30fc: \u30ea\u30fc\u30b8\u30e7\u30f3\u8a2d\u5b9a\u3092\u78ba\u8a8d<\/li>\n<\/ul>\n\n\n\n<p>\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u4e0a\u306e\u6ce8\u610f\u70b9\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30a2\u30af\u30bb\u30b9\u30ad\u30fc\u306f\u5b9a\u671f\u7684\u306b\u30ed\u30fc\u30c6\u30fc\u30b7\u30e7\u30f3<\/li>\n\n\n\n<li>\u5fc5\u8981\u6700\u5c0f\u9650\u306e\u6a29\u9650\u306e\u307f\u3092\u4ed8\u4e0e<\/li>\n\n\n\n<li>\u672c\u756a\u74b0\u5883\u306e\u8a8d\u8a3c\u60c5\u5831\u306f\u53b3\u91cd\u306b\u7ba1\u7406<\/li>\n\n\n\n<li>gitignore\u3067\u30af\u30ec\u30c7\u30f3\u30b7\u30e3\u30eb\u95a2\u9023\u30d5\u30a1\u30a4\u30eb\u3092\u9664\u5916<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-17\">\u5b9f\u8df5\uff01AWS\u30ea\u30bd\u30fc\u30b9\u306e\u4f5c\u6210\u3068\u7ba1\u7406<\/h2>\n\n\n\n<p>\u672c\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001Terraform\u3092\u4f7f\u7528\u3057\u3066\u5b9f\u969b\u306eAWS\u30ea\u30bd\u30fc\u30b9\u3092\u4f5c\u6210\u30fb\u7ba1\u7406\u3059\u308b\u65b9\u6cd5\u3092\u3001\u5b9f\u8df5\u7684\u306a\u30b3\u30fc\u30c9\u4f8b\u3068\u5171\u306b\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-18\">VPC\u3068\u30b5\u30d6\u30cd\u30c3\u30c8\u306e\u69cb\u7bc9\u65b9\u6cd5<\/h3>\n\n\n\n<p>\u307e\u305a\u3001\u30bb\u30ad\u30e5\u30a2\u306a\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u74b0\u5883\u3092\u69cb\u7bc9\u3059\u308b\u305f\u3081\u306b\u3001VPC\u3068\u30b5\u30d6\u30cd\u30c3\u30c8\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002<\/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=\"\"># VPC\u306e\u4f5c\u6210\nresource \"aws_vpc\" \"main\" {\n  cidr_block           = \"10.0.0.0\/16\"\n  enable_dns_hostnames = true\n  enable_dns_support   = true\n\n  tags = {\n    Name = \"main-vpc\"\n    Environment = \"production\"\n  }\n}\n\n# \u30d1\u30d6\u30ea\u30c3\u30af\u30b5\u30d6\u30cd\u30c3\u30c8\nresource \"aws_subnet\" \"public\" {\n  count             = 2\n  vpc_id            = aws_vpc.main.id\n  cidr_block        = \"10.0.${count.index + 1}.0\/24\"\n  availability_zone = data.aws_availability_zones.available.names[count.index]\n\n  map_public_ip_on_launch = true\n\n  tags = {\n    Name = \"public-subnet-${count.index + 1}\"\n    Type = \"Public\"\n  }\n}\n\n# \u30d7\u30e9\u30a4\u30d9\u30fc\u30c8\u30b5\u30d6\u30cd\u30c3\u30c8\nresource \"aws_subnet\" \"private\" {\n  count             = 2\n  vpc_id            = aws_vpc.main.id\n  cidr_block        = \"10.0.${count.index + 10}.0\/24\"\n  availability_zone = data.aws_availability_zones.available.names[count.index]\n\n  tags = {\n    Name = \"private-subnet-${count.index + 1}\"\n    Type = \"Private\"\n  }\n}\n\n# \u30a4\u30f3\u30bf\u30fc\u30cd\u30c3\u30c8\u30b2\u30fc\u30c8\u30a6\u30a7\u30a4\nresource \"aws_internet_gateway\" \"main\" {\n  vpc_id = aws_vpc.main.id\n\n  tags = {\n    Name = \"main-igw\"\n  }\n}\n\n# NAT\u30b2\u30fc\u30c8\u30a6\u30a7\u30a4\u7528Elastic IP\nresource \"aws_eip\" \"nat\" {\n  count = 1\n  domain = \"vpc\"\n}\n\n# NAT\u30b2\u30fc\u30c8\u30a6\u30a7\u30a4\nresource \"aws_nat_gateway\" \"main\" {\n  count         = 1\n  allocation_id = aws_eip.nat[count.index].id\n  subnet_id     = aws_subnet.public[count.index].id\n\n  tags = {\n    Name = \"main-nat-gw\"\n  }\n}<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-19\">\u30dd\u30a4\u30f3\u30c8\u89e3\u8aac<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u8907\u6570\u306e\u30a2\u30d9\u30a4\u30e9\u30d3\u30ea\u30c6\u30a3\u30be\u30fc\u30f3\u306b\u30b5\u30d6\u30cd\u30c3\u30c8\u3092\u5206\u6563\u914d\u7f6e<\/li>\n\n\n\n<li>\u30d1\u30d6\u30ea\u30c3\u30af\/\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8\u30b5\u30d6\u30cd\u30c3\u30c8\u306e\u9069\u5207\u306a\u5206\u96e2<\/li>\n\n\n\n<li>NAT\u30b2\u30fc\u30c8\u30a6\u30a7\u30a4\u306b\u3088\u308b\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8\u30b5\u30d6\u30cd\u30c3\u30c8\u306e\u30a4\u30f3\u30bf\u30fc\u30cd\u30c3\u30c8\u30a2\u30af\u30bb\u30b9\u78ba\u4fdd<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-20\">EC2\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u4f5c\u6210\u3068\u8a2d\u5b9a<\/h3>\n\n\n\n<p>\u7d9a\u3044\u3066\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u5b9f\u884c\u3059\u308b\u305f\u3081\u306eEC2\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u8a2d\u5b9a\u3057\u307e\u3059\u3002<\/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=\"\"># \u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30b0\u30eb\u30fc\u30d7\u306e\u5b9a\u7fa9\nresource \"aws_security_group\" \"web\" {\n  name        = \"web-sg\"\n  description = \"Security group for web servers\"\n  vpc_id      = aws_vpc.main.id\n\n  ingress {\n    from_port   = 80\n    to_port     = 80\n    protocol    = \"tcp\"\n    cidr_blocks = [\"0.0.0.0\/0\"]\n  }\n\n  ingress {\n    from_port   = 443\n    to_port     = 443\n    protocol    = \"tcp\"\n    cidr_blocks = [\"0.0.0.0\/0\"]\n  }\n\n  egress {\n    from_port   = 0\n    to_port     = 0\n    protocol    = \"-1\"\n    cidr_blocks = [\"0.0.0.0\/0\"]\n  }\n\n  tags = {\n    Name = \"web-sg\"\n  }\n}\n\n# EC2\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u7528\u306eIAM\u30ed\u30fc\u30eb\nresource \"aws_iam_role\" \"ec2_role\" {\n  name = \"ec2_role\"\n\n  assume_role_policy = jsonencode({\n    Version = \"2012-10-17\"\n    Statement = [\n      {\n        Action = \"sts:AssumeRole\"\n        Effect = \"Allow\"\n        Principal = {\n          Service = \"ec2.amazonaws.com\"\n        }\n      }\n    ]\n  })\n}\n\n# EC2\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u4f5c\u6210\nresource \"aws_instance\" \"web\" {\n  count = 2\n\n  ami           = \"ami-0d52744d6551d851e\"  # Amazon Linux 2023\n  instance_type = \"t3.micro\"\n  subnet_id     = aws_subnet.private[count.index].id\n\n  vpc_security_group_ids = [aws_security_group.web.id]\n  iam_instance_profile   = aws_iam_instance_profile.ec2_profile.name\n\n  user_data = &lt;&lt;-EOF\n              #!\/bin\/bash\n              yum update -y\n              yum install -y httpd\n              systemctl start httpd\n              systemctl enable httpd\n              EOF\n\n  tags = {\n    Name = \"web-server-${count.index + 1}\"\n    Environment = \"production\"\n  }\n}<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-21\">\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u6700\u5c0f\u6a29\u9650\u306e\u539f\u5247\u306b\u57fa\u3065\u304f\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30b0\u30eb\u30fc\u30d7\u306e\u8a2d\u5b9a<\/li>\n\n\n\n<li>IAM\u30ed\u30fc\u30eb\u306b\u3088\u308b\u9069\u5207\u306a\u6a29\u9650\u7ba1\u7406<\/li>\n\n\n\n<li>\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8\u30b5\u30d6\u30cd\u30c3\u30c8\u3078\u306e\u30c7\u30d7\u30ed\u30a4<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-22\">S3\u30d0\u30b1\u30c3\u30c8\u306e\u4f5c\u6210\u3068\u30a2\u30af\u30bb\u30b9\u5236\u5fa1<\/h3>\n\n\n\n<p>\u9759\u7684\u30b3\u30f3\u30c6\u30f3\u30c4\u3084\u30ed\u30b0\u306e\u4fdd\u5b58\u7528\u306bS3\u30d0\u30b1\u30c3\u30c8\u3092\u8a2d\u5b9a\u3057\u307e\u3059\u3002<\/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=\"\"># S3\u30d0\u30b1\u30c3\u30c8\u306e\u4f5c\u6210\nresource \"aws_s3_bucket\" \"content\" {\n  bucket = \"my-unique-bucket-name-${data.aws_caller_identity.current.account_id}\"\n\n  tags = {\n    Name        = \"content-bucket\"\n    Environment = \"production\"\n  }\n}\n\n# \u30d0\u30b1\u30c3\u30c8\u306e\u6697\u53f7\u5316\u8a2d\u5b9a\nresource \"aws_s3_bucket_server_side_encryption_configuration\" \"content\" {\n  bucket = aws_s3_bucket.content.id\n\n  rule {\n    apply_server_side_encryption_by_default {\n      sse_algorithm = \"AES256\"\n    }\n  }\n}\n\n# \u30d1\u30d6\u30ea\u30c3\u30af\u30a2\u30af\u30bb\u30b9\u306e\u30d6\u30ed\u30c3\u30af\nresource \"aws_s3_bucket_public_access_block\" \"content\" {\n  bucket = aws_s3_bucket.content.id\n\n  block_public_acls       = true\n  block_public_policy     = true\n  ignore_public_acls      = true\n  restrict_public_buckets = true\n}\n\n# \u30d0\u30b1\u30c3\u30c8\u30dd\u30ea\u30b7\u30fc\nresource \"aws_s3_bucket_policy\" \"content\" {\n  bucket = aws_s3_bucket.content.id\n\n  policy = jsonencode({\n    Version = \"2012-10-17\"\n    Statement = [\n      {\n        Sid       = \"AllowEC2Access\"\n        Effect    = \"Allow\"\n        Principal = {\n          AWS = aws_iam_role.ec2_role.arn\n        }\n        Action = [\n          \"s3:GetObject\",\n          \"s3:ListBucket\"\n        ]\n        Resource = [\n          aws_s3_bucket.content.arn,\n          \"${aws_s3_bucket.content.arn}\/*\"\n        ]\n      }\n    ]\n  })\n}<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-23\">\u91cd\u8981\u306a\u8a2d\u5b9a\u30dd\u30a4\u30f3\u30c8<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30d0\u30b1\u30c3\u30c8\u540d\u306e\u30e6\u30cb\u30fc\u30af\u6027\u78ba\u4fdd<\/li>\n\n\n\n<li>\u30b5\u30fc\u30d0\u30fc\u30b5\u30a4\u30c9\u6697\u53f7\u5316\u306e\u6709\u52b9\u5316<\/li>\n\n\n\n<li>\u30d1\u30d6\u30ea\u30c3\u30af\u30a2\u30af\u30bb\u30b9\u306e\u5b8c\u5168\u30d6\u30ed\u30c3\u30af<\/li>\n\n\n\n<li>\u304d\u3081\u7d30\u304b\u306aIAM\u30dd\u30ea\u30b7\u30fc\u306e\u8a2d\u5b9a<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-24\">\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u306e\u5b9f\u884c<\/h3>\n\n\n\n<p>\u4f5c\u6210\u3057\u305f\u30b3\u30fc\u30c9\u3092\u30c7\u30d7\u30ed\u30a4\u3059\u308b\u305f\u3081\u306e\u57fa\u672c\u7684\u306a\u30b3\u30de\u30f3\u30c9\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=\"\"># \u521d\u671f\u5316\uff08\u521d\u56de\u306e\u307f\uff09\nterraform init\n\n# \u69cb\u6210\u5909\u66f4\u306e\u78ba\u8a8d\nterraform plan\n\n# \u30ea\u30bd\u30fc\u30b9\u306e\u4f5c\u6210\nterraform apply\n\n# \u30ea\u30bd\u30fc\u30b9\u306e\u524a\u9664\uff08\u5fc5\u8981\u306a\u5834\u5408\uff09\nterraform destroy<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-25\">\u30c7\u30d7\u30ed\u30a4\u6642\u306e\u6ce8\u610f\u70b9<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u5e38\u306b<code>plan<\/code>\u3067\u5909\u66f4\u5185\u5bb9\u3092\u78ba\u8a8d<\/li>\n\n\n\n<li>\u672c\u756a\u74b0\u5883\u3078\u306e\u9069\u7528\u306f\u614e\u91cd\u306b\u5b9f\u65bd<\/li>\n\n\n\n<li>\u72b6\u614b\u30d5\u30a1\u30a4\u30eb\uff08terraform.tfstate\uff09\u306e\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u7ba1\u7406<\/li>\n\n\n\n<li>\u9069\u5207\u306a\u30bf\u30b0\u4ed8\u3051\u306b\u3088\u308b\u30b3\u30b9\u30c8\u7ba1\u7406<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-26\">Terraform\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u89e3\u8aac<\/h2>\n\n\n\n<p>\u52b9\u7387\u7684\u3067\u4fdd\u5b88\u6027\u306e\u9ad8\u3044Terraform\u30b3\u30fc\u30c9\u3092\u66f8\u304f\u305f\u3081\u306b\u3001\u5b9f\u8df5\u7684\u306a\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u3092\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-27\">\u30e2\u30b8\u30e5\u30fc\u30eb\u5316\u306b\u3088\u308b\u518d\u5229\u7528\u53ef\u80fd\u306a\u30b3\u30fc\u30c9\u8a2d\u8a08<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-28\">\u30e2\u30b8\u30e5\u30fc\u30eb\u69cb\u9020\u306e\u57fa\u672c<\/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=\"\">project\/\n\u251c\u2500\u2500 modules\/\n\u2502   \u251c\u2500\u2500 vpc\/\n\u2502   \u2502   \u251c\u2500\u2500 main.tf\n\u2502   \u2502   \u251c\u2500\u2500 variables.tf\n\u2502   \u2502   \u2514\u2500\u2500 outputs.tf\n\u2502   \u251c\u2500\u2500 ec2\/\n\u2502   \u2502   \u251c\u2500\u2500 main.tf\n\u2502   \u2502   \u251c\u2500\u2500 variables.tf\n\u2502   \u2502   \u2514\u2500\u2500 outputs.tf\n\u251c\u2500\u2500 environments\/\n\u2502   \u251c\u2500\u2500 staging\/\n\u2502   \u2502   \u251c\u2500\u2500 main.tf\n\u2502   \u2502   \u2514\u2500\u2500 terraform.tfvars\n\u2502   \u2514\u2500\u2500 production\/\n\u2502       \u251c\u2500\u2500 main.tf\n\u2502       \u2514\u2500\u2500 terraform.tfvars\n\u2514\u2500\u2500 README.md<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-29\">VPC\u30e2\u30b8\u30e5\u30fc\u30eb\u306e\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=\"\"># modules\/vpc\/variables.tf\nvariable \"vpc_cidr\" {\n  description = \"CIDR block for VPC\"\n  type        = string\n}\n\nvariable \"environment\" {\n  description = \"Environment name\"\n  type        = string\n}\n\nvariable \"subnet_cidrs\" {\n  description = \"CIDR blocks for subnets\"\n  type        = map(list(string))\n}\n\n# modules\/vpc\/main.tf\nresource \"aws_vpc\" \"main\" {\n  cidr_block = var.vpc_cidr\n\n  tags = {\n    Name        = \"${var.environment}-vpc\"\n    Environment = var.environment\n  }\n}\n\nresource \"aws_subnet\" \"public\" {\n  count             = length(var.subnet_cidrs[\"public\"])\n  vpc_id            = aws_vpc.main.id\n  cidr_block        = var.subnet_cidrs[\"public\"][count.index]\n  availability_zone = data.aws_availability_zones.available.names[count.index]\n\n  tags = {\n    Name = \"${var.environment}-public-${count.index + 1}\"\n  }\n}\n\n# modules\/vpc\/outputs.tf\noutput \"vpc_id\" {\n  value = aws_vpc.main.id\n}\n\noutput \"public_subnet_ids\" {\n  value = aws_subnet.public[*].id\n}<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-30\">\u30e2\u30b8\u30e5\u30fc\u30eb\u306e\u4f7f\u7528\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=\"\"># environments\/production\/main.tf\nmodule \"vpc\" {\n  source = \"..\/..\/modules\/vpc\"\n\n  vpc_cidr = \"10.0.0.0\/16\"\n  environment = \"production\"\n  subnet_cidrs = {\n    public  = [\"10.0.1.0\/24\", \"10.0.2.0\/24\"]\n    private = [\"10.0.10.0\/24\", \"10.0.11.0\/24\"]\n  }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-31\">\u72b6\u614b\u7ba1\u7406\u3068\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u306e\u8a2d\u5b9a\u65b9\u6cd5<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-32\">S3\u30d0\u30c3\u30af\u30a8\u30f3\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=\"\"># backend.tf\nterraform {\n  backend \"s3\" {\n    bucket         = \"my-terraform-state\"\n    key            = \"production\/terraform.tfstate\"\n    region         = \"ap-northeast-1\"\n    encrypt        = true\n    dynamodb_table = \"terraform-locks\"\n  }\n}\n\n# DynamoDB\u306b\u3088\u308b\u30b9\u30c6\u30fc\u30c8\u30ed\u30c3\u30af\nresource \"aws_dynamodb_table\" \"terraform_locks\" {\n  name         = \"terraform-locks\"\n  billing_mode = \"PAY_PER_REQUEST\"\n  hash_key     = \"LockID\"\n\n  attribute {\n    name = \"LockID\"\n    type = \"S\"\n  }\n}<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-33\">\u72b6\u614b\u7ba1\u7406\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u72b6\u614b\u30d5\u30a1\u30a4\u30eb\u306e\u6697\u53f7\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=\"\">terraform {\n  backend \"s3\" {\n    encrypt = true\n    kms_key_id = \"arn:aws:kms:region:account:key\/key-id\"\n  }\n}<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u72b6\u614b\u30d5\u30a1\u30a4\u30eb\u306e\u30d0\u30fc\u30b8\u30e7\u30cb\u30f3\u30b0<\/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=\"\">resource \"aws_s3_bucket_versioning\" \"state\" {\n  bucket = aws_s3_bucket.terraform_state.id\n  versioning_configuration {\n    status = \"Enabled\"\n  }\n}<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u30a2\u30af\u30bb\u30b9\u30ed\u30b0\u306e\u6709\u52b9\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=\"\">resource \"aws_s3_bucket_logging\" \"state\" {\n  bucket = aws_s3_bucket.terraform_state.id\n\n  target_bucket = aws_s3_bucket.log_bucket.id\n  target_prefix = \"terraform-state-logs\/\"\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-34\">\u5909\u6570\u7ba1\u7406\u3068\u30ef\u30fc\u30af\u30b9\u30da\u30fc\u30b9\u306e\u6d3b\u7528\u8853<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-35\">\u5909\u6570\u306e\u968e\u5c64\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=\"\"># variables.tf\nvariable \"common\" {\n  description = \"Common variables for all environments\"\n  type = object({\n    project     = string\n    owner       = string\n    region      = string\n  })\n}\n\nvariable \"environment_specific\" {\n  description = \"Environment specific variables\"\n  type = map(object({\n    instance_type = string\n    min_size      = number\n    max_size      = number\n  }))\n}\n\n# terraform.tfvars\ncommon = {\n  project = \"myapp\"\n  owner   = \"devops-team\"\n  region  = \"ap-northeast-1\"\n}\n\nenvironment_specific = {\n  staging = {\n    instance_type = \"t3.micro\"\n    min_size      = 1\n    max_size      = 3\n  }\n  production = {\n    instance_type = \"t3.small\"\n    min_size      = 2\n    max_size      = 5\n  }\n}<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-36\">\u30ef\u30fc\u30af\u30b9\u30da\u30fc\u30b9\u306e\u6d3b\u7528<\/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=\"\"># \u30ef\u30fc\u30af\u30b9\u30da\u30fc\u30b9\u306e\u4f5c\u6210\nterraform workspace new staging\nterraform workspace new production\n\n# \u30ef\u30fc\u30af\u30b9\u30da\u30fc\u30b9\u306e\u5207\u308a\u66ff\u3048\nterraform workspace select staging<\/pre>\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=\"\"># main.tf\nlocals {\n  environment = terraform.workspace\n  config      = var.environment_specific[local.environment]\n}\n\nresource \"aws_instance\" \"app\" {\n  instance_type = local.config.instance_type\n\n  tags = {\n    Environment = local.environment\n    Project     = var.common.project\n  }\n}<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-37\">\u5909\u6570\u7ba1\u7406\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u6a5f\u5bc6\u60c5\u5831\u306e\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=\"\"># secrets.tfvars\uff08gitignore\u306b\u8ffd\u52a0\uff09\ndb_password = \"sensitive-value\"\n\n# \u9069\u7528\u6642\nterraform apply -var-file=\"secrets.tfvars\"<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u6761\u4ef6\u4ed8\u304d\u5909\u6570\u306e\u4f7f\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=\"\">locals {\n  is_production = terraform.workspace == \"production\"\n  instance_count = local.is_production ? 3 : 1\n}\n\nresource \"aws_instance\" \"app\" {\n  count = local.instance_count\n  # ... \u4ed6\u306e\u8a2d\u5b9a\n}<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u30c7\u30d5\u30a9\u30eb\u30c8\u5024\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=\"\">variable \"environment\" {\n  description = \"Environment name\"\n  type        = string\n  default     = \"development\"\n\n  validation {\n    condition     = contains([\"development\", \"staging\", \"production\"], var.environment)\n    error_message = \"Environment must be one of: development, staging, production.\"\n  }\n}<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u3092\u9069\u5207\u306b\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u3067\u3001\u4fdd\u5b88\u6027\u304c\u9ad8\u304f\u3001\u5b89\u5168\u3067\u52b9\u7387\u7684\u306aTerraform\u30b3\u30fc\u30c9\u3092\u5b9f\u73fe\u3067\u304d\u307e\u3059\u3002\u7279\u306b\u91cd\u8981\u306a\u30dd\u30a4\u30f3\u30c8\u306f\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30e2\u30b8\u30e5\u30fc\u30eb\u5316\u306b\u3088\u308b\u518d\u5229\u7528\u6027\u306e\u5411\u4e0a<\/li>\n\n\n\n<li>\u9069\u5207\u306a\u72b6\u614b\u7ba1\u7406\u306b\u3088\u308b\u5b89\u5168\u6027\u306e\u78ba\u4fdd<\/li>\n\n\n\n<li>\u74b0\u5883\u3054\u3068\u306e\u5909\u6570\u7ba1\u7406\u306e\u6574\u7406<\/li>\n\n\n\n<li>\u30ef\u30fc\u30af\u30b9\u30da\u30fc\u30b9\u3092\u6d3b\u7528\u3057\u305f\u74b0\u5883\u306e\u5206\u96e2<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-38\">\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u3068\u904b\u7528\u7ba1\u7406\u306e\u30dd\u30a4\u30f3\u30c8<\/h2>\n\n\n\n<p>Terraform\u3092\u7528\u3044\u305f\u30a4\u30f3\u30d5\u30e9\u69cb\u7bc9\u306b\u304a\u3044\u3066\u3001\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u3068\u904b\u7528\u7ba1\u7406\u306f\u6700\u3082\u91cd\u8981\u306a\u8981\u7d20\u3067\u3059\u3002\u672c\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u5b9f\u8df5\u7684\u306a\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u5bfe\u7b56\u3068\u52b9\u7387\u7684\u306a\u904b\u7528\u7ba1\u7406\u306e\u65b9\u6cd5\u3092\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-39\">\u30bb\u30ad\u30e5\u30a2\u306a\u30a4\u30f3\u30d5\u30e9\u69cb\u7bc9\u306e\u305f\u3081\u306e\u30c1\u30a7\u30c3\u30af\u30ea\u30b9\u30c8<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-40\">1. \u30a2\u30af\u30bb\u30b9\u7ba1\u7406\u3068IAM\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=\"\"># \u6700\u5c0f\u6a29\u9650\u306e\u539f\u5247\u306b\u57fa\u3065\u304fIAM\u30dd\u30ea\u30b7\u30fc\nresource \"aws_iam_policy\" \"minimal_access\" {\n  name = \"minimal-access-policy\"\n\n  policy = jsonencode({\n    Version = \"2012-10-17\"\n    Statement = [\n      {\n        Effect = \"Allow\"\n        Action = [\n          \"ec2:Describe*\",\n          \"ec2:StartInstances\",\n          \"ec2:StopInstances\"\n        ]\n        Resource = \"*\"\n        Condition = {\n          StringEquals = {\n            \"aws:RequestedRegion\": \"ap-northeast-1\"\n          }\n        }\n      }\n    ]\n  })\n}\n\n# MFA\u306e\u5f37\u5236\nresource \"aws_iam_user_policy_attachment\" \"force_mfa\" {\n  user       = aws_iam_user.example.name\n  policy_arn = \"arn:aws:iam::aws:policy\/aws-service-role\/AWSIAMServiceRolePolicy\"\n\n  # MFA\u6761\u4ef6\u4ed8\u304d\u30dd\u30ea\u30b7\u30fc\n  policy = jsonencode({\n    Version = \"2012-10-17\"\n    Statement = [\n      {\n        Effect = \"Deny\"\n        NotAction = \"iam:*\"\n        Resource = \"*\"\n        Condition = {\n          BoolIfExists = {\n            \"aws:MultiFactorAuthPresent\": \"false\"\n          }\n        }\n      }\n    ]\n  })\n}<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-41\">\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30c1\u30a7\u30c3\u30af\u30ea\u30b9\u30c8<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u8a8d\u8a3c\u30fb\u8a8d\u53ef<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>[ ] IAM\u30e6\u30fc\u30b6\u30fc\u306e\u6700\u5c0f\u6a29\u9650\u8a2d\u5b9a<\/li>\n\n\n\n<li>[ ] MFA\u8a8d\u8a3c\u306e\u5f37\u5236<\/li>\n\n\n\n<li>[ ] \u4e00\u6642\u7684\u306a\u8a8d\u8a3c\u60c5\u5831\u306e\u4f7f\u7528<\/li>\n\n\n\n<li>[ ] \u30a2\u30af\u30bb\u30b9\u30ad\u30fc\u306e\u5b9a\u671f\u7684\u306a\u30ed\u30fc\u30c6\u30fc\u30b7\u30e7\u30f3<\/li>\n<\/ul>\n\n\n\n<ol 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\u30d5\u30ed\u30fc\u30ed\u30b0\u306e\u6709\u52b9\u5316<\/li>\n\n\n\n<li>[ ] \u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30b0\u30eb\u30fc\u30d7\u306e\u9069\u5207\u306a\u8a2d\u5b9a<\/li>\n\n\n\n<li>[ ] NACL\u306b\u3088\u308b\u8ffd\u52a0\u306e\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u5236\u5fa1<\/li>\n\n\n\n<li>[ ] VPC\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8\u306e\u6d3b\u7528<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u6697\u53f7\u5316\u3068\u6a5f\u5bc6\u60c5\u5831\u7ba1\u7406<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>[ ] \u4fdd\u5b58\u30c7\u30fc\u30bf\u306e\u6697\u53f7\u5316<\/li>\n\n\n\n<li>[ ] \u8ee2\u9001\u4e2d\u306e\u30c7\u30fc\u30bf\u306e\u6697\u53f7\u5316<\/li>\n\n\n\n<li>[ ] KMS\u306e\u9069\u5207\u306a\u5229\u7528<\/li>\n\n\n\n<li>[ ] Secrets Manager\u306e\u6d3b\u7528<\/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=\"\"># VPC\u30d5\u30ed\u30fc\u30ed\u30b0\u306e\u8a2d\u5b9a\nresource \"aws_flow_log\" \"vpc_flow_log\" {\n  vpc_id          = aws_vpc.main.id\n  traffic_type    = \"ALL\"\n  iam_role_arn    = aws_iam_role.flow_log_role.arn\n  log_destination = aws_cloudwatch_log_group.flow_log.arn\n}\n\n# KMS\u30ad\u30fc\u306e\u8a2d\u5b9a\nresource \"aws_kms_key\" \"main\" {\n  description             = \"KMS key for encryption\"\n  deletion_window_in_days = 7\n  enable_key_rotation     = true\n\n  policy = jsonencode({\n    Version = \"2012-10-17\"\n    Statement = [\n      {\n        Sid    = \"Enable IAM User Permissions\"\n        Effect = \"Allow\"\n        Principal = {\n          AWS = \"arn:aws:iam::${data.aws_caller_identity.current.account_id}:root\"\n        }\n        Action   = \"kms:*\"\n        Resource = \"*\"\n      }\n    ]\n  })\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-42\">\u30ea\u30bd\u30fc\u30b9\u306e\u4f9d\u5b58\u95a2\u4fc2\u7ba1\u7406\u3068\u524a\u9664\u4fdd\u8b77<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-43\">1. \u4f9d\u5b58\u95a2\u4fc2\u306e\u660e\u793a\u7684\u306a\u5b9a\u7fa9<\/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=\"\"># \u660e\u793a\u7684\u306a\u4f9d\u5b58\u95a2\u4fc2\u306e\u5b9a\u7fa9\nresource \"aws_instance\" \"app\" {\n  # ... \u4ed6\u306e\u8a2d\u5b9a\n\n  depends_on = [\n    aws_vpc.main,\n    aws_subnet.private,\n    aws_security_group.app\n  ]\n}\n\n# \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u524a\u9664\u4fdd\u8b77\nresource \"aws_db_instance\" \"main\" {\n  # ... \u4ed6\u306e\u8a2d\u5b9a\n\n  deletion_protection = true\n  skip_final_snapshot = false\n  final_snapshot_identifier = \"${var.environment}-final-snapshot\"\n\n  lifecycle {\n    prevent_destroy = true\n  }\n}<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-44\">2. \u30ea\u30bd\u30fc\u30b9\u4fdd\u8b77\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=\"\"># S3\u30d0\u30b1\u30c3\u30c8\u306e\u524a\u9664\u4fdd\u8b77\nresource \"aws_s3_bucket\" \"important_data\" {\n  bucket = \"important-data-bucket\"\n\n  lifecycle {\n    prevent_destroy = true\n  }\n}\n\nresource \"aws_s3_bucket_versioning\" \"important_data\" {\n  bucket = aws_s3_bucket.important_data.id\n  versioning_configuration {\n    status = \"Enabled\"\n  }\n}\n\n# \u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u30ed\u30c3\u30af\u306e\u8a2d\u5b9a\nresource \"aws_s3_bucket_object_lock_configuration\" \"important_data\" {\n  bucket = aws_s3_bucket.important_data.id\n\n  rule {\n    default_retention {\n      mode = \"COMPLIANCE\"\n      days = 30\n    }\n  }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-45\">\u904b\u7528\u7ba1\u7406\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-46\">1. \u30e2\u30cb\u30bf\u30ea\u30f3\u30b0\u3068\u30a2\u30e9\u30fc\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=\"\"># CloudWatch\u30a2\u30e9\u30fc\u30e0\u306e\u8a2d\u5b9a\nresource \"aws_cloudwatch_metric_alarm\" \"cpu_high\" {\n  alarm_name          = \"cpu-utilization-high\"\n  comparison_operator = \"GreaterThanThreshold\"\n  evaluation_periods  = \"2\"\n  metric_name         = \"CPUUtilization\"\n  namespace           = \"AWS\/EC2\"\n  period             = \"300\"\n  statistic          = \"Average\"\n  threshold          = \"80\"\n  alarm_description  = \"This metric monitors EC2 CPU utilization\"\n  alarm_actions      = [aws_sns_topic.alerts.arn]\n\n  dimensions = {\n    InstanceId = aws_instance.app.id\n  }\n}\n\n# SNS\u30c8\u30d4\u30c3\u30af\u306e\u8a2d\u5b9a\nresource \"aws_sns_topic\" \"alerts\" {\n  name = \"high-cpu-alert\"\n}\n\nresource \"aws_sns_topic_policy\" \"alerts\" {\n  arn = aws_sns_topic.alerts.arn\n\n  policy = jsonencode({\n    Version = \"2012-10-17\"\n    Statement = [\n      {\n        Effect = \"Allow\"\n        Principal = {\n          Service = \"cloudwatch.amazonaws.com\"\n        }\n        Action   = \"SNS:Publish\"\n        Resource = aws_sns_topic.alerts.arn\n      }\n    ]\n  })\n}<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-47\">2. \u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u3068\u30ea\u30ab\u30d0\u30ea\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=\"\"># EBS\u30b9\u30ca\u30c3\u30d7\u30b7\u30e7\u30c3\u30c8\u306e\u81ea\u52d5\u5316\nresource \"aws_dlm_lifecycle_policy\" \"ebs_backup\" {\n  description        = \"EBS snapshot lifecycle policy\"\n  execution_role_arn = aws_iam_role.dlm_lifecycle_role.arn\n  state             = \"ENABLED\"\n\n  policy_details {\n    resource_types = [\"VOLUME\"]\n\n    schedule {\n      name = \"Daily snapshots\"\n\n      create_rule {\n        interval      = 24\n        interval_unit = \"HOURS\"\n        times        = [\"23:45\"]\n      }\n\n      retain_rule {\n        count = 7\n      }\n\n      tags_to_add = {\n        SnapshotCreator = \"DLM\"\n      }\n\n      copy_tags = true\n    }\n\n    target_tags = {\n      Backup = \"true\"\n    }\n  }\n}<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-48\">3. \u30b3\u30b9\u30c8\u7ba1\u7406\u3068\u30bf\u30b0\u4ed8\u3051\u6226\u7565<\/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=\"\"># \u30bf\u30b0\u4ed8\u3051\u30dd\u30ea\u30b7\u30fc\nlocals {\n  common_tags = {\n    Environment = var.environment\n    Project     = var.project_name\n    ManagedBy   = \"terraform\"\n    Owner       = var.team_email\n  }\n}\n\n# \u30bf\u30b0\u306e\u5f37\u5236\nresource \"aws_iam_policy\" \"require_tags\" {\n  name = \"require-resource-tags\"\n\n  policy = jsonencode({\n    Version = \"2012-10-17\"\n    Statement = [\n      {\n        Effect = \"Deny\"\n        Action = [\n          \"ec2:RunInstances\",\n          \"ec2:CreateVolume\"\n        ]\n        Resource = \"*\"\n        Condition = {\n          \"StringNotLike\": {\n            \"aws:RequestTag\/Environment\": [\"production\", \"staging\", \"development\"]\n          }\n        }\n      }\n    ]\n  })\n}<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u8a2d\u5b9a\u306b\u3088\u308a\u3001\u4ee5\u4e0b\u306e\u52b9\u679c\u304c\u671f\u5f85\u3067\u304d\u307e\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u306e\u5f37\u5316<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30a2\u30af\u30bb\u30b9\u5236\u5fa1\u306e\u9069\u5207\u306a\u5b9f\u88c5<\/li>\n\n\n\n<li>\u30c7\u30fc\u30bf\u306e\u4fdd\u8b77\u3068\u6697\u53f7\u5316<\/li>\n\n\n\n<li>\u76e3\u67fb\u8a3c\u8de1\u306e\u78ba\u4fdd<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u904b\u7528\u52b9\u7387\u306e\u5411\u4e0a<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u81ea\u52d5\u5316\u3055\u308c\u305f\u30e2\u30cb\u30bf\u30ea\u30f3\u30b0<\/li>\n\n\n\n<li>\u52b9\u7387\u7684\u306a\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u7ba1\u7406<\/li>\n\n\n\n<li>\u4f53\u7cfb\u7684\u306a\u30ea\u30bd\u30fc\u30b9\u7ba1\u7406<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u30b3\u30b9\u30c8\u306e\u6700\u9069\u5316<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30ea\u30bd\u30fc\u30b9\u306e\u9069\u5207\u306a\u30e9\u30a4\u30d5\u30b5\u30a4\u30af\u30eb\u7ba1\u7406<\/li>\n\n\n\n<li>\u7121\u99c4\u306a\u30ea\u30bd\u30fc\u30b9\u306e\u7279\u5b9a\u3068\u524a\u9664<\/li>\n\n\n\n<li>\u4e88\u7b97\u7ba1\u7406\u306e\u52b9\u7387\u5316<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-49\">\u30c1\u30fc\u30e0\u958b\u767a\u306b\u304a\u3051\u308bTerraform\u6d3b\u7528\u8853<\/h2>\n\n\n\n<p>\u30c1\u30fc\u30e0\u3067Terraform\u3092\u52b9\u679c\u7684\u306b\u6d3b\u7528\u3059\u308b\u305f\u3081\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u3068\u5b9f\u8df5\u7684\u306a\u65b9\u6cd5\u3092\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-50\">GitHub\u3092\u4f7f\u7528\u3057\u305f\u30d0\u30fc\u30b8\u30e7\u30f3\u7ba1\u7406\u306e\u65b9\u6cd5<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-51\">\u30ea\u30dd\u30b8\u30c8\u30ea\u69cb\u9020\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/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=\"\">terraform-infrastructure\/\n\u251c\u2500\u2500 .github\/\n\u2502   \u2514\u2500\u2500 workflows\/\n\u2502       \u251c\u2500\u2500 terraform-plan.yml\n\u2502       \u2514\u2500\u2500 terraform-apply.yml\n\u251c\u2500\u2500 modules\/\n\u2502   \u251c\u2500\u2500 networking\/\n\u2502   \u251c\u2500\u2500 compute\/\n\u2502   \u2514\u2500\u2500 database\/\n\u251c\u2500\u2500 environments\/\n\u2502   \u251c\u2500\u2500 staging\/\n\u2502   \u2514\u2500\u2500 production\/\n\u251c\u2500\u2500 .gitignore\n\u251c\u2500\u2500 README.md\n\u2514\u2500\u2500 pre-commit-config.yaml<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-52\">.gitignore \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=\"\"># Local .terraform directories\n**\/.terraform\/*\n\n# .tfstate files\n*.tfstate\n*.tfstate.*\n\n# Crash log files\ncrash.log\n\n# Exclude sensitive variables files\n*.tfvars\n!example.tfvars\n\n# Override files\noverride.tf\noverride.tf.json\n*_override.tf\n*_override.tf.json\n\n# CLI configuration files\n.terraformrc\nterraform.rc<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-53\">pre-commit\u30d5\u30c3\u30af\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=\"\"># .pre-commit-config.yaml\nrepos:\n- repo: https:\/\/github.com\/antonbabenko\/pre-commit-terraform\n  rev: v1.50.0\n  hooks:\n    - id: terraform_fmt\n    - id: terraform_docs\n    - id: terraform_tflint\n    - id: terraform_validate<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-54\">\u30d6\u30e9\u30f3\u30c1\u6226\u7565<\/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=\"\">main\n\u251c\u2500\u2500 feature\/add-rds-instance\n\u251c\u2500\u2500 feature\/update-vpc-config\n\u2514\u2500\u2500 hotfix\/security-group-fix<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-55\">CI\/CD\u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u3068\u306e\u9023\u643a\u65b9\u6cd5<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-56\">GitHub Actions\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=\"\"># .github\/workflows\/terraform-plan.yml\nname: Terraform Plan\n\non:\n  pull_request:\n    branches: [ main ]\n    paths:\n    - 'environments\/**'\n    - 'modules\/**'\n\njobs:\n  terraform:\n    runs-on: ubuntu-latest\n\n    steps:\n    - uses: actions\/checkout@v3\n\n    - name: Configure AWS Credentials\n      uses: aws-actions\/configure-aws-credentials@v1\n      with:\n        aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}\n        aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}\n        aws-region: ap-northeast-1\n\n    - name: Setup Terraform\n      uses: hashicorp\/setup-terraform@v2\n      with:\n        terraform_version: 1.5.0\n\n    - name: Terraform Format\n      run: terraform fmt -check -recursive\n\n    - name: Terraform Init\n      run: |\n        cd environments\/staging\n        terraform init\n\n    - name: Terraform Plan\n      run: |\n        cd environments\/staging\n        terraform plan -no-color\n      continue-on-error: true\n\n    - name: Update Pull Request\n      uses: actions\/github-script@v6\n      if: github.event_name == 'pull_request'\n      env:\n        PLAN: \"terraform\\n${{ steps.plan.outputs.stdout }}\"\n      with:\n        github-token: ${{ secrets.GITHUB_TOKEN }}\n        script: |\n          const output = `#### Terraform Format and Style \ud83d\udd8c\\`${{ steps.fmt.outcome }}\\`\n          #### Terraform Plan \ud83d\udcd6\\`${{ steps.plan.outcome }}\\`\n\n          &lt;details&gt;&lt;summary&gt;Show Plan&lt;\/summary&gt;\n\n          \\`\\`\\`\\n\n          ${process.env.PLAN}\n          \\`\\`\\`\n\n          &lt;\/details&gt;`;\n\n          github.rest.issues.createComment({\n            issue_number: context.issue.number,\n            owner: context.repo.owner,\n            repo: context.repo.repo,\n            body: output\n          })<\/pre>\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=\"\"># .github\/workflows\/terraform-apply.yml\nname: Terraform Apply\n\non:\n  push:\n    branches: [ main ]\n    paths:\n    - 'environments\/**'\n    - 'modules\/**'\n\njobs:\n  terraform:\n    runs-on: ubuntu-latest\n    environment: production\n\n    steps:\n    - uses: actions\/checkout@v3\n\n    - name: Configure AWS Credentials\n      uses: aws-actions\/configure-aws-credentials@v1\n      with:\n        aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}\n        aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}\n        aws-region: ap-northeast-1\n\n    - name: Setup Terraform\n      uses: hashicorp\/setup-terraform@v2\n      with:\n        terraform_version: 1.5.0\n\n    - name: Terraform Init\n      run: |\n        cd environments\/production\n        terraform init\n\n    - name: Terraform Apply\n      run: |\n        cd environments\/production\n        terraform apply -auto-approve<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-57\">\u30b3\u30fc\u30c9\u30ec\u30d3\u30e5\u30fc\u306e\u30ac\u30a4\u30c9\u30e9\u30a4\u30f3<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30c1\u30a7\u30c3\u30af<\/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=\"\"># \u30ec\u30d3\u30e5\u30fc\u6642\u306e\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30c1\u30a7\u30c3\u30af\u30dd\u30a4\u30f3\u30c8\nresource \"aws_security_group\" \"example\" {\n  # \u2713 \u30a4\u30f3\u30d0\u30a6\u30f3\u30c9\u30eb\u30fc\u30eb\u306e\u78ba\u8a8d\n  # \u2713 \u4e0d\u8981\u306a\u30dd\u30fc\u30c8\u304c\u958b\u653e\u3055\u308c\u3066\u3044\u306a\u3044\u304b\n  # \u2713 CIDR\u30d6\u30ed\u30c3\u30af\u304c\u9069\u5207\u304b\n  ingress {\n    from_port   = 443\n    to_port     = 443\n    protocol    = \"tcp\"\n    cidr_blocks = [\"10.0.0.0\/16\"]  # \u793e\u5185\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u306e\u307f\n  }\n}<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30b3\u30b9\u30c8\u5f71\u97ff\u306e\u78ba\u8a8d<\/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=\"\"># \u30b3\u30b9\u30c8\u306b\u5f71\u97ff\u3092\u4e0e\u3048\u308b\u8a2d\u5b9a\u306e\u4f8b\nresource \"aws_instance\" \"example\" {\n  # \u2713 \u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u30bf\u30a4\u30d7\u306e\u59a5\u5f53\u6027\n  instance_type = \"t3.micro\"  # \u958b\u767a\u74b0\u5883\u5411\u3051\n\n  # \u2713 EBS\u30dc\u30ea\u30e5\u30fc\u30e0\u306e\u30b5\u30a4\u30ba\u3068\u7a2e\u985e\n  root_block_device {\n    volume_type = \"gp3\"\n    volume_size = 20\n  }\n}<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u547d\u540d\u898f\u5247\u306e\u7d71\u4e00<\/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=\"\"># \u63a8\u5968\u3055\u308c\u308b\u547d\u540d\u898f\u5247\nresource \"aws_instance\" \"web_server\" {\n  tags = {\n    Name        = \"${var.environment}-web-server\"\n    Environment = var.environment\n    Project     = var.project_name\n    ManagedBy   = \"terraform\"\n  }\n}<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-58\">\u30c1\u30fc\u30e0\u958b\u767a\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30e2\u30b8\u30e5\u30fc\u30eb\u306e\u30d0\u30fc\u30b8\u30e7\u30cb\u30f3\u30b0<\/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=\"\">module \"vpc\" {\n  source  = \"terraform-aws-modules\/vpc\/aws\"\n  version = \"~&gt; 3.0\"  # \u30e1\u30b8\u30e3\u30fc\u30d0\u30fc\u30b8\u30e7\u30f3\u306e\u56fa\u5b9a\n}<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30ef\u30fc\u30af\u30b9\u30da\u30fc\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=\"\"># \u74b0\u5883\u5225\u306e\u30ef\u30fc\u30af\u30b9\u30da\u30fc\u30b9\u7ba1\u7406\nterraform workspace new staging\nterraform workspace new production\n\n# \u74b0\u5883\u5909\u6570\u3067\u306e\u5236\u5fa1\nexport TF_WORKSPACE=\"staging\"<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u5909\u6570\u306e\u968e\u5c64\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=\"\"># terraform.tfvars\nenvironment_configs = {\n  staging = {\n    instance_type = \"t3.micro\"\n    instance_count = 1\n  }\n  production = {\n    instance_type = \"t3.small\"\n    instance_count = 3\n  }\n}\n\n# variables.tf\nvariable \"environment_configs\" {\n  type = map(object({\n    instance_type  = string\n    instance_count = number\n  }))\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-59\">\u30c1\u30fc\u30e0\u958b\u767a\u6642\u306e\u91cd\u8981\u30dd\u30a4\u30f3\u30c8<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30b3\u30df\u30e5\u30cb\u30b1\u30fc\u30b7\u30e7\u30f3\u3068\u6587\u66f8\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306e\u6d3b\u7528<\/li>\n\n\n\n<li>\u5909\u66f4\u5185\u5bb9\u306e\u8a73\u7d30\u306a\u8aac\u660e<\/li>\n\n\n\n<li>\u5f71\u97ff\u7bc4\u56f2\u306e\u660e\u78ba\u5316<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30c6\u30b9\u30c8\u6226\u7565<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>terraform plan<\/code>\u306e\u81ea\u52d5\u5b9f\u884c<\/li>\n\n\n\n<li>\u30c6\u30b9\u30c8\u74b0\u5883\u3067\u306e\u4e8b\u524d\u691c\u8a3c<\/li>\n\n\n\n<li>\u6bb5\u968e\u7684\u306a\u30c7\u30d7\u30ed\u30a4<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u7ba1\u7406<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30b7\u30fc\u30af\u30ec\u30c3\u30c8\u60c5\u5831\u306e\u9069\u5207\u306a\u7ba1\u7406<\/li>\n\n\n\n<li>\u30a2\u30af\u30bb\u30b9\u6a29\u9650\u306e\u6700\u5c0f\u5316<\/li>\n\n\n\n<li>\u76e3\u67fb\u30ed\u30b0\u306e\u4fdd\u6301<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u77e5\u8b58\u5171\u6709<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30b3\u30fc\u30c9\u30ec\u30d3\u30e5\u30fc\u3092\u901a\u3058\u305f\u5b66\u7fd2<\/li>\n\n\n\n<li>\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306e\u7d99\u7d9a\u7684\u306a\u66f4\u65b0<\/li>\n\n\n\n<li>\u5b9a\u671f\u7684\u306a\u6280\u8853\u5171\u6709\u30bb\u30c3\u30b7\u30e7\u30f3<\/li>\n<\/ul>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u5b9f\u8df5\u306b\u3088\u308a\u3001\u30c1\u30fc\u30e0\u3067\u306eTerraform\u904b\u7528\u3092\u52b9\u7387\u7684\u304b\u3064\u5b89\u5168\u306b\u884c\u3046\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-60\">\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u30ac\u30a4\u30c9<\/h2>\n\n\n\n<p>Terraform\u3092\u4f7f\u7528\u3059\u308b\u969b\u306b\u906d\u9047\u3059\u308b\u53ef\u80fd\u6027\u306e\u3042\u308b\u4e00\u822c\u7684\u306a\u554f\u984c\u3068\u305d\u306e\u89e3\u6c7a\u65b9\u6cd5\u3092\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-61\">\u3088\u304f\u3042\u308b\u30a8\u30e9\u30fc\u3068\u305d\u306e\u89e3\u6c7a\u65b9\u6cd5<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-62\">1. \u521d\u671f\u5316\u95a2\u9023\u306e\u30a8\u30e9\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=\"\">Error: Failed to get existing workspaces: error configuring S3 backend<\/pre>\n\n\n\n<p><strong>\u539f\u56e0<\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>AWS\u8a8d\u8a3c\u60c5\u5831\u306e\u8a2d\u5b9a\u30df\u30b9<\/li>\n\n\n\n<li>S3\u30d0\u30b1\u30c3\u30c8\u3078\u306e\u30a2\u30af\u30bb\u30b9\u6a29\u9650\u4e0d\u8db3<\/li>\n\n\n\n<li>\u30ea\u30fc\u30b8\u30e7\u30f3\u8a2d\u5b9a\u306e\u8aa4\u308a<\/li>\n<\/ul>\n\n\n\n<p><strong>\u89e3\u6c7a\u65b9\u6cd5<\/strong>:<\/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=\"\"># AWS\u8a8d\u8a3c\u60c5\u5831\u306e\u78ba\u8a8d\naws configure list\n\n# \u74b0\u5883\u5909\u6570\u3067\u306e\u8a8d\u8a3c\u60c5\u5831\u8a2d\u5b9a\nexport AWS_ACCESS_KEY_ID=\"your_access_key\"\nexport AWS_SECRET_ACCESS_KEY=\"your_secret_key\"\nexport AWS_DEFAULT_REGION=\"ap-northeast-1\"\n\n# \u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u8a2d\u5b9a\u306e\u78ba\u8a8d\nterraform init -reconfigure<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-63\">2. \u30d7\u30e9\u30f3\u5b9f\u884c\u6642\u306e\u30a8\u30e9\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=\"\">Error: Reference to undeclared resource<\/pre>\n\n\n\n<p><strong>\u539f\u56e0<\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30ea\u30bd\u30fc\u30b9\u540d\u306e\u53c2\u7167\u30df\u30b9<\/li>\n\n\n\n<li>\u30e2\u30b8\u30e5\u30fc\u30eb\u5185\u306e\u30ea\u30bd\u30fc\u30b9\u53c2\u7167\u30a8\u30e9\u30fc<\/li>\n\n\n\n<li>\u5909\u6570\u5b9a\u7fa9\u306e\u4e0d\u8db3<\/li>\n<\/ul>\n\n\n\n<p><strong>\u89e3\u6c7a\u65b9\u6cd5<\/strong>:<\/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=\"\"># \u6b63\u3057\u3044\u30ea\u30bd\u30fc\u30b9\u53c2\u7167\nresource \"aws_instance\" \"web\" {\n  subnet_id = aws_subnet.public[0].id  # \u914d\u5217\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u306e\u78ba\u8a8d\n}\n\n# \u5909\u6570\u5b9a\u7fa9\u306e\u8ffd\u52a0\nvariable \"instance_type\" {\n  type    = string\n  default = \"t3.micro\"\n}<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-64\">3. \u4f9d\u5b58\u95a2\u4fc2\u306e\u30a8\u30e9\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=\"\">Error: Error creating DB Instance: \nInvalidVPCNetworkStateCannot create DB instance because VPC network is not ready<\/pre>\n\n\n\n<p><strong>\u89e3\u6c7a\u65b9\u6cd5<\/strong>:<\/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=\"\"># \u660e\u793a\u7684\u306a\u4f9d\u5b58\u95a2\u4fc2\u306e\u5b9a\u7fa9\nresource \"aws_db_instance\" \"main\" {\n  # ... \u4ed6\u306e\u8a2d\u5b9a\n\n  depends_on = [\n    aws_vpc.main,\n    aws_subnet.private,\n    aws_security_group.db\n  ]\n}<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-65\">4. \u30b9\u30c6\u30fc\u30c8\u95a2\u9023\u306e\u30a8\u30e9\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=\"\">Error: Backend configuration changed<\/pre>\n\n\n\n<p><strong>\u89e3\u6c7a\u65b9\u6cd5<\/strong>:<\/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=\"\"># \u30b9\u30c6\u30fc\u30c8\u30d5\u30a1\u30a4\u30eb\u306e\u518d\u521d\u671f\u5316\nterraform init -reconfigure\n\n# \u30b9\u30c6\u30fc\u30c8\u30d5\u30a1\u30a4\u30eb\u306e\u66f4\u65b0\nterraform refresh\n\n# \u30b9\u30c6\u30fc\u30c8\u306e\u624b\u52d5\u30a4\u30f3\u30dd\u30fc\u30c8\nterraform import aws_instance.web i-1234567890abcdef0<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-66\">\u30c7\u30d0\u30c3\u30b0\u3068\u30ed\u30b0\u78ba\u8a8d\u306e\u624b\u9806<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-67\">1. \u30c7\u30d0\u30c3\u30b0\u30ed\u30b0\u306e\u6709\u52b9\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=\"\"># \u8a73\u7d30\u306a\u30ed\u30b0\u51fa\u529b\u306e\u6709\u52b9\u5316\nexport TF_LOG=DEBUG\nexport TF_LOG_PATH=terraform.log\n\n# \u7279\u5b9a\u306e\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u306e\u30c7\u30d0\u30c3\u30b0\u30ed\u30b0\nexport AWS_DEBUG=true\nexport AWS_DEBUG_REQUEST=true<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-68\">2. \u3088\u304f\u3042\u308b\u554f\u984c\u306e\u30c7\u30d0\u30c3\u30b0\u4f8b<\/h4>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-69\">API\u30ea\u30af\u30a8\u30b9\u30c8\u306e\u30bf\u30a4\u30e0\u30a2\u30a6\u30c8<\/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=\"\">provider \"aws\" {\n  region = \"ap-northeast-1\"\n\n  # \u30bf\u30a4\u30e0\u30a2\u30a6\u30c8\u8a2d\u5b9a\u306e\u8abf\u6574\n  config {\n    max_retries = 10\n  }\n}<\/pre>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-70\">\u30e1\u30e2\u30ea\u4e0d\u8db3\u306e\u554f\u984c<\/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=\"\"># Terraform\u306e\u30e1\u30e2\u30ea\u5236\u9650\u7de9\u548c\nexport TF_PLUGIN_CACHE_DIR=\"\/tmp\/terraform-plugin-cache\"\nexport TF_CLI_ARGS=\"-parallelism=2\"<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-71\">3. \u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u306e\u30ef\u30fc\u30af\u30d5\u30ed\u30fc<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u554f\u984c\u306e\u5207\u308a\u5206\u3051<\/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=\"\"># \u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u306e\u554f\u984c\u304b\u78ba\u8a8d\nterraform providers\n\n# \u72b6\u614b\u30d5\u30a1\u30a4\u30eb\u306e\u78ba\u8a8d\nterraform show\n\n# \u30d7\u30e9\u30f3\u306e\u8a73\u7d30\u78ba\u8a8d\nterraform plan -detailed-exitcode<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30a8\u30e9\u30fc\u30e1\u30c3\u30bb\u30fc\u30b8\u306e\u89e3\u6790<\/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=\"\">Error: Error launching source instance: InvalidParameter: \nValue (my-instance-role) for parameter iamInstanceProfile.name is invalid.\n\n# \u30c1\u30a7\u30c3\u30af\u30dd\u30a4\u30f3\u30c8\n- IAM\u30ed\u30fc\u30eb\u540d\u306e\u5b58\u5728\u78ba\u8a8d\n- \u540d\u524d\u7a7a\u9593\u306e\u78ba\u8a8d\n- \u6a29\u9650\u306e\u78ba\u8a8d<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u30ea\u30bd\u30fc\u30b9\u72b6\u614b\u306e\u78ba\u8a8d<\/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=\"\"># \u7279\u5b9a\u306e\u30ea\u30bd\u30fc\u30b9\u306e\u72b6\u614b\u78ba\u8a8d\nterraform state show aws_instance.web\n\n# \u30ea\u30bd\u30fc\u30b9\u4e00\u89a7\u306e\u78ba\u8a8d\nterraform state list<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-72\">\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u4e88\u9632\u7684\u5bfe\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=\"\"># \u30bf\u30a4\u30e0\u30a2\u30a6\u30c8\u8a2d\u5b9a\nresource \"aws_db_instance\" \"example\" {\n  # ... \u4ed6\u306e\u8a2d\u5b9a\n\n  timeouts {\n    create = \"60m\"\n    delete = \"2h\"\n    update = \"30m\"\n  }\n}\n\n# \u6761\u4ef6\u4ed8\u304d\u30ea\u30bd\u30fc\u30b9\u4f5c\u6210\nresource \"aws_instance\" \"web\" {\n  count = var.create_instance ? 1 : 0\n\n  # ... \u4ed6\u306e\u8a2d\u5b9a\n}<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30a8\u30e9\u30fc\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0<\/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=\"\"># NULL\u5024\u306e\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0\nlocals {\n  instance_type = var.environment == \"production\" ? var.prod_instance_type : var.dev_instance_type\n}\n\n# \u6761\u4ef6\u4ed8\u304d\u5b9f\u884c\nresource \"aws_route53_record\" \"www\" {\n  count = var.create_dns_record ? 1 : 0\n\n  # ... \u4ed6\u306e\u8a2d\u5b9a\n}<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u30ea\u30bd\u30fc\u30b9\u306e\u6574\u5408\u6027\u30c1\u30a7\u30c3\u30af<\/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\u30fc\u30bf\u30bd\u30fc\u30b9\u3092\u4f7f\u7528\u3057\u305f\u5b58\u5728\u78ba\u8a8d\ndata \"aws_vpc\" \"selected\" {\n  id = var.vpc_id\n}\n\n# \u6761\u4ef6\u30c1\u30a7\u30c3\u30af\nresource \"aws_subnet\" \"example\" {\n  vpc_id = data.aws_vpc.selected.id\n\n  lifecycle {\n    precondition {\n      condition     = data.aws_vpc.selected.state == \"available\"\n      error_message = \"VPC must be in available state.\"\n    }\n  }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-73\">\u4e00\u822c\u7684\u306a\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u306e\u30d5\u30ed\u30fc<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u30a8\u30e9\u30fc\u30e1\u30c3\u30bb\u30fc\u30b8\u306e\u78ba\u8a8d<\/li>\n\n\n\n<li>\u30ed\u30b0\u30ec\u30d9\u30eb\u306e\u5f15\u304d\u4e0a\u3052<\/li>\n\n\n\n<li>\u4f9d\u5b58\u95a2\u4fc2\u306e\u78ba\u8a8d<\/li>\n\n\n\n<li>\u6a29\u9650\u306e\u78ba\u8a8d<\/li>\n\n\n\n<li>\u30b9\u30c6\u30fc\u30c8\u6574\u5408\u6027\u306e\u78ba\u8a8d<\/li>\n\n\n\n<li>AWS\u30b3\u30f3\u30bd\u30fc\u30eb\u3067\u306e\u72b6\u614b\u78ba\u8a8d<\/li>\n<\/ol>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u624b\u9806\u3092\u4f53\u7cfb\u7684\u306b\u5b9f\u65bd\u3059\u308b\u3053\u3068\u3067\u3001\u307b\u3068\u3093\u3069\u306eTerraform\u306e\u554f\u984c\u3092\u52b9\u7387\u7684\u306b\u89e3\u6c7a\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-74\">Terraform\u3092\u4f7f\u7528\u3057\u305f\u30b3\u30b9\u30c8\u6700\u9069\u5316<\/h2>\n\n\n\n<p>Terraform\u3092\u6d3b\u7528\u3057\u3066AWS\u30a4\u30f3\u30d5\u30e9\u306e\u30b3\u30b9\u30c8\u3092\u6700\u9069\u5316\u3059\u308b\u65b9\u6cd5\u3092\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-75\">\u30ea\u30bd\u30fc\u30b9\u306e\u30e9\u30a4\u30d5\u30b5\u30a4\u30af\u30eb\u7ba1\u7406\u65b9\u6cd5<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-76\">1. \u81ea\u52d5\u30b9\u30b1\u30fc\u30ea\u30f3\u30b0\u306e\u5b9f\u88c5<\/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=\"\"># Auto Scaling Group\u306e\u8a2d\u5b9a\nresource \"aws_autoscaling_group\" \"web\" {\n  name                = \"web-asg\"\n  desired_capacity    = 2\n  max_size           = 4\n  min_size           = 1\n  target_group_arns  = [aws_lb_target_group.web.arn]\n  vpc_zone_identifier = aws_subnet.private[*].id\n\n  # \u8d77\u52d5\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306e\u8a2d\u5b9a\n  launch_template {\n    id      = aws_launch_template.web.id\n    version = \"$Latest\"\n  }\n\n  # \u30b9\u30b1\u30b8\u30e5\u30fc\u30eb\u30d9\u30fc\u30b9\u306e\u8a2d\u5b9a\n  tag {\n    key                 = \"AutoScale\"\n    value              = \"true\"\n    propagate_at_launch = true\n  }\n}\n\n# \u30b9\u30b1\u30b8\u30e5\u30fc\u30eb\u30d9\u30fc\u30b9\u306e\u30b9\u30b1\u30fc\u30ea\u30f3\u30b0\nresource \"aws_autoscaling_schedule\" \"scale_down\" {\n  scheduled_action_name  = \"scale-down-night\"\n  min_size              = 1\n  max_size              = 1\n  desired_capacity      = 1\n  recurrence            = \"0 20 * * *\"  # \u6bce\u65e520:00\n  autoscaling_group_name = aws_autoscaling_group.web.name\n}\n\nresource \"aws_autoscaling_schedule\" \"scale_up\" {\n  scheduled_action_name  = \"scale-up-morning\"\n  min_size              = 2\n  max_size              = 4\n  desired_capacity      = 2\n  recurrence            = \"0 8 * * *\"   # \u6bce\u65e58:00\n  autoscaling_group_name = aws_autoscaling_group.web.name\n}<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-77\">2. \u30ea\u30bd\u30fc\u30b9\u306e\u30e9\u30a4\u30d5\u30b5\u30a4\u30af\u30eb\u7ba1\u7406<\/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=\"\"># EC2\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u81ea\u52d5\u505c\u6b62\/\u8d77\u52d5\nresource \"aws_instance\" \"dev\" {\n  # ... \u57fa\u672c\u8a2d\u5b9a\n\n  tags = {\n    Name = \"dev-instance\"\n    AutoStop = \"true\"\n  }\n\n  lifecycle {\n    create_before_destroy = true\n    ignore_changes = [tags]\n  }\n}\n\n# Lambda\u95a2\u6570\u306b\u3088\u308b\u81ea\u52d5\u505c\u6b62\nresource \"aws_lambda_function\" \"stop_instances\" {\n  filename      = \"stop_instances.zip\"\n  function_name = \"stop-dev-instances\"\n  role          = aws_iam_role.lambda_role.arn\n  handler       = \"index.handler\"\n  runtime       = \"nodejs18.x\"\n\n  environment {\n    variables = {\n      AUTO_STOP_TAG = \"AutoStop\"\n    }\n  }\n}\n\n# EventBridge\uff08CloudWatch Events\uff09\u30eb\u30fc\u30eb\nresource \"aws_cloudwatch_event_rule\" \"stop_instances\" {\n  name                = \"stop-dev-instances\"\n  description         = \"Stop development instances at night\"\n  schedule_expression = \"cron(0 20 ? * MON-FRI *)\"\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-78\">\u30b3\u30b9\u30c8\u898b\u7a4d\u3082\u308a\u3068\u4e88\u7b97\u7ba1\u7406\u306e\u5b9f\u8df5<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-79\">1. AWS\u30b3\u30b9\u30c8\u4e88\u7b97\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=\"\"># \u6708\u6b21\u4e88\u7b97\u306e\u8a2d\u5b9a\nresource \"aws_budgets_budget\" \"monthly\" {\n  name              = \"monthly-budget\"\n  budget_type       = \"COST\"\n  limit_amount      = \"1000\"\n  limit_unit        = \"USD\"\n  time_period_start = \"2024-01-01_00:00\"\n  time_unit         = \"MONTHLY\"\n\n  notification {\n    comparison_operator        = \"GREATER_THAN\"\n    threshold                  = 80\n    threshold_type            = \"PERCENTAGE\"\n    notification_type         = \"ACTUAL\"\n    subscriber_email_addresses = [\"alert@example.com\"]\n  }\n\n  cost_filters = {\n    Service = \"Amazon Elastic Compute Cloud - Compute\"\n  }\n}\n\n# \u4e88\u7b97\u30a2\u30e9\u30fc\u30c8\u306eSNS\u30c8\u30d4\u30c3\u30af\nresource \"aws_sns_topic\" \"budget_alerts\" {\n  name = \"budget-alerts\"\n}<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-80\">2. \u30b3\u30b9\u30c8\u6700\u9069\u5316\u306e\u305f\u3081\u306e\u8a2d\u5b9a\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=\"\"># \u30b9\u30dd\u30c3\u30c8\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u6d3b\u7528\nresource \"aws_spot_fleet_request\" \"cheap_compute\" {\n  iam_fleet_role  = aws_iam_role.spot_fleet.arn\n  target_capacity = 2\n\n  launch_specification {\n    instance_type     = \"t3.micro\"\n    ami               = data.aws_ami.amazon_linux_2.id\n    spot_price        = \"0.0035\"  # \u6700\u5927\u652f\u6255\u984d\/\u6642\n    availability_zone = \"ap-northeast-1a\"\n\n    tags = {\n      Name = \"spot-instance\"\n    }\n  }\n}\n\n# S3\u30e9\u30a4\u30d5\u30b5\u30a4\u30af\u30eb\u30dd\u30ea\u30b7\u30fc\nresource \"aws_s3_bucket_lifecycle_configuration\" \"bucket_lifecycle\" {\n  bucket = aws_s3_bucket.storage.id\n\n  rule {\n    id     = \"archive-rule\"\n    status = \"Enabled\"\n\n    transition {\n      days          = 30\n      storage_class = \"STANDARD_IA\"\n    }\n\n    transition {\n      days          = 90\n      storage_class = \"GLACIER\"\n    }\n\n    expiration {\n      days = 365\n    }\n  }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-81\">\u30b3\u30b9\u30c8\u6700\u9069\u5316\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-82\">1. \u30ea\u30bd\u30fc\u30b9\u30bf\u30b0\u4ed8\u3051\u306e\u6226\u7565<\/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=\"\"># \u30bf\u30b0\u4ed8\u3051\u30dd\u30ea\u30b7\u30fc\nlocals {\n  mandatory_tags = {\n    Environment = var.environment\n    Project     = var.project_name\n    CostCenter  = var.cost_center\n    Owner       = var.team_email\n  }\n}\n\n# \u30bf\u30b0\u4ed8\u3051\u306e\u5f37\u5236\nresource \"aws_resourcegroups_group\" \"cost_tracking\" {\n  name = \"cost-tracking-group\"\n\n  resource_query {\n    query = jsonencode({\n      ResourceTypeFilters = [\"AWS::AllSupported\"]\n      TagFilters = [\n        {\n          Key = \"CostCenter\"\n        },\n        {\n          Key = \"Environment\"\n        }\n      ]\n    })\n  }\n}<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-83\">2. \u30b3\u30b9\u30c8\u5206\u6790\u3068\u30e2\u30cb\u30bf\u30ea\u30f3\u30b0<\/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=\"\"># Cost Explorer\u306e\u6709\u52b9\u5316\nresource \"aws_ce_cost_category\" \"environment\" {\n  name         = \"Environment\"\n  rule_version = \"CostCategoryExpression.v1\"\n\n  rules {\n    value = \"Production\"\n    rule {\n      tags {\n        key    = \"Environment\"\n        values = [\"prod\", \"production\"]\n      }\n    }\n  }\n}\n\n# CloudWatch\u30e1\u30c8\u30ea\u30af\u30b9\u30a2\u30e9\u30fc\u30e0\nresource \"aws_cloudwatch_metric_alarm\" \"billing\" {\n  alarm_name          = \"billing-alarm\"\n  comparison_operator = \"GreaterThanThreshold\"\n  evaluation_periods  = \"1\"\n  metric_name         = \"EstimatedCharges\"\n  namespace           = \"AWS\/Billing\"\n  period             = \"21600\"  # 6\u6642\u9593\n  statistic          = \"Maximum\"\n  threshold          = \"1000\"\n  alarm_description  = \"Billing alarm when charges exceed $1000\"\n  alarm_actions      = [aws_sns_topic.budget_alerts.arn]\n\n  dimensions = {\n    Currency = \"USD\"\n  }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-84\">\u30b3\u30b9\u30c8\u6700\u9069\u5316\u306e\u305f\u3081\u306e\u30c1\u30a7\u30c3\u30af\u30ea\u30b9\u30c8<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30ea\u30bd\u30fc\u30b9\u30b5\u30a4\u30b8\u30f3\u30b0<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u30bf\u30a4\u30d7\u306e\u9069\u5207\u306a\u9078\u629e<\/li>\n\n\n\n<li>\u81ea\u52d5\u30b9\u30b1\u30fc\u30ea\u30f3\u30b0\u306e\u5b9f\u88c5<\/li>\n\n\n\n<li>\u30b9\u30dd\u30c3\u30c8\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u6d3b\u7528<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30b9\u30c8\u30ec\u30fc\u30b8\u6700\u9069\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>S3\u30e9\u30a4\u30d5\u30b5\u30a4\u30af\u30eb\u30dd\u30ea\u30b7\u30fc\u306e\u8a2d\u5b9a<\/li>\n\n\n\n<li>EBS\u30dc\u30ea\u30e5\u30fc\u30e0\u306e\u9069\u5207\u306a\u30b5\u30a4\u30b8\u30f3\u30b0<\/li>\n\n\n\n<li>\u4e0d\u8981\u306a\u30b9\u30ca\u30c3\u30d7\u30b7\u30e7\u30c3\u30c8\u306e\u81ea\u52d5\u524a\u9664<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u904b\u7528\u52b9\u7387\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u958b\u767a\u74b0\u5883\u306e\u81ea\u52d5\u505c\u6b62\/\u8d77\u52d5<\/li>\n\n\n\n<li>\u30ea\u30bd\u30fc\u30b9\u306e\u4f7f\u7528\u72b6\u6cc1\u30e2\u30cb\u30bf\u30ea\u30f3\u30b0<\/li>\n\n\n\n<li>\u30b3\u30b9\u30c8\u30a2\u30e9\u30fc\u30c8\u306e\u8a2d\u5b9a<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u306e\u6700\u9069\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30b5\u30fc\u30d0\u30fc\u30ec\u30b9\u30b5\u30fc\u30d3\u30b9\u306e\u6d3b\u7528<\/li>\n\n\n\n<li>\u30ea\u30b6\u30fc\u30d6\u30c9\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u691c\u8a0e<\/li>\n\n\n\n<li>\u30de\u30eb\u30c1AZ\u69cb\u6210\u306e\u9069\u5207\u306a\u4f7f\u7528<\/li>\n<\/ul>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u65bd\u7b56\u3092\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u3067\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u52b9\u679c\u304c\u671f\u5f85\u3067\u304d\u307e\u3059\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u904b\u7528\u30b3\u30b9\u30c8\u306e\u524a\u6e1b<\/li>\n\n\n\n<li>\u30ea\u30bd\u30fc\u30b9\u4f7f\u7528\u52b9\u7387\u306e\u5411\u4e0a<\/li>\n\n\n\n<li>\u4e88\u7b97\u7ba1\u7406\u306e\u52b9\u7387\u5316<\/li>\n\n\n\n<li>\u30b3\u30b9\u30c8\u4e88\u6e2c\u306e\u7cbe\u5ea6\u5411\u4e0a<\/li>\n<\/ul>\n\n\n\n<p><\/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-2225","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\/2225","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=2225"}],"version-history":[{"count":1,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/2225\/revisions"}],"predecessor-version":[{"id":2226,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/2225\/revisions\/2226"}],"wp:attachment":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2225"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2225"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2225"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}