{"id":48580,"date":"2023-09-01T21:26:12","date_gmt":"2023-08-24T09:24:24","guid":{"rendered":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8aws%e4%b8%8a%e7%9a%84terraform%e7%ae%80%e6%98%93%e6%95%99%e7%a8%8b\/"},"modified":"2024-04-30T21:08:52","modified_gmt":"2024-04-30T13:08:52","slug":"%e5%9c%a8aws%e4%b8%8a%e7%9a%84terraform%e7%ae%80%e6%98%93%e6%95%99%e7%a8%8b","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8aws%e4%b8%8a%e7%9a%84terraform%e7%ae%80%e6%98%93%e6%95%99%e7%a8%8b\/","title":{"rendered":"\u5728AWS\u4e0a\u7684Terraform\u7b80\u6613\u6559\u7a0b"},"content":{"rendered":"<h2>\u603b\u7ed3<\/h2>\n<p>\u4f7f\u7528Terraform\u7684AWS\u548cCLI\u6765\u542f\u52a8\uff0c\u66f4\u6539\u548c\u505c\u6b62\u5b9e\u4f8b\u7684\u6559\u7a0b\u3002\u65e8\u5728\u5e2e\u52a9\u7406\u89e3Terraform\u7684\u57fa\u672c\u6982\u5ff5\uff0c\u5373\u8ba1\u5212-\u5e94\u7528-\u663e\u793a\u5faa\u73af\u3002<\/p>\n<p>\u4ee5\u4e0b\u662f\u9019\u7bc7\u6587\u7ae0\u7684\u4e2d\u6587\u8b6f\u6587\uff1a<br \/>\n\u8ffd\u8a18<br \/>\nTerraform\u7684\u90e8\u843d\u683c\u6295\u7a3f\uff0c\u53c3\u8003\u8b6f\u6587 &#8211; Qiita<br \/>\nhttp:\/\/qiita.com\/zembutsu\/items\/402e02950ce9d59fa0e6<br \/>\nTerraform\u5165\u9580\u65e5\u672c\u8a9e\u8b6f &#8211; Qiita<br \/>\nhttp:\/\/qiita.com\/zembutsu\/items\/84f5478701c5391df537<\/p>\n<h2>Terraform \u662f\u4ec0\u4e48<\/h2>\n<p>\u6b50\u666e\u6e90\u79d1\u6280\uff08Hashicorp\uff09\u662f\u5275\u5efa\u4e86Vagrant\u3001Packer\u3001Serf\u548cConsul\u7684\u516c\u53f8\uff0c\u4ed6\u5011\u57287\u670828\u65e5\u63a8\u51fa\u4e86\u4e00\u500b\u65b0\u7684\u958b\u6e90\u7522\u54c1\u3002<\/p>\n<p>Terraform<\/p>\n<p>http:\/\/www.terraform.io\/<\/p>\n<p>Terraform &#8211; HashiCorp<\/p>\n<p>http:\/\/www.hashicorp.com\/blog\/terraform.html<\/p>\n<blockquote><p>Terraform \u662f\u4e00\u4e2a\u5b89\u5168\u9ad8\u6548\u7684\u5de5\u5177\uff0c\u7528\u4e8e\u6784\u5efa\u3001\u4fee\u6539\u548c\u7248\u672c\u5316\u57fa\u7840\u67b6\u6784\u3002Terraform \u53ef\u4ee5\u7ba1\u7406\u5df2\u5b58\u5728\u7684\u70ed\u95e8\u670d\u52a1\u63d0\u4f9b\u5546\u548c\u5b9a\u5236\u5185\u90e8\u89e3\u51b3\u65b9\u6848\u3002<\/p><\/blockquote>\n<p>Terraform\u662f\u4e00\u4e2a\u5b89\u5168\u9ad8\u6548\u7684\u5de5\u5177\uff0c\u53ef\u7528\u4e8e\u6784\u5efa\u3001\u66f4\u6539\u548c\u7248\u672c\u63a7\u5236\u57fa\u7840\u8bbe\u65bd\u73af\u5883\u3002Terraform\u8fd8\u80fd\u7ba1\u7406\u73b0\u6709\u77e5\u540d\u670d\u52a1\u63d0\u4f9b\u5546\u63d0\u4f9b\u7684\u5185\u90e8\u670d\u52a1\u3002<\/p>\n<h2>\u51c6\u5907\u5de5\u4f5c<\/h2>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">AWS \u306e\u30a2\u30ab\u30a6\u30f3\u30c8<\/ul>\n<\/li>\n<\/ul>\n<p>Access Key ID<br \/>\nSecret Access Key<\/p>\n<p>t1.micro \u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u5229\u7528\u6599\u91d1($0.8\u30c9\u30eb\u304f\u3089\u3044)\u304c\u5b9f\u8cbb\u3067\u5fc5\u8981<\/p>\n<h2>\u4e0b\u8f7d\u5e76\u9a8c\u8bc1Terraform\u64cd\u4f5c<\/h2>\n<p>Terraform\u63d0\u4f9b\u4e86\u9488\u5bf9MacOS\uff08AMD64\uff09\u3001Linux\uff08i386\uff0cAMD64\uff09\u548cWindows\uff08i386\uff09\u7684\u4e8c\u8fdb\u5236\u6587\u4ef6\uff0c\u53ef\u4ece\u4e0b\u8f7d\u9875\u9762\u83b7\u53d6\u3002\u4ee5\u4e0b\u662f\u6709\u5173Linux\u7248\u672c\u7684\u4e0b\u8f7d\u548c\u89e3\u538b\u6b65\u9aa4\u3002\u5728\u8fdb\u884c\u89e3\u538b\u4e4b\u524d\u521b\u5efa\u76ee\u5f55\u662f\u4e3a\u4e86\u5c06\u4e8c\u8fdb\u5236\u6587\u4ef6\u89e3\u538b\u5230\u5f53\u524d\u76ee\u5f55\u3002<\/p>\n<pre class=\"post-pre\"><code>$ mkdir terraform\r\n$ cd terraform\r\n$ wget -O 0.1.0_linux_amd64.zip https:\/\/dl.bintray.com\/mitchellh\/terraform\/0.1.0_linux_amd64.zip\r\n$ unzip .\/0.1.0_linux_amd64.zip\r\nArchive:  .\/0.1.0_linux_amd64.zip\r\n  inflating: terraform\r\n  inflating: terraform-provider-aws\r\n  inflating: terraform-provider-consul\r\n  inflating: terraform-provider-digitalocean\r\n  inflating: terraform-provider-dnsimple\r\n  inflating: terraform-provider-heroku\r\n  inflating: terraform-provisioner-file\r\n  inflating: terraform-provisioner-local-exec\r\n  inflating: terraform-provisioner-remote-exec\r\n<\/code><\/pre>\n<p>\u786e\u8ba4\u64cd\u4f5c\u53ea\u9700\u76f4\u63a5\u6267\u884c\u547d\u4ee4\u5373\u53ef\u3002<\/p>\n<p>\u5982\u679c\u6709\u5fc5\u8981\u7684\u8bdd\uff0c\u5c06\u5b83\u590d\u5236\u5230\u5df2\u7ecf\u8fc7\u8def\u5f84\u8bbe\u7f6e\u7684\/usr\/bin\/terraform\u76ee\u5f55\u4e2d\u3002<\/p>\n<pre class=\"post-pre\"><code>$ .\/terraform --version\r\nTerraform v0.1.0\r\n$ .\/terraform\r\nusage: terraform [--version] [--help] &lt;command&gt; [&lt;args&gt;]\r\n\r\nAvailable commands are:\r\n    apply      Builds or changes infrastructure\r\n    graph      Create a visual graph of Terraform resources\r\n    output     Read an output from a state file\r\n    plan       Generate and show an execution plan\r\n    refresh    Update local state file against real resources\r\n    show       Inspect Terraform state or plan\r\n    version    Prints the Terraform version\r\n<\/code><\/pre>\n<h2>\u4f7f\u7528Terraform<\/h2>\n<h3>\u5efa\u8bbe\u57fa\u7840\u8bbe\u65bd<\/h3>\n<h4>\u51c6\u5907\u8bbe\u7f6e\u6587\u4ef6<\/h4>\n<p>\u9996\u5148\uff0c\u521b\u5efa\u4e00\u4e2a\u5b9a\u4e49\u6587\u4ef6\u3002\u6587\u4ef6\u6269\u5c55\u540d\u4e3a*.tf\u3002\u5728\u8fd9\u91cc\u521b\u5efa\u4e00\u4e2a\u540d\u4e3aaws.tf\u7684\u6587\u4ef6\u3002<\/p>\n<pre class=\"post-pre\"><code>provider \"aws\" {\r\n    access_key = \"\u81ea\u5206\u306eACCESS_KEY_\u3092\u3053\u3053\u306b\"\r\n    secret_key = \"\u81ea\u5206\u306eSECRET_KEY_\u3092\u3053\u3053\u306b\"\r\n    region = \"us-east-1\"\r\n}\r\n\r\nresource \"aws_instance\" \"example\" {\r\n    ami = \"ami-408c7f28\"\r\n    instance_type = \"t1.micro\"\r\n}\r\n<\/code><\/pre>\n<p>\u5728\u6267\u884cterraform\u65f6\uff0c\u4f1a\u81ea\u52a8\u52a0\u8f7d\u5f53\u524d\u76ee\u5f55\u4e2d\u7684*.tf\u6587\u4ef6\u3002<\/p>\n<h4>\u8ba1\u5212\uff1a\u8ba1\u5212<\/h4>\n<p>\u7531\u4e8e\u8981\u5efa\u7acb\u65b0\u7684\u57fa\u7840\u8bbe\u65bd\u73af\u5883\uff0c\u53ef\u4ee5\u4f7f\u7528plan\u547d\u4ee4\u6765\u786e\u8ba4\u66f4\u6539\u7684\u5185\u5bb9\u3002<\/p>\n<pre class=\"post-pre\"><code>$ .\/terraform plan\r\nRefreshing Terraform state prior to plan...\r\n\r\n\r\nThe Terraform execution plan has been generated and is shown below.\r\nResources are shown in alphabetical order for quick scanning. Green resources\r\nwill be created (or destroyed and then created if an existing resource\r\nexists), yellow resources are being changed in-place, and red resources\r\nwill be destroyed.\r\n\r\nNote: You didn't specify an \"-out\" parameter to save this plan, so when\r\n\"apply\" is called, Terraform can't guarantee this is what will execute.\r\n\r\n+ aws_instance.example\r\n    ami:               \"\" =&gt; \"ami-408c7f28\"\r\n    availability_zone: \"\" =&gt; \"&lt;computed&gt;\"\r\n    instance_type:     \"\" =&gt; \"t1.micro\"\r\n    key_name:          \"\" =&gt; \"&lt;computed&gt;\"\r\n    private_dns:       \"\" =&gt; \"&lt;computed&gt;\"\r\n    private_ip:        \"\" =&gt; \"&lt;computed&gt;\"\r\n    public_dns:        \"\" =&gt; \"&lt;computed&gt;\"\r\n    public_ip:         \"\" =&gt; \"&lt;computed&gt;\"\r\n    security_groups:   \"\" =&gt; \"&lt;computed&gt;\"\r\n    subnet_id:         \"\" =&gt; \"&lt;computed&gt;\"\r\n<\/code><\/pre>\n<p>\u5728\u8fd9\u91cc\uff0c\u53ef\u4ee5\u786e\u8ba4\u6b63\u5728\u5c1d\u8bd5\u8bfb\u53d6\u5728\u914d\u7f6e\u6587\u4ef6\u4e2d\u5b9a\u4e49\u7684 AMI ami-408c7f28\uff0c\u5e76\u4e14\u5b9e\u4f8b\u7c7b\u578b\u4e3a t1.micro\u3002<\/p>\n<h4>\u5e94\u7528\u7a0b\u5e8f\u542f\u52a8\u5b9e\u4f8b\u3002<\/h4>\n<p>\u5f53\u6267\u884cterraform apply\u65f6\uff0c\u4f1a\u6267\u884c\u4e4b\u524d\u7528plan\u786e\u8ba4\u8fc7\u7684\u5185\u5bb9\u3002<\/p>\n<pre class=\"post-pre\"><code>$ .\/terraform apply\r\naws_instance.example: Creating...\r\n  ami:           \"\" =&gt; \"ami-408c7f28\"\r\n  instance_type: \"\" =&gt; \"t1.micro\"\r\naws_instance.example: Creation complete\r\n\r\nApply complete! Resources: 1 added, 0 changed, 0 destroyed.\r\n\r\nThe state of your infrastructure has been saved to the path\r\nbelow. This state is required to modify and destroy your\r\ninfrastructure, so keep it safe. To inspect the complete state\r\nuse the `terraform show` command.\r\n\r\nState path: terraform.tfstate\r\n<\/code><\/pre>\n<p>\u5f53\u65f6\uff0c\u68c0\u67e5AWS\u7ba1\u7406\u63a7\u5236\u53f0\u65f6\uff0c\u53ef\u4ee5\u786e\u8ba4\u5b9e\u9645\u4e0a\u5f00\u59cb\u542f\u52a8\u5b9e\u4f8b\u3002<\/p>\n<h4>\u7528show\u6765\u786e\u8ba4\u8fdb\u5c55\u60c5\u51b5<\/h4>\n<p>\u53ef\u4ee5\u67e5\u770b\u4e0e\u5b9e\u4f8b\u76f8\u5173\u7684\u4fe1\u606f\uff0c\u4f8b\u5982\u516c\u5171IP\u548c\u79c1\u6709IP\u7b49\u3002\u5728show\u547d\u4ee4\u4e2d\uff0c\u53c2\u6570\u662f\u5fc5\u9700\u7684\u3002\u5728\u5e94\u7528\u65f6\uff0c\u4f7f\u7528\u9ed8\u8ba4\u7684\u8f93\u51fa\u6587\u4ef6terraform.tfstate\u6765\u786e\u8ba4\u60c5\u51b5\u3002<\/p>\n<pre class=\"post-pre\"><code>$ .\/terraform show terraform.tfstate\r\naws_instance.example:\r\n  id = i-98c6ddb3\r\n  ami = ami-408c7f28\r\n  availability_zone = us-east-1d\r\n  instance_type = t1.micro\r\n  key_name =\r\n  private_dns = ip-10-178-172-29.ec2.internal\r\n  private_ip = 10.178.172.29\r\n  public_dns = ec2-107-20-63-177.compute-1.amazonaws.com\r\n  public_ip = 107.20.63.177\r\n  security_groups.# = 1\r\n  security_groups.0 = default\r\n  subnet_id =\r\n<\/code><\/pre>\n<p>\u4ee5\u4e0a\u662f\u6307\u5b9e\u4f8b\u542f\u52a8\u5b8c\u6210\u3002<\/p>\n<h3>\u6539\u53d8<\/h3>\n<p>\u8bf7\u7f16\u8f91\u4e4b\u524d\u521b\u5efa\u7684 aws.tf \u6587\u4ef6\uff0c\u5c06 AMI \u7c7b\u578b\u66f4\u6539\u4e3a\u5176\u4ed6\u9009\u9879\u3002<\/p>\n<pre class=\"post-pre\"><code>resource \"aws_instance\" \"example\" {\r\n    ami = \"ami-aa7ab6c2\"\r\n    instance_type = \"t1.micro\"\r\n}\r\n<\/code><\/pre>\n<p>\u4e3a\u4e86\u66f4\u6362AMI\uff0c\u6267\u884c\u8ba1\u5212\u5e76\u786e\u8ba4\u9884\u8ba1\u7684\u66f4\u6539\u5185\u5bb9\u3002<\/p>\n<pre class=\"post-pre\"><code>$ .\/terraform plan\r\nRefreshing Terraform state prior to plan...\r\n\r\naws_instance.example: Refreshing state... (ID: i-98c6ddb3)\r\n\r\nThe Terraform execution plan has been generated and is shown below.\r\nResources are shown in alphabetical order for quick scanning. Green resources\r\nwill be created (or destroyed and then created if an existing resource\r\nexists), yellow resources are being changed in-place, and red resources\r\nwill be destroyed.\r\n\r\nNote: You didn't specify an \"-out\" parameter to save this plan, so when\r\n\"apply\" is called, Terraform can't guarantee this is what will execute.\r\n\r\n-\/+ aws_instance.example\r\n    ami:               \"ami-408c7f28\" =&gt; \"ami-aa7ab6c2\" (forces new resource)\r\n    availability_zone: \"us-east-1d\" =&gt; \"&lt;computed&gt;\"\r\n    key_name:          \"\" =&gt; \"&lt;computed&gt;\"\r\n    private_dns:       \"ip-10-178-172-29.ec2.internal\" =&gt; \"&lt;computed&gt;\"\r\n    private_ip:        \"10.178.172.29\" =&gt; \"&lt;computed&gt;\"\r\n    public_dns:        \"ec2-107-20-63-177.compute-1.amazonaws.com\" =&gt; \"&lt;computed&gt;\"\r\n    public_ip:         \"107.20.63.177\" =&gt; \"&lt;computed&gt;\"\r\n    security_groups:   \"\" =&gt; \"&lt;computed&gt;\"\r\n    subnet_id:         \"\" =&gt; \"&lt;computed&gt;\"\r\n<\/code><\/pre>\n<p>\u4e3a\u4e86\u5e94\u7528\u66f4\u6539\u5185\u5bb9\uff0c\u8bf7\u6267\u884c\u201capply\u201d\u3002<\/p>\n<pre class=\"post-pre\"><code>$ .\/terraform apply\r\naws_instance.example: Refreshing state... (ID: i-98c6ddb3)\r\naws_instance.example: Destroying...\r\naws_instance.example: Destruction complete\r\naws_instance.example: Modifying...\r\n  ami: \"ami-408c7f28\" =&gt; \"ami-aa7ab6c2\"\r\naws_instance.example: Modifications complete\r\n\r\nApply complete! Resources: 0 added, 1 changed, 1 destroyed.\r\n\r\nThe state of your infrastructure has been saved to the path\r\nbelow. This state is required to modify and destroy your\r\ninfrastructure, so keep it safe. To inspect the complete state\r\nuse the `terraform show` command.\r\n\r\nState path: terraform.tfstate\r\n<\/code><\/pre>\n<p>\u5f53\u518d\u6b21\u68c0\u67e5AWS\u7ba1\u7406\u63a7\u5236\u53f0\u65f6\uff0c\u53ef\u4ee5\u786e\u8ba4AMI\u5df2\u88ab\u66f4\u6362\u3002\u6b64\u65f6\uff0c\u53ef\u4ee5\u770b\u5230\u5b9e\u4f8b\u7684\u72b6\u6001\u4e0eshow\u547d\u4ee4\u663e\u793a\u7684\u5185\u5bb9\u76f8\u5339\u914d\u3002<\/p>\n<pre class=\"post-pre\"><code>$ .\/terraform show terraform.tfstate\r\naws_instance.example:\r\n  id = i-dbf2e9f0\r\n  ami = ami-aa7ab6c2\r\n  availability_zone = us-east-1d\r\n  instance_type = t1.micro\r\n  key_name =\r\n  private_dns = ip-10-9-160-50.ec2.internal\r\n  private_ip = 10.9.160.50\r\n  public_dns = ec2-54-82-34-124.compute-1.amazonaws.com\r\n  public_ip = 54.82.34.124\r\n  security_groups.# = 1\r\n  security_groups.0 = default\r\n  subnet_id =\r\n<\/code><\/pre>\n<p>\u6267\u884c\u8ba1\u5212\u540e\u53d1\u73b0\u5df2\u7ecf\u6ca1\u6709\u9700\u8981\u66f4\u6539\u7684\u5730\u65b9\u3002<\/p>\n<pre class=\"post-pre\"><code>$ .\/terraform plan\r\nRefreshing Terraform state prior to plan...\r\n\r\naws_instance.example: Refreshing state... (ID: i-dbf2e9f0)\r\n\r\nNo changes. Infrastructure is up-to-date. This means that Terraform\r\ncould not detect any differences between your configuration and\r\nthe real physical resources that exist. As a result, Terraform\r\ndoesn't need to do anything.\r\n<\/code><\/pre>\n<h3>\u5b9e\u4f8b\u7ed3\u675f<\/h3>\n<p>\u5f53\u9500\u6bc1\u5b9e\u4f8b\u65f6\uff0c\u9996\u5148\u9700\u8981\u8fdb\u884c\u8ba1\u5212\u3002\u7531\u4e8e\u6211\u4eec\u60f3\u8981\u9500\u6bc1\u76ee\u6807\u5df2\u6709\u7684\u73af\u5883\uff0c\u56e0\u6b64\u6309\u5982\u4e0b\u65b9\u5f0f\u521b\u5efa\u3002<\/p>\n<pre class=\"post-pre\"><code>$ .\/terraform plan -destroy -out=.\/terraform.tfplan\r\nRefreshing Terraform state prior to plan...\r\n\r\naws_instance.example: Refreshing state... (ID: i-dbf2e9f0)\r\n\r\nThe Terraform execution plan has been generated and is shown below.\r\nResources are shown in alphabetical order for quick scanning. Green resources\r\nwill be created (or destroyed and then created if an existing resource\r\nexists), yellow resources are being changed in-place, and red resources\r\nwill be destroyed.\r\n\r\nYour plan was also saved to the path below. Call the \"apply\" subcommand\r\nwith this plan file and Terraform will exactly execute this execution\r\nplan.\r\n\r\nPath: .\/terraform.tfplan\r\n\r\n- aws_instance.example\r\n<\/code><\/pre>\n<p>\u7136\u540e\uff0c\u901a\u8fc7apply\u5e94\u7528\u5e76\u5e94\u7528\u5e9f\u5f03\u7684\u8bbe\u7f6e\u4fe1\u606f\u3002<\/p>\n<pre class=\"post-pre\"><code>$ .\/terraform apply .\/terraform.tfplan\r\naws_instance.example: Destroying...\r\naws_instance.example: Destruction complete\r\n\r\nApply complete! Resources: 0 added, 0 changed, 1 destroyed.\r\n<\/code><\/pre>\n<p>\u5728AWS\u7ba1\u7406\u63a7\u5236\u53f0\u4e0a\u518d\u6b21\u786e\u8ba4\uff0c\u53ef\u4ee5\u770b\u5230\u76ee\u6807\u5b9e\u4f8b\u6b63\u5728\u88ab\u7ec8\u6b62(terminate)\u3002<\/p>\n<h3>\u4e0b\u4e00\u6b65<\/h3>\n<p>\u5176\u4ed6\u6587\u4ef6\uff1a<\/p>\n<p>ElasticIP \u306e\u5b9a\u7fa9\u3068\u9069\u7528<\/p>\n<p>http:\/\/www.terraform.io\/intro\/getting-started\/dependencies.html<\/p>\n<p>\u30d7\u30ed\u30d3\u30b8\u30e7\u30ca\u30fc\u306e\u5b9a\u7fa9 (\u69cb\u6210\u7ba1\u7406\u30c4\u30fc\u30eb\u9069\u7528)<\/p>\n<p>http:\/\/www.terraform.io\/intro\/getting-started\/provision.html<\/p>\n<p>\u30ea\u30fc\u30b8\u30e7\u30f3\u5909\u66f4<\/p>\n<p>http:\/\/www.terraform.io\/intro\/getting-started\/variables.html<\/p>\n<p>Web DB \u69cb\u6210<\/p>\n<p>http:\/\/www.terraform.io\/intro\/examples\/aws.html<\/p>\n<p>\u8907\u6570\u306e\u4e8b\u696d\u8005\u3092\u307e\u305f\u3050<\/p>\n<p>http:\/\/www.terraform.io\/intro\/examples\/cross-provider.html<\/p>\n<p>\u8a2d\u5b9a\u4f8b<\/p>\n<p>http:\/\/www.terraform.io\/intro\/examples\/count.html<\/p>\n<p>Consul \u9023\u643a\u4f8b<\/p>\n<p>http:\/\/www.terraform.io\/intro\/examples\/consul.html<\/p>\n<p>&#8230;\u7b49\u7b49\uff0c\u5177\u4f53\u8be6\u60c5\u8bf7\u8bbf\u95ee http:\/\/www.terraform.io\/<\/p>\n<h2>\u4ee5\u4e0b\u662f\u4e00\u4e2a\u81ea\u7136\u7684\u4e2d\u6587\u7248\u672c\uff1a<\/h2>\n<p>\u8bf7\u5f15\u7528<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">Installing Terraform &#8211; Terraform<\/ul>\n<\/li>\n<\/ul>\n<p>http:\/\/www.terraform.io\/intro\/getting-started\/install.html<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u603b\u7ed3 \u4f7f\u7528Terraform\u7684AWS\u548cCLI\u6765\u542f\u52a8\uff0c\u66f4\u6539\u548c\u505c\u6b62\u5b9e\u4f8b\u7684\u6559\u7a0b\u3002\u65e8\u5728\u5e2e\u52a9\u7406\u89e3Terraform\u7684\u57fa\u672c [&hellip;]<\/p>\n","protected":false},"author":6,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-48580","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>\u5728AWS\u4e0a\u7684Terraform\u7b80\u6613\u6559\u7a0b - 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\/\u5728aws\u4e0a\u7684terraform\u7b80\u6613\u6559\u7a0b\/\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u5728AWS\u4e0a\u7684Terraform\u7b80\u6613\u6559\u7a0b\" \/>\n<meta property=\"og:description\" content=\"\u603b\u7ed3 \u4f7f\u7528Terraform\u7684AWS\u548cCLI\u6765\u542f\u52a8\uff0c\u66f4\u6539\u548c\u505c\u6b62\u5b9e\u4f8b\u7684\u6559\u7a0b\u3002\u65e8\u5728\u5e2e\u52a9\u7406\u89e3Terraform\u7684\u57fa\u672c [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/zh\/blog\/\u5728aws\u4e0a\u7684terraform\u7b80\u6613\u6559\u7a0b\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog - Silicon Cloud\" \/>\n<meta property=\"article:published_time\" content=\"2023-08-24T09:24:24+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-04-30T13:08:52+00:00\" \/>\n<meta name=\"author\" content=\"\u6587, \u7fd4\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"\u6587, \u7fd4\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 \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%9c%a8aws%e4%b8%8a%e7%9a%84terraform%e7%ae%80%e6%98%93%e6%95%99%e7%a8%8b\/\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8aws%e4%b8%8a%e7%9a%84terraform%e7%ae%80%e6%98%93%e6%95%99%e7%a8%8b\/\",\"name\":\"\u5728AWS\u4e0a\u7684Terraform\u7b80\u6613\u6559\u7a0b - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\"},\"datePublished\":\"2023-08-24T09:24:24+00:00\",\"dateModified\":\"2024-04-30T13:08:52+00:00\",\"author\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/64d5cc7727fffbff2f9a2a8da1de3e5c\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8aws%e4%b8%8a%e7%9a%84terraform%e7%ae%80%e6%98%93%e6%95%99%e7%a8%8b\/#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8aws%e4%b8%8a%e7%9a%84terraform%e7%ae%80%e6%98%93%e6%95%99%e7%a8%8b\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8aws%e4%b8%8a%e7%9a%84terraform%e7%ae%80%e6%98%93%e6%95%99%e7%a8%8b\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.silicloud.com\/zh\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u5728AWS\u4e0a\u7684Terraform\u7b80\u6613\u6559\u7a0b\"}]},{\"@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\/64d5cc7727fffbff2f9a2a8da1de3e5c\",\"name\":\"\u6587, \u7fd4\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/920c3d673e0bccacc98e5e6b7149bb3c22edd8d39cb753e5d7d7e471498118a1?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/920c3d673e0bccacc98e5e6b7149bb3c22edd8d39cb753e5d7d7e471498118a1?s=96&d=mm&r=g\",\"caption\":\"\u6587, \u7fd4\"},\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/author\/wenxiang\/\"},{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8aws%e4%b8%8a%e7%9a%84terraform%e7%ae%80%e6%98%93%e6%95%99%e7%a8%8b\/#local-main-organization-logo\",\"url\":\"\",\"contentUrl\":\"\",\"caption\":\"Blog - Silicon Cloud\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"\u5728AWS\u4e0a\u7684Terraform\u7b80\u6613\u6559\u7a0b - 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\/\u5728aws\u4e0a\u7684terraform\u7b80\u6613\u6559\u7a0b\/","og_locale":"zh_CN","og_type":"article","og_title":"\u5728AWS\u4e0a\u7684Terraform\u7b80\u6613\u6559\u7a0b","og_description":"\u603b\u7ed3 \u4f7f\u7528Terraform\u7684AWS\u548cCLI\u6765\u542f\u52a8\uff0c\u66f4\u6539\u548c\u505c\u6b62\u5b9e\u4f8b\u7684\u6559\u7a0b\u3002\u65e8\u5728\u5e2e\u52a9\u7406\u89e3Terraform\u7684\u57fa\u672c [&hellip;]","og_url":"https:\/\/www.silicloud.com\/zh\/blog\/\u5728aws\u4e0a\u7684terraform\u7b80\u6613\u6559\u7a0b\/","og_site_name":"Blog - Silicon Cloud","article_published_time":"2023-08-24T09:24:24+00:00","article_modified_time":"2024-04-30T13:08:52+00:00","author":"\u6587, \u7fd4","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"\u6587, \u7fd4","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"5 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8aws%e4%b8%8a%e7%9a%84terraform%e7%ae%80%e6%98%93%e6%95%99%e7%a8%8b\/","url":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8aws%e4%b8%8a%e7%9a%84terraform%e7%ae%80%e6%98%93%e6%95%99%e7%a8%8b\/","name":"\u5728AWS\u4e0a\u7684Terraform\u7b80\u6613\u6559\u7a0b - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website"},"datePublished":"2023-08-24T09:24:24+00:00","dateModified":"2024-04-30T13:08:52+00:00","author":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/64d5cc7727fffbff2f9a2a8da1de3e5c"},"breadcrumb":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8aws%e4%b8%8a%e7%9a%84terraform%e7%ae%80%e6%98%93%e6%95%99%e7%a8%8b\/#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8aws%e4%b8%8a%e7%9a%84terraform%e7%ae%80%e6%98%93%e6%95%99%e7%a8%8b\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8aws%e4%b8%8a%e7%9a%84terraform%e7%ae%80%e6%98%93%e6%95%99%e7%a8%8b\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.silicloud.com\/zh\/blog\/"},{"@type":"ListItem","position":2,"name":"\u5728AWS\u4e0a\u7684Terraform\u7b80\u6613\u6559\u7a0b"}]},{"@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\/64d5cc7727fffbff2f9a2a8da1de3e5c","name":"\u6587, \u7fd4","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/920c3d673e0bccacc98e5e6b7149bb3c22edd8d39cb753e5d7d7e471498118a1?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/920c3d673e0bccacc98e5e6b7149bb3c22edd8d39cb753e5d7d7e471498118a1?s=96&d=mm&r=g","caption":"\u6587, \u7fd4"},"url":"https:\/\/www.silicloud.com\/zh\/blog\/author\/wenxiang\/"},{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8aws%e4%b8%8a%e7%9a%84terraform%e7%ae%80%e6%98%93%e6%95%99%e7%a8%8b\/#local-main-organization-logo","url":"","contentUrl":"","caption":"Blog - Silicon Cloud"}]}},"_links":{"self":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/48580","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\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/comments?post=48580"}],"version-history":[{"count":2,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/48580\/revisions"}],"predecessor-version":[{"id":94310,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/48580\/revisions\/94310"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/media?parent=48580"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/categories?post=48580"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/tags?post=48580"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}