{"id":48755,"date":"2023-10-17T19:08:49","date_gmt":"2023-04-30T16:32:16","guid":{"rendered":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%86%e4%b8%aa%e4%ba%ba%e5%bc%80%e5%8f%91%e7%9a%84terraform%e5%8d%87%e7%ba%a7%e8%87%b3v0-12%e3%80%82\/"},"modified":"2024-05-04T04:45:51","modified_gmt":"2024-05-03T20:45:51","slug":"%e5%b0%86%e4%b8%aa%e4%ba%ba%e5%bc%80%e5%8f%91%e7%9a%84terraform%e5%8d%87%e7%ba%a7%e8%87%b3v0-12%e3%80%82","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%86%e4%b8%aa%e4%ba%ba%e5%bc%80%e5%8f%91%e7%9a%84terraform%e5%8d%87%e7%ba%a7%e8%87%b3v0-12%e3%80%82\/","title":{"rendered":"\u5c06\u4e2a\u4eba\u5f00\u53d1\u7684Terraform\u5347\u7ea7\u81f3v0.12"},"content":{"rendered":"<h1>\u6982\u62ec<\/h1>\n<p>\u8fd9\u7bc7\u6587\u7ae0\u603b\u7ed3\u4e86\u6211\u548c\u670b\u53cb\uff08@kobayashi-m42\uff09\u4e00\u8d77\u4f7f\u7528\u7684\u670d\u52a1Mindexer\uff08\u30df\u30f3\u30c7\u30af\u30b5\u30fc\uff09\u5728\u5347\u7ea7\u5230Terraform v0.12\u65f6\u6240\u505a\u7684\u5904\u7406\u5de5\u4f5c\u3002<\/p>\n<h1>\u5173\u4e8eMindexer\uff08\u30df\u30f3\u30c7\u30af\u30b5\u30fc\uff09\u7684\u4fe1\u606f\u3002<\/h1>\n<p>\u6211\u4f7f\u7528AWS + Laravel + Vue.js\u5f00\u53d1\u4e86\u4e00\u4e2a\u6574\u7406Qiita\u6536\u85cf\u7684\u670d\u52a1\uff01\u3010\u4e2a\u4eba\u5f00\u53d1\u3011\u5728\u8fd9\u91cc\u89e3\u91ca\u4e86\u670d\u52a1\u7684\u6982\u8981\uff0c\u5e0c\u671b\u60a8\u4e5f\u80fd\u770b\u4e00\u4e0b?\u6211\u8fd8\u4ecb\u7ecd\u4e86\u540e\u7aef\u548c\u524d\u7aef\u6280\u672f\uff0c\u5e76\u9644\u5e26\u4e86\u6e90\u4ee3\u7801\u3002<\/p>\n<h1>\u76ee\u6807\u8bfb\u8005<\/h1>\n<ul class=\"post-ul\">Terraform\u3068AWS\u3092\u904b\u7528\u30ec\u30d9\u30eb\u3067\u5229\u7528\u3057\u3066\u3044\u308b\u65b9<\/ul>\n<h1>\u5e0c\u671b\u67e5\u770b\u6e90\u4ee3\u7801\u7684\u4eba\u4eec<\/h1>\n<p>\u5982\u679c\u60a8\u60f3\u5feb\u901f\u67e5\u770b\u66f4\u6539\u65f6\u7684\u5dee\u5f02\uff0c\u8bf7\u67e5\u770b \u8fd9\u91cc\u3002<\/p>\n<p>\u8fd9\u5c06\u662f\u6267\u884c\u5347\u7ea7\u65f6\u7684\u5dee\u5f02\u3002<\/p>\n<p>\u5927\u90e8\u5206\u7684\u4fee\u6539\u662f\u7531terraform 0.12\u5347\u7ea7\u547d\u4ee4\u8fdb\u884c\u7684\uff0c\u7a0d\u540e\u4f1a\u8fdb\u884c\u89e3\u91ca\u3002<\/p>\n<h1>\u4e8b\u524d\u51c6\u5907<\/h1>\n<p>\u6839\u636e\u300a\u5347\u7ea7\u5230Terraform v0.12\u300b\u4e2d\u7684\u5185\u5bb9\uff0c\u6211\u4eec\u5c06\u8fdb\u884c\u5347\u7ea7\u7684\u524d\u671f\u51c6\u5907\u5de5\u4f5c\u3002<\/p>\n<h2>\u8bf7\u786e\u4fdd\u5b8c\u6210\u5347\u7ea7\u81f30.11.4\u7248\u672c\u3002<\/h2>\n<p>\u6309\u7167\u300a\u5347\u7ea7\u5230Terraform v0.12\u300b\u7684\u6307\u793a\uff0c\u9996\u5148\u786e\u4fdd\u6210\u529f\u5347\u7ea7\u52300.11.4\u7248\u672c\u3002<\/p>\n<p>\u6839\u636e\u60a8\u5f53\u524d\u4f7f\u7528\u7684\u7248\u672c\u6765\u770b\uff0c\u76f4\u63a5\u5347\u7ea7\u52300.12\u7248\u672c\u53ef\u80fd\u4f1a\u51fa\u73b0\u95ee\u9898\uff0c\u56e0\u6b64\u6700\u597d\u4e8b\u5148\u505a\u597d\u51c6\u5907\u3002<\/p>\n<p>\u4e3a\u4e86\u80fd\u591f\u4f7f\u7528\u4e0e0.12\u7248\u672c\u517c\u5bb9\u6027\u68c0\u67e5\u547d\u4ee4\uff0c\u57280.11.4\u7248\u672c\u4e2d\u5df2\u7ecf\u53ef\u4ee5\u6267\u884c\u6b64\u547d\u4ee4\uff0c\u56e0\u6b64\u4e3a\u4e86\u5229\u7528\u5b83\uff0c\u9996\u5148\u5347\u7ea7\u52300.11.4\u7248\u672c\u662f\u4e00\u4e2a\u5b89\u5168\u7684\u9009\u62e9\u3002<\/p>\n<h2>\u57280.11.4\u7684\u7248\u672c\u4e0a\u6267\u884cterraform apply\u3002<\/h2>\n<p>\u6267\u884cterraform apply\uff0c\u5e76\u4fdd\u6301\u65e0\u5dee\u5f02\u7684\u72b6\u6001\u3002<\/p>\n<p>\u4e3a\u4e86\u907f\u514d\u9ebb\u70e6\uff0c\u6700\u597d\u63d0\u524d\u505a\u8fd9\u4ef6\u4e8b\u662f\u660e\u667a\u7684\u3002<\/p>\n<h2>\u4f7f\u7528 Terraform 0.12 checklist \u8fdb\u884c\u517c\u5bb9\u6027\u68c0\u67e5\u3002<\/h2>\n<p>\u5728\u7248\u672c0.11.4\u4e2d\uff0c\u6dfb\u52a0\u4e86\u4e00\u4e2a\u540d\u4e3a0.12checklist\u7684\u5b50\u547d\u4ee4\u3002<\/p>\n<p>\u79fb\u52a8\u5230\u7ba1\u7406 tfstate \u7684\u76ee\u5f55\u4e0b\uff0c\u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\u3002<\/p>\n<p>terraform 0.12\u7684\u68c0\u67e5\u6e05\u5355<\/p>\n<p>\u7531\u4e8e Mindexer \u5728\u4ee5\u4e0b\u76ee\u5f55\u4e2d\u8fdb\u884c tfstate \u7ba1\u7406\uff0c\u56e0\u6b64\u6211\u5728\u4ee5\u4e0b\u76ee\u5f55\u4e2d\u6267\u884c\u4e86\u64cd\u4f5c\u3002<\/p>\n<pre class=\"post-pre\"><code>- providers\/aws\/environments\/10-network\r\n- providers\/aws\/environments\/11-acm\r\n- providers\/aws\/environments\/12-ecr\r\n- providers\/aws\/environments\/20-bastion\r\n- providers\/aws\/environments\/21-api\r\n- providers\/aws\/environments\/22-frontend\r\n- providers\/aws\/environments\/23-rds\r\n<\/code><\/pre>\n<p>\u5982\u679c\u663e\u793a\u51fa\u4ee5\u4e0b\u7ed3\u679c\uff0c\u5219\u5347\u7ea7\u51c6\u5907\u5de5\u4f5c\u5df2\u7ecf\u5b8c\u6210\u3002<\/p>\n<pre class=\"post-pre\"><code>Looks good! We did not detect any problems that ought to be\r\naddressed before upgrading to Terraform v0.12.\r\n\r\nThis tool is not perfect though, so please check the v0.12 upgrade\r\nguide for additional guidance, and for next steps:\r\n    https:\/\/www.terraform.io\/upgrade-guides\/0-12.html\r\n<\/code><\/pre>\n<p>\u5982\u679c\u6709\u9700\u8981\u5347\u7ea7\u7684\u63d0\u4f9b\u5546\uff0c\u8bf7\u6309\u7167\u6d88\u606f\u4e2d\u7684\u6307\u793a\u8fdb\u884c\u5347\u7ea7\u3002<\/p>\n<p>\u7531\u4e8e\u6211\u5728 Mindexer \u4e2d\u4f7f\u7528 terraform-provider-aws \uff0c\u6240\u4ee5\u6211\u5c06\u5176\u7248\u672c\u66f4\u65b0\u4e3a\u6700\u65b0\u7248\u3002<\/p>\n<h1>\u8fdb\u884c0.12\u7684\u5347\u7ea7<\/h1>\n<p>\u5c06Terraform\u5347\u7ea7\u52300.12\u7248\u672c\u3002<\/p>\n<h1>\u8fdb\u884cterraform 0.12\u5347\u7ea7<\/h1>\n<p>\u901a\u8fc7\u6267\u884cupgrade\u547d\u4ee4\uff0c\u53ef\u4ee5\u8fdb\u884c\u6e90\u4ee3\u7801\u7684\u4fee\u6b63\u3002<\/p>\n<p>\u5728\u8d1f\u8d23\u7ba1\u7406 tfstate \u7684\u76ee\u5f55\u4e2d\u8fd0\u884c terraform 0.12 \u5347\u7ea7\u547d\u4ee4\u3002<\/p>\n<pre class=\"post-pre\"><code>- providers\/aws\/environments\/10-network\r\n- providers\/aws\/environments\/11-acm\r\n- providers\/aws\/environments\/12-ecr\r\n- providers\/aws\/environments\/20-bastion\r\n- providers\/aws\/environments\/21-api\r\n- providers\/aws\/environments\/22-frontend\r\n- providers\/aws\/environments\/23-rds\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code>This command will rewrite the configuration files in the given directory so\r\nthat they use the new syntax features from Terraform v0.12, and will identify\r\nany constructs that may need to be adjusted for correct operation with\r\nTerraform v0.12.\r\n\r\nWe recommend using this command in a clean version control work tree, so that\r\nyou can easily see the proposed changes as a diff against the latest commit.\r\nIf you have uncommited changes already present, we recommend aborting this\r\ncommand and dealing with them before running this command again.\r\n\r\nWould you like to upgrade the module in the current directory?\r\n  Only 'yes' will be accepted to confirm.\r\n\r\n  Enter a value:\r\n<\/code><\/pre>\n<p>\u6309\u4e0b\u201c\u786e\u8ba4\u201d\u6309\u94ae\u540e\uff0c\u5c06\u5b8c\u6210\u4fee\u6539\u3002<\/p>\n<p>\u5982\u679c\u4ece\u540c\u4e00\u4e2a\u9879\u76ee\u4e2d\u5bfc\u5165\u6a21\u5757\uff0c\u90a3\u4e48\u65e0\u6cd5\u4fee\u6539\u8be5\u6a21\u5757\u5185\u7684\u4ee3\u7801\uff0c\u56e0\u6b64\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff0c\u8fd8\u9700\u8981\u5bf9\u6bcf\u4e2a\u6a21\u5757\u8fdb\u884c\u6267\u884c\u3002<\/p>\n<pre class=\"post-pre\"><code>terraform 0.12upgrade ..\/..\/..\/..\/modules\/aws\/vpc\/\r\nterraform 0.12upgrade ..\/..\/..\/..\/modules\/aws\/acm\/\r\nterraform 0.12upgrade ..\/..\/..\/..\/modules\/aws\/ecr\/\r\nterraform 0.12upgrade ..\/..\/..\/..\/modules\/aws\/api\/\r\nterraform 0.12upgrade ..\/..\/..\/..\/modules\/aws\/bastion\/\r\nterraform 0.12upgrade ..\/..\/..\/..\/modules\/aws\/frontend\/\r\nterraform 0.12upgrade ..\/..\/..\/..\/modules\/aws\/rds\/\r\n<\/code><\/pre>\n<h1>\u4fee\u590d terraform init \u6267\u884c\u65f6\u51fa\u73b0\u9519\u8bef\u7684\u90e8\u5206\u3002<\/h1>\n<p>\u8bf7\u5728\u7ba1\u7406tfstate\u7684\u4ee5\u4e0b\u76ee\u5f55\u4e2d\u6267\u884cterraform init\u3002<\/p>\n<pre class=\"post-pre\"><code>- providers\/aws\/environments\/10-network\r\n- providers\/aws\/environments\/11-acm\r\n- providers\/aws\/environments\/12-ecr\r\n- providers\/aws\/environments\/20-bastion\r\n- providers\/aws\/environments\/21-api\r\n- providers\/aws\/environments\/22-frontend\r\n- providers\/aws\/environments\/23-rds\r\n<\/code><\/pre>\n<p>\u7531\u4e8e\u4ec5\u901a\u8fc7terraform 0.12\u7684\u5347\u7ea7\u65e0\u6cd5\u4fee\u590d\u7684\u90e8\u5206\uff0c\u56e0\u6b64\u6211\u4eec\u5c06\u52aa\u529b\u5730\u8fdb\u884c\u4fee\u6b63\u3002<\/p>\n<h1>\u5904\u7406\u4e8b\u9879<\/h1>\n<p>\u4ee5\u4e0b\u6240\u8ff0\u7684\u662f\u5728terraform 0.12\u5347\u7ea7\u4e2d\u65e0\u6cd5\u6539\u5199\u7684\u90e8\u5206\u3002<\/p>\n<h2>\u4fee\u6b63\u7f29\u8fdb\u9519\u8bef\u548c\u7a7a\u884c<\/h2>\n<p>\u6267\u884cterraform 0.12\u5347\u7ea7\u65f6\u51fa\u73b0\u4e86\u7f29\u8fdb\u9519\u8bef\u548c\u989d\u5916\u7684\u7a7a\u884c\u88ab\u6dfb\u52a0\u7684\u95ee\u9898\u3002<\/p>\n<p>\u7531\u4e8e\u8fd0\u884c terraform fmt \u540e\u672a\u4fee\u590d\uff0c\u56e0\u6b64\u6211\u81ea\u5df1\u624b\u52a8\u4fee\u590d\u4e86\u8fd9\u90e8\u5206\u3002<\/p>\n<h2>\u5728v0.10\u7248\u672c\u4e2d\uff0cterraform.env\u5c5e\u6027\u5df2\u88ab\u5f03\u7528\uff0c\u5e76\u5728v0.12\u7248\u672c\u4e2d\u79fb\u9664\u3002<\/h2>\n<p>\u6211\u5df2\u7ecf\u5c06\u4f7f\u7528 terraform.env \u7684\u90e8\u5206\u66f4\u6539\u4e3a terraform.workspace\u3002<\/p>\n<p>\u987a\u4fbf\u63d0\u4e00\u4e0b\uff0c\u5728 v0.10 \u7248\u672c\u7684\u65f6\u5019\uff0c\u8fd9\u4e2a\u529f\u80fd\u5c31\u5df2\u7ecf\u88ab\u5f03\u7528\u4e86\uff0c\u6240\u4ee5\u5176\u5b9e\u5e94\u8be5\u66f4\u65e9\u4e00\u70b9\u4fee\u6b63\u7684\u3002<\/p>\n<pre class=\"post-pre\"><code>Error: Invalid \"terraform\" attribute\r\n\r\n  on ..\/..\/..\/..\/modules\/aws\/vpc\/main.tf line 2, in resource \"aws_vpc\" \"vpc\":\r\n   2:   cidr_block           = lookup(var.vpc, \"${terraform.env}.cidr\", var.vpc[\"default.cidr\"])\r\n\r\nThe terraform.env attribute was deprecated in v0.10 and removed in v0.12. The\r\n\"state environment\" concept was rename to \"workspace\" in v0.12, and so the\r\nworkspace name can now be accessed using the terraform.workspace attribute.\r\n<\/code><\/pre>\n<h2>\u9519\u8bef\uff1a\u5c5e\u6027\u952e\u542b\u4e49\u4e0d\u660e\u786e<\/h2>\n<p>\u5728 Mindexer \u4e2d\uff0c\u6211\u4eec\u4f7f\u7528 terraform.workspace \u6765\u533a\u5206\u4e0d\u540c\u7684\u73af\u5883\uff0c\u4f8b\u5982\u5f00\u53d1\u73af\u5883\u548c\u751f\u4ea7\u73af\u5883\u3002<\/p>\n<p>\u6211\u66fe\u7ecf\u4f7f\u7528\u4e86\u4e00\u79cd\u6280\u5de7\uff0c\u6839\u636e terraform.workspace \u7684\u503c\u6765\u4e3a\u6bcf\u4e2a\u73af\u5883\u8bbe\u7f6e\u73af\u5883\u53d8\u91cf\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"k\">variable<\/span> <span class=\"s2\">\"vpc\"<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"nx\">type<\/span> <span class=\"p\">=<\/span> <span class=\"s2\">\"map\"<\/span>\r\n\r\n  <span class=\"nx\">default<\/span> <span class=\"p\">=<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"nx\">default<\/span><span class=\"p\">.<\/span><span class=\"nx\">az_1a<\/span>      <span class=\"p\">=<\/span> <span class=\"s2\">\"ap-northeast-1a\"<\/span>\r\n    <span class=\"nx\">default<\/span><span class=\"p\">.<\/span><span class=\"nx\">az_1c<\/span>      <span class=\"p\">=<\/span> <span class=\"s2\">\"ap-northeast-1c\"<\/span>\r\n    <span class=\"nx\">default<\/span><span class=\"p\">.<\/span><span class=\"nx\">az_1d<\/span>      <span class=\"p\">=<\/span> <span class=\"s2\">\"ap-northeast-1d\"<\/span>\r\n    <span class=\"nx\">default<\/span><span class=\"p\">.<\/span><span class=\"nx\">name<\/span>       <span class=\"p\">=<\/span> <span class=\"s2\">\"prod-qiita-stocker-vpc\"<\/span>\r\n    <span class=\"nx\">stg<\/span><span class=\"p\">.<\/span><span class=\"nx\">name<\/span>           <span class=\"p\">=<\/span> <span class=\"s2\">\"stg-qiita-stocker-vpc\"<\/span>\r\n    <span class=\"nx\">default<\/span><span class=\"p\">.<\/span><span class=\"nx\">cidr<\/span>       <span class=\"p\">=<\/span> <span class=\"s2\">\"10.1.0.0\/16\"<\/span>\r\n    <span class=\"nx\">stg<\/span><span class=\"p\">.<\/span><span class=\"nx\">cidr<\/span>           <span class=\"p\">=<\/span> <span class=\"s2\">\"10.3.0.0\/16\"<\/span>\r\n  <span class=\"p\">}<\/span>\r\n<span class=\"p\">}<\/span>\r\n\r\n<span class=\"k\">resource<\/span> <span class=\"s2\">\"aws_vpc\"<\/span> <span class=\"s2\">\"vpc\"<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"nx\">cidr_block<\/span>           <span class=\"p\">=<\/span> <span class=\"s2\">\"<\/span><span class=\"k\">${<\/span><span class=\"nx\">lookup<\/span><span class=\"p\">(<\/span><span class=\"kd\">var<\/span><span class=\"p\">.<\/span><span class=\"nx\">vpc<\/span><span class=\"p\">,<\/span> <span class=\"s2\">\"<\/span><span class=\"k\">${terraform<\/span><span class=\"p\">.<\/span><span class=\"nx\">env<\/span><span class=\"k\">}<\/span><span class=\"s2\">.cidr\"<\/span><span class=\"p\">,<\/span> <span class=\"kd\">var<\/span><span class=\"p\">.<\/span><span class=\"nx\">vpc<\/span><span class=\"p\">[<\/span><span class=\"s2\">\"default.cidr\"<\/span><span class=\"p\">])<\/span><span class=\"k\">}<\/span><span class=\"s2\">\"<\/span>\r\n  <span class=\"nx\">enable_dns_support<\/span>   <span class=\"p\">=<\/span> <span class=\"s2\">\"true\"<\/span>\r\n  <span class=\"nx\">enable_dns_hostnames<\/span> <span class=\"p\">=<\/span> <span class=\"s2\">\"true\"<\/span>\r\n\r\n  <span class=\"nx\">tags<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"nx\">Name<\/span> <span class=\"p\">=<\/span> <span class=\"s2\">\"<\/span><span class=\"k\">${<\/span><span class=\"nx\">lookup<\/span><span class=\"p\">(<\/span><span class=\"kd\">var<\/span><span class=\"p\">.<\/span><span class=\"nx\">vpc<\/span><span class=\"p\">,<\/span> <span class=\"s2\">\"<\/span><span class=\"k\">${terraform<\/span><span class=\"p\">.<\/span><span class=\"nx\">env<\/span><span class=\"k\">}<\/span><span class=\"s2\">.name\"<\/span><span class=\"p\">,<\/span> <span class=\"kd\">var<\/span><span class=\"p\">.<\/span><span class=\"nx\">vpc<\/span><span class=\"p\">[<\/span><span class=\"s2\">\"default.name\"<\/span><span class=\"p\">])<\/span><span class=\"k\">}<\/span><span class=\"s2\">\"<\/span>\r\n  <span class=\"p\">}<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<p>\u6267\u884cterraform\u8ba1\u5212\u4f1a\u51fa\u73b0\u5927\u91cf\u5982\u4e0b\u9519\u8bef\u3002<\/p>\n<pre class=\"post-pre\"><code>Error: Ambiguous attribute key\r\n\r\n  on ..\/..\/..\/..\/modules\/aws\/vpc\/variable.tf line 5, in variable \"vpc\":\r\n   5:     default.az_1a      = \"ap-northeast-1a\"\r\n\r\nIf this expression is intended to be a reference, wrap it in parentheses. If\r\nit's instead intended as a literal name containing periods, wrap it in quotes\r\nto create a string literal.\r\n<\/code><\/pre>\n<p>\u5904\u7406\u65b9\u6cd5\u5f88\u7b80\u5355\uff0c\u53ea\u9700\u8981\u5c06\u4f7f\u7528\u7684map.default\u952e\u540d\u7528&#8221;&#8221;\u62ec\u8d77\u6765\u3002<\/p>\n<p>\u901a\u8fc7\u8fdb\u884c\u4ee5\u4e0b\u4fee\u6b63\uff0c\u4f7f\u4e4b\u80fd\u591f\u50cf\u5347\u7ea7\u4e4b\u524d\u4e00\u6837\u8fdb\u884c\u4f7f\u7528\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"k\">variable<\/span> <span class=\"s2\">\"vpc\"<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"nx\">type<\/span> <span class=\"p\">=<\/span> <span class=\"nx\">map<\/span><span class=\"p\">(<\/span><span class=\"nx\">string<\/span><span class=\"p\">)<\/span>\r\n\r\n  <span class=\"nx\">default<\/span> <span class=\"p\">=<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"s2\">\"default.az_1a\"<\/span>      <span class=\"p\">=<\/span> <span class=\"s2\">\"ap-northeast-1a\"<\/span>\r\n    <span class=\"s2\">\"default.az_1c\"<\/span>      <span class=\"p\">=<\/span> <span class=\"s2\">\"ap-northeast-1c\"<\/span>\r\n    <span class=\"s2\">\"default.az_1d\"<\/span>      <span class=\"p\">=<\/span> <span class=\"s2\">\"ap-northeast-1d\"<\/span>\r\n    <span class=\"s2\">\"default.name\"<\/span>       <span class=\"p\">=<\/span> <span class=\"s2\">\"prod-qiita-stocker-vpc\"<\/span>\r\n    <span class=\"s2\">\"stg.name\"<\/span>           <span class=\"p\">=<\/span> <span class=\"s2\">\"stg-qiita-stocker-vpc\"<\/span>\r\n    <span class=\"s2\">\"default.cidr\"<\/span>       <span class=\"p\">=<\/span> <span class=\"s2\">\"10.1.0.0\/16\"<\/span>\r\n    <span class=\"s2\">\"stg.cidr\"<\/span>           <span class=\"p\">=<\/span> <span class=\"s2\">\"10.3.0.0\/16\"<\/span>\r\n  <span class=\"p\">}<\/span>\r\n<span class=\"p\">}<\/span>\r\n\r\n<span class=\"k\">resource<\/span> <span class=\"s2\">\"aws_vpc\"<\/span> <span class=\"s2\">\"vpc\"<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"nx\">cidr_block<\/span>           <span class=\"p\">=<\/span> <span class=\"nx\">lookup<\/span><span class=\"p\">(<\/span><span class=\"kd\">var<\/span><span class=\"p\">.<\/span><span class=\"nx\">vpc<\/span><span class=\"p\">,<\/span> <span class=\"s2\">\"<\/span><span class=\"k\">${terraform<\/span><span class=\"p\">.<\/span><span class=\"nx\">workspace<\/span><span class=\"k\">}<\/span><span class=\"s2\">.cidr\"<\/span><span class=\"p\">,<\/span> <span class=\"kd\">var<\/span><span class=\"p\">.<\/span><span class=\"nx\">vpc<\/span><span class=\"p\">[<\/span><span class=\"s2\">\"default.cidr\"<\/span><span class=\"p\">])<\/span>\r\n  <span class=\"nx\">enable_dns_support<\/span>   <span class=\"p\">=<\/span> <span class=\"s2\">\"true\"<\/span>\r\n  <span class=\"nx\">enable_dns_hostnames<\/span> <span class=\"p\">=<\/span> <span class=\"s2\">\"true\"<\/span>\r\n\r\n  <span class=\"nx\">tags<\/span> <span class=\"p\">=<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"nx\">Name<\/span> <span class=\"p\">=<\/span> <span class=\"nx\">lookup<\/span><span class=\"p\">(<\/span><span class=\"kd\">var<\/span><span class=\"p\">.<\/span><span class=\"nx\">vpc<\/span><span class=\"p\">,<\/span> <span class=\"s2\">\"<\/span><span class=\"k\">${terraform<\/span><span class=\"p\">.<\/span><span class=\"nx\">workspace<\/span><span class=\"k\">}<\/span><span class=\"s2\">.name\"<\/span><span class=\"p\">,<\/span> <span class=\"kd\">var<\/span><span class=\"p\">.<\/span><span class=\"nx\">vpc<\/span><span class=\"p\">[<\/span><span class=\"s2\">\"default.name\"<\/span><span class=\"p\">])<\/span>\r\n  <span class=\"p\">}<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<h2>Terraform fmt\u7684\u89c4\u8303\u6709\u53d8\u5316\u5417\uff1f<\/h2>\n<p>\u4ee5\u524d\u7684\u7248\u672c\uff08\u76f4\u52300.11.4\uff09\uff0c\u53ea\u9700\u5728\u9879\u76ee\u6839\u76ee\u5f55\u4e0b\u8fd0\u884c terraform fmt\uff0c\u5373\u53ef\u5c06\u6240\u6709 .tf \u6587\u4ef6\u683c\u5f0f\u5316\u3002\u4f46\u73b0\u5728\u4e3a\u4e86\u505a\u540c\u6837\u7684\u4e8b\u60c5\uff0c\u9700\u8981\u5728\u6267\u884c\u547d\u4ee4\u65f6\u52a0\u4e0a -recursive \u9009\u9879\u3002<\/p>\n<p>\u81ea\u52a8\u683c\u5f0f\u5316\u5f53\u524d\u76ee\u5f55\u4e0b\u6240\u6709 Terraform \u6587\u4ef6\u53ca\u5176\u5b50\u76ee\u5f55\u4e2d\u7684\u6587\u4ef6\u3002<\/p>\n<h1>\u6700\u540e<\/h1>\n<p>\u8fd9\u6b21\u5347\u7ea7\u81f30.12\u7248\u672c\u662f\u4e00\u4e2a\u5177\u6709\u7834\u574f\u6027\u53d8\u5316\u7684\u91cd\u5927\u7248\u672c\u66f4\u65b0\u3002<\/p>\n<p>\u5c3d\u7ba1\u5982\u6b64\uff0c\u5b98\u65b9\u6587\u6863\u4e2d\u8be6\u7ec6\u5217\u51fa\u4e86\u8fc1\u79fb\u65b9\u6cd5\uff0c\u5e76\u4e14\u63d0\u4f9b\u4e86\u8bf8\u5982terraform 0.12upgrade\u7b49\u8f85\u52a9\u547d\u4ee4\uff0c\u56e0\u6b64\u6211\u4eec\u80fd\u591f\u76f8\u5bf9\u987a\u5229\u5730\u8fdb\u884c\u5347\u7ea7\u3002<\/p>\n<p>\u8c22\u8c22\u60a8\u4e00\u76f4\u9605\u8bfb\u5230\u6700\u540e\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u6982\u62ec \u8fd9\u7bc7\u6587\u7ae0\u603b\u7ed3\u4e86\u6211\u548c\u670b\u53cb\uff08@kobayashi-m42\uff09\u4e00\u8d77\u4f7f\u7528\u7684\u670d\u52a1Mindexer\uff08\u30df\u30f3\u30c7\u30af\u30b5\u30fc\uff09\u5728\u5347 [&hellip;]<\/p>\n","protected":false},"author":9,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-48755","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v21.5 (Yoast SEO v21.5) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>\u5c06\u4e2a\u4eba\u5f00\u53d1\u7684Terraform\u5347\u7ea7\u81f3v0.12 - Blog - Silicon Cloud<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.silicloud.com\/zh\/blog\/\u5c06\u4e2a\u4eba\u5f00\u53d1\u7684terraform\u5347\u7ea7\u81f3v0-12\u3002\/\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u5c06\u4e2a\u4eba\u5f00\u53d1\u7684Terraform\u5347\u7ea7\u81f3v0.12\" \/>\n<meta property=\"og:description\" content=\"\u6982\u62ec \u8fd9\u7bc7\u6587\u7ae0\u603b\u7ed3\u4e86\u6211\u548c\u670b\u53cb\uff08@kobayashi-m42\uff09\u4e00\u8d77\u4f7f\u7528\u7684\u670d\u52a1Mindexer\uff08\u30df\u30f3\u30c7\u30af\u30b5\u30fc\uff09\u5728\u5347 [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/zh\/blog\/\u5c06\u4e2a\u4eba\u5f00\u53d1\u7684terraform\u5347\u7ea7\u81f3v0-12\u3002\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog - Silicon Cloud\" \/>\n<meta property=\"article:published_time\" content=\"2023-04-30T16:32:16+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-05-03T20:45:51+00:00\" \/>\n<meta name=\"author\" content=\"\u6e05, \u626c\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"\u6e05, \u626c\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 \u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%86%e4%b8%aa%e4%ba%ba%e5%bc%80%e5%8f%91%e7%9a%84terraform%e5%8d%87%e7%ba%a7%e8%87%b3v0-12%e3%80%82\/\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%86%e4%b8%aa%e4%ba%ba%e5%bc%80%e5%8f%91%e7%9a%84terraform%e5%8d%87%e7%ba%a7%e8%87%b3v0-12%e3%80%82\/\",\"name\":\"\u5c06\u4e2a\u4eba\u5f00\u53d1\u7684Terraform\u5347\u7ea7\u81f3v0.12 - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\"},\"datePublished\":\"2023-04-30T16:32:16+00:00\",\"dateModified\":\"2024-05-03T20:45:51+00:00\",\"author\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/cb5556d2501da73d864cac945e8d9461\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%86%e4%b8%aa%e4%ba%ba%e5%bc%80%e5%8f%91%e7%9a%84terraform%e5%8d%87%e7%ba%a7%e8%87%b3v0-12%e3%80%82\/#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%86%e4%b8%aa%e4%ba%ba%e5%bc%80%e5%8f%91%e7%9a%84terraform%e5%8d%87%e7%ba%a7%e8%87%b3v0-12%e3%80%82\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%86%e4%b8%aa%e4%ba%ba%e5%bc%80%e5%8f%91%e7%9a%84terraform%e5%8d%87%e7%ba%a7%e8%87%b3v0-12%e3%80%82\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.silicloud.com\/zh\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u5c06\u4e2a\u4eba\u5f00\u53d1\u7684Terraform\u5347\u7ea7\u81f3v0.12\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/\",\"name\":\"Blog - Silicon Cloud\",\"description\":\"\",\"inLanguage\":\"zh-Hans\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/cb5556d2501da73d864cac945e8d9461\",\"name\":\"\u6e05, \u626c\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/32a4239de8ff29adace466261d309424a1e5fe9f7e3036bf89fe03f2e3dbe717?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/32a4239de8ff29adace466261d309424a1e5fe9f7e3036bf89fe03f2e3dbe717?s=96&d=mm&r=g\",\"caption\":\"\u6e05, \u626c\"},\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/author\/qingyang\/\"},{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%86%e4%b8%aa%e4%ba%ba%e5%bc%80%e5%8f%91%e7%9a%84terraform%e5%8d%87%e7%ba%a7%e8%87%b3v0-12%e3%80%82\/#local-main-organization-logo\",\"url\":\"\",\"contentUrl\":\"\",\"caption\":\"Blog - Silicon Cloud\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"\u5c06\u4e2a\u4eba\u5f00\u53d1\u7684Terraform\u5347\u7ea7\u81f3v0.12 - Blog - Silicon Cloud","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.silicloud.com\/zh\/blog\/\u5c06\u4e2a\u4eba\u5f00\u53d1\u7684terraform\u5347\u7ea7\u81f3v0-12\u3002\/","og_locale":"zh_CN","og_type":"article","og_title":"\u5c06\u4e2a\u4eba\u5f00\u53d1\u7684Terraform\u5347\u7ea7\u81f3v0.12","og_description":"\u6982\u62ec \u8fd9\u7bc7\u6587\u7ae0\u603b\u7ed3\u4e86\u6211\u548c\u670b\u53cb\uff08@kobayashi-m42\uff09\u4e00\u8d77\u4f7f\u7528\u7684\u670d\u52a1Mindexer\uff08\u30df\u30f3\u30c7\u30af\u30b5\u30fc\uff09\u5728\u5347 [&hellip;]","og_url":"https:\/\/www.silicloud.com\/zh\/blog\/\u5c06\u4e2a\u4eba\u5f00\u53d1\u7684terraform\u5347\u7ea7\u81f3v0-12\u3002\/","og_site_name":"Blog - Silicon Cloud","article_published_time":"2023-04-30T16:32:16+00:00","article_modified_time":"2024-05-03T20:45:51+00:00","author":"\u6e05, \u626c","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"\u6e05, \u626c","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"3 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%86%e4%b8%aa%e4%ba%ba%e5%bc%80%e5%8f%91%e7%9a%84terraform%e5%8d%87%e7%ba%a7%e8%87%b3v0-12%e3%80%82\/","url":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%86%e4%b8%aa%e4%ba%ba%e5%bc%80%e5%8f%91%e7%9a%84terraform%e5%8d%87%e7%ba%a7%e8%87%b3v0-12%e3%80%82\/","name":"\u5c06\u4e2a\u4eba\u5f00\u53d1\u7684Terraform\u5347\u7ea7\u81f3v0.12 - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website"},"datePublished":"2023-04-30T16:32:16+00:00","dateModified":"2024-05-03T20:45:51+00:00","author":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/cb5556d2501da73d864cac945e8d9461"},"breadcrumb":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%86%e4%b8%aa%e4%ba%ba%e5%bc%80%e5%8f%91%e7%9a%84terraform%e5%8d%87%e7%ba%a7%e8%87%b3v0-12%e3%80%82\/#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%86%e4%b8%aa%e4%ba%ba%e5%bc%80%e5%8f%91%e7%9a%84terraform%e5%8d%87%e7%ba%a7%e8%87%b3v0-12%e3%80%82\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%86%e4%b8%aa%e4%ba%ba%e5%bc%80%e5%8f%91%e7%9a%84terraform%e5%8d%87%e7%ba%a7%e8%87%b3v0-12%e3%80%82\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.silicloud.com\/zh\/blog\/"},{"@type":"ListItem","position":2,"name":"\u5c06\u4e2a\u4eba\u5f00\u53d1\u7684Terraform\u5347\u7ea7\u81f3v0.12"}]},{"@type":"WebSite","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website","url":"https:\/\/www.silicloud.com\/zh\/blog\/","name":"Blog - Silicon Cloud","description":"","inLanguage":"zh-Hans"},{"@type":"Person","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/cb5556d2501da73d864cac945e8d9461","name":"\u6e05, \u626c","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/32a4239de8ff29adace466261d309424a1e5fe9f7e3036bf89fe03f2e3dbe717?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/32a4239de8ff29adace466261d309424a1e5fe9f7e3036bf89fe03f2e3dbe717?s=96&d=mm&r=g","caption":"\u6e05, \u626c"},"url":"https:\/\/www.silicloud.com\/zh\/blog\/author\/qingyang\/"},{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%86%e4%b8%aa%e4%ba%ba%e5%bc%80%e5%8f%91%e7%9a%84terraform%e5%8d%87%e7%ba%a7%e8%87%b3v0-12%e3%80%82\/#local-main-organization-logo","url":"","contentUrl":"","caption":"Blog - Silicon Cloud"}]}},"_links":{"self":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/48755","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/users\/9"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/comments?post=48755"}],"version-history":[{"count":2,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/48755\/revisions"}],"predecessor-version":[{"id":96196,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/48755\/revisions\/96196"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/media?parent=48755"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/categories?post=48755"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/tags?post=48755"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}