{"id":2316,"date":"2025-03-24T08:47:42","date_gmt":"2025-03-23T23:47:42","guid":{"rendered":"https:\/\/dexall.co.jp\/articles\/?p=2316"},"modified":"2025-03-24T08:48:05","modified_gmt":"2025-03-23T23:48:05","slug":"%e3%80%90%e4%bf%9d%e5%ad%98%e7%89%88%e3%80%91terraform-workspace%e3%81%a7%e5%ae%9f%e7%8f%be%e3%81%99%e3%82%8b3%e3%81%a4%e3%81%ae%e7%92%b0%e5%a2%83%e7%ae%a1%e7%90%86%e8%a1%93-%e5%8a%b9%e7%8e%87","status":"publish","type":"post","link":"https:\/\/dexall.co.jp\/articles\/?p=2316","title":{"rendered":"\u3010\u4fdd\u5b58\u7248\u3011Terraform Workspace\u3067\u5b9f\u73fe\u3059\u308b3\u3064\u306e\u74b0\u5883\u7ba1\u7406\u8853 &#8211; \u52b9\u7387\u7684\u306aAWS \u30ea\u30bd\u30fc\u30b9\u904b\u7528\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9"},"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 Workspace \u3068\u306f\uff1f \u2013 \u8907\u6570\u74b0\u5883\u7ba1\u7406\u306e\u65b0\u6a19\u6e96<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-1\">workspace \u304c\u89e3\u6c7a\u3059\u308b 3 \u3064\u306e\u8ab2\u984c<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-2\">\u5f93\u6765\u306e\u74b0\u5883\u7ba1\u7406\u3068\u306e\u6bd4\u8f03<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-3\">Terraform Workspace \u306e\u57fa\u672c\u7684\u306a\u4f7f\u3044\u65b9<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-4\">workspace \u4f5c\u6210\u304b\u3089\u524a\u9664\u307e\u3067\u306e\u6d41\u308c<\/a>      <\/li>      <li>        <a href=\"#i-5\">\u74b0\u5883\u5909\u6570\u306e\u4fbf\u5229\u306a\u4f7f\u3044\u65b9<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-6\">\u72b6\u614b\u7ba1\u7406\u306e\u57fa\u790e\u77e5\u8b58<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-7\">\u5b9f\u8df5\u7684\u306aWorkspace\u6d3b\u7528\u8853<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-8\">\u672c\u756a\u30fb\u30b9\u30c6\u30fc\u30b8\u30f3\u30b0\u30fb\u958b\u767a\u74b0\u5883\u306e\u5206\u96e2<\/a>      <\/li>      <li>        <a href=\"#i-9\">\u74b0\u5883\u3054\u3068\u306e\u8a2d\u5b9a\u5024\u7ba1\u7406\u30c6\u30af\u30cb\u30c3\u30af<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-10\">\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u306e\u5171\u6709\u6226\u7565<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-11\">Workspace \u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-12\">\u547d\u540d\u898f\u5247\u3068\u30bf\u30b0\u4ed8\u3051\u306e\u6a19\u6e96\u5316<\/a>      <\/li>      <li>        <a href=\"#i-13\">\u30a2\u30af\u30bb\u30b9\u5236\u5fa1\u3068\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u5bfe\u7b56<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-14\">\u30b3\u30b9\u30c8\u6700\u9069\u5316\u306e\u305f\u3081\u306e\u30ef\u30fc\u30af\u30b9\u30da\u30fc\u30b9\u8a2d\u8a08<\/a>      <\/li>    <\/ul>  <\/li>  <li class=\"last\">    <a href=\"#i-15\">\u3088\u304f\u3042\u308b\u30c8\u30e9\u30d6\u30eb\u3068\u89e3\u6c7a\u7b56<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-16\">state\u30ed\u30c3\u30af\u306e\u30ad\u30e3\u30c3\u30b7\u30e5\u89e3\u6d88\u6cd5<\/a>      <\/li>      <li>        <a href=\"#i-17\">\u74b0\u5883\u4e2d\u306e\u8a2d\u5b9a\u6f0f\u308c\u9632\u6b62\u7b56<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-18\">\u30ea\u30bd\u30fc\u30b9\u4f9d\u5b58\u95a2\u4fc2\u306e\u7ba1\u7406\u65b9\u6cd5<\/a>      <\/li>    <\/ul>  <\/li><\/ul>\n      <a href=\"#\" class=\"sgb-toc-button js-toc-button\" rel=\"nofollow\" data-open-dialog=\"true\"><i class=\"fa fa-list\"><\/i><span class=\"sgb-toc-button__text\">\u76ee\u6b21\u3078<\/span><\/a>\n    <\/div><\/div><h2 class=\"wp-block-heading\" id=\"i-0\">Terraform Workspace \u3068\u306f\uff1f \u2013 \u8907\u6570\u74b0\u5883\u7ba1\u7406\u306e\u65b0\u6a19\u6e96<\/h2>\n\n\n\n<p>Terraform Workspace\u306f\u3001\u540c\u4e00\u306eTerraform\u30b3\u30fc\u30c9\u69cb\u6210\u304b\u3089\u8907\u6570\u306e\u7570\u306a\u308b\u30a4\u30f3\u30d5\u30e9\u74b0\u5883\u3092\u7ba1\u7406\u3059\u308b\u305f\u3081\u306e\u6a5f\u80fd\u3067\u3059\u3002\u958b\u767a(dev)\u3001\u30b9\u30c6\u30fc\u30b8\u30f3\u30b0(staging)\u3001\u672c\u756a(prod)\u3068\u3044\u3063\u305f\u8907\u6570\u306e\u74b0\u5883\u3092\u3001\u30b3\u30fc\u30c9\u306e\u91cd\u8907\u306a\u304f\u52b9\u7387\u7684\u306b\u7ba1\u7406\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-1\">workspace \u304c\u89e3\u6c7a\u3059\u308b 3 \u3064\u306e\u8ab2\u984c<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30b3\u30fc\u30c9\u7ba1\u7406\u306e\u8907\u96d1\u3055<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5f93\u6765\uff1a\u74b0\u5883\u3054\u3068\u306b\u7570\u306a\u308b\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3084\u30ea\u30dd\u30b8\u30c8\u30ea\u304c\u5fc5\u8981<\/li>\n\n\n\n<li>\u89e3\u6c7a\u5f8c\uff1a\u540c\u4e00\u30b3\u30fc\u30c9\u30d9\u30fc\u30b9\u3067\u8907\u6570\u74b0\u5883\u3092\u7ba1\u7406\u53ef\u80fd<\/li>\n\n\n\n<li>\u30e1\u30ea\u30c3\u30c8\uff1a\u30b3\u30fc\u30c9\u306e\u4e00\u5143\u7ba1\u7406\u306b\u3088\u308b\u4fdd\u5b88\u6027\u5411\u4e0a<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30ea\u30bd\u30fc\u30b9\u5206\u96e2\u306e\u78ba\u5b9f\u6027<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5f93\u6765\uff1a\u74b0\u5883\u306e\u5206\u96e2\u306b\u30bf\u30b0\u3084\u547d\u540d\u898f\u5247\u306e\u307f\u3092\u4f7f\u7528<\/li>\n\n\n\n<li>\u89e3\u6c7a\u5f8c\uff1aworkspace\u5358\u4f4d\u3067\u5b8c\u5168\u306a\u8ad6\u7406\u5206\u96e2\u3092\u5b9f\u73fe<\/li>\n\n\n\n<li>\u30e1\u30ea\u30c3\u30c8\uff1a\u8aa4\u3063\u305f\u74b0\u5883\u3078\u306e\u30c7\u30d7\u30ed\u30a4\u3092\u9632\u6b62<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u72b6\u614b\u7ba1\u7406\u306e\u7169\u96d1\u3055<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5f93\u6765\uff1a\u74b0\u5883\u3054\u3068\u306b\u7570\u306a\u308bstate file\u3092\u624b\u52d5\u7ba1\u7406<\/li>\n\n\n\n<li>\u89e3\u6c7a\u5f8c\uff1aworkspace\u304c\u81ea\u52d5\u7684\u306bstate\u7ba1\u7406\u3092\u5b9f\u65bd<\/li>\n\n\n\n<li>\u30e1\u30ea\u30c3\u30c8\uff1a\u72b6\u614b\u7ba1\u7406\u306e\u81ea\u52d5\u5316\u306b\u3088\u308b\u30d2\u30e5\u30fc\u30de\u30f3\u30a8\u30e9\u30fc\u9632\u6b62<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-2\">\u5f93\u6765\u306e\u74b0\u5883\u7ba1\u7406\u3068\u306e\u6bd4\u8f03<\/h3>\n\n\n<div id=\"id-bdffcb10-9cb1-4fb1-8382-d923c79d2215\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u7ba1\u7406\u9805\u76ee<\/th><th>\u5f93\u6765\u306e\u65b9\u5f0f<\/th><th>Workspace\u65b9\u5f0f<\/th><th>\u30e1\u30ea\u30c3\u30c8<\/th><\/tr><\/thead><tbody><tr><td>\u30b3\u30fc\u30c9\u7ba1\u7406<\/td><td>\u74b0\u5883\u3054\u3068\u306b\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u4f5c\u6210<\/td><td>\u5358\u4e00\u30b3\u30fc\u30c9\u3067\u8907\u6570\u74b0\u5883<\/td><td>\u30e1\u30f3\u30c6\u30ca\u30f3\u30b9\u5de5\u6570\u524a\u6e1b<\/td><\/tr><tr><td>\u74b0\u5883\u5206\u96e2<\/td><td>\u547d\u540d\u898f\u5247\u306b\u3088\u308b\u8ad6\u7406\u5206\u96e2<\/td><td>workspace\u5358\u4f4d\u306e\u5b8c\u5168\u5206\u96e2<\/td><td>\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u5411\u4e0a<\/td><\/tr><tr><td>\u8a2d\u5b9a\u5024\u7ba1\u7406<\/td><td>\u74b0\u5883\u5909\u6570\u3084\u30d5\u30a1\u30a4\u30eb<\/td><td>workspace\u5909\u6570<\/td><td>\u4e00\u5143\u7ba1\u7406\u304c\u5bb9\u6613<\/td><\/tr><tr><td>\u30c7\u30d7\u30ed\u30a4\u7ba1\u7406<\/td><td>\u624b\u52d5\u3067\u306e\u74b0\u5883\u9078\u629e<\/td><td>workspace\u3067\u306e\u81ea\u52d5\u5236\u5fa1<\/td><td>\u30aa\u30da\u30ec\u30fc\u30b7\u30e7\u30f3\u30df\u30b9\u9632\u6b62<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<p>\u5b9f\u52d9\u3067\u306e\u5177\u4f53\u7684\u306a\u6d3b\u7528\u4f8b\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=\"\"># workspace\u5909\u6570\u3092\u4f7f\u7528\u3057\u305f\u74b0\u5883\u5225\u8a2d\u5b9a\nlocals {\n  env = terraform.workspace\n  instance_type = {\n    default = \"t2.micro\"\n    staging = \"t2.medium\"\n    production = \"t2.large\"\n  }\n}\n\nresource \"aws_instance\" \"app_server\" {\n  instance_type = local.instance_type[local.env]\n  tags = {\n    Environment = local.env\n  }\n}<\/pre>\n\n\n\n<p>\u3053\u306e\u65b9\u5f0f\u306b\u3088\u308a\u3001\u540c\u4e00\u306e\u30b3\u30fc\u30c9\u30d9\u30fc\u30b9\u304b\u3089\u74b0\u5883\u306b\u5fdc\u3058\u305f\u9069\u5207\u306a\u30ea\u30bd\u30fc\u30b9\u3092\u30c7\u30d7\u30ed\u30a4\u3067\u304d\u307e\u3059\u3002\u30b3\u30fc\u30c9\u306e\u91cd\u8907\u3092\u907f\u3051\u306a\u304c\u3089\u3001\u5404\u74b0\u5883\u306e\u8981\u4ef6\u306b\u5408\u308f\u305b\u305f\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u304c\u53ef\u80fd\u3068\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-3\">Terraform Workspace \u306e\u57fa\u672c\u7684\u306a\u4f7f\u3044\u65b9<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-4\">workspace \u4f5c\u6210\u304b\u3089\u524a\u9664\u307e\u3067\u306e\u6d41\u308c<\/h3>\n\n\n\n<p>\u57fa\u672c\u7684\u306aworkspace\u306e\u30e9\u30a4\u30d5\u30b5\u30a4\u30af\u30eb\u7ba1\u7406\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=\"\"># \u73fe\u5728\u306eworkspace\u4e00\u89a7\u3092\u8868\u793a\n$ terraform workspace list\n* default\n\n# \u65b0\u3057\u3044workspace\u306e\u4f5c\u6210\n$ terraform workspace new staging\nCreated and switched to workspace \"staging\"!\n\n# workspace\u5207\u308a\u66ff\u3048\n$ terraform workspace select production\n\n# workspace\u524a\u9664\uff08\u3059\u3079\u3066\u306e\u30ea\u30bd\u30fc\u30b9\u304c\u7834\u68c4\u3055\u308c\u305f\u5f8c\u306e\u307f\u53ef\u80fd\uff09\n$ terraform workspace delete staging<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-5\">\u74b0\u5883\u5909\u6570\u306e\u4fbf\u5229\u306a\u4f7f\u3044\u65b9<\/h3>\n\n\n\n<p>workspace\u306b\u5fdc\u3058\u305f\u8a2d\u5b9a\u5024\u306e\u7ba1\u7406\u65b9\u6cd5\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=\"\"># variables.tf\nvariable \"instance_sizes\" {\n  type = map(string)\n  default = {\n    default = \"t2.micro\"\n    staging = \"t2.medium\"\n    production = \"t2.large\"\n  }\n}\n\n# main.tf\nresource \"aws_instance\" \"web\" {\n  instance_type = var.instance_sizes[terraform.workspace]\n\n  tags = {\n    Name = \"${terraform.workspace}-web-server\"\n    Environment = terraform.workspace\n  }\n}<\/pre>\n\n\n\n<p>\u74b0\u5883\u5909\u6570\u306b\u3088\u308b\u5236\u5fa1\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=\"\"># \u74b0\u5883\u5225\u306e\u5909\u6570\u8a2d\u5b9a\n$ export TF_WORKSPACE=staging\n$ export TF_VAR_region=\"ap-northeast-1\"\n\n# \u7279\u5b9a\u74b0\u5883\u306e\u307f\u3067\u5b9f\u884c\u3059\u308b\u5834\u5408\u306e\u6761\u4ef6\u5206\u5c90\n$ [ \"$TF_WORKSPACE\" = \"production\" ] &amp;&amp; terraform apply<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-6\">\u72b6\u614b\u7ba1\u7406\u306e\u57fa\u790e\u77e5\u8b58<\/h3>\n\n\n\n<p>\u72b6\u614b\u30d5\u30a1\u30a4\u30eb\u306e\u7ba1\u7406\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u8a2d\u5b9a<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">terraform {\n  backend \"s3\" {\n    bucket = \"terraform-states\"\n    key    = \"project\/terraform.tfstate\"\n    region = \"ap-northeast-1\"\n\n    # workspace\u6bce\u306b\u7570\u306a\u308bDynamoDB\u30c6\u30fc\u30d6\u30eb\u3067\u30ed\u30c3\u30af\u7ba1\u7406\n    dynamodb_table = \"terraform-locks\"\n  }\n}<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u72b6\u614b\u306e\u78ba\u8a8d\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=\"\"># \u73fe\u5728\u306e\u72b6\u614b\u3092\u78ba\u8a8d\n$ terraform show\n\n# \u72b6\u614b\u30d5\u30a1\u30a4\u30eb\u306e\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\n$ terraform state pull &gt; backup.tfstate\n\n# \u7279\u5b9a\u30ea\u30bd\u30fc\u30b9\u306e\u72b6\u614b\u78ba\u8a8d\n$ terraform state list\n$ terraform state show aws_instance.web<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u72b6\u614b\u7ba1\u7406\u306e\u91cd\u8981\u30dd\u30a4\u30f3\u30c8<\/strong><\/li>\n<\/ol>\n\n\n<div id=\"id-94834da3-9af3-4642-8591-f87302324c39\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u9805\u76ee<\/th><th>\u63a8\u5968\u8a2d\u5b9a<\/th><th>\u7406\u7531<\/th><\/tr><\/thead><tbody><tr><td>\u30d0\u30c3\u30af\u30a8\u30f3\u30c9<\/td><td>S3 + DynamoDB<\/td><td>\u72b6\u614b\u306e\u6c38\u7d9a\u5316\u3068\u30ed\u30c3\u30af\u6a5f\u80fd<\/td><\/tr><tr><td>\u6697\u53f7\u5316<\/td><td>\u5fc5\u9808<\/td><td>\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u78ba\u4fdd<\/td><\/tr><tr><td>\u30d0\u30fc\u30b8\u30e7\u30cb\u30f3\u30b0<\/td><td>\u6709\u52b9<\/td><td>\u5fa9\u65e7\u53ef\u80fd\u6027\u306e\u78ba\u4fdd<\/td><\/tr><tr><td>\u30a2\u30af\u30bb\u30b9\u5236\u5fa1<\/td><td>IAM\u30dd\u30ea\u30b7\u30fc<\/td><td>\u6a29\u9650\u306e\u6700\u5c0f\u5316<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<p>\u3053\u308c\u3089\u306e\u57fa\u672c\u64cd\u4f5c\u3092\u7406\u89e3\u3059\u308b\u3053\u3068\u3067\u3001\u8907\u6570\u74b0\u5883\u306e\u52b9\u7387\u7684\u306a\u7ba1\u7406\u304c\u53ef\u80fd\u306b\u306a\u308a\u307e\u3059\u3002\u7279\u306b\u672c\u756a\u74b0\u5883\u3067\u306f\u3001\u72b6\u614b\u7ba1\u7406\u306e\u8a2d\u5b9a\u3092\u614e\u91cd\u306b\u884c\u3046\u3053\u3068\u304c\u91cd\u8981\u3067\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-7\">\u5b9f\u8df5\u7684\u306aWorkspace\u6d3b\u7528\u8853<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-8\">\u672c\u756a\u30fb\u30b9\u30c6\u30fc\u30b8\u30f3\u30b0\u30fb\u958b\u767a\u74b0\u5883\u306e\u5206\u96e2<\/h3>\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\/main.tf\nlocals {\n  environment_config = {\n    default = {\n      instance_type = \"t2.micro\"\n      instance_count = 1\n      backup_retention = 7\n    }\n    staging = {\n      instance_type = \"t2.medium\"\n      instance_count = 2\n      backup_retention = 14\n    }\n    production = {\n      instance_type = \"t2.large\"\n      instance_count = 3\n      backup_retention = 30\n    }\n  }\n\n  config = local.environment_config[terraform.workspace]\n}\n\nresource \"aws_instance\" \"app\" {\n  count         = local.config.instance_count\n  instance_type = local.config.instance_type\n\n  lifecycle {\n    prevent_destroy = terraform.workspace == \"production\"\n  }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-9\">\u74b0\u5883\u3054\u3068\u306e\u8a2d\u5b9a\u5024\u7ba1\u7406\u30c6\u30af\u30cb\u30c3\u30af<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u968e\u5c64\u5316\u3055\u308c\u305f\u5909\u6570\u7ba1\u7406<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># config\/common.tfvars\nregion = \"ap-northeast-1\"\nproject = \"microservice-app\"\n\n# config\/production.tfvars\nenvironment = \"production\"\nvpc_cidr = \"10.0.0.0\/16\"\nenable_monitoring = true\n\n# \u5b9f\u884c\u30b3\u30de\u30f3\u30c9\nterraform plan \\\n  -var-file=\"config\/common.tfvars\" \\\n  -var-file=\"config\/${terraform.workspace}.tfvars\"<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u6761\u4ef6\u4ed8\u304d\u30ea\u30bd\u30fc\u30b9\u30d7\u30ed\u30d3\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_cloudwatch_metric_alarm\" \"high_cpu\" {\n  count = terraform.workspace == \"production\" ? 1 : 0\n\n  alarm_name          = \"${terraform.workspace}-high-cpu\"\n  comparison_operator = \"GreaterThanThreshold\"\n  evaluation_periods  = \"2\"\n  metric_name         = \"CPUUtilization\"\n  threshold           = \"80\"\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-10\">\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u306e\u5171\u6709\u6226\u7565<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>workspace\u5bfe\u5fdc\u306e\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u8a2d\u5b9a<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">terraform {\n  backend \"s3\" {\n    bucket         = \"company-terraform-states\"\n    key            = \"microservices\/terraform.tfstate\"\n    region         = \"ap-northeast-1\"\n    encrypt        = true\n    dynamodb_table = \"terraform-locks\"\n\n    workspace_key_prefix = \"environments\"  # \u74b0\u5883\u3054\u3068\u306b\u7570\u306a\u308b\u30ad\u30fc\u30d7\u30ec\u30d5\u30a3\u30c3\u30af\u30b9\n  }\n}<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u72b6\u614b\u5171\u6709\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/strong><\/li>\n<\/ol>\n\n\n<div id=\"id-9efab988-675f-4028-bfc9-53f26463a9a2\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u5171\u6709\u9805\u76ee<\/th><th>\u63a8\u5968\u8a2d\u5b9a<\/th><th>\u6ce8\u610f\u70b9<\/th><\/tr><\/thead><tbody><tr><td>State\u683c\u7d0d<\/td><td>\u74b0\u5883\u5225\u306eS3\u30d1\u30b9<\/td><td>\u30ad\u30fc\u306e\u91cd\u8907\u9632\u6b62<\/td><\/tr><tr><td>\u30ed\u30c3\u30af\u7ba1\u7406<\/td><td>\u5171\u901aDynamoDB\u30c6\u30fc\u30d6\u30eb<\/td><td>\u30c6\u30fc\u30d6\u30eb\u540d\u306e\u6a19\u6e96\u5316<\/td><\/tr><tr><td>\u6697\u53f7\u5316<\/td><td>KMS\u306b\u3088\u308b\u6697\u53f7\u5316<\/td><td>\u9375\u306e\u6a29\u9650\u7ba1\u7406<\/td><\/tr><tr><td>\u30a2\u30af\u30bb\u30b9\u5236\u5fa1<\/td><td>IAM\u30ed\u30fc\u30eb\u5236\u5fa1<\/td><td>\u6700\u5c0f\u6a29\u9650\u306e\u539f\u5247<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u5b9f\u88c5\u4f8b\uff1a\u74b0\u5883\u5225\u306e\u72b6\u614b\u5206\u96e2<\/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=\"\"># backends\/workspace.tf\ndata \"terraform_remote_state\" \"shared\" {\n  backend = \"s3\"\n  config = {\n    bucket = \"company-terraform-states\"\n    key    = \"environments\/${terraform.workspace}\/shared.tfstate\"\n    region = \"ap-northeast-1\"\n  }\n}\n\n# \u5171\u6709\u30ea\u30bd\u30fc\u30b9\u306e\u53c2\u7167\nresource \"aws_security_group\" \"app\" {\n  vpc_id = data.terraform_remote_state.shared.outputs.vpc_id\n\n  tags = {\n    Environment = terraform.workspace\n    ManagedBy   = \"terraform\"\n  }\n}<\/pre>\n\n\n\n<p>\u3053\u306e\u30a2\u30d7\u30ed\u30fc\u30c1\u306b\u3088\u308a\u3001\u74b0\u5883\u5206\u96e2\u3068\u30ea\u30bd\u30fc\u30b9\u5171\u6709\u306e\u4e21\u7acb\u304c\u5b9f\u73fe\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-11\">Workspace \u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-12\">\u547d\u540d\u898f\u5247\u3068\u30bf\u30b0\u4ed8\u3051\u306e\u6a19\u6e96\u5316<\/h3>\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  standard_tags = {\n    Environment = terraform.workspace\n    Project     = var.project_name\n    ManagedBy   = \"terraform\"\n    Team        = var.team_name\n    CostCenter  = var.cost_center\n  }\n}\n\nresource \"aws_vpc\" \"main\" {\n  cidr_block = var.vpc_cidr\n\n  tags = merge(\n    local.standard_tags,\n    {\n      Name = \"${terraform.workspace}-main-vpc\"\n    }\n  )\n}<\/pre>\n\n\n\n<p>\u547d\u540d\u898f\u5247\u30ac\u30a4\u30c9\u30e9\u30a4\u30f3\uff1a<\/p>\n\n\n<div id=\"id-85f3a157-c0b7-4509-9e22-e97a0cc36bfe\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u8981\u7d20<\/th><th>\u30d1\u30bf\u30fc\u30f3<\/th><th>\u4f8b<\/th><\/tr><\/thead><tbody><tr><td>Workspace\u540d<\/td><td>{env}-{region}-{purpose}<\/td><td>prod-ap-northeast-1-app<\/td><\/tr><tr><td>\u30ea\u30bd\u30fc\u30b9\u540d<\/td><td>{workspace}-{resource}-{count}<\/td><td>prod-web-server-01<\/td><\/tr><tr><td>\u30bf\u30b0\u30ad\u30fc<\/td><td>PascalCase<\/td><td>CostCenter, Environment<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<h3 class=\"wp-block-heading\" id=\"i-13\">\u30a2\u30af\u30bb\u30b9\u5236\u5fa1\u3068\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u5bfe\u7b56<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>IAM\u30dd\u30ea\u30b7\u30fc\u8a2d\u5b9a<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">{\n  \"Version\": \"2012-10-17\",\n  \"Statement\": [\n    {\n      \"Effect\": \"Allow\",\n      \"Action\": [\n        \"s3:ListBucket\",\n        \"s3:GetObject\",\n        \"s3:PutObject\"\n      ],\n      \"Resource\": [\n        \"arn:aws:s3:::terraform-states\",\n        \"arn:aws:s3:::terraform-states\/environments\/${aws:username}\/*\"\n      ],\n      \"Condition\": {\n        \"StringEquals\": {\n          \"aws:RequestedWorkspace\": [\"staging\", \"development\"]\n        }\n      }\n    }\n  ]\n}<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u74b0\u5883\u5225\u306e\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u5236\u5fa1<\/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_security_group\" \"app\" {\n  name = \"${terraform.workspace}-app-sg\"\n\n  dynamic \"ingress\" {\n    for_each = terraform.workspace == \"production\" ? [\"10.0.0.0\/8\"] : [\"0.0.0.0\/0\"]\n    content {\n      from_port   = 443\n      to_port     = 443\n      protocol    = \"tcp\"\n      cidr_blocks = [ingress.value]\n    }\n  }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-14\">\u30b3\u30b9\u30c8\u6700\u9069\u5316\u306e\u305f\u3081\u306e\u30ef\u30fc\u30af\u30b9\u30da\u30fc\u30b9\u8a2d\u8a08<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u74b0\u5883\u5225\u30ea\u30bd\u30fc\u30b9\u30b5\u30a4\u30b8\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=\"\">locals {\n  sizing = {\n    development = {\n      instance_type = \"t3.micro\"\n      autoscaling = {\n        min = 1\n        max = 2\n      }\n    }\n    production = {\n      instance_type = \"t3.large\"\n      autoscaling = {\n        min = 2\n        max = 10\n      }\n    }\n  }\n}\n\nresource \"aws_autoscaling_group\" \"app\" {\n  min_size = local.sizing[terraform.workspace].autoscaling.min\n  max_size = local.sizing[terraform.workspace].autoscaling.max\n\n  instance_type = local.sizing[terraform.workspace].instance_type\n\n  lifecycle {\n    create_before_destroy = true\n  }\n}<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30b3\u30b9\u30c8\u7ba1\u7406\u30dd\u30ea\u30b7\u30fc<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">resource \"aws_budgets_budget\" \"cost_limit\" {\n  count             = terraform.workspace == \"production\" ? 1 : 0\n  name              = \"${terraform.workspace}-monthly-budget\"\n  budget_type       = \"COST\"\n  limit_amount      = terraform.workspace == \"production\" ? \"1000\" : \"100\"\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  = \"FORECASTED\"\n  }\n}<\/pre>\n\n\n\n<p>\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u3068\u30b3\u30b9\u30c8\u6700\u9069\u5316\u306e\u30c1\u30a7\u30c3\u30af\u30ea\u30b9\u30c8\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>[ ] \u74b0\u5883\u5225\u306eIAM\u30ed\u30fc\u30eb\u3092\u4f7f\u7528<\/li>\n\n\n\n<li>[ ] S3\u30d0\u30b1\u30c3\u30c8\u306e\u6697\u53f7\u5316\u3092\u6709\u52b9\u5316<\/li>\n\n\n\n<li>[ ] \u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30b0\u30eb\u30fc\u30d7\u306e\u5236\u9650\u3092\u74b0\u5883\u5225\u306b\u8a2d\u5b9a<\/li>\n\n\n\n<li>[ ] \u81ea\u52d5\u30b9\u30b1\u30fc\u30ea\u30f3\u30b0\u306e\u4e0a\u9650\u3092\u74b0\u5883\u5225\u306b\u5236\u5fa1<\/li>\n\n\n\n<li>[ ] \u30b3\u30b9\u30c8\u30a2\u30e9\u30fc\u30c8\u3092\u9069\u5207\u306a\u3057\u304d\u3044\u5024\u3067\u8a2d\u5b9a<\/li>\n\n\n\n<li>[ ] \u672a\u4f7f\u7528\u30ea\u30bd\u30fc\u30b9\u306e\u81ea\u52d5\u505c\u6b62\u3092\u8a2d\u5b9a<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-15\">\u3088\u304f\u3042\u308b\u30c8\u30e9\u30d6\u30eb\u3068\u89e3\u6c7a\u7b56<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-16\">state\u30ed\u30c3\u30af\u306e\u30ad\u30e3\u30c3\u30b7\u30e5\u89e3\u6d88\u6cd5<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30ed\u30c3\u30af\u89e3\u9664\u624b\u9806<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u30ed\u30c3\u30af\u72b6\u614b\u306e\u78ba\u8a8d\n$ terraform force-unlock -force LOCK_ID\n\n# DynamoDB\u306e\u30ed\u30c3\u30af\u30a8\u30f3\u30c8\u30ea\u78ba\u8a8d\n$ aws dynamodb get-item \\\n    --table-name terraform-locks \\\n    --key '{\"LockID\": {\"S\": \"terraform-state\/workspace-name\"}}'<\/pre>\n\n\n\n<p>\u30ed\u30c3\u30af\u30c8\u30e9\u30d6\u30eb\u5bfe\u7b56\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 {\n  backend \"s3\" {\n    dynamodb_table = \"terraform-locks\"\n    lock_timeout   = \"5m\"\n\n    # \u30a8\u30e9\u30fc\u6642\u306e\u518d\u8a66\u884c\u8a2d\u5b9a\n    retry_max     = 5\n    retry_wait_min = 5\n  }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-17\">\u74b0\u5883\u4e2d\u306e\u8a2d\u5b9a\u6f0f\u308c\u9632\u6b62\u7b56<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u5909\u6570\u691c\u8a3c\u306e\u5b9f\u88c5<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">variable \"environment_type\" {\n  type        = string\n  description = \"Environment type (production\/staging\/development)\"\n\n  validation {\n    condition     = contains([\"production\", \"staging\", \"development\"], var.environment_type)\n    error_message = \"\u74b0\u5883\u30bf\u30a4\u30d7\u306f production, staging, development \u306e\u3044\u305a\u308c\u304b\u3067\u3042\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\"\n  }\n}\n\nlocals {\n  required_tags = {\n    Environment = terraform.workspace\n    Owner       = var.owner\n    CostCenter  = var.cost_center\n  }\n\n  # \u30bf\u30b0\u306e\u5b58\u5728\u30c1\u30a7\u30c3\u30af\n  validate_tags = [\n    for required_key in keys(local.required_tags) :\n    contains(keys(var.tags), required_key)\n  ]\n}<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u81ea\u52d5\u30c1\u30a7\u30c3\u30af\u7528\u306enull_resource<\/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 \"null_resource\" \"validation\" {\n  count = terraform.workspace == \"production\" ? 1 : 0\n\n  lifecycle {\n    precondition {\n      condition     = var.backup_retention_days &gt;= 30\n      error_message = \"\u672c\u756a\u74b0\u5883\u3067\u306f\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u4fdd\u6301\u671f\u9593\u306f30\u65e5\u4ee5\u4e0a\u5fc5\u8981\u3067\u3059\u3002\"\n    }\n  }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-18\">\u30ea\u30bd\u30fc\u30b9\u4f9d\u5b58\u95a2\u4fc2\u306e\u7ba1\u7406\u65b9\u6cd5<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u660e\u793a\u7684\u306a\u4f9d\u5b58\u95a2\u4fc2\u5b9a\u7fa9<\/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=\"\"># \u4f9d\u5b58\u95a2\u4fc2\u306e\u660e\u793a\u7684\u306a\u5b9a\u7fa9\nresource \"aws_instance\" \"web\" {\n  depends_on = [aws_vpc.main, aws_subnet.public]\n\n  instance_type = \"t3.micro\"\n  subnet_id     = aws_subnet.public.id\n\n  lifecycle {\n    create_before_destroy = true\n    prevent_destroy      = terraform.workspace == \"production\"\n  }\n}\n\n# \u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u3092\u4f7f\u7528\u3057\u305f\u4f9d\u5b58\u95a2\u4fc2\u7ba1\u7406\ndata \"terraform_remote_state\" \"vpc\" {\n  backend = \"s3\"\n  config = {\n    bucket = \"terraform-states\"\n    key    = \"vpc\/${terraform.workspace}\/terraform.tfstate\"\n  }\n}<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30e2\u30b8\u30e5\u30fc\u30eb\u9593\u306e\u4f9d\u5b58\u95a2\u4fc2\u5236\u5fa1<\/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 \"database\" {\n  source = \".\/modules\/database\"\n\n  vpc_id     = module.vpc.vpc_id\n  subnet_ids = module.vpc.private_subnet_ids\n\n  providers = {\n    aws = aws.primary\n  }\n}\n\n# \u30af\u30ed\u30b9\u30ea\u30fc\u30b8\u30e7\u30f3\u4f9d\u5b58\u95a2\u4fc2\nprovider \"aws\" {\n  alias  = \"dr\"\n  region = \"ap-northeast-2\"\n}\n\nmodule \"dr_database\" {\n  source = \".\/modules\/database\"\n  providers = {\n    aws = aws.dr\n  }\n\n  depends_on = [module.database]\n}<\/pre>\n\n\n\n<p>\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u30c1\u30a7\u30c3\u30af\u30ea\u30b9\u30c8\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>[ ] State lock\u304c\u6b8b\u3063\u3066\u3044\u306a\u3044\u304b\u78ba\u8a8d<\/li>\n\n\n\n<li>[ ] \u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u306e\u63a5\u7d9a\u8a2d\u5b9a\u3092\u78ba\u8a8d<\/li>\n\n\n\n<li>[ ] \u5fc5\u9808\u30bf\u30b0\u306e\u8a2d\u5b9a\u6f0f\u308c\u304c\u306a\u3044\u304b\u78ba\u8a8d<\/li>\n\n\n\n<li>[ ] \u30ea\u30bd\u30fc\u30b9\u9593\u306e\u4f9d\u5b58\u95a2\u4fc2\u304c\u9069\u5207\u304b\u78ba\u8a8d<\/li>\n\n\n\n<li>[ ] \u30e9\u30a4\u30d5\u30b5\u30a4\u30af\u30eb\u8a2d\u5b9a\u304c\u74b0\u5883\u306b\u9069\u3057\u3066\u3044\u308b\u304b\u78ba\u8a8d<\/li>\n<\/ul>\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-2316","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\/2316","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=2316"}],"version-history":[{"count":1,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/2316\/revisions"}],"predecessor-version":[{"id":2317,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/2316\/revisions\/2317"}],"wp:attachment":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2316"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2316"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2316"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}