{"id":48589,"date":"2023-07-22T20:46:58","date_gmt":"2023-08-08T02:41:56","guid":{"rendered":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%bd%e9%87%8f%e4%bd%bf%e7%94%a8terraform%e7%9a%84%e5%91%bd%e4%bb%a4%e5%92%8c%e9%80%89%e9%a1%b9%e8%bf%9b%e8%a1%8c%e5%ae%9e%e8%b7%b5%e3%80%82\/"},"modified":"2024-04-30T14:53:38","modified_gmt":"2024-04-30T06:53:38","slug":"%e5%b0%bd%e9%87%8f%e4%bd%bf%e7%94%a8terraform%e7%9a%84%e5%91%bd%e4%bb%a4%e5%92%8c%e9%80%89%e9%a1%b9%e8%bf%9b%e8%a1%8c%e5%ae%9e%e8%b7%b5%e3%80%82","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%bd%e9%87%8f%e4%bd%bf%e7%94%a8terraform%e7%9a%84%e5%91%bd%e4%bb%a4%e5%92%8c%e9%80%89%e9%a1%b9%e8%bf%9b%e8%a1%8c%e5%ae%9e%e8%b7%b5%e3%80%82\/","title":{"rendered":"\u5c3d\u91cf\u4f7f\u7528Terraform\u7684\u547d\u4ee4\u548c\u9009\u9879\u8fdb\u884c\u5b9e\u8df5"},"content":{"rendered":"<h1>\u9996\u5148<\/h1>\n<p>\u300c\u6211\u7a81\u7136\u60f3\u5230\uff0c\u5982\u679c\u80fd\u7cfb\u7edf\u5730\u5b66\u4e60\u4e00\u4e0bTerraform\u7684\u547d\u4ee4\u548c\u9009\u9879\u90fd\u80fd\u505a\u4e9b\u4ec0\u4e48\uff0c\u4e0d\u59a8\u5c3d\u91cf\u5c1d\u8bd5\u4e00\u4e0b\u5427\u3002\u300d\u2192\u622a\u81f32020\u5e7412\u670814\u65e5\uff0c\u6211\u975e\u5e38\u540e\u6094\u3002<\/p>\n<h1>\u7167\u987e\u91cd\u8981\u4e8b\u9879<\/h1>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">Terraform\u306f\u6bce\u6708\u306e\u3088\u3046\u306b\u66f4\u65b0\u3055\u308c\u3066\u3044\u308b\u306e\u3067\u3001\u6700\u65b0\u60c5\u5831\u306f\u516c\u5f0f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u4eca\u56de\u3001Terraform\u3082provider\u306f\u8af8\u4e8b\u60c5\u306b\u3088\u308a\u6700\u65b0\u30d0\u30fc\u30b8\u30e7\u30f3\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u306e\u3067\u3054\u6ce8\u610f\u304f\u3060\u3055\u3044<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\u4e00\u5ea6\u4f7f\u3063\u305f\u30aa\u30d7\u30b7\u30e7\u30f3\u306f\u3001\u4ed6\u306e\u30b3\u30de\u30f3\u30c9\u3067\u306f\u5272\u611b\u3057\u307e\u3059\uff08\u3054\u3081\u3093\u306a\u3055\u3044\uff09<\/ul>\n<p>\u518d\u8bf4\u4e00\u4e0b\uff0c\u5173\u4e8e\u672c\u6587\u3002\u7531\u4e8e\u82b1\u8d39\u7684\u65f6\u95f4\u6bd4\u9884\u671f\u7684\u8981\u957f\uff0c\u6211\u6253\u7b97\u9010\u6e10\u8ffd\u52a0\u5185\u5bb9&#8230;\u975e\u5e38\u62b1\u6b49\u3002<\/p>\n<h1>\u73af\u5883<\/h1>\n<p>\u82f9\u679c\u64cd\u4f5c\u7cfb\u7edf X 10.14.1 x86_64<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">$<\/span> terraform <span class=\"nt\">-version<\/span>\r\n<span class=\"go\">Terraform v0.13.0\r\n+ provider registry.terraform.io\/hashicorp\/aws v3.3.0\r\n\r\n<\/span><span class=\"gp\">$<\/span> <span class=\"nb\">export <\/span><span class=\"nv\">AWS_ACCESS_KEY_ID<\/span><span class=\"o\">=<\/span>...\r\n<span class=\"gp\">$<\/span> <span class=\"nb\">export <\/span><span class=\"nv\">AWS_SECRET_ACCESS_KEY<\/span><span class=\"o\">=<\/span>...\r\n<span class=\"gp\">$<\/span> <span class=\"nb\">export <\/span><span class=\"nv\">AWS_DEFAULT_REGION<\/span><span class=\"o\">=<\/span>ap-northeast-1\r\n<\/code><\/pre>\n<p>\u8fd9\u662f\u6211\u5728\u4e3b\u8981\u4f7f\u7528\u7684tf\u6587\u4ef6\u3002<br \/>\n\u6839\u636e\u9700\u8981\u8fdb\u884c\u4fee\u6539\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"k\">resource<\/span> <span class=\"s2\">\"aws_instance\"<\/span> <span class=\"s2\">\"ec2_instance\"<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"nx\">ami<\/span>           <span class=\"p\">=<\/span> <span class=\"s2\">\"ami-0cc75a8978fbbc969\"<\/span>\r\n  <span class=\"nx\">instance_type<\/span> <span class=\"p\">=<\/span> <span class=\"s2\">\"t2.micro\"<\/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=\"s2\">\"qiita_example\"<\/span>\r\n  <span class=\"p\">}<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<h1>\u5bf9\u5e94\u987a\u5e8f<\/h1>\n<p>\u6211\u4f1a\u6309\u7167\u8fd9\u4e2a\u987a\u5e8f\u9010\u4e00\u5c1d\u8bd5\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">$<\/span> terraform\r\n<span class=\"gp\">Usage: terraform [-version] [-help] &lt;command&gt;<\/span> <span class=\"o\">[<\/span>args]\r\n<span class=\"go\">\r\nThe available commands for execution are listed below.\r\nThe most common, useful commands are shown first, followed by\r\nless common or more advanced commands. If you're just getting\r\nstarted with Terraform, stick with the common commands. For the\r\nother commands, please read the help and docs before usage.\r\n\r\nCommon commands:\r\n    apply              Builds or changes infrastructure\r\n    console            Interactive console for Terraform interpolations\r\n    destroy            Destroy Terraform-managed infrastructure\r\n    env                Workspace management\r\n    fmt                Rewrites config files to canonical format\r\n    get                Download and install modules for the configuration\r\n    graph              Create a visual graph of Terraform resources\r\n    import             Import existing infrastructure into Terraform\r\n    init               Initialize a Terraform working directory\r\n    login              Obtain and save credentials for a remote host\r\n    logout             Remove locally-stored credentials for a remote host\r\n    output             Read an output from a state file\r\n    plan               Generate and show an execution plan\r\n    providers          Prints a tree of the providers used in the configuration\r\n    refresh            Update local state file against real resources\r\n    show               Inspect Terraform state or plan\r\n    taint              Manually mark a resource for recreation\r\n    untaint            Manually unmark a resource as tainted\r\n    validate           Validates the Terraform files\r\n    version            Prints the Terraform version\r\n    workspace          Workspace management\r\n\r\nAll other commands:\r\n    0.12upgrade        Rewrites pre-0.12 module source code for v0.12\r\n    0.13upgrade        Rewrites pre-0.13 module source code for v0.13\r\n    debug              Debug output management (experimental)\r\n    force-unlock       Manually unlock the terraform state\r\n    push               Obsolete command for Terraform Enterprise legacy (v1)\r\n    state              Advanced state management\r\n<\/span><\/code><\/pre>\n<h1>\u6267\u884c\u571f\u58e4\u5efa\u8bbe<\/h1>\n<p>\u53ef\u4ee5\u521b\u5efa\u548c\u4fee\u6539\u8d44\u6e90\u7684\u547d\u4ee4\u3002<br \/>\n\u5728\u6267\u884c terraform apply \u547d\u4ee4\u65f6\u4f1a\u8be2\u95ee\u662f\u5426\u771f\u7684\u8981\u6267\u884c\uff0c\u8f93\u5165 yes \u5c31\u53ef\u4ee5\u786e\u8ba4\u3002<br \/>\n\u53ef\u4ee5\u4f7f\u7528 terraform apply [options] [dir-or-plan] \u7684\u683c\u5f0f\u8fdb\u884c\u64cd\u4f5c\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">$<\/span> terraform apply\r\n<span class=\"go\">\r\nAn execution plan has been generated and is shown below.\r\nResource actions are indicated with the following symbols:\r\n  + create\r\n\r\nTerraform will perform the following actions:\r\n\r\n<\/span><span class=\"gp\">  #<\/span> aws_instance.ec2_instance will be created\r\n<span class=\"go\">  + resource \"aws_instance\" \"ec2_instance\" {\r\n      + ami                          = \"ami-0cc75a8978fbbc969\"\r\n      + \u2026 \r\n\r\nPlan: 1 to add, 0 to change, 0 to destroy.\r\n\r\nDo you want to perform these actions?\r\n  Terraform will perform the actions described above.\r\n  Only 'yes' will be accepted to approve.\r\n\r\n  Enter a value: yes\r\n\r\naws_instance.ec2_instance: Creating...\r\naws_instance.ec2_instance: Still creating... [10s elapsed]\r\naws_instance.ec2_instance: Still creating... [20s elapsed]\r\naws_instance.ec2_instance: Creation complete after 26s [id=i-xxxxx]\r\n\r\nApply complete! Resources: 1 added, 0 changed, 0 destroyed.\r\n<\/span><\/code><\/pre>\n<h2>\u7533\u8bf7\u9009\u9879\u5217\u8868<\/h2>\n<pre class=\"post-pre\"><code><span class=\"gp\">$<\/span> terraform apply <span class=\"nt\">-h<\/span>\r\n<\/code><\/pre>\n<div>\n<div class=\"post-table\">\u30aa\u30d7\u30b7\u30e7\u30f3\u5185\u5bb9-auto-approve\u4f5c\u6210\u4e88\u5b9a\u306e\u30ea\u30bd\u30fc\u30b9\u8868\u793a\u3084\u5b9f\u884c\u78ba\u8a8d <code>yes<\/code> \u3092\u7701\u7565\u3059\u308b-backup=path\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u30d5\u30a1\u30a4\u30eb <code>terraform.tfstate.backup<\/code> \u306e\u30d1\u30b9\u3092\u6307\u5b9a\u3059\u308b-compact-warnings\u30a8\u30e9\u30fc\u3092\u542b\u307e\u306a\u3044 <code>Warning<\/code> \u306e\u5834\u5408\u306f\u3001\u7701\u7565\u3057\u305f\u5f62\u3067\u8868\u793a\u3059\u308b-lock=true<code>tfstate<\/code> \u30d5\u30a1\u30a4\u30eb\u3092\u30ed\u30c3\u30af\u3059\u308b\uff08\u307e\u305f\u306f\u3057\u306a\u3044\uff09\u3088\u3046\u306b\u6307\u5b9a\u3059\u308b-lock-timeout=0s<code>tfstate<\/code> \u30d5\u30a1\u30a4\u30eb\u306e\u30ed\u30c3\u30af\u304c\u5931\u6557\u3057\u305f\u5834\u5408\u306e\u30ea\u30c8\u30e9\u30a4\u307e\u3067\u306e\u6642\u9593\u3092\u6307\u5b9a\u3059\u308b-input=true\u672a\u5b9a\u7fa9\u306e\u5909\u6570\u304c\u3042\u308b\u5834\u5408\u306b\u5909\u6570\u306e\u5165\u529b\u3092\u6c42\u3081\u308b\u304b\u3069\u3046\u304b\u3092\u6307\u5b9a\u3059\u308b-no-color\u5b9f\u884c\u4e2d\u306e\u30a2\u30a6\u30c8\u30d7\u30c3\u30c8\u3092\u8272\u306a\u3057\u3067\u8868\u793a\u3055\u305b\u308b-parallelism=n\u4e26\u5217\u3067\u5b9f\u884c\u3059\u308b\u30ea\u30bd\u30fc\u30b9\u6570\u3092\u6307\u5b9a\u3059\u308b-refresh=true\u5b9f\u884c\u524d\u306b <code>tfstate<\/code> \u30d5\u30a1\u30a4\u30eb\u3092\u66f4\u65b0\u3059\u308b\u304b\u3069\u3046\u304b\u3092\u6307\u5b9a\u3059\u308b-state=path<code>tfstate<\/code> \u30d5\u30a1\u30a4\u30eb\u306e\u30d1\u30b9\u3092\u6307\u5b9a\u3059\u308b-state-out=path\u66f4\u65b0\u3059\u308b <code>tfstate<\/code> \u30d5\u30a1\u30a4\u30eb\u3092\u6307\u5b9a\u3059\u308b\u3000\u203b <code>-state<\/code> \u306f\u8aad\u307f\u8fbc\u3080\uff06\u66f4\u65b0\u3059\u308b\u30d5\u30a1\u30a4\u30eb-target=resource\u3069\u306e\u30ea\u30bd\u30fc\u30b9\u3092\u5b9f\u884c\u3059\u308b\u304b\u3092\u6307\u5b9a\u3059\u308b-var &#8216;foo=bar&#8217;\u5909\u6570\u3092\u30b3\u30de\u30f3\u30c9\u5b9f\u884c\u6642\u306b\u4e0a\u66f8\u304d\u3059\u308b-var-file=foo\u5909\u6570\u3092\u5b9a\u7fa9\u3057\u305f <code>tfvars<\/code> \u30d5\u30a1\u30a4\u30eb\u3092\u6307\u5b9a\u3059\u308b<\/div>\n<\/div>\n<h2>\u4f7f\u7528 Terraform \u5de5\u5177\u6267\u884c\u5e94\u7528\u5e76\u81ea\u52a8\u540c\u610f<\/h2>\n<p>\u5f53\u4ec5\u4f7f\u7528&#8221;terraform apply&#8221;\u547d\u4ee4\u65f6\uff0c\u9700\u8981\u5728\u6267\u884c\u4e4b\u524d\u786e\u8ba4\u6267\u884c\u8ba1\u5212\u5e76\u8f93\u5165&#8221;yes&#8221;\uff0c\u4f46\u662f\u73b0\u5728\u65e0\u9700\u8f93\u5165\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">$<\/span> terraform apply <span class=\"nt\">--auto-approve<\/span>\r\n<span class=\"go\">aws_instance.ec2_instance: Creating...\r\naws_instance.ec2_instance: Still creating... [10s elapsed]\r\naws_instance.ec2_instance: Still creating... [20s elapsed]\r\naws_instance.ec2_instance: Creation complete after 25s [id=i-xxxxx]\r\n\r\nApply complete! Resources: 1 added, 0 changed, 0 destroyed.\r\n<\/span><\/code><\/pre>\n<h2>\u5e94\u7528terraform-\u5907\u4efd\u3002<\/h2>\n<p>\u53ef\u4ee5\u6307\u5b9a\u5907\u4efd\u6587\u4ef6terraform.tfstate.backup\u7684\u8def\u5f84\u3002<br \/>\n\u6211\u5c1d\u8bd5\u6307\u5b9a\u6587\u4ef6\u540d\u5e76\u5c06\u5176\u653e\u7f6e\u5728\u4efb\u610f\u4f4d\u7f6e\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">$<\/span> terraform apply <span class=\"nt\">-backup<\/span><span class=\"o\">=<\/span>\/Users\/username\/study\/terraform\/backup\/ec2.tfstate.backup\r\n<span class=\"go\">\u3000\u2026\r\naws_instance.ec2_instance: Creation complete after 35s [id=i-xxxxxx]\r\n\r\nApply complete! Resources: 1 added, 0 changed, 0 destroyed.\r\n<\/span><\/code><\/pre>\n<p>\u5907\u4efd\u4e0b\u9762\u6709\u4e00\u4e2a\u65b0\u521b\u5efa\u7684 ec2.tfstate.backup \u6587\u4ef6\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">$<\/span> tree\r\n<span class=\"c\">.\r\n<\/span><span class=\"go\">\u251c\u2500\u2500 backup\r\n\u2502\u00a0\u00a0 \u2514\u2500\u2500 ec2.tfstate.backup\r\n\u251c\u2500\u2500 ec2.tf\r\n\u2514\u2500\u2500 terraform.tfstate\r\n<\/span><\/code><\/pre>\n<h2>terraform \u5e94\u7528 &#8211; \u7d27\u51d1\u8b66\u544a<\/h2>\n<p>\u5982\u679c\u6ca1\u6709\u5305\u542b\u9519\u8bef\u7684\u8b66\u544a\uff0c\u5b83\u4f1a\u4ee5\u7b80\u5316\u7684\u5f62\u5f0f\u663e\u793a\u3002<br \/>\n\u5982\u679c\u6709\u591a\u4e2a\u8b66\u544a\uff0c\u5b83\u4eec\u4f1a\u88ab\u7d27\u51d1\u5730\u663e\u793a\u5728\u4e00\u8d77\uff0c\u53ef\u80fd\u4f1a\u8ba9\u4eba\u611f\u5230\u7279\u522b\u9ad8\u5174\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">$<\/span> terraform apply <span class=\"nt\">-compact-warnings<\/span>\r\n<span class=\"go\">  \u2026\r\nWarnings:\r\n\r\n- Quoted type constraints are deprecated\r\n  on ec2.tf line 2\r\n- Interpolation-only expressions are deprecated\r\n  on ec2.tf line 11 (and 1 more)\r\n\r\nTo see the full warning notes, run Terraform without -compact-warnings.\r\n\u2026\r\n<\/span><\/code><\/pre>\n<p>\u5982\u679c\u4e0d\u4f7f\u7528\u6b64\u9009\u9879\u800c\u51fa\u73b0\u8b66\u544a\uff0c\u5219\u4f1a\u63d0\u4f9b\u8be6\u7ec6\u8bf4\u660e\uff0c\u56e0\u6b64\u6839\u636e\u9700\u8981\u53ef\u4ee5\u9009\u62e9\u4f7f\u7528\u7b80\u6613\u6d88\u606f\u662f\u5426\u53ef\u4ee5\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">$<\/span> terraform apply\r\n<span class=\"go\">  \u2026\r\nWarning: Quoted type constraints are deprecated\r\n\r\n  on ec2.tf line 2, in variable \"aws_iam_user\":\r\n   2:   type = \"list\"\r\n\r\nTerraform 0.11 and earlier required type constraints to be given in quotes,\r\nbut that form is now deprecated and will be removed in a future version of\r\nTerraform. To silence this warning, remove the quotes around \"list\" and write\r\nlist(string) instead to explicitly indicate that the list elements are\r\nstrings.\r\n\r\n\r\nWarning: Interpolation-only expressions are deprecated\r\n\u2026\r\n\r\n(and one more similar warning elsewhere)\r\n\u2026\r\n<\/span><\/code><\/pre>\n<h2>\u4f7f\u7528terraform apply\u547d\u4ee4\uff0c\u5e76\u8bbe\u5b9a-lock=true\u53c2\u6570\u3002<\/h2>\n<p>true \uff1a .tfstate \u30d5\u30a1\u30a4\u30eb\u3092\u30ed\u30c3\u30af\u3057\u3066\u304f\u308c\u307e\u3059\u3002<\/p>\n<p>\u306a\u304a\u3001\u30c7\u30d5\u30a9\u30eb\u30c8\u306f true \u3067\u3059\u3002\u306a\u306e\u3067\u3001\u3053\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u3092\u4f7f\u308f\u306a\u3044\u5834\u5408\u3082\u81ea\u52d5\u7684\u306b\u30ed\u30c3\u30af\u3092\u304b\u3051\u3066\u304f\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n<p>false \uff1a \u30ed\u30c3\u30af\u304b\u3051\u306a\u3044\u3088\u3046\u306b\u3067\u304d\u308b\u3002\u4f7f\u3046\u306a\u3089\u3053\u3063\u3061\u304b\u306a\u3002<\/p>\n<p>\u7136\u800c\uff0c\u6839\u636e\u5b98\u65b9\u7684\u8bf4\u6cd5\uff0c\u4e0d\u5bf9\u9501\u8fdb\u884c\u5047\u8bbe\u4f3c\u4e4e\u662f\u4e0d\u63a8\u8350\u7684\uff0c\u6240\u4ee5\u8bf7\u6ce8\u610f\u3002<\/p>\n<blockquote><p>\u6240\u6709\u53ef\u80fd\u5199\u5165\u72b6\u6001\u7684\u64cd\u4f5c\u90fd\u4f1a\u81ea\u52a8\u8fdb\u884c\u72b6\u6001\u9501\u5b9a\u3002\u60a8\u4e0d\u4f1a\u770b\u5230\u4efb\u4f55\u5173\u4e8e\u6b63\u5728\u53d1\u751f\u7684\u72b6\u6001\u9501\u5b9a\u7684\u6d88\u606f\u3002\u5982\u679c\u72b6\u6001\u9501\u5b9a\u5931\u8d25\uff0cTerraform\u5c06\u4e0d\u4f1a\u7ee7\u7eed\u6267\u884c\u3002\u60a8\u53ef\u4ee5\u4f7f\u7528-lock\u6807\u5fd7\u7981\u7528\u5927\u591a\u6570\u547d\u4ee4\u7684\u72b6\u6001\u9501\u5b9a\uff0c\u4f46\u4e0d\u5efa\u8bae\u8fd9\u6837\u505a\u3002<\/p><\/blockquote>\n<pre class=\"post-pre\"><code><span class=\"gp\">$<\/span> terraform apply <span class=\"nt\">-lock<\/span><span class=\"o\">=<\/span><span class=\"nb\">true<\/span>       <span class=\"c\"># terraform apply\u3068\u540c\u69d8<\/span>\r\n<span class=\"gp\">$<\/span> terraform apply <span class=\"nt\">-lock<\/span><span class=\"o\">=<\/span><span class=\"nb\">false<\/span>\r\n<\/code><\/pre>\n<h2>\u5e94\u7528 terraform -lock-timeout=0s<\/h2>\n<p>\u5982\u679c.tfstate\u6587\u4ef6\u7684\u9501\u5b9a\u5931\u8d25\uff0c\u6307\u5b9a\u591a\u5c11\u79d2\u540e\u8fdb\u884c\u91cd\u8bd5\u3002<br \/>\nhttps:\/\/www.terraform.io\/docs\/commands\/apply.html#lock-timeout-0s<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">$<\/span> terraform apply <span class=\"nt\">-lock-timeout<\/span><span class=\"o\">=<\/span>5s\r\n<\/code><\/pre>\n<h2>\u6267\u884cterraform\u5e94\u7528-\u8f93\u5165=true<\/h2>\n<p>\u5982\u679c\u5b58\u5728\u672a\u5b9a\u4e49\u7684\u53d8\u91cf\uff0c\u53ef\u4ee5\u8bbe\u7f6e\u662f\u5426\u8981\u6c42\u8f93\u5165\u53d8\u91cf\u7684\u503c\u3002<br \/>\n\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0c\u4f3c\u4e4e\u4e3a true\u3002<\/p>\n<p>\u5047\u8bbe\u6211\u4eec\u8fd9\u6837\u5b9a\u4e49\u53d8\u91cf\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"c1\"># \u672a\u5b9a\u7fa9\u306e\u5909\u6570<\/span>\r\n<span class=\"k\">variable<\/span> <span class=\"s2\">\"example_instance_type\"<\/span> <span class=\"p\">{}<\/span>\r\n\r\n<span class=\"c1\"># instance_type\u3067\u5909\u6570\u3092\u4f7f\u7528<\/span>\r\n<span class=\"k\">resource<\/span> <span class=\"s2\">\"aws_instance\"<\/span> <span class=\"s2\">\"ec2_instance\"<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"nx\">ami<\/span>           <span class=\"p\">=<\/span> <span class=\"s2\">\"ami-0cc75a8978fbbc969\"<\/span>\r\n  <span class=\"nx\">instance_type<\/span> <span class=\"p\">=<\/span> <span class=\"kd\">var<\/span><span class=\"p\">.<\/span><span class=\"nx\">example_instance_type<\/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=\"s2\">\"qiita_example\"<\/span>\r\n  <span class=\"p\">}<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<p>\u5982\u679c\u6ca1\u6709\u4f7f\u7528 var \u6216\u8005 TF_VAR_ \u8bbe\u7f6e\u73af\u5883\u53d8\u91cf\uff0c\u5c06\u8981\u6c42\u5728\u8fd0\u884c\u65f6\u8f93\u5165\u3002\u6240\u4ee5\u53ea\u9700\u91cd\u65b0\u8bbe\u7f6e\u73af\u5883\u53d8\u91cf\u5373\u53ef\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">$<\/span> terraform apply <span class=\"nt\">-input<\/span><span class=\"o\">=<\/span><span class=\"nb\">true<\/span>\r\n<span class=\"go\">var.example_instance_type\r\n  Enter a value: t2.micro\r\n\u2026\r\n\u3042\u3068\u306f\u901a\u5e38\u901a\u308a\u306e\u52d5\u304d\r\n<\/span><\/code><\/pre>\n<p>\u7136\u800c\uff0c\u5982\u679c\u5728\u9009\u9879\u4e2d\u5c06\u5176\u8bbe\u7f6e\u4e3afalse\u800c\u4e0d\u662ftrue\uff0c\u5c06\u4e0d\u9700\u8981\u8f93\u5165\u672a\u5b9a\u4e49\u7684\u53d8\u91cf\u3002\u56e0\u6b64\uff0c\u5982\u679c\u6ca1\u6709\u6b63\u786e\u8bbe\u7f6e\u73af\u5883\u53d8\u91cf\uff0c\u5219\u4f1a\u88ab\u6307\u8d23\u8bf4\uff1a\u201c\u563f\uff0c\u5b83\u6ca1\u6709\u88ab\u5b9a\u4e49\uff01\u201d\u6240\u4ee5\u8bf7\u6ce8\u610f\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">$<\/span> terraform apply <span class=\"nt\">-input<\/span><span class=\"o\">=<\/span><span class=\"nb\">false<\/span>\r\n<span class=\"go\">\r\nError: No value for required variable\r\n\r\n  on ec2.tf line 1:\r\n   1: variable \"example_instance_type\" {}\r\n\r\nThe root module input variable \"example_instance_type\" is not set, and has no\r\ndefault value. Use a -var or -var-file command line argument to provide a\r\nvalue for this variable.\r\n<\/span><\/code><\/pre>\n<h2>\u6267\u884cterraform apply\u547d\u4ee4\u65f6\uff0c\u4e0d\u663e\u793a\u989c\u8272\u3002<\/h2>\n<p>\u901a\u5e38\uff0capply\u547d\u4ee4\u6267\u884c\u671f\u95f4\u7684\u8f93\u51fa\u4f1a\u6807\u6709\u7ea2\u8272\u3001\u7eff\u8272\u7b49\u989c\u8272\uff0c\u4f46\u662f\u73b0\u5728\u5b8c\u5168\u6ca1\u6709\u989c\u8272\u3002<br \/>\n\u55ef\uff0c\u5c31\u662f\u8fd9\u6837\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">$<\/span> terraform apply <span class=\"nt\">-no-color<\/span>\r\n<\/code><\/pre>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d863d913a08637a6bbc21\/56-1.png\" alt=\"undefined\" \/><\/div>\n<h2>\u5728\u4e2d\u56fd\u5883\u5185\u672c\u5730\u5316\u5730\u8f6c\u8ff0\u4ee5\u4e0b\u5185\u5bb9\uff0c\u4ec5\u9700\u63d0\u4f9b\u4e00\u79cd\u9009\u62e9\uff1a<\/h2>\n<p>\u4f7f\u7528 Terraform \u6267\u884c `terraform apply -parallelism=n` \u6307\u4ee4\u3002<\/p>\n<p>\u901a\u8fc7\u589e\u52a0\u540c\u65f6\u6267\u884c\u7684\u8d44\u6e90\u6570\u91cf\uff0c\u53ef\u4ee5\u7f29\u77ed\u6267\u884c\u65f6\u95f4\u3002<\/p>\n<p>\u7531\u4e8e\u9ed8\u8ba4\u7684\u5e76\u884c\u6570\u662f10\u4e2a\uff0c\u56e0\u6b64\u9996\u5148\u521b\u5efa15\u4e2aEC2\u5b9e\u4f8b\u5e76\u8ba1\u7b97\u65f6\u95f4\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">$<\/span> <span class=\"nb\">time <\/span>terraform apply <span class=\"nt\">--auto-approve<\/span>\r\n<span class=\"go\">\u2026\r\nApply complete! Resources: 15 added, 0 changed, 0 destroyed.\r\n\r\nreal    1m2.131s\r\nuser    0m5.261s\r\nsys 0m2.269s\r\n<\/span><\/code><\/pre>\n<p>\u770b\u8d77\u6765\u82b1\u4e861\u52062\u79d2\u5bf9\u5427\u3002<br \/>\n\u63a5\u4e0b\u6765\uff0c\u6211\u5c06\u5c1d\u8bd5\u5c06\u5e76\u884c\u6267\u884c\u7684\u6570\u91cf\u589e\u52a0\u523015\u4e2a\u3002<br \/>\n\u867d\u7136\u6211\u4eec\u6b63\u5728\u4f7f\u7528 time \u6765\u6d4b\u91cf\u65f6\u95f4\uff0c\u4f46\u901a\u5e38\u53ea\u9700\u8981 terraform apply -parallelism=20\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">$<\/span> <span class=\"nb\">time <\/span>terraform apply <span class=\"nt\">-parallelism<\/span><span class=\"o\">=<\/span>15 <span class=\"nt\">--auto-approve<\/span>\r\n<span class=\"go\">\u2026\r\nApply complete! Resources: 15 added, 0 changed, 0 destroyed.\r\n\r\nreal    0m49.121s\r\nuser    0m5.321s\r\nsys 0m1.984s\r\n<\/span><\/code><\/pre>\n<p>\u8fd0\u884c\u65f6\u95f4\u4f3c\u4e4e\u51cf\u5c11\u4e86\u5927\u7ea613\u79d2\u3002<br \/>\n\u5982\u679c\u5904\u7406\u7684\u8d44\u6e90\u8f83\u591a\uff0c\u53ef\u80fd\u4f1a\u6709\u76f8\u5f53\u5927\u7684\u6548\u679c\u3002<\/p>\n<h2>\u5e94\u7528terraform -refresh=true<\/h2>\n<p>\u5728\u6267\u884c apply \u6216\u8005 plan \u4e4b\u524d\uff0c\u60a8\u53ef\u4ee5\u8bbe\u7f6e\u662f\u5426\u66f4\u65b0 tfstate \u6587\u4ef6\u3002\u9ed8\u8ba4\u503c\u4e3a true\u3002<br \/>\n\u203b tfstate \u6587\u4ef6\u662f\u4e00\u4e2a\u8bb0\u5f55&#8221;\u5f53\u524d\u72b6\u6001&#8221;\u7684\u6587\u4ef6\u3002\u8be6\u89c1\u94fe\u63a5\uff1ahttps:\/\/www.terraform.io\/docs\/commands\/apply.html#no-color<\/p>\n<p>\u5728\u6267\u884c\u7533\u8bf7\u6216\u8ba1\u5212\u4e4b\u524d\uff0c\u5982\u4e0b\u7684\u64cd\u4f5c\u90fd\u662f\u5b58\u5728\u7684\u3002\uff08\u8bf7\u6ce8\u610f\u8fd9\u53ea\u662f\u6211\u7684\u7406\u89e3\uff0c\u5982\u679c\u6211\u7406\u89e3\u9519\u4e86\uff0c\u8bf7\u8c05\u89e3\uff09<\/p>\n<ol>\n<li style=\"list-style-type: none;\">\n<ol>\u6839\u636etfstate\u6587\u4ef6\u83b7\u53d6\u4f9b\u5e94\u5546\uff08\u6211\u7684\u60c5\u51b5\u662fAWS\uff09\u7684\u8d44\u6e90\u4fe1\u606f\uff0c\u5e76\u66f4\u65b0tfstate\u6587\u4ef6\uff08\u5237\u65b0\uff09\u3002<\/ol>\n<\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<ol>\n<li style=\"list-style-type: none;\">\n<ol>\u5728tfstate\u6587\u4ef6\u66f4\u65b0\u540e\uff0c\u8fdb\u884c\u8d44\u6e90\u7684\u521b\u5efa\u3001\u66f4\u65b0\u548c\u5220\u9664\uff08\u5e94\u7528\u3001\u9500\u6bc1\uff09\u3002<\/ol>\n<\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<ol>\u6839\u636e\u521b\u5efa\u7684\u8d44\u6e90\u4fe1\u606f\u518d\u6b21\u66f4\u65b0tfstate\u6587\u4ef6\u3002<\/ol>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d863d913a08637a6bbc21\/68-0.jpeg\" alt=\"undefined\" \/><\/div>\n<p>\u5982\u679c\u6ca1\u6709\u9009\u9879\u7684\u8bdd\uff0c\u53ef\u4ee5\u9009\u62e9\u8fd9\u4e2a\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">$<\/span> terraform apply <span class=\"nt\">--auto-approve<\/span>\r\n<span class=\"go\">aws_instance.ec2_instance: Refreshing state... [id=i-xxxx]\r\naws_instance.ec2_instance: Modifying... [id=i-xxxx]\r\naws_instance.ec2_instance: Modifications complete after 3s [id=i-xxxx]\r\n\r\nApply complete! Resources: 0 added, 1 changed, 0 destroyed.\r\n<\/span><\/code><\/pre>\n<p>\u4ee5\u4e0b\u662f\u8bbe\u7f6e\u4e86refresh=false\u9009\u9879\u7684\u5185\u5bb9\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">$<\/span> terraform apply <span class=\"nt\">--auto-approve<\/span> <span class=\"nt\">-refresh<\/span><span class=\"o\">=<\/span><span class=\"nb\">false<\/span>\r\n<span class=\"go\">aws_instance.ec2_instance: Modifying... [id=i-xxxx]\r\naws_instance.ec2_instance: Modifications complete after 3s [id=i-xxxx]\r\n\r\nApply complete! Resources: 0 added, 1 changed, 0 destroyed.\r\n<\/span><\/code><\/pre>\n<h2>\u5e94\u7528terraform -state=path\u8fdb\u884c\u90e8\u7f72<\/h2>\n<p>\u60a8\u53ef\u4ee5\u6307\u5b9a `tfstate` \u6587\u4ef6\u7684\u8def\u5f84\u3002\u8bf7\u53c2\u8003 https:\/\/www.terraform.io\/docs\/commands\/apply.html#state-path\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">$<\/span> tree\r\n<span class=\"c\">.\r\n<\/span><span class=\"go\">\u2514\u2500\u2500 ec2.tf\r\n<\/span><span class=\"gp\">$<\/span> terraform apply <span class=\"nt\">-state<\/span><span class=\"o\">=<\/span>\/Users\/username\/study\/terraform\/example\/state\/ec2.tfstate\r\n<span class=\"gp\">$<\/span> tree\r\n<span class=\"c\">.\r\n<\/span><span class=\"go\">\u251c\u2500\u2500 ec2.tf\r\n\u2514\u2500\u2500 state\r\n    \u2514\u2500\u2500 ec2.tfstate\r\n<\/span><\/code><\/pre>\n<p>\u6211\u8ba4\u4e3a\u5728\u5b9e\u9645\u9879\u76ee\u4e2d\uff0c\u4f7f\u7528\u8fdc\u7a0b\u5b58\u50a8\u6765\u7ba1\u7406tfstate\u6587\u4ef6\u3002\uff08\u867d\u7136\u6211\u53ea\u5728\u4e2a\u4eba\u4f7f\u7528\u8fc7\uff0c\u6240\u4ee5\u8fd8\u4e0d\u592a\u6e05\u695a&#8230;\uff09<br \/>\n\u5bf9\u4e8eAWS\u6765\u8bf4\uff0c\u5f88\u591a\u4eba\u4f7f\u7528\u7684\u662f&#8221;S3\u6876&#8221;\u6216&#8221;Terraform\u4e91&#8221;\u3002<br \/>\n\u65e0\u8bba\u5982\u4f55\uff0c\u7ba1\u7406\u8fdc\u7a0b\u7684\u4eba\u4f1a\u4f18\u5148\u8003\u8651\u8fdc\u7a0b\u8bbe\u7f6e\uff0c\u6240\u4ee5\u5373\u4f7f\u4f7f\u7528\u8fd9\u4e2a\u9009\u9879\u4e5f\u4f1a\u88ab\u5ffd\u7565\u3002<\/p>\n<h2>\u4f7f\u7528 Terraform \u6267\u884c\u5e76\u8f93\u51fa\u72b6\u6001\u5230\u6307\u5b9a\u8def\u5f84\uff1aterraform apply -state-out=path<\/h2>\n<p>\u5728\u4e0b\u56fe\u4e2d\uff0c\u53ef\u4ee5\u6307\u5b9a\u6839\u636e\u7b2c\u2461\u6b65\u540e\u521b\u5efa\/\u5220\u9664\u7684\u8d44\u6e90\u4fe1\u606f\u6765\u66f4\u65b0tfstate\u6587\u4ef6\u3002<br \/>\n\u5982\u679c\u6ca1\u6709\u7279\u522b\u6307\u5b9a\uff0c\u5c06\u66f4\u65b0\u4f7f\u7528-state\u6307\u5b9a\u7684\u6587\u4ef6\u3002<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u2460\u3067\u8aad\u307f\u8fbc\u3080tfstate\u30d5\u30a1\u30a4\u30eb<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\u2460\u3084\u2461\u306e\u5f8c\u306b\u66f4\u65b0\u3059\u308btfstate\u30d5\u30a1\u30a4\u30eb<\/ul>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d863d913a08637a6bbc21\/81-0.jpeg\" alt=\"undefined\" \/><\/div>\n<p>\u6211\u5df2\u521b\u5efa\u4e86\u4e00\u4e2a\u7528\u4e8e\u8bfb\u53d6\u7684\u6587\u4ef6\uff0c\u5e76\u786e\u8ba4\u4e86\u5176\u5185\u5bb9\u3002<\/p>\n<pre class=\"post-pre\"><code>$ tree\r\n.\r\n\u251c\u2500\u2500 ec2.tf\r\n\u2514\u2500\u2500 state.tfstate\r\n$ cat state.tfstate\r\n<\/code><\/pre>\n<p>\u7136\u540e\uff0c\u6211\u5c1d\u8bd5\u52a0\u8f7d\u5e76\u66f4\u65b0\u4e00\u4e2a\u7279\u5b9a\u7684 state.tfstate \u6587\u4ef6\uff0c\u540c\u65f6\u6307\u5b9a\u4e86\u53e6\u4e00\u4e2a\u6587\u4ef6\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">$<\/span> terraform apply <span class=\"nt\">--auto-approve<\/span> <span class=\"nt\">-state<\/span><span class=\"o\">=<\/span>state.tfstate <span class=\"nt\">-state-out<\/span><span class=\"o\">=<\/span>newstate.tfstate\r\n<\/code><\/pre>\n<p>\u65e0\u4e8b\u53d1\u751f\uff0cstate.tfstate \u6ca1\u6709\u88ab\u66f4\u65b0\uff0c\u800c newstate.tfstate \u88ab\u6210\u529f\u751f\u6210\u3002<\/p>\n<pre class=\"post-pre\"><code>$ tree\r\n.\r\n\u251c\u2500\u2500 ec2.tf\r\n\u251c\u2500\u2500 state.tfstate\r\n\u2514\u2500\u2500 newstate.tfstate\r\n$ cat state.tfstate\r\n$ cat new state.tfstate\r\n<\/code><\/pre>\n<h2>\u5e94\u7528terraform -target=resource<\/h2>\n<p>\u4f60\u53ef\u4ee5\u9009\u62e9\u7279\u5b9a\u7684\u8d44\u6e90\u8fdb\u884c\u6267\u884c\u3002<\/p>\n<p>\u6211\u4f1a\u51c6\u5907\u4e24\u4e2a\u8d44\u6e90\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"err\">:<\/span><span class=\"nx\">ec2<\/span><span class=\"err\">.<\/span><span class=\"nx\">tf<\/span>\r\n<span class=\"k\">resource<\/span> <span class=\"s2\">\"aws_instance\"<\/span> <span class=\"s2\">\"ec2_instance_t2\"<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"nx\">ami<\/span>           <span class=\"p\">=<\/span> <span class=\"s2\">\"ami-0cc75a8978fbbc969\"<\/span>\r\n  <span class=\"nx\">instance_type<\/span> <span class=\"p\">=<\/span> <span class=\"s2\">\"t2.micro\"<\/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=\"s2\">\"qiita_example\"<\/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_instance\"<\/span> <span class=\"s2\">\"ec2_instance_t3\"<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"nx\">ami<\/span>           <span class=\"p\">=<\/span> <span class=\"s2\">\"ami-0cc75a8978fbbc969\"<\/span>\r\n  <span class=\"nx\">instance_type<\/span> <span class=\"p\">=<\/span> <span class=\"s2\">\"t3.micro\"<\/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=\"s2\">\"qiita_example\"<\/span>\r\n  <span class=\"p\">}<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<p>\u7136\u540e\uff0c\u53ea\u9009\u62e9\u4e00\u4e2a\u76ee\u6807\u8fdb\u884c\u8bbe\u5b9a\u5e76\u5e94\u7528\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">$<\/span> terraform apply <span class=\"nt\">-target<\/span><span class=\"o\">=<\/span>aws_instance.ec2_instance_t2\r\n<span class=\"go\">\u2026\r\nApply complete! Resources: 0 added, 1 changed, 0 destroyed.\r\n<\/span><\/code><\/pre>\n<p>\u7531\u4e8e\u6307\u5b9a\u7279\u5b9a\u8d44\u6e90\u5e76\u4e0d\u662f\u65e5\u5e38\u4f7f\u7528\u7684\u529f\u80fd\uff0c\u56e0\u6b64\u4f1a\u51fa\u73b0\u4e24\u4e2a\u8b66\u544a\u3002<br \/>\n\u8fd9\u662f\u5728\u67d0\u79cd\u539f\u56e0\u4e0b\u4f7f\u7528\u7684\u529f\u80fd\u3002<\/p>\n<h2>\u5bf9\u4e8e\u82f1\u6587\u539f\u6587\u4e2d\u7684 `terraform apply -var &#8216;foo=bar&#8217;` \u7684\u4e2d\u6587\u91ca\u4e49\u53ef\u4ee5\u662f\uff1a\u4f7f\u7528 `terraform apply` \u547d\u4ee4\uff0c\u5e76\u4f7f\u7528\u53d8\u91cf `foo` \u7684\u503c\u8bbe\u4e3a `bar`\u3002<\/h2>\n<p>\u60a8\u53ef\u4ee5\u5728\u547d\u4ee4\u6267\u884c\u65f6\u8986\u76d6\u53d8\u91cf\u3002\u8be6\u89c1https:\/\/www.terraform.io\/docs\/commands\/apply.html#var-39-foo-bar-39<\/p>\n<pre class=\"post-pre\"><code><span class=\"err\">:<\/span><span class=\"nx\">ec2<\/span><span class=\"err\">.<\/span><span class=\"nx\">tf<\/span>\r\n<span class=\"c1\"># \u672a\u5b9a\u7fa9\u306e\u5909\u6570<\/span>\r\n<span class=\"k\">variable<\/span> <span class=\"s2\">\"example_instance_type\"<\/span> <span class=\"p\">{}<\/span>\r\n\r\n<span class=\"c1\"># instance_type\u3067\u5909\u6570\u3092\u4f7f\u7528<\/span>\r\n<span class=\"k\">resource<\/span> <span class=\"s2\">\"aws_instance\"<\/span> <span class=\"s2\">\"ec2_instance\"<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"nx\">ami<\/span>           <span class=\"p\">=<\/span> <span class=\"s2\">\"ami-0cc75a8978fbbc969\"<\/span>\r\n  <span class=\"nx\">instance_type<\/span> <span class=\"p\">=<\/span> <span class=\"kd\">var<\/span><span class=\"p\">.<\/span><span class=\"nx\">example_instance_type<\/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=\"s2\">\"qiita_example\"<\/span>\r\n  <span class=\"p\">}<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<p>\u4f60\u53ef\u4ee5\u50cf\u8fd9\u6837\u8986\u76d6 example_instance_type \u53d8\u91cf\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">$<\/span> terraform apply <span class=\"nt\">-var<\/span> <span class=\"s1\">'example_instance_type=t2.micro'<\/span>\r\n<\/code><\/pre>\n<p>\u4f3c\u4e4e\u8fd8\u6709\u5176\u4ed6\u8bb8\u591a\u5199\u6cd5\u3002<\/p>\n<h2>\u4f7f\u7528`terraform apply -var-file=foo`\u547d\u4ee4\u5e94\u7528\u6b64\u914d\u7f6e\u3002<\/h2>\n<p>\u53ef\u4ee5\u6307\u5b9a\u4e00\u4e2a\u5b9a\u4e49\u4e86\u53d8\u91cf\u7684 tfvars \u6587\u4ef6\u3002<br \/>\nhttps:\/\/www.terraform.io\/docs\/commands\/apply.html#var-file-foo<\/p>\n<pre class=\"post-pre\"><code><span class=\"c1\"># \u672a\u5b9a\u7fa9\u306e\u5909\u6570<\/span>\r\n<span class=\"k\">variable<\/span> <span class=\"s2\">\"example_instance_type\"<\/span> <span class=\"p\">{}<\/span>\r\n\r\n<span class=\"c1\"># instance_type\u3067\u5909\u6570\u3092\u4f7f\u7528<\/span>\r\n<span class=\"k\">resource<\/span> <span class=\"s2\">\"aws_instance\"<\/span> <span class=\"s2\">\"ec2_instance\"<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"nx\">ami<\/span>           <span class=\"p\">=<\/span> <span class=\"s2\">\"ami-0cc75a8978fbbc969\"<\/span>\r\n  <span class=\"nx\">instance_type<\/span> <span class=\"p\">=<\/span> <span class=\"kd\">var<\/span><span class=\"p\">.<\/span><span class=\"nx\">example_instance_type<\/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=\"s2\">\"qiita_example\"<\/span>\r\n  <span class=\"p\">}<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<p>\u53d8\u91cf\u5b9a\u4e49\u6587\u4ef6\u5c06\u53c2\u8003\u6b64\u94fe\u63a5\uff1ahttps:\/\/www.terraform.io\/docs\/configuration\/variables.html#variable-definitions-tfvars-files\u3002<\/p>\n<pre class=\"post-pre\"><code>example_instance_type = \"t2.micro\"\r\n<\/code><\/pre>\n<p>\u6307\u5b9a\u6587\u4ef6\u5e76\u6267\u884c\u3002\u8fd9\u6837\u53ef\u4ee5\u5c06\u53d8\u91cf\u63d0\u53d6\u5230\u6587\u4ef6\u4e2d\uff0c\u770b\u8d77\u6765\u5f88\u65b9\u4fbf\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">$<\/span> terraform apply <span class=\"nt\">-var-file<\/span><span class=\"o\">=<\/span>testing.tfvars\r\n<\/code><\/pre>\n<h1>\u571f\u5730\u9020\u666f\u63a7\u5236\u53f0<\/h1>\n<p>\u4ee5\u4e0b\u6709\u4e24\u79cd\u9009\u62e9\u53ef\u4ee5\u505a\u5230\u3002<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u3059\u3067\u306b\u30ea\u30bd\u30fc\u30b9\u304c\u4f5c\u6210\u3055\u308c\u3066\u3044\u308b\u5834\u5408\u306e tfstate \u306e\u78ba\u8a8d<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\u7d44\u307f\u8fbc\u307f\u95a2\u6570\u306e\u30c6\u30b9\u30c8<\/ul>\n<p>\u5f53\u8981\u7ed3\u675f\u65f6\uff0c\u53ef\u4ee5\u4f7f\u7528ctrl + C\u6216ctrl + D\u3002<br \/>\n\u53ef\u4ee5\u6309\u7167terraform console [options] [dir-or-plan]\u7684\u65b9\u5f0f\u4f7f\u7528\u3002<\/p>\n<p>\u5173\u4e8e\u7528\u6cd5, \u6253\u5f00 terraform \u63a7\u5236\u53f0\u540e\uff0c\u60a8\u53ef\u4ee5\u67e5\u770b tfstate \u4e2d\u4efb\u610f\u7684\u503c\u3002<br \/>\n\u6240\u4ee5\uff0c\u4f8b\u5982\uff0c\u5982\u679c\u60a8\u60f3\u77e5\u9053 &#8220;EC2\u5b9e\u4f8b\u7684\u6807\u7b7e&#8221;\uff0c\u53ea\u9700\u952e\u5165 aws_instance.ec2_instance_t2.tags \u5e76\u56de\u8f66\u5373\u53ef\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">$<\/span> terraform console\r\n<span class=\"gp\">&gt;<\/span> aws_instance.ec2_instance_t2.tags\r\n<span class=\"go\">{\r\n  \"Name\" = \"qiita_example\"\r\n}\r\n<\/span><\/code><\/pre>\n<p>\u6709\u5173\u5d4c\u5165\u5f0f\u51fd\u6570\u7684\u6d4b\u8bd5\u5982\u4e0b\u6240\u793a\u3002<br \/>\n\u6211\u8ba4\u4e3a\u5b98\u65b9\u4f1a\u8be6\u7ec6\u4ecb\u7ecd\u6bcf\u4e2a\u51fd\u6570\u7684\u793a\u4f8b\uff0c\u4f8b\u5982\u4f7f\u7528file\u51fd\u6570\u7684\u60c5\u51b5\u53ef\u4ee5\u50cf\u8fd9\u6837\u4f7f\u7528\u3002<br \/>\nhttps:\/\/www.terraform.io\/docs\/configuration\/functions\/file.html<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">$<\/span> terraform console\r\n<span class=\"gp\">&gt;<\/span> file<span class=\"o\">(<\/span><span class=\"s2\">\"hello.txt\"<\/span><span class=\"o\">)<\/span>\r\n<span class=\"go\">Hello World!\r\n<\/span><\/code><\/pre>\n<p>\u5728\u6211\u4eec\u60f3\u8981\u9a8c\u8bc1\u5982\u4f55\u8fdb\u884c\u64cd\u4f5c\u4e4b\u524d\u4f7f\u7528\u5b83\u4f3c\u4e4e\u662f\u4e2a\u4e0d\u9519\u7684\u9009\u62e9\u3002<\/p>\n<p>\u53e6\u5916\uff0c\u7a0d\u5fae\u504f\u79bb\u4e3b\u9898\uff0c\u4e0d\u8fc7\u5d4c\u5165\u51fd\u6570\u662f\u7528\u8fd9\u79cd\u65b9\u5f0f\u6765\u4f7f\u7528\u7684\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"k\">resource<\/span> <span class=\"s2\">\"aws_instance\"<\/span> <span class=\"s2\">\"ec2_instance_t2\"<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"nx\">ami<\/span>           <span class=\"p\">=<\/span> <span class=\"s2\">\"ami-0cc75a8978fbbc969\"<\/span>\r\n  <span class=\"nx\">instance_type<\/span> <span class=\"p\">=<\/span> <span class=\"s2\">\"t2.micro\"<\/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=\"s2\">\"qiita_example\"<\/span>\r\n  <span class=\"p\">}<\/span>\r\n<span class=\"p\">}<\/span>\r\n\r\n<span class=\"k\">output<\/span> <span class=\"s2\">\"hello\"<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"nx\">value<\/span> <span class=\"p\">=<\/span> <span class=\"nx\">file<\/span><span class=\"p\">(<\/span><span class=\"s2\">\"hello.txt\"<\/span><span class=\"p\">)<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code>Hello\u3000World\uff01\r\n<\/code><\/pre>\n<h2>\u63a7\u5236\u53f0\u9009\u9879\u5217\u8868<\/h2>\n<pre class=\"post-pre\"><code><span class=\"gp\">$<\/span> terraform console <span class=\"nt\">-h<\/span>\r\n<\/code><\/pre>\n<div>\n<div class=\"post-table\">\u30aa\u30d7\u30b7\u30e7\u30f3\u5185\u5bb9-state=path<code>tfstate<\/code> \u30d5\u30a1\u30a4\u30eb\u306e\u30d1\u30b9\u3092\u6307\u5b9a\u3059\u308b-var &#8216;foo=bar&#8217;\u5909\u6570\u3092\u30b3\u30de\u30f3\u30c9\u5b9f\u884c\u6642\u306b\u4e0a\u66f8\u304d\u3059\u308b-var-file=foo\u5909\u6570\u3092\u5b9a\u7fa9\u3057\u305f <code>tfvars<\/code> \u30d5\u30a1\u30a4\u30eb\u3092\u6307\u5b9a\u3059\u308b<\/div>\n<\/div>\n<p>\u7531\u4e8e\u9009\u9879\u4e0e\u201capply\u201d\u76f8\u540c\uff0c\u56e0\u6b64\u5c06\u7701\u7565\u3002<\/p>\n<h1>\u9500\u6bc1terraform<\/h1>\n<p>\u867d\u7136\u7b80\u5355\uff0c\u4f46\u53ef\u4ee5\u5220\u9664\u4e91\u4e0a\u7684\u8d44\u6e90\u3002<\/p>\n<h2>\u6bc1\u706d\u9009\u9879\u5217\u8868<\/h2>\n<pre class=\"post-pre\"><code><span class=\"gp\">$<\/span> terraform destroy <span class=\"nt\">-h<\/span>\r\n<\/code><\/pre>\n<div>\n<div class=\"post-table\">\u30aa\u30d7\u30b7\u30e7\u30f3\u5185\u5bb9-backup=path\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u30d5\u30a1\u30a4\u30eb <code>terraform.tfstate.backup<\/code> \u306e\u30d1\u30b9\u3092\u6307\u5b9a\u3059\u308b-auto-approve\u524a\u9664\u4e88\u5b9a\u306e\u30ea\u30bd\u30fc\u30b9\u8868\u793a\u3084\u5b9f\u884c\u78ba\u8a8d <code>yes<\/code> \u3092\u7701\u7565\u3059\u308b-force\u975e\u63a8\u5968\u3002 <code>-auto-approve<\/code> \u3068\u540c\u69d8\u306b\u30ea\u30bd\u30fc\u30b9\u306e\u524a\u9664\u3092\u884c\u3048\u308b-lock=true<code>tfstate<\/code> \u30d5\u30a1\u30a4\u30eb\u3092\u30ed\u30c3\u30af\u3059\u308b\uff08\u307e\u305f\u306f\u3057\u306a\u3044\uff09\u3088\u3046\u306b\u6307\u5b9a\u3059\u308b-lock-timeout=0s<code>tfstate<\/code> \u30d5\u30a1\u30a4\u30eb\u306e\u30ed\u30c3\u30af\u304c\u5931\u6557\u3057\u305f\u5834\u5408\u306e\u30ea\u30c8\u30e9\u30a4\u307e\u3067\u306e\u6642\u9593\u3092\u6307\u5b9a\u3059\u308b-no-color\u5b9f\u884c\u4e2d\u306e\u30a2\u30a6\u30c8\u30d7\u30c3\u30c8\u3092\u8272\u306a\u3057\u3067\u8868\u793a\u3055\u305b\u308b-parallelism=n\u4e26\u5217\u3067\u5b9f\u884c\u3059\u308b\u30ea\u30bd\u30fc\u30b9\u6570\u3092\u6307\u5b9a\u3059\u308b-refresh=true\u5b9f\u884c\u524d\u306b <code>tfstate<\/code> \u30d5\u30a1\u30a4\u30eb\u3092\u66f4\u65b0\u3059\u308b\u304b\u3069\u3046\u304b\u3092\u6307\u5b9a\u3059\u308b-state=path<code>tfstate<\/code> \u30d5\u30a1\u30a4\u30eb\u306e\u30d1\u30b9\u3092\u6307\u5b9a\u3059\u308b-state-out=path\u66f4\u65b0\u3059\u308b <code>tfstate<\/code> \u30d5\u30a1\u30a4\u30eb\u3092\u6307\u5b9a\u3059\u308b\u3000\u203b <code>-state<\/code> \u306f\u8aad\u307f\u8fbc\u3080\uff06\u66f4\u65b0\u3059\u308b\u30d5\u30a1\u30a4\u30eb-target=resource\u3069\u306e\u30ea\u30bd\u30fc\u30b9\u3092\u524a\u9664\u3059\u308b\u304b\u3092\u6307\u5b9a\u3059\u308b-var &#8216;foo=bar&#8217;\u5909\u6570\u3092\u30b3\u30de\u30f3\u30c9\u5b9f\u884c\u6642\u306b\u4e0a\u66f8\u304d\u3059\u308b-var-file=foo\u5909\u6570\u3092\u5b9a\u7fa9\u3057\u305f <code>tfvars<\/code> \u30d5\u30a1\u30a4\u30eb\u3092\u6307\u5b9a\u3059\u308b<\/div>\n<\/div>\n<p>\u65b0\u7684\u662f\u529b\u91cf\u5427\u3002<\/p>\n<h2>\u5f3a\u5236\u6267\u884c terraform \u9500\u6bc1<\/h2>\n<p>\u4e0e&#8221;auto-approve&#8221;\u76f8\u4f3c\uff0c\u53ef\u4ee5\u5feb\u901f\u5220\u9664\u8d44\u6e90\u3002<br \/>\n\u7136\u800c\uff0c\u5b98\u65b9\u5e76\u4e0d\u63a8\u8350\u4f7f\u7528\u8be5\u529f\u80fd\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">$<\/span> terraform destroy <span class=\"nt\">-force<\/span>\r\n<span class=\"go\">aws_instance.ec2_instance_t2: Refreshing state... [id=i-056b9686bdb0b7a24]\r\naws_instance.ec2_instance_t2: Destroying... [id=i-056b9686bdb0b7a24]\r\naws_instance.ec2_instance_t2: Still destroying... [id=i-056b9686bdb0b7a24, 10s elapsed]\r\naws_instance.ec2_instance_t2: Still destroying... [id=i-056b9686bdb0b7a24, 20s elapsed]\r\naws_instance.ec2_instance_t2: Destruction complete after 21s\r\n\r\nDestroy complete! Resources: 1 destroyed.\r\n<\/span><\/code><\/pre>\n<p>\u987a\u4fbf\u63d0\u4e00\u4e0b\uff0c\u6211\u8bd5\u4e86\u4e00\u4e0b\u8fd9\u4e2a\u9009\u9879\uff0c\u5b83\u662f\u4e0d\u662f\u53ef\u4ee5\u50cf force_destroy \u4e00\u6837\u5f3a\u5236\u5220\u9664 S3 \u5b58\u50a8\u6876\u4e2d\u7684\u5bf9\u8c61\uff0c\u4f46\u7ed3\u679c\u5b8c\u5168\u662f\u53e6\u4e00\u4e2a\u529f\u80fd\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"k\">resource<\/span> <span class=\"s2\">\"aws_s3_bucket\"<\/span> <span class=\"s2\">\"takkii_s3_bucket\"<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"nx\">bucket<\/span>        <span class=\"p\">=<\/span> <span class=\"s2\">\"alb-log-pragmatic-terraform-takkii1010\"<\/span>\r\n  <span class=\"nx\">force_destroy<\/span> <span class=\"p\">=<\/span> <span class=\"kc\">false<\/span>\r\n<span class=\"err\">\u3000\u2026<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code><span class=\"gp\">$<\/span> terraform destroy <span class=\"nt\">-force<\/span>\r\n<span class=\"go\">aws_s3_bucket.takkii_s3_bucket: Refreshing state... [id=alb-log-pragmatic-terraform-takkii1010]\r\naws_s3_bucket.takkii_s3_bucket: Destroying... [id=alb-log-pragmatic-terraform-takkii1010]\r\n\r\nError: error deleting S3 Bucket (alb-log-pragmatic-terraform-takkii1010): BucketNotEmpty: The bucket you tried to delete is not empty. You must delete all versions in the bucket.\r\n    status code: 409, request id: 20DD64E032887A3D, host id: xxx=\r\n<\/span><\/code><\/pre>\n<h1>\u571f\u5730\u6574\u6cbb\u73af\u5883<\/h1>\n<p>\u8fd9\u4e2a\u529f\u80fd\u4f3c\u4e4e\u5c06\u5728\u672a\u6765\u88ab\u5220\u9664\uff0c\u5b83\u5efa\u8bae\u4f7f\u7528 terraform workspace \u4f5c\u4e3a\u66ff\u4ee3\u3002<br \/>\n\u56e0\u6b64\uff0c\u6211\u6253\u7b97\u5728 terraform workspace \u4e2d\u5c1d\u8bd5\u4f7f\u7528\u8be6\u7ec6\u4fe1\u606f\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">$<\/span> terraform <span class=\"nb\">env<\/span>\r\n<span class=\"go\">Warning: the \"terraform env\" family of commands is deprecated.\r\n\r\n\"Workspace\" is now the preferred term for what earlier Terraform versions\r\ncalled \"environment\", to reduce ambiguity caused by the latter term colliding\r\nwith other concepts.\r\n\r\nThe \"terraform workspace\" commands should be used instead. \"terraform env\"\r\nwill be removed in a future Terraform version.\r\n\r\nUsage: terraform workspace\r\n\r\n  new, list, show, select and delete Terraform workspaces.\r\n<\/span><\/code><\/pre>\n<h1>\u683c\u5f0f\u5316Terraform\u4ee3\u7801<\/h1>\n<p>\u8fd9\u662f\u4e00\u4e2a\u80fd\u591f\u683c\u5f0f\u5316Terraform\u914d\u7f6e\u6587\u4ef6\u7684\u547d\u4ee4\u3002JSON\u683c\u5f0f\u4e0d\u88ab\u652f\u6301\u3002<br \/>\n\u6b64\u5916\uff0c\u7531\u4e8eTerraform\u6bcf\u4e2a\u7248\u672c\u7684\u683c\u5f0f\u7565\u6709\u4e0d\u540c\uff0c\u5efa\u8bae\u5728\u5347\u7ea7\u7248\u672c\u540e\u91cd\u65b0\u683c\u5f0f\u5316\u6240\u6709\u6587\u4ef6\u4ee5\u7edf\u4e00\u683c\u5f0f\u3002<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u5bfe\u8c61<\/ul>\n<\/li>\n<\/ul>\n<p>.tf<br \/>\n.tfvars<\/p>\n<p>\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u5bfe\u8c61\u5916<\/p>\n<p>.tf.json<br \/>\n.tfvars.json<\/p>\n<h2>fmt \u53ef\u9009\u5217\u8868<\/h2>\n<pre class=\"post-pre\"><code><span class=\"gp\">$<\/span> terraform <span class=\"nb\">fmt<\/span> <span class=\"nt\">-h<\/span>\r\n<\/code><\/pre>\n<div>\n<div class=\"post-table\">\u30aa\u30d7\u30b7\u30e7\u30f3\u5185\u5bb9-list=false\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3092\u304b\u3051\u305f\u30d5\u30a1\u30a4\u30eb\u4e00\u89a7\u3092\u8868\u793a\u3059\u308b\u304b-write=false\u30d5\u30a1\u30a4\u30eb\u306e\u4e0a\u66f8\u304d\u3092\u3059\u308b\u304b\u3069\u3046\u304b\uff08\u4e0b\u306e <code>-check<\/code> \u3068\u307b\u307c\u540c\u3058\uff09-diff\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u5dee\u5206\u3092\u307f\u308b-check\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u306e\u4fee\u6b63\u304c\u5165\u308b\u30d5\u30a1\u30a4\u30eb\u304c\u3042\u308b\u304b\u3069\u3046\u304b\u3092\u30c1\u30a7\u30c3\u30af-no-color\u5b9f\u884c\u4e2d\u306e\u30a2\u30a6\u30c8\u30d7\u30c3\u30c8\u3092\u8272\u306a\u3057\u3067\u8868\u793a\u3055\u305b\u308b \u203b\u516c\u5f0f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306b\u306f\u8a18\u8f09\u306a\u3044\u3067\u3059\u306d-recursive\u30b5\u30d6\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u542b\u3081\u3066\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3092\u304b\u3051\u308b<\/div>\n<\/div>\n<h2>\u4f7f\u7528\u547d\u4ee4&#8221;terraform fmt -list=false&#8221;\u8fdb\u884c\u683c\u5f0f\u5316\uff0c\u4e0d\u663e\u793a\u5217\u8868\u3002<\/h2>\n<p>\u5982\u679c\u6ca1\u6709\u9009\u9879\uff0c\u5b83\u4f1a\u8f93\u51fa\u683c\u5f0f\u5316\u7684\u6587\u4ef6\u5217\u8868\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">$<\/span> terraform <span class=\"nb\">fmt<\/span>\r\n<span class=\"go\">ec2_first.tf\r\nec2_second.tf\r\n<\/span><\/code><\/pre>\n<p>\u6240\u4ee5\uff0c\u4f7f\u7528\u6b64\u9009\u9879\u53ef\u4ee5\u9690\u85cf\u6587\u4ef6\u5217\u8868\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">$<\/span> terraform <span class=\"nb\">fmt<\/span> <span class=\"nt\">-list<\/span><span class=\"o\">=<\/span><span class=\"nb\">false<\/span>\r\n<span class=\"gp\">$<\/span> terraform <span class=\"nb\">fmt<\/span> <span class=\"nt\">-list<\/span><span class=\"o\">=<\/span><span class=\"nb\">true<\/span>\r\n<span class=\"go\">ec2_first.tf\r\nec2_second.tf\r\n<\/span><\/code><\/pre>\n<h2>terraform fmt -write=false \u53ef\u4ee5\u6539\u5199\u4e3a\uff1aterraform\u683c\u5f0f\u5316 -write=false<\/h2>\n<p>\u60a8\u53ef\u4ee5\u9009\u62e9\u662f\u5426\u8986\u76d6\u76ee\u6807\u683c\u5f0f\u7684\u6587\u4ef6\u3002<\/p>\n<p>\u5982\u679c\u5c06\u8bbe\u7f6e\u4e3a\u4e0d\u8986\u76d6\uff0c\u5219\u53ea\u4f1a\u5728\u63a7\u5236\u53f0\u4e0a\u663e\u793a\u683c\u5f0f\u9519\u8bef\u7684\u6587\u4ef6\u3002\u6587\u4ef6\u5f53\u7136\u4e0d\u4f1a\u88ab\u8986\u76d6\uff0c\u53ea\u4f1a\u544a\u77e5\u76ee\u6807\u6587\u4ef6\u7684\u5b58\u5728\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">$<\/span> terraform <span class=\"nb\">fmt<\/span> <span class=\"nt\">-write<\/span><span class=\"o\">=<\/span><span class=\"nb\">false<\/span>\r\n<span class=\"go\">ec2_first.tf\r\n<\/span><\/code><\/pre>\n<p>terraform fmt -check \u548c\u7ed3\u679c\u770b\u8d77\u6765\u4e00\u6837\u3002<\/p>\n<h2>terraform \u683c\u5f0f\u5316 &#8211; \u5dee\u5f02\u6027<\/h2>\n<p>\u60a8\u53ef\u4ee5\u67e5\u770b\u683c\u5f0f\u4e4b\u95f4\u7684\u5dee\u5f02\u3002\u8bf7\u8bbf\u95ee\u6b64\u94fe\u63a5\u4e86\u89e3\u66f4\u591a\u4fe1\u606f\uff1a<br \/>\nhttps:\/\/www.terraform.io\/docs\/commands\/fmt.html#diff<\/p>\n<p>\u8fd9\u4e2a\u53ef\u4ee5\u7528\u6b63\u8d1f\u6570\u6765\u663e\u793a\u5dee\u5f02\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">$<\/span> terraform <span class=\"nb\">fmt<\/span> <span class=\"nt\">-diff<\/span>\r\n<span class=\"go\">ec2_first.tf\r\n--- old\/ec2_first.tf\r\n+++ new\/ec2_first.tf\r\n@@ -1,8 +1,8 @@\r\n resource \"aws_instance\" \"ec2_instance_t2\" {\r\n-  ami   = \"ami-0cc75a8978fbbc969\"\r\n+  ami           = \"ami-0cc75a8978fbbc969\"\r\n   instance_type = \"t2.micro\"\r\n\r\n-    tags = {\r\n-    Name =  \"qiita_example\"\r\n+  tags = {\r\n+    Name = \"qiita_example\"\r\n   }\r\n }\r\n<\/span><\/code><\/pre>\n<h2>terraform fmt -check \u53ef\u4ee5\u8fdb\u884c\u683c\u5f0f\u68c0\u67e5\u3002<\/h2>\n<p>\u60a8\u53ef\u4ee5\u68c0\u67e5\u662f\u5426\u5b58\u5728\u9700\u8981\u4fee\u6b63\u683c\u5f0f\u7684\u6587\u4ef6\u3002\u8bf7\u6ce8\u610f\uff0c\u8fd9\u53ea\u662f\u4e00\u4e2a\u68c0\u67e5\uff0c\u4e0d\u4f1a\u6267\u884c\u4efb\u4f55\u4fee\u6b63\u64cd\u4f5c\u3002<br \/>\nhttps:\/\/www.terraform.io\/docs\/commands\/fmt.html#check<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">$<\/span> terraform <span class=\"nb\">fmt<\/span> <span class=\"nt\">-check<\/span>\r\n<span class=\"go\">ec2_first.tf\r\n<\/span><\/code><\/pre>\n<h2>\u6267\u884c `terraform fmt -no-color` \u547d\u4ee4\u3002<\/h2>\n<p>\u56e0\u4e3a\u4e0e&#8221;terraform apply -no-color&#8221;\u76f8\u540c\uff0c\u6240\u4ee5\u7701\u7565\u3002<\/p>\n<h2>\u9012\u5f52\u5730\u5bf9Terraform\u8fdb\u884c\u683c\u5f0f\u5316\u3002<\/h2>\n<p>\u5982\u679c\u5b58\u5728\u5b50\u76ee\u5f55\uff0c\u5b83\u4f1a\u4e3a\u60a8\u6574\u4f53\u8fdb\u884c\u683c\u5f0f\u5316\u3002<br \/>\n\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0c\u4ec5\u6307\u5b9a\u7684\u76ee\u5f55\u548c\u5f53\u524d\u76ee\u5f55\u662f\u9002\u7528\u7684\uff0c\u56e0\u6b64\u5f53\u60a8\u5e0c\u671b\u4e00\u6b21\u6027\u6574\u4f53\u8fdb\u884c\u64cd\u4f5c\u65f6\uff0c\u8fd9\u5c06\u975e\u5e38\u65b9\u4fbf\u3002<br \/>\nhttps:\/\/www.terraform.io\/docs\/commands\/fmt.html#recursive<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">$<\/span> terraform <span class=\"nb\">fmt<\/span> <span class=\"nt\">-recursive<\/span>\r\n<\/code><\/pre>\n<h1>\u4f7f\u7528terraform\u83b7\u53d6<\/h1>\n<p>\u8fd9\u4e2a\u547d\u4ee4\u4f1a\u5e2e\u4f60\u4e0b\u8f7d\u4f4d\u4e8e\u6839\u76ee\u5f55\u4e0b\u7684\u6a21\u5757\u3002<br \/>\nhttps:\/\/www.terraform.io\/docs\/commands\/get.html<\/p>\n<p>Terraform\u7684\u6a21\u5757\u53ef\u4ee5\u901a\u8fc7\u6267\u884cterraform init\u548cterraform get\u6765\u9884\u5148\u83b7\u53d6\u6a21\u5757\uff0c\u4ee5\u4fbf\u4f7f\u7528\uff0c\u8fd9\u5c31\u662f\u4e3a\u6b64\u63d0\u4f9b\u7684\u529f\u80fd\u3002<\/p>\n<p>\u5047\u8bbe\u6211\u4eec\u4ee5\u8fd9\u6837\u7684\u7ed3\u6784\u4e3a\u4f8b\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">$<\/span> tree\r\n<span class=\"c\">.\r\n<\/span><span class=\"go\">\u251c\u2500\u2500 ec2\r\n\u2502\u00a0\u00a0 \u2514\u2500\u2500 main.tf\r\n\u251c\u2500\u2500 iam_role\r\n\u2502\u00a0\u00a0 \u2514\u2500\u2500 main.tf\r\n\u251c\u2500\u2500 main.tf\r\n\u251c\u2500\u2500 terraform.tfstate\r\n\u2514\u2500\u2500 terraform.tfstate.backup\r\n<\/span><\/code><\/pre>\n<p>\u5982\u679c\u6267\u884cterraform get\u547d\u4ee4\uff0c\u5b83\u4f1a\u8bfb\u53d6\u5b50\u76ee\u5f55\u4e2d\u7684\u6587\u4ef6\u3002<br \/>\n\u56e0\u6b64\uff0c\u4e4b\u540e\u6267\u884cterraform apply\u547d\u4ee4\u5c31\u53ef\u4ee5\u4e00\u6b21\u6027\u5b8c\u6210\u521b\u5efa\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">$<\/span> terraform get\r\n<span class=\"go\">- describe_regions_for_ec2 in iam_role\r\n- ec2_instance_t2 in ec2\r\n<\/span><\/code><\/pre>\n<p>\u53e6\u5916\uff0c\u5728get\u547d\u4ee4\u4e2d\uff0c\u4f3c\u4e4e\u4f1a\u5c06\u6a21\u5757\u4e0b\u8f7d\u5230.terraform\u6587\u4ef6\u5939\u4e2d\u3002<br \/>\n\u5728\u6267\u884cget\u547d\u4ee4\u540e\uff0c\u4f1a\u521b\u5efamodule\u6587\u4ef6\u5939\u548cmodules.json\u6587\u4ef6\u3002<\/p>\n<p>\u8fd9\u662f\u5185\u5bb9\u7684\u6837\u5b50\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">$<\/span> tree <span class=\"nt\">-a<\/span>\r\n<span class=\"c\">.\r\n<\/span><span class=\"go\">\u251c\u2500\u2500 .terraform\r\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 modules\r\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2514\u2500\u2500 modules.json\r\n\u2502\u00a0\u00a0 \u2514\u2500\u2500 plugins\r\n\u2502\u00a0\u00a0     \u251c\u2500\u2500 registry.terraform.io\r\n\u2026\r\n\r\n<\/span><span class=\"gp\">$<\/span> <span class=\"nb\">cat<\/span> .terraform\/modules\/modules.json \r\n<span class=\"go\">{\"Modules\":[{\"Key\":\"\",\"Source\":\"\",\"Dir\":\".\"},{\"Key\":\"describe_regions_for_ec2\",\"Source\":\".\/iam_role\",\"Dir\":\"iam_role\"},{\"Key\":\"ec2_instance_t2\",\"Source\":\".\/ec2\",\"Dir\":\"ec2\"}]}\r\n<\/span><\/code><\/pre>\n<h2>\u83b7\u53d6\u9009\u9879\u6e05\u5355<\/h2>\n<pre class=\"post-pre\"><code><span class=\"gp\">$<\/span> terraform get <span class=\"nt\">-h<\/span>\r\n<\/code><\/pre>\n<div>\n<div class=\"post-table\">\u30aa\u30d7\u30b7\u30e7\u30f3\u5185\u5bb9-update\u3059\u3067\u306b\u4e00\u5ea6\u8aad\u307f\u8fbc\u3093\u3060\u30e2\u30b8\u30e5\u30fc\u30eb\u306b\u66f4\u65b0\u304c\u306a\u3044\u304b\u30c1\u30a7\u30c3\u30af\u3057\u3001\u5909\u66f4\u304c\u3042\u308c\u3070\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b-no-color\u5b9f\u884c\u4e2d\u306e\u30a2\u30a6\u30c8\u30d7\u30c3\u30c8\u3092\u8272\u306a\u3057\u3067\u8868\u793a\u3055\u305b\u308b<\/div>\n<\/div>\n<h2>\u66f4\u65b0\u5e76\u83b7\u53d6terraform\u914d\u7f6e\u3002<\/h2>\n<p>\u5f53\u60a8\u68c0\u67e5\u5df2\u52a0\u8f7d\u7684\u6a21\u5757\u65f6\uff0c\u5b83\u4f1a\u4e3a\u60a8\u63d0\u4f9b\u66f4\u65b0\u5e76\u5b89\u88c5\u4efb\u4f55\u66f4\u6539\u3002<\/p>\n<p>\u6211\u5011\u5148\u5c0d\u525b\u525b\u5efa\u7acb\u7684\u6a21\u7d44\u505a\u4e00\u4e9b\u4fee\u6539\uff0c\u7136\u5f8c\u518d\u57f7\u884c\u770b\u770b\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">$<\/span> terraform get <span class=\"nt\">-update<\/span>\r\n<span class=\"go\">- describe_regions_for_ec2 in iam_role\r\n- ec2_instance_t2_micro in ec2_updated\r\n\r\n<\/span><span class=\"gp\">$<\/span> <span class=\"nb\">cat<\/span> .terraform\/modules\/modules.json \r\n<span class=\"go\">{\"Modules\":[{\"Key\":\"ec2_instance_t2_micro\",\"Source\":\".\/ec2\",\"Dir\":\"ec2\"},{\"Key\":\"\",\"Source\":\"\",\"Dir\":\".\"},{\"Key\":\"describe_regions_for_ec2\",\"Source\":\".\/iam_role\",\"Dir\":\"iam_role\"},{\"Key\":\"ec2_instance_t2\",\"Source\":\".\/ec2\",\"Dir\":\"ec2\"}]}\r\n<\/span><\/code><\/pre>\n<p>\u770b\u8d77\u6765\uff0cEC2\u5b9e\u4f8bt2\u5fae\u578b\u5df2\u6210\u529f\u5b89\u88c5\u3002\u4ece\u4e0a\u8ff0\u60c5\u51b5\u6765\u770b\uff0c\u5e76\u6ca1\u6709\u5220\u9664\u5148\u524d\u7684\u5b89\u88c5\u5185\u5bb9\uff0c\u5b83\u4ecd\u7136\u5b58\u5728\u3002<\/p>\n<h2>\u65e0\u9700\u989c\u8272\uff0c\u83b7\u53d6terraform<\/h2>\n<p>\u7531\u4e8e\u4e0e terraform apply -no-color \u76f8\u540c\uff0c\u56e0\u6b64\u7701\u7565\u3002<\/p>\n<h1>Terraform \u56fe\u793a<\/h1>\n<p>\u901a\u8fc7DOT\u683c\u5f0f\u53ef\u4ee5\u8f93\u51fa\u8d44\u6e90\u4e4b\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\u3002<br \/>\n\u6700\u7ec8\u53ef\u4ee5\u4f7f\u7528GraphViz\u7684dot\u547d\u4ee4\u5c06\u5176\u8868\u793a\u4e3a\u56fe\u3002<br \/>\nhttps:\/\/www.terraform.io\/docs\/commands\/graph.html<\/p>\n<p>\u53e6\u5916\uff0c\u4f3c\u4e4e\u5c06\u4ee5\u4e0b\u5f62\u5f0f\u79f0\u4e3aDOT\u5f62\u5f0f\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">$<\/span> terraform graph\r\n<span class=\"go\">digraph {\r\n    compound = \"true\"\r\n    newrank = \"true\"\r\n    subgraph \"root\" {\r\n        \"[root] aws_instance.ec2_instance_t2 (expand)\" [label = \"aws_instance.ec2_instance_t2\", shape = \"box\"]\r\n        \"[root] provider[\\\"registry.terraform.io\/hashicorp\/aws\\\"]\" [label = \"provider[\\\"registry.terraform.io\/hashicorp\/aws\\\"]\", shape = \"diamond\"]\r\n<\/span><span class=\"gp\">        \"[root] aws_instance.ec2_instance_t2 (expand)\" -&gt;<\/span> <span class=\"s2\">\"[root] provider[<\/span><span class=\"se\">\\\"<\/span><span class=\"s2\">registry.terraform.io\/hashicorp\/aws<\/span><span class=\"se\">\\\"<\/span><span class=\"s2\">]\"<\/span>\r\n<span class=\"gp\">        \"[root] meta.count-boundary (EachMode fixup)\" -&gt;<\/span> <span class=\"s2\">\"[root] aws_instance.ec2_instance_t2 (expand)\"<\/span>\r\n<span class=\"gp\">        \"[root] provider[\\\"registry.terraform.io\/hashicorp\/aws\\\"] (close)\" -&gt;<\/span> <span class=\"s2\">\"[root] aws_instance.ec2_instance_t2 (expand)\"<\/span>\r\n<span class=\"gp\">        \"[root] root\" -&gt;<\/span> <span class=\"s2\">\"[root] meta.count-boundary (EachMode fixup)\"<\/span>\r\n<span class=\"gp\">        \"[root] root\" -&gt;<\/span> <span class=\"s2\">\"[root] provider[<\/span><span class=\"se\">\\\"<\/span><span class=\"s2\">registry.terraform.io\/hashicorp\/aws<\/span><span class=\"se\">\\\"<\/span><span class=\"s2\">] (close)\"<\/span>\r\n<span class=\"go\">    }\r\n}\r\n<\/span><\/code><\/pre>\n<p>\u5229\u7528GraphViz\u7684dot\u547d\u4ee4\u5c06\u5176\u8f6c\u6362\u4e3a\u56fe\u5f62\u3002\u6211\u53c2\u8003\u4e86\u5b98\u65b9\u6307\u5357\uff0c\u5e76\u5c1d\u8bd5\u751f\u6210\u4e86\u4e00\u4e2ajpg\u6587\u4ef6\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">$<\/span> terraform graph | dot <span class=\"nt\">-Tjpg<\/span> <span class=\"o\">&gt;<\/span> graph.jpg\r\n<\/code><\/pre>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d863d913a08637a6bbc21\/197-0.jpeg\" alt=\"graph.jpg\" \/><\/div>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d863d913a08637a6bbc21\/198-0.jpeg\" alt=\"graph.jpg\" \/><\/div>\n<h2>\u56fe\u8868\u9009\u9879\u5217\u8868<\/h2>\n<pre class=\"post-pre\"><code><span class=\"gp\">$<\/span> terraform graph <span class=\"nt\">-h<\/span>\r\n<\/code><\/pre>\n<div>\n<div class=\"post-table\">\u30aa\u30d7\u30b7\u30e7\u30f3\u5185\u5bb9-draw-cycles\u4f9d\u5b58\u95a2\u4fc2\u306b\u5faa\u74b0\u304c\u3042\u3063\u305f\u5834\u5408\u3001\u5f37\u8abf\u8868\u793a\u304c\u3067\u304d\u308b-type=plan\u8868\u793a\u3059\u308b\u30b0\u30e9\u30d5\u306e\u30bf\u30a4\u30d7\u3092\u9078\u629e\u3067\u304d\u308b-module-depth=n\uff08\u975e\u63a8\u5968\uff09\u8868\u793a\u3059\u308bmodule\u306e\u6df1\u3055\u3092\u6307\u5b9a\u3059\u308b<\/div>\n<\/div>\n<h2>terraform graph-\u7ed8\u5236\u5faa\u73af<\/h2>\n<p>\u5982\u679c\u4f9d\u8d56\u5173\u7cfb\u5b58\u5728\u5faa\u73af\uff0c\u4f1a\u8fdb\u884c\u5f3a\u8c03\u663e\u793a\u3002<\/p>\n<p>\u9996\u5148\uff0c\u6211\u4eec\u4f1a\u521b\u5efa\u4e00\u4e2a\u5faa\u73af\u7684\u8d44\u6e90\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"k\">resource<\/span> <span class=\"s2\">\"aws_instance\"<\/span> <span class=\"s2\">\"ec2_instance_t2_A\"<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"nx\">ami<\/span>           <span class=\"p\">=<\/span> <span class=\"s2\">\"ami-0cc75a8978fbbc969\"<\/span>\r\n  <span class=\"nx\">instance_type<\/span> <span class=\"p\">=<\/span> <span class=\"p\">[<\/span> <span class=\"nx\">aws_instance<\/span><span class=\"p\">.<\/span><span class=\"nx\">ec2_instance_t2_B<\/span><span class=\"p\">.<\/span><span class=\"nx\">instance_type<\/span> <span class=\"p\">]<\/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=\"s2\">\"qiita_example\"<\/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_instance\"<\/span> <span class=\"s2\">\"ec2_instance_t2_B\"<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"nx\">ami<\/span>           <span class=\"p\">=<\/span> <span class=\"s2\">\"ami-0cc75a8978fbbc969\"<\/span>\r\n  <span class=\"nx\">instance_type<\/span> <span class=\"p\">=<\/span> <span class=\"p\">[<\/span> <span class=\"nx\">aws_instance<\/span><span class=\"p\">.<\/span><span class=\"nx\">ec2_instance_t2_A<\/span><span class=\"p\">.<\/span><span class=\"nx\">instance_type<\/span> <span class=\"p\">]<\/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=\"s2\">\"qiita_example\"<\/span>\r\n  <span class=\"p\">}<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code><span class=\"gp\">$<\/span> terraform graph <span class=\"nt\">-draw-cycles<\/span> | dot <span class=\"nt\">-Tjpg<\/span> <span class=\"o\">&gt;<\/span> graph.jpg\r\n<\/code><\/pre>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d863d913a08637a6bbc21\/207-0.jpeg\" alt=\"graph.jpg\" \/><\/div>\n<p>\u53e6\u5916\uff0c\u4f7f\u7528 terraform plan \u4e5f\u80fd\u68c0\u6d4b\u5230\u5faa\u73af\u4f9d\u8d56\u7684\u95ee\u9898\uff01\u867d\u7136\u5728\u5176\u4ed6\u65b9\u6cd5\u4e2d\u4e5f\u53ef\u4ee5\u8fdb\u884c\u68c0\u6d4b\uff0c\u4f46\u7528\u56fe\u8868\u66f4\u52a0\u76f4\u89c2\u6613\u61c2\u5462\u3002<\/p>\n<h2>terraform graph -type=plan \u7684\u4e2d\u6587\u91ca\u4e49\u662f\u4ec0\u4e48\uff1f<\/h2>\n<p>\u4f60\u53ef\u4ee5\u9009\u62e9\u8981\u663e\u793a\u7684\u56fe\u8868\u7c7b\u578b\u3002<\/p>\n<p>\u53ef\u4ee5\u9009\u62e9\u7684\u6709\u8ba1\u5212\uff0c\u8ba1\u5212\u9500\u6bc1\uff0c\u7533\u8bf7\uff0c\u9a8c\u8bc1\uff0c\u8f93\u5165\uff0c\u5237\u65b0\u8fd9\u516d\u4e2a\u9009\u9879\u3002<\/p>\n<p>\u9996\u5148\u521b\u5efa\u4e86\u4e00\u4e2a\u540d\u4e3aA\u7684\u5b9e\u4f8b\uff0c\u5e76\u5c06\u5176\u8f93\u51fa\u5230\u56fe\u8868\u4e2d\u3002<br \/>\n\u503c\u5f97\u6ce8\u610f\u7684\u662f\uff0c\u9ed8\u8ba4\u60c5\u51b5\u4e0b\u662f\u6ca1\u6709\u660e\u786e\u6307\u5b9a\u7c7b\u578b\u4e3a-plan\u7684\uff0c\u6240\u4ee5\u8fd9\u91cc\u6ca1\u6709\u660e\u786e\u6307\u5b9a\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">$<\/span> terraform graph | dot <span class=\"nt\">-Tjpg<\/span> <span class=\"o\">&gt;<\/span> graph.jpg\r\n<\/code><\/pre>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d863d913a08637a6bbc21\/214-0.jpeg\" alt=\"graph.jpg\" \/><\/div>\n<p>\u5728\u201ctype=plan-destroy\u201d\u64cd\u4f5c\u4e2d\uff0c\u8f93\u51fa\u4e86\u5c06\u8981\u88ab\u5220\u9664\u7684\u8d44\u6e90\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">$<\/span> terraform graph <span class=\"nt\">-type<\/span><span class=\"o\">=<\/span>plan-destroy | dot <span class=\"nt\">-Tjpg<\/span> <span class=\"o\">&gt;<\/span> graph.jpg\r\n<\/code><\/pre>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d863d913a08637a6bbc21\/217-0.jpeg\" alt=\"graph.jpg\" \/><\/div>\n<p>\u4f7f\u7528-type=refresh\u4f1a\u5bfc\u81f4meta.count-boundary\u6d88\u5931\u3002<br \/>\n\u867d\u7136\u5728\u5237\u65b0\u65f6\u663e\u793a\u4e86\u8d44\u6e90\uff0c\u4f46\u6211\u4e0d\u592a\u660e\u767d\u4e3a\u4ec0\u4e48\u4f1a\u6d88\u5931&#8230;<br \/>\nhttps:\/\/github.com\/hashicorp\/terraform\/issues\/20063<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">$<\/span> terraform graph <span class=\"nt\">-type<\/span><span class=\"o\">=<\/span>refresh | dot <span class=\"nt\">-Tjpg<\/span> <span class=\"o\">&gt;<\/span> graph.jpg\r\n<\/code><\/pre>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d863d913a08637a6bbc21\/220-0.jpeg\" alt=\"graph.jpg\" \/><\/div>\n<p>\u4f7f\u7528&#8221;type=apply&#8221;\u65f6\uff0c\u8d44\u6e90\u6d88\u5931\u4e86&#8230;\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">$<\/span> terraform graph <span class=\"nt\">-type<\/span><span class=\"o\">=<\/span>apply | dot <span class=\"nt\">-Tjpg<\/span> <span class=\"o\">&gt;<\/span> graph.jpg\r\n<\/code><\/pre>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d863d913a08637a6bbc21\/223-0.jpeg\" alt=\"graph.jpg\" \/><\/div>\n<p>\u4e0d\uff0c\u5bf9\u4e0d\u8d77\uff0c\u6211\u5bf9type\u7684\u4f7f\u7528\u65b9\u6cd5\u8fd8\u4e0d\u592a\u4e86\u89e3\u3002\u3002\u3002<br \/>\n\u6211\u611f\u89c9\u6211\u7684\u4f7f\u7528\u65b9\u5f0f\u662f\u4e0d\u6b63\u786e\u7684\u3002\u8fd9\u662f\u4e00\u4e2a\u4f5c\u4e1a\u5427\u3002\u3002\u3002<\/p>\n<h1>\u4f7f\u7528 Terraform \u5bfc\u5165<\/h1>\n<p>\u4f7f\u7528 Terraform \u4e4b\u5916\u7684\u65b9\u5f0f\u6765\u5bfc\u5165\u5e76\u83b7\u53d6\u5df2\u7ecf\u521b\u5efa\u7684\u8d44\u6e90\u3002<\/p>\n<p>\u4e4b\u524d\u4e00\u76f4\u7528\u624b\u5de5\u8a2d\u5b9a\uff0c\u4f46\u73fe\u5728\u8003\u616e\u8f49\u79fb\u5230Terraform\u6642\u53ef\u4ee5\u4f7f\u7528\u3002<\/p>\n<p>terraform import\u547d\u4ee4\u7684\u7528\u6cd5\u5982\u4e0b\uff1a[options]\u4e3a\u53ef\u9009\u9879\uff0c\u9700\u8981\u63d0\u4f9bADDRESS\u548cID\u8fd9\u4e24\u4e2a\u53c2\u6570\u3002<br \/>\nADDRESS\u4ee3\u8868\u8d44\u6e90\u540d\u79f0\uff0c\u53ef\u4ee5\u4f7f\u7528aws_instance.ec2_instance_t2\u6765\u8868\u793a\u3002<\/p>\n<p>\u5728\u63a7\u5236\u53f0\u4e0a\u968f\u610f\u521b\u5efaEC2\u5b9e\u4f8b\u540e\uff0c\u5728\u672c\u5730\u521b\u5efa\u4e00\u4e2a\u7a7a\u7684 main.tf \u6587\u4ef6\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"k\">resource<\/span> <span class=\"s2\">\"aws_instance\"<\/span> <span class=\"s2\">\"ec2_instance_t2\"<\/span> <span class=\"p\">{}<\/span>\r\n\r\n<span class=\"k\">terraform<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"nx\">required_version<\/span> <span class=\"p\">=<\/span> <span class=\"s2\">\"0.13.0\"<\/span>\r\n\r\n  <span class=\"nx\">required_providers<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"nx\">aws<\/span> <span class=\"p\">=<\/span> <span class=\"p\">{<\/span>\r\n      <span class=\"nx\">source<\/span>  <span class=\"p\">=<\/span> <span class=\"s2\">\"hashicorp\/aws\"<\/span>\r\n      <span class=\"nx\">version<\/span> <span class=\"p\">=<\/span> <span class=\"s2\">\"3.3.0\"<\/span>\r\n    <span class=\"p\">}<\/span>\r\n  <span class=\"p\">}<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<p>\u4ece\u63a7\u5236\u53f0\u4e0a\u590d\u5236EC2\u5b9e\u4f8b\u7684ID\u5e76\u6267\u884c\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nv\">$ <\/span>terraform init\r\n<span class=\"nv\">$ $ <\/span>terraform import aws_instance.ec2_instance_t2 i-xxxxxxxx\r\naws_instance.ec2_instance_t2: Importing from ID <span class=\"s2\">\"i-xxxxxxxx\"<\/span>...\r\naws_instance.ec2_instance_t2: Import prepared!\r\n  Prepared aws_instance <span class=\"k\">for <\/span>import\r\naws_instance.ec2_instance_t2: Refreshing state... <span class=\"o\">[<\/span><span class=\"nb\">id<\/span><span class=\"o\">=<\/span>i-xxxxxx]\r\n\r\nImport successful!\r\n\r\nThe resources that were imported are shown above. These resources are now <span class=\"k\">in\r\n<\/span>your Terraform state and will henceforth be managed by Terraform.\r\n<\/code><\/pre>\n<p>\u5f53\u68c0\u67e5 terraform.tfstate \u65f6\uff0c\u53d1\u73b0\u5df2\u7ecf\u8fdb\u884c\u4e86\u66f4\u65b0\u3002<\/p>\n<pre class=\"post-pre\"><code>$ cat terraform.tfstate \r\n{\r\n  \"version\": 4,\r\n  \"terraform_version\": \"0.13.0\",\r\n  \"serial\": 1,\r\n  \"lineage\": \"def80f38-083c-bd15-1aef-529e894a5533\",\r\n  \"outputs\": {},\r\n  \"resources\": [\r\n    {\r\n      \"mode\": \"managed\",\r\n      \"type\": \"aws_instance\",\r\n      \"name\": \"ec2_instance_t2\",\r\n      \"provider\": \"provider[\\\"registry.terraform.io\/hashicorp\/aws\\\"]\",\r\n      \"instances\": [\r\n        {\r\n          \"schema_version\": 1,\r\n          \"attributes\": {\r\n            \"ami\": \"ami-00f045aed21a55240\",\r\n            \"arn\": \"arn:aws:ec2:ap-northeast-1:xxxxx:instance\/i-xxxxxxxxx\",\r\n            \"associate_public_ip_address\": true,\r\n            \"availability_zone\": \"ap-northeast-1d\",\r\n            \"cpu_core_count\": 1,\r\n            \"cpu_threads_per_core\": 1,\r\n            \"credit_specification\": [\r\n              {\r\n                \"cpu_credits\": \"standard\"\r\n              }\r\n            ],\r\n\u2026\r\n<\/code><\/pre>\n<p>\u7136\u800c\uff0c\u5b83\u4ec5\u4ec5\u66f4\u65b0 terraform.tfstate \u6587\u4ef6\uff0c\u5e76\u4e0d\u66f4\u65b0 main.tf \u6587\u4ef6\u3002<br \/>\n\u4e5f\u5c31\u662f\u8bf4\uff0c\u5982\u679c main.tf \u548c terraform.tfstate \u4e4b\u95f4\u5b58\u5728\u5dee\u5f02\uff0c\u5c31\u5fc5\u987b\u4fee\u6539 main.tf\uff08\u592a\u9ebb\u70e6\u4e86\uff09\u3002<\/p>\n<p>\u4f60\u662f\u6253\u7b97\u7528\u770b\u5230\u7684\u8fd9\u4e9b\u4e1c\u897f\u586b\u6ee1\u5468\u56f4\u5417\uff1f<\/p>\n<pre class=\"post-pre\"><code><span class=\"nv\">$ <\/span>terraform state show aws_instance.ec2_instance_t2\r\n<span class=\"c\"># aws_instance.ec2_instance_t2:<\/span>\r\nresource <span class=\"s2\">\"aws_instance\"<\/span> <span class=\"s2\">\"ec2_instance_t2\"<\/span> <span class=\"o\">{<\/span>\r\n    ami                          <span class=\"o\">=<\/span> <span class=\"s2\">\"ami-00f045aed21a55240\"<\/span>\r\n    arn                          <span class=\"o\">=<\/span> <span class=\"s2\">\"arn:aws:ec2:ap-northeast-1:xxxxxx:instance\/i-xxxxxxx\"<\/span>\r\n    associate_public_ip_address  <span class=\"o\">=<\/span> <span class=\"nb\">true\r\n    <\/span>availability_zone            <span class=\"o\">=<\/span> <span class=\"s2\">\"ap-northeast-1d\"<\/span>\r\n\u2026\r\n<\/code><\/pre>\n<blockquote><p>\u76ee\u524d\u7684 Terraform \u5bfc\u5165\u5b9e\u73b0\u53ea\u80fd\u5c06\u8d44\u6e90\u5bfc\u5165\u72b6\u6001\u4e2d\uff0c\u65e0\u6cd5\u751f\u6210\u914d\u7f6e\u6587\u4ef6\u3002\u672a\u6765\u7684 Terraform \u7248\u672c\u5c06\u4f1a\u6dfb\u52a0\u751f\u6210\u914d\u7f6e\u6587\u4ef6\u7684\u529f\u80fd\u3002<\/p><\/blockquote>\n<p>\u5c06\u6765\u4f3c\u4e4e\u4e5f\u4f1a\u505amain.tf\u3002<\/p>\n<h2>\u5bfc\u5165\u9009\u9879\u5217\u8868<\/h2>\n<pre class=\"post-pre\"><code><span class=\"gp\">$<\/span> terraform import <span class=\"nt\">-h<\/span>\r\n<\/code><\/pre>\n<div>\n<div class=\"post-table\">\u30aa\u30d7\u30b7\u30e7\u30f3\u5185\u5bb9-backup=path\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u30d5\u30a1\u30a4\u30eb <code>terraform.tfstate.backup<\/code> \u306e\u30d1\u30b9\u3092\u6307\u5b9a\u3059\u308b-config=path\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3084\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3078\u306e\u30d1\u30b9\u3092\u6307\u5b9a\u3059\u308b-allow-missing-config<code>resource<\/code> block\u304c\u306a\u304f\u3066\u3082\u5b9f\u884c\u53ef\u80fd\u306b\u3059\u308b-input=true\u672a\u5b9a\u7fa9\u306e\u5909\u6570\u304c\u3042\u308b\u5834\u5408\u306b\u5909\u6570\u306e\u5165\u529b\u3092\u6c42\u3081\u308b\u304b\u3069\u3046\u304b\u3092\u6307\u5b9a\u3059\u308b-lock=true<code>tfstate<\/code> \u30d5\u30a1\u30a4\u30eb\u3092\u30ed\u30c3\u30af\u3059\u308b\uff08\u307e\u305f\u306f\u3057\u306a\u3044\uff09\u3088\u3046\u306b\u6307\u5b9a\u3059\u308b-lock-timeout=0s<code>tfstate<\/code> \u30d5\u30a1\u30a4\u30eb\u306e\u30ed\u30c3\u30af\u304c\u5931\u6557\u3057\u305f\u5834\u5408\u306e\u30ea\u30c8\u30e9\u30a4\u307e\u3067\u306e\u6642\u9593\u3092\u6307\u5b9a\u3059\u308b-no-color\u5b9f\u884c\u4e2d\u306e\u30a2\u30a6\u30c8\u30d7\u30c3\u30c8\u3092\u8272\u306a\u3057\u3067\u8868\u793a\u3055\u305b\u308b-state-out=PATH\u66f4\u65b0\u3059\u308b <code>tfstate<\/code> \u30d5\u30a1\u30a4\u30eb\u3092\u6307\u5b9a\u3059\u308b\u3000\u203b <code>-state<\/code> \u306f\u8aad\u307f\u8fbc\u3080\uff06\u66f4\u65b0\u3059\u308b\u30d5\u30a1\u30a4\u30eb-var &#8216;foo=bar&#8217;\u5909\u6570\u3092\u30b3\u30de\u30f3\u30c9\u5b9f\u884c\u6642\u306b\u4e0a\u66f8\u304d\u3059\u308b-var-file=foo\u5909\u6570\u3092\u5b9a\u7fa9\u3057\u305f <code>tfvars<\/code> \u30d5\u30a1\u30a4\u30eb\u3092\u6307\u5b9a\u3059\u308b<\/div>\n<\/div>\n<p>\u770b\u8d77\u6765\u6ca1\u6709\u4f7f\u7528\u8fc7\u7684\u9009\u9879\u6709\u4e24\u4e2a\uff1a-config\u548c-allow-missing-config\u3002<\/p>\n<h2>\u571f\u58e4\u5f15\u5165-\u914d\u7f6e=\u8def\u5f84\u3002<\/h2>\n<p>\u60a8\u53ef\u4ee5\u6307\u5b9a\u5bfc\u5165\u6587\u4ef6\u6216\u76ee\u5f55\u7684\u8def\u5f84\u6765\u8fdb\u884c\u5bfc\u5165\u3002<\/p>\n<p>\u4e3e\u4e2a\u4f8b\u5b50\uff0c\u5f53\u60f3\u8981\u4f7f\u7528\u4f4d\u4e8e\u53e6\u4e00\u4e2a\u76ee\u5f55\u4e2d\u7684\u6587\u4ef6\u65f6<\/p>\n<pre class=\"post-pre\"><code><span class=\"nv\">$ <\/span>tree\r\n<span class=\"nb\">.<\/span>\r\n\u251c\u2500\u2500 import_config_file\r\n\u2502\u00a0\u00a0 \u2514\u2500\u2500 main.tf\r\n\u2514\u2500\u2500 import_ec2\r\n<\/code><\/pre>\n<p>\u53ef\u4ee5\u8fd9\u6837\u4f7f\u7528\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nv\">$ <\/span>terraform import <span class=\"nt\">-config<\/span><span class=\"o\">=<\/span>..\/import_config_file aws_instance.ec2_instance_t2 i-xxxxxxx\r\naws_instance.ec2_instance_t2: Importing from ID <span class=\"s2\">\"i-xxxxxxx\"<\/span>...\r\naws_instance.ec2_instance_t2: Import prepared!\r\n  Prepared aws_instance <span class=\"k\">for <\/span>import\r\naws_instance.ec2_instance_t2: Refreshing state... <span class=\"o\">[<\/span><span class=\"nb\">id<\/span><span class=\"o\">=<\/span>i-xxxxxxx]\r\n\r\nImport successful!\r\n\r\nThe resources that were imported are shown above. These resources are now <span class=\"k\">in\r\n<\/span>your Terraform state and will henceforth be managed by Terraform.\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code><span class=\"nv\">$ <\/span>tree\r\n<span class=\"nb\">.<\/span>\r\n\u251c\u2500\u2500 import_config_file\r\n\u2502\u00a0\u00a0 \u2514\u2500\u2500 main.tf\r\n\u2514\u2500\u2500 import_ec2\r\n \u00a0\u00a0 \u2514\u2500\u2500 terraform.tfstate\r\n<\/code><\/pre>\n<h2>\u6279\u6b21\u5bfc\u5165 &#8211; \u5141\u8bb8\u7f3a\u5c11\u914d\u7f6e<\/h2>\n<p>\u5047\u8bbe\u6ca1\u6709\u8bbe\u7f6e\u8d44\u6e90\u7684\u963b\u585e\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"k\">provider<\/span> <span class=\"s2\">\"aws\"<\/span> <span class=\"p\">{}<\/span>\r\n<\/code><\/pre>\n<p>\u4f7f\u7528 &#8220;allow-missing-config&#8221; \u9009\u9879\uff0c\u4f3c\u4e4e\u53ef\u4ee5\u5728\u6ca1\u6709\u8bbe\u7f6e\u7684\u60c5\u51b5\u4e0b\u8fdb\u884c\u5bfc\u5165\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nv\">$ <\/span>terraform import <span class=\"nt\">-allow-missing-config<\/span> aws_instance.ec2_instance_t2 i-xxxxxx\r\naws_instance.ec2_instance_t2: Importing from ID <span class=\"s2\">\"i-xxxxxx\"<\/span>...\r\naws_instance.ec2_instance_t2: Import prepared!\r\n  Prepared aws_instance <span class=\"k\">for <\/span>import\r\naws_instance.ec2_instance_t2: Refreshing state... <span class=\"o\">[<\/span><span class=\"nb\">id<\/span><span class=\"o\">=<\/span>i-xxxxxxx]\r\n\r\nImport successful!\r\n\r\nThe resources that were imported are shown above. These resources are now <span class=\"k\">in\r\n<\/span>your Terraform state and will henceforth be managed by Terraform.\r\n\r\nImport does not generate resource configuration, you must create a resource\r\nconfiguration block that matches the current or desired state manually.\r\n\r\nIf there is no matching resource configuration block <span class=\"k\">for <\/span>the imported\r\nresource, Terraform will delete the resource on the next <span class=\"s2\">\"terraform apply\"<\/span><span class=\"nb\">.<\/span>\r\nIt is recommended that you run <span class=\"s2\">\"terraform plan\"<\/span> to verify that the\r\nconfiguration is correct and complete.\r\n<\/code><\/pre>\n<h1>\u6700\u540e<\/h1>\n<p>\u6709\u8bb8\u591a\u547d\u4ee4\u548c\u9009\u9879\uff0c\u6211\u81ea\u5df1\u7684\u7406\u89e3\u901f\u5ea6\u8f83\u6162\uff0c\u9700\u8981\u82b1\u8d39\u5f88\u591a\u65f6\u95f4\u3002<br \/>\n\u6240\u4ee5\uff0c\u6211\u6253\u7b97\u4ece\u73b0\u5728\u5f00\u59cb\u9010\u6e10\u6dfb\u52a0\u5e76\u63a8\u8fdb\u3002<\/p>\n<p>\u5982\u679c\u6709\u4efb\u4f55\u5730\u65b9\u6709\u9519\u6216\u8005\u9700\u8981\u7ea0\u6b63\u7684\u5730\u65b9\uff0c\u8bf7\u52a1\u5fc5\u544a\u8bc9\u6211\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u9996\u5148 \u300c\u6211\u7a81\u7136\u60f3\u5230\uff0c\u5982\u679c\u80fd\u7cfb\u7edf\u5730\u5b66\u4e60\u4e00\u4e0bTerraform\u7684\u547d\u4ee4\u548c\u9009\u9879\u90fd\u80fd\u505a\u4e9b\u4ec0\u4e48\uff0c\u4e0d\u59a8\u5c3d\u91cf\u5c1d\u8bd5\u4e00\u4e0b\u5427\u3002\u300d\u2192\u622a [&hellip;]<\/p>\n","protected":false},"author":8,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-48589","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>\u5c3d\u91cf\u4f7f\u7528Terraform\u7684\u547d\u4ee4\u548c\u9009\u9879\u8fdb\u884c\u5b9e\u8df5 - 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\/\u5c3d\u91cf\u4f7f\u7528terraform\u7684\u547d\u4ee4\u548c\u9009\u9879\u8fdb\u884c\u5b9e\u8df5\u3002\/\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u5c3d\u91cf\u4f7f\u7528Terraform\u7684\u547d\u4ee4\u548c\u9009\u9879\u8fdb\u884c\u5b9e\u8df5\" \/>\n<meta property=\"og:description\" content=\"\u9996\u5148 \u300c\u6211\u7a81\u7136\u60f3\u5230\uff0c\u5982\u679c\u80fd\u7cfb\u7edf\u5730\u5b66\u4e60\u4e00\u4e0bTerraform\u7684\u547d\u4ee4\u548c\u9009\u9879\u90fd\u80fd\u505a\u4e9b\u4ec0\u4e48\uff0c\u4e0d\u59a8\u5c3d\u91cf\u5c1d\u8bd5\u4e00\u4e0b\u5427\u3002\u300d\u2192\u622a [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/zh\/blog\/\u5c3d\u91cf\u4f7f\u7528terraform\u7684\u547d\u4ee4\u548c\u9009\u9879\u8fdb\u884c\u5b9e\u8df5\u3002\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog - Silicon Cloud\" \/>\n<meta property=\"article:published_time\" content=\"2023-08-08T02:41:56+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-04-30T06:53:38+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d863d913a08637a6bbc21\/56-1.png\" \/>\n<meta name=\"author\" content=\"\u96c5, \u609f\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"\u96c5, \u609f\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"13 \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%bd%e9%87%8f%e4%bd%bf%e7%94%a8terraform%e7%9a%84%e5%91%bd%e4%bb%a4%e5%92%8c%e9%80%89%e9%a1%b9%e8%bf%9b%e8%a1%8c%e5%ae%9e%e8%b7%b5%e3%80%82\/\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%bd%e9%87%8f%e4%bd%bf%e7%94%a8terraform%e7%9a%84%e5%91%bd%e4%bb%a4%e5%92%8c%e9%80%89%e9%a1%b9%e8%bf%9b%e8%a1%8c%e5%ae%9e%e8%b7%b5%e3%80%82\/\",\"name\":\"\u5c3d\u91cf\u4f7f\u7528Terraform\u7684\u547d\u4ee4\u548c\u9009\u9879\u8fdb\u884c\u5b9e\u8df5 - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\"},\"datePublished\":\"2023-08-08T02:41:56+00:00\",\"dateModified\":\"2024-04-30T06:53:38+00:00\",\"author\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/f044a4b7fa4ee2701702942002419ca6\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%bd%e9%87%8f%e4%bd%bf%e7%94%a8terraform%e7%9a%84%e5%91%bd%e4%bb%a4%e5%92%8c%e9%80%89%e9%a1%b9%e8%bf%9b%e8%a1%8c%e5%ae%9e%e8%b7%b5%e3%80%82\/#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%bd%e9%87%8f%e4%bd%bf%e7%94%a8terraform%e7%9a%84%e5%91%bd%e4%bb%a4%e5%92%8c%e9%80%89%e9%a1%b9%e8%bf%9b%e8%a1%8c%e5%ae%9e%e8%b7%b5%e3%80%82\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%bd%e9%87%8f%e4%bd%bf%e7%94%a8terraform%e7%9a%84%e5%91%bd%e4%bb%a4%e5%92%8c%e9%80%89%e9%a1%b9%e8%bf%9b%e8%a1%8c%e5%ae%9e%e8%b7%b5%e3%80%82\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.silicloud.com\/zh\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u5c3d\u91cf\u4f7f\u7528Terraform\u7684\u547d\u4ee4\u548c\u9009\u9879\u8fdb\u884c\u5b9e\u8df5\"}]},{\"@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\/f044a4b7fa4ee2701702942002419ca6\",\"name\":\"\u96c5, \u609f\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/e71a913e914f1aad1efc391f92084294bac54bc782acd289638580134cf667a6?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/e71a913e914f1aad1efc391f92084294bac54bc782acd289638580134cf667a6?s=96&d=mm&r=g\",\"caption\":\"\u96c5, \u609f\"},\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/author\/yawu\/\"},{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%bd%e9%87%8f%e4%bd%bf%e7%94%a8terraform%e7%9a%84%e5%91%bd%e4%bb%a4%e5%92%8c%e9%80%89%e9%a1%b9%e8%bf%9b%e8%a1%8c%e5%ae%9e%e8%b7%b5%e3%80%82\/#local-main-organization-logo\",\"url\":\"\",\"contentUrl\":\"\",\"caption\":\"Blog - Silicon Cloud\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"\u5c3d\u91cf\u4f7f\u7528Terraform\u7684\u547d\u4ee4\u548c\u9009\u9879\u8fdb\u884c\u5b9e\u8df5 - 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\/\u5c3d\u91cf\u4f7f\u7528terraform\u7684\u547d\u4ee4\u548c\u9009\u9879\u8fdb\u884c\u5b9e\u8df5\u3002\/","og_locale":"zh_CN","og_type":"article","og_title":"\u5c3d\u91cf\u4f7f\u7528Terraform\u7684\u547d\u4ee4\u548c\u9009\u9879\u8fdb\u884c\u5b9e\u8df5","og_description":"\u9996\u5148 \u300c\u6211\u7a81\u7136\u60f3\u5230\uff0c\u5982\u679c\u80fd\u7cfb\u7edf\u5730\u5b66\u4e60\u4e00\u4e0bTerraform\u7684\u547d\u4ee4\u548c\u9009\u9879\u90fd\u80fd\u505a\u4e9b\u4ec0\u4e48\uff0c\u4e0d\u59a8\u5c3d\u91cf\u5c1d\u8bd5\u4e00\u4e0b\u5427\u3002\u300d\u2192\u622a [&hellip;]","og_url":"https:\/\/www.silicloud.com\/zh\/blog\/\u5c3d\u91cf\u4f7f\u7528terraform\u7684\u547d\u4ee4\u548c\u9009\u9879\u8fdb\u884c\u5b9e\u8df5\u3002\/","og_site_name":"Blog - Silicon Cloud","article_published_time":"2023-08-08T02:41:56+00:00","article_modified_time":"2024-04-30T06:53:38+00:00","og_image":[{"url":"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d863d913a08637a6bbc21\/56-1.png"}],"author":"\u96c5, \u609f","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"\u96c5, \u609f","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"13 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%bd%e9%87%8f%e4%bd%bf%e7%94%a8terraform%e7%9a%84%e5%91%bd%e4%bb%a4%e5%92%8c%e9%80%89%e9%a1%b9%e8%bf%9b%e8%a1%8c%e5%ae%9e%e8%b7%b5%e3%80%82\/","url":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%bd%e9%87%8f%e4%bd%bf%e7%94%a8terraform%e7%9a%84%e5%91%bd%e4%bb%a4%e5%92%8c%e9%80%89%e9%a1%b9%e8%bf%9b%e8%a1%8c%e5%ae%9e%e8%b7%b5%e3%80%82\/","name":"\u5c3d\u91cf\u4f7f\u7528Terraform\u7684\u547d\u4ee4\u548c\u9009\u9879\u8fdb\u884c\u5b9e\u8df5 - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website"},"datePublished":"2023-08-08T02:41:56+00:00","dateModified":"2024-04-30T06:53:38+00:00","author":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/f044a4b7fa4ee2701702942002419ca6"},"breadcrumb":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%bd%e9%87%8f%e4%bd%bf%e7%94%a8terraform%e7%9a%84%e5%91%bd%e4%bb%a4%e5%92%8c%e9%80%89%e9%a1%b9%e8%bf%9b%e8%a1%8c%e5%ae%9e%e8%b7%b5%e3%80%82\/#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%bd%e9%87%8f%e4%bd%bf%e7%94%a8terraform%e7%9a%84%e5%91%bd%e4%bb%a4%e5%92%8c%e9%80%89%e9%a1%b9%e8%bf%9b%e8%a1%8c%e5%ae%9e%e8%b7%b5%e3%80%82\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%bd%e9%87%8f%e4%bd%bf%e7%94%a8terraform%e7%9a%84%e5%91%bd%e4%bb%a4%e5%92%8c%e9%80%89%e9%a1%b9%e8%bf%9b%e8%a1%8c%e5%ae%9e%e8%b7%b5%e3%80%82\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.silicloud.com\/zh\/blog\/"},{"@type":"ListItem","position":2,"name":"\u5c3d\u91cf\u4f7f\u7528Terraform\u7684\u547d\u4ee4\u548c\u9009\u9879\u8fdb\u884c\u5b9e\u8df5"}]},{"@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\/f044a4b7fa4ee2701702942002419ca6","name":"\u96c5, \u609f","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/e71a913e914f1aad1efc391f92084294bac54bc782acd289638580134cf667a6?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/e71a913e914f1aad1efc391f92084294bac54bc782acd289638580134cf667a6?s=96&d=mm&r=g","caption":"\u96c5, \u609f"},"url":"https:\/\/www.silicloud.com\/zh\/blog\/author\/yawu\/"},{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%bd%e9%87%8f%e4%bd%bf%e7%94%a8terraform%e7%9a%84%e5%91%bd%e4%bb%a4%e5%92%8c%e9%80%89%e9%a1%b9%e8%bf%9b%e8%a1%8c%e5%ae%9e%e8%b7%b5%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\/48589","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\/8"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/comments?post=48589"}],"version-history":[{"count":2,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/48589\/revisions"}],"predecessor-version":[{"id":92575,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/48589\/revisions\/92575"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/media?parent=48589"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/categories?post=48589"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/tags?post=48589"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}