{"id":48393,"date":"2023-08-03T05:41:38","date_gmt":"2023-12-25T13:48:58","guid":{"rendered":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8%e4%b8%ad%e6%96%87%e4%b8%ad%ef%bc%8c%e9%87%8d%e6%96%b0%e8%a1%a8%e8%be%be%e5%a6%82%e4%b8%8b%e5%86%85%e5%ae%b9%ef%bc%9a%e5%ad%a6%e4%b9%a0%e5%9c%a8aws%e4%b8%8a%e5%ae%9e%e8%b7%b5terraform\/"},"modified":"2024-04-30T16:43:10","modified_gmt":"2024-04-30T08:43:10","slug":"%e5%9c%a8%e4%b8%ad%e6%96%87%e4%b8%ad%ef%bc%8c%e9%87%8d%e6%96%b0%e8%a1%a8%e8%be%be%e5%a6%82%e4%b8%8b%e5%86%85%e5%ae%b9%ef%bc%9a%e5%ad%a6%e4%b9%a0%e5%9c%a8aws%e4%b8%8a%e5%ae%9e%e8%b7%b5terraform","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8%e4%b8%ad%e6%96%87%e4%b8%ad%ef%bc%8c%e9%87%8d%e6%96%b0%e8%a1%a8%e8%be%be%e5%a6%82%e4%b8%8b%e5%86%85%e5%ae%b9%ef%bc%9a%e5%ad%a6%e4%b9%a0%e5%9c%a8aws%e4%b8%8a%e5%ae%9e%e8%b7%b5terraform\/","title":{"rendered":"\u5728\u4e2d\u6587\u4e2d\uff0c\u91cd\u65b0\u8868\u8fbe\u5982\u4e0b\u5185\u5bb9\uff1a\u5b66\u4e60\u5728AWS\u4e0a\u5b9e\u8df5Terraform\u2460\u301c\u521b\u5efaAWS\u8d44\u6e90\uff08\u521d\u7ea7\u7bc7\uff09"},"content":{"rendered":"<h1>\u9996\u5148<\/h1>\n<p>\u5927\u5bb6\u6709\u6ca1\u6709\u5728\u4f7f\u7528IaC\uff1f<br \/>\n\u8bf4\u5230IaC\u5de5\u5177\uff0c\u4eba\u4eec\u5e38\u5e38\u4f1a\u60f3\u5230Terraform\u548cAnsible\u8fd9\u4e24\u4e2a\u5de8\u5934\uff0c\u7ecf\u5e38\u542c\u5230\u5927\u5bb6\u8ba8\u8bba\u8be5\u7528\u54ea\u4e2a\u3002\u6211\u4e2a\u4eba\u8ba4\u4e3a\uff0c\u5728AWS\/Azure\/GCP\u7b49\u516c\u5171\u4e91\u7684\u8d44\u6e90\u7ba1\u7406\u65b9\u9762\uff0cTerraform\u6bd4\u8f83\u5f3a\u5927\uff1b\u800c\u5728\u672c\u5730\u7f51\u7edc\u8bbe\u7f6e\u548c\u865a\u62df\u670d\u52a1\u5668\u5185\u90e8\u914d\u7f6e\u65b9\u9762\uff0cAnsible\u66f4\u5177\u4f18\u52bf\u3002<br \/>\n\u7136\u800c\uff0c\u6700\u8fd1\u6211\u8fd8\u662f\u89c9\u5f97\u516c\u5171\u4e91\u7684\u4f7f\u7528\u548c\u76f8\u5e94\u7684\u57fa\u7840\u67b6\u6784\u5373\u4ee3\u7801\u5316\u53d8\u5f97\u66f4\u52a0\u6d3b\u8dc3\uff0c\u6240\u4ee5\u6211\u60f3\u7740\u73b0\u5728\u662f\u65f6\u5019\u5236\u4f5c\u4e00\u4e2a\u4ee5\u6559\u7a0b\u5f62\u5f0f\u5b66\u4e60Terraform\u7684\u5185\u5bb9\u4e86\u3002<\/p>\n<h2>\u6559\u7a0b\u90e8\u5206 b\u00f9<\/h2>\n<p>\u6559\u7a0b1\uff1a\u521b\u5efaAWS\u8d44\u6e90\uff08\u521d\u7ea7\uff09<br \/>\n\u6559\u7a0b2\uff1a\u5229\u7528\u672c\u5730\u503c\u548c\u8d44\u6e90\u5f15\u7528<br \/>\n\u6559\u7a0b3\uff1a\u4f7f\u7528\u8ba1\u6570\u4e00\u6b21\u6027\u521b\u5efa\u591a\u4e2a\u8d44\u6e90<br \/>\n\u6559\u7a0b4\uff1a\u4f7f\u7528Terraform\u521b\u5efaAWS\u8d44\u6e90\uff08\u4e2d\u7ea7\uff09<br \/>\n\u6559\u7a0b5\uff1a\u4f7f\u7528for_each\u5b9e\u73b0\u66f4\u7075\u6d3b\u7684\u5faa\u73af\u5904\u7406<br \/>\n\u6559\u7a0b6\uff1a\u4f7f\u7528\u6a21\u5757\u5171\u4eab\u8d44\u6e90<br \/>\n\u6559\u7a0b7\uff1a\u4f7f\u7528Terraform\u521b\u5efaAWS\u8d44\u6e90\uff08\u9ad8\u7ea7\uff09<br \/>\n\u989d\u59161\uff1a\u52a0\u5bc6\u79d8\u5bc6\u4fe1\u606f\u5e76\u4e0a\u4f20\u5230Git<br \/>\n\u989d\u59162\uff1a\u4f7f\u7528\u5916\u90e8\u5b58\u50a8\u7684tfstate\u6587\u4ef6<br \/>\n\u989d\u59163\uff1a\u5f15\u7528\u5176\u4ed6\u7531Terraform\u7ba1\u7406\u7684\u8d44\u6e90<\/p>\n<h2>\u5728\u6559\u7a0b\u4e2d\u8ffd\u6c42\u7684\u76ee\u6807<\/h2>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">Terraform\u306e\u57fa\u672c\u7684\u306a\u5229\u7528\u65b9\u6cd5\u3092\u7406\u89e3\u3059\u308b<\/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\">tf\u30d5\u30a1\u30a4\u30eb\u306e\u8a18\u8ff0\u65b9\u6cd5\u3084\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u69cb\u6210\u3092\u7406\u89e3\u3059\u308b<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\u73fe\u5834\u3067\u3042\u308b\u7a0b\u5ea6\u306e\u30ec\u30d9\u30eb\u3067Terraform\u5c0e\u5165\u3092\u5b9f\u65bd\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b<\/ul>\n<h3>\u8bf7\u7559\u610f\u4e8b\u9879\u3002<\/h3>\n<p>\u8fd9\u4e2a\u6559\u7a0b\u7684\u76ee\u6807\u662f\u8ba9\u521d\u6b21\u63a5\u89e6Terraform\u7684\u4eba\u4eec\u6309\u7167\u987a\u5e8f\u5b8c\u6210\u5404\u4e2a\u7ae0\u8282\uff0c\u4ee5\u83b7\u5f97\u5b9e\u8df5\u77e5\u8bc6\u3002\u56e0\u6b64\uff0c\u5728\u6559\u7a0b\u4e2d\u6211\u4eec\u6545\u610f\u4f7f\u7528\u4e00\u4e9b\u4e0d\u63a8\u8350\u7684\u5199\u6cd5\uff0c\u4f46\u8bf7\u539f\u8c05\uff0c\u8fd9\u662f\u4e3a\u4e86\u52a0\u6df1\u5bf9Terraform\u7684\u7406\u89e3\u8fc7\u7a0b\u3002<\/p>\n<h2>\u5047\u8bbe\u6761\u4ef6<\/h2>\n<p>\u6559\u7a0b\u7684\u6574\u4e2a\u8fc7\u7a0b\u57fa\u4e8e\u4ee5\u4e0b\u524d\u63d0\u8fdb\u884c\u3002<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u3042\u308b\u7a0b\u5ea6AWS\u306e\u30b5\u30fc\u30d3\u30b9\u3068\u305d\u306e\u95a2\u9023\u6027\u3092\u7406\u89e3\u3057\u3066\u3044\u308b\uff08AWS-SAA\u30ec\u30d9\u30eb)<\/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\">terraform\u3092\u5b9f\u884c\u3067\u304d\u308b\u74b0\u5883\u304c\u3042\u308b<\/ul>\n<\/li>\n<\/ul>\n<p>Terraform\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u65b9\u6cd5\u306f\u3053\u3061\u3089\u306a\u3069\u3092\u53c2\u7167\u304f\u3060\u3055\u3044\u3002<br \/>\n\u4eca\u56de\u306f Terraform v1.4.4 \u3092\u5229\u7528\u3057\u307e\u3059\u3002<\/p>\n<p>AWS\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u6301\u3063\u3066\u304a\u308a\u3001AdministratorAccess\u6a29\u9650\u3092\u6301\u3064IAM\u30e6\u30fc\u30b6\u30fc\u3092\u5229\u7528\u3067\u304d\u308b<\/p>\n<h1>\u672c\u7de8<\/h1>\n<p>\u6211\u4eec\u4ece\u8fd9\u91cc\u5f00\u59cb\u6559\u7a0b\u3002<br \/>\n\u5728\u672c\u90e8\u5206\u4e2d\uff0c\u901a\u8fc7AWS\u7684\u7b80\u5355\u914d\u7f6e\u90e8\u7f72\uff0c\u6211\u4eec\u5c06\u7406\u89e3Terraform\u7684\u57fa\u672c\u5199\u6cd5\u3002<\/p>\n<h1>\u8fd9\u4e2a\u90e8\u5206\u7684\u76ee\u6807<\/h1>\n<p>\u80fd\u591f\u4f7f\u7528Terraform\u5728\u4ee5\u4e0b\u65b9\u5f0f\u4e0a\u8fdb\u884c\u90e8\u7f72<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d8554913a08637a6b8c4c\/15-0.png\" alt=\"AWS.png\" \/><\/div>\n<h1>\u4e8b\u524d\u51c6\u5907<\/h1>\n<p>\u6211\u4f1a\u521b\u5efa\u4e00\u4e2a\u4efb\u52a1\u6587\u4ef6\u5939\u3002<br \/>\n\u7531\u4e8eterraform\u662f\u901a\u8fc7\u6587\u4ef6\u5939\u7ba1\u7406\u6e90\u4ee3\u7801\u7684\uff0c\u6240\u4ee5\u6211\u4f1a\u5148\u5728\u672c\u5730\u521b\u5efa\u4e00\u4e2a\u4efb\u52a1\u6587\u4ef6\u5939\u3002<\/p>\n<pre class=\"post-pre\"><code>mkdir -p ~\/terraform-tutorial\/tutorial-1\r\ncd ~\/terraform-tutorial\/tutorial-1\r\n<\/code><\/pre>\n<h1>\u521b\u5efa.tf\u6587\u4ef6\u6765\u8fdb\u884c\u73af\u5883\u8bbe\u7f6e \u2192 \u6267\u884c\u521d\u59cb\u5316<\/h1>\n<h2>\u5173\u4e8etf\u6587\u4ef6\u3002<\/h2>\n<p>\u5728Terraform\u4e2d\uff0c\u6211\u4eec\u4f1a\u4f7f\u7528.tf\u6587\u4ef6\u6765\u5b58\u50a8\u90e8\u7f72\u8d44\u6e90\u4fe1\u606f\u548c\u8ba4\u8bc1\u4fe1\u606f\u7b49\u3002<br \/>\n\u5728\u6267\u884cTerraform\u547d\u4ee4\u65f6\uff0c\u4f1a\u8bfb\u53d6\u5f53\u524d\u76ee\u5f55\u4e0b\u6240\u6709\u7684.tf\u6587\u4ef6\u3002<br \/>\n\u56e0\u6b64\uff0c\u867d\u7136\u628a\u6240\u6709\u7684\u4fe1\u606f\u90fd\u5199\u5728\u4e00\u4e2a.tf\u6587\u4ef6\u4e2d\u4e5f\u6ca1\u6709\u95ee\u9898\uff0c\u4f46\u662f\u4e3a\u4e86\u7ba1\u7406\u65b9\u4fbf\uff0c\u6211\u4eec\u4f1a\u5c06.tf\u6587\u4ef6\u5206\u6210\u51e0\u4e2a\u90e8\u5206\u3002<\/p>\n<h2>\u7528\u4e8e\u73af\u5883\u8bbe\u7f6e\u7684.tf\u6587\u4ef6<\/h2>\n<p>\u4e3a\u4e86\u6267\u884cterraform\uff0c\u60a8\u9700\u8981\u521b\u5efa\u4e00\u4e9b\u7c7b\u4f3c\u4e8e\u73af\u5883\u8bbe\u7f6e\u7684\u6587\u4ef6\u3002<br \/>\n\u672c\u6b21\u5c06\u521b\u5efa\u4ee5\u4e0b\u4e24\u4e2a\u6587\u4ef6\u3002<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">provider.tf<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">versions.tf<\/ul>\n<h3>\u63d0\u4f9b\u8005.tf<\/h3>\n<p>\u5728Terraform\u4e2d\uff0c\u53ef\u4ee5\u901a\u8fc7\u79f0\u4e3aProvider\u7684\u7ec4\u4ef6\u6765\u5b9a\u4e49\u90e8\u7f72\u54ea\u4e2a\u63d0\u4f9b\u7a0b\u5e8f\uff08\u4f8b\u5982AWS\u3001Azure\u3001GCP\u3001K8s\uff09\u7684\u8d44\u6e90\u3002<br \/>\nAWS Provider\u9700\u8981\u8bbf\u95ee\u5bc6\u94a5\u3001\u79d8\u5bc6\u5bc6\u94a5\u548c\u9ed8\u8ba4\u533a\u57df\u8bbe\u7f6e\u3002\uff08\u4e0e\u5728aws-cli\u4e2d\u8f93\u5165aws configure\u65f6\u9700\u8981\u7684\u503c\u76f8\u540c\uff09<br \/>\n\u5728\u8fd9\u91cc\uff0c\u8bf7\u8f93\u5165\u5177\u6709AdministratorAccess\u6743\u9650\u7684IAM\u7528\u6237\u7684\u4fe1\u606f\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nx\">provider<\/span> <span class=\"nx\">aws<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"nx\">access_key<\/span> <span class=\"p\">=<\/span> <span class=\"s2\">\"XXXXXXXXXXXXXXXXXXXXXXXXX\"<\/span>\r\n  <span class=\"nx\">secret_key<\/span> <span class=\"p\">=<\/span> <span class=\"s2\">\"YYYYYYYYYYYYYYYYYYYYYYYYY\"<\/span>\r\n  <span class=\"nx\">region<\/span>     <span class=\"p\">=<\/span> <span class=\"s2\">\"ap-northeast-1\"<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<h3>tf\u7248\u672c<\/h3>\n<p>\u5982\u679c\u5173\u6ce8 Provider \u548c Terraform \u81ea\u8eab\u7248\u672c\u7684\u4e00\u81f4\u6027\uff0c\u5c06\u80fd\u9632\u6b62\u5728\u672a\u6765\u51fa\u73b0\u7248\u672c\u66f4\u65b0\u65f6\u51fa\u73b0\u9519\u8bef\u7684\u60c5\u51b5\u3002\u5728\u8fd9\u91cc\uff0c\u6211\u4eec\u6307\u5b9a\u4e86 AWS \u7684 Provider \u548c Terraform \u7684\u7248\u672c\u3002\u5982\u679c\u5c1d\u8bd5\u4f7f\u7528\u5176\u4ed6\u7248\u672c\u7684\u65f6\u5019\uff0c\u4f1a\u5728\u6267\u884c\u4e4b\u524d\u62a5\u9519\u3002\u6700\u65b0\u7684 AWS Provider \u7248\u672c\u53ef\u4ee5\u5728\u8fd9\u91cc\u67e5\u770b\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nx\">terraform<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"nx\">required_version<\/span> <span class=\"p\">=<\/span> <span class=\"s2\">\"= 1.4.4\"<\/span>\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=\"s2\">\"= 4.61.0\"<\/span>\r\n  <span class=\"p\">}<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<h2>\u8fdb\u884cterraform\u521d\u59cb\u5316<\/h2>\n<p>\u4e3a\u4e86\u521d\u59cb\u5316 Terraform \u7684\u5de5\u4f5c\u533a\u5e76\u4e0b\u8f7d\u63d2\u4ef6\uff0c\u9700\u8981\u8fd0\u884c &#8220;terraform init&#8221; \u547d\u4ee4\u3002<br \/>\n\u8fd9\u5c06\u83b7\u53d6\u5728 provider.tf \u6587\u4ef6\u4e2d\u6307\u5b9a\u7684\u63d0\u4f9b\u7a0b\u5e8f\u63d2\u4ef6\u3002<\/p>\n<pre class=\"post-pre\"><code>terraform init\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code>Initializing the backend...\r\n\r\nInitializing provider plugins...\r\n- Finding hashicorp\/aws versions matching \"4.61.0\"...\r\n- Installing hashicorp\/aws v4.61.0...\r\n- Installed hashicorp\/aws v4.61.0 (signed by HashiCorp)\r\n\r\nTerraform has created a lock file .terraform.lock.hcl to record the provider\r\nselections it made above. Include this file in your version control repository\r\nso that Terraform can guarantee to make the same selections by default when\r\nyou run \"terraform init\" in the future.\r\n\r\nTerraform has been successfully initialized!\r\n\r\nYou may now begin working with Terraform. Try running \"terraform plan\" to see\r\nany changes that are required for your infrastructure. All Terraform commands\r\nshould now work.\r\n\r\nIf you ever set or change modules or backend configuration for Terraform,\r\nrerun this command to reinitialize your working directory. If you forget, other\r\ncommands will detect it and remind you to do so if necessary.\r\n<\/code><\/pre>\n<p>\u5df2\u5b89\u88c5\u7684\u63d2\u4ef6\u5c06\u5b58\u50a8\u5728 .terraform \u76ee\u5f55\u4e2d\u3002<\/p>\n<pre class=\"post-pre\"><code>tree -a\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code>.\r\n\u251c\u2500\u2500 .terraform\r\n\u2502\u00a0\u00a0 \u2514\u2500\u2500 providers\r\n\u2502\u00a0\u00a0     \u2514\u2500\u2500 registry.terraform.io\r\n\u2502\u00a0\u00a0         \u2514\u2500\u2500 hashicorp\r\n\u2502\u00a0\u00a0             \u2514\u2500\u2500 aws\r\n\u2502\u00a0\u00a0                 \u2514\u2500\u2500 4.61.0\r\n\u2502\u00a0\u00a0                     \u2514\u2500\u2500 darwin_arm64\r\n\u2502\u00a0\u00a0                         \u2514\u2500\u2500 terraform-provider-aws_v4.61.0_x5\r\n\u251c\u2500\u2500 .terraform.lock.hcl\r\n\u251c\u2500\u2500 provider.tf\r\n\u2514\u2500\u2500 versions.tf\r\n\r\n7 directories, 4 files\r\n<\/code><\/pre>\n<h1>\u521b\u5efa\u7528\u4e8e\u90e8\u7f72\u7684tf\u6587\u4ef6\u5e76\u6267\u884c\u3002<\/h1>\n<p>\u5728\u4f7f\u7528Terraform\u90e8\u7f72\u6e90\u4ee3\u7801\u65f6\uff0c\u4f7f\u7528\u4e00\u4e2a\u540d\u4e3a&#8221;Resource&#8221;\u7684\u7ec4\u4ef6\u3002<br \/>\n\u5c06\u5305\u542bResource\u7684.tf\u6587\u4ef6\u5b58\u50a8\u5728\u6587\u4ef6\u5939\u4e2d\uff0c\u5f53\u8f93\u5165\u90e8\u7f72\u6267\u884c\u547d\u4ee4\u65f6\uff0c\u5c06\u81ea\u52a8\u6267\u884c\u90e8\u7f72\u3002<br \/>\n\u5173\u4e8e\u5404\u79cdResource\u7684\u63cf\u8ff0\u65b9\u6cd5\uff0c\u53ea\u9700\u5728Google\u4e0a\u641c\u7d22\u6240\u9700\u521b\u5efa\u7684\u8d44\u6e90\uff0c\u5e76\u5c06\u641c\u7d22\u7ed3\u679c\u7684\u6a21\u677f\u57fa\u672c\u590d\u5236\u7c98\u8d34\u5373\u53ef\uff0c\u51e0\u4e4e\u6ca1\u6709\u4efb\u4f55\u95ee\u9898\u3002<br \/>\n\u4f8b\u5982\uff0c\u5982\u679c\u8981\u5c06RDS\u8f6c\u6362\u4e3aTerraform\u4ee3\u7801\uff0c\u53ea\u9700\u641c\u7d22&#8221;terraform AWS RDS resource&#8221;\uff0cTerraform\u5b98\u65b9\u7f51\u7ad9\u5c06\u51fa\u73b0\u5728\u9996\u4f4d\u3002<\/p>\n<h2>\u521b\u5efaVPC<\/h2>\n<p>\u9996\u5148\u6211\u4eec\u5c06\u521b\u5efaVPC\u3002<\/p>\n<h3>\u5236\u4f5c.tf\u6587\u4ef6\u3002<\/h3>\n<p>\u521b\u5efa\u7528\u4e8e\u90e8\u7f72VPC\u7684.tf\u6587\u4ef6\u7684\u8d44\u6e90\u3002<br \/>\n\u6b64\u8d44\u6e90\u7684\u5b98\u65b9\u6587\u6863\u5728\u8fd9\u91cc\u3002<\/p>\n<p>enable_dns_hostnames \u3092true\u306b\u3057\u3066\u304a\u304f\u3053\u3068\u3067\u3001VPC\u5185\u304b\u3089\u3067\u3082\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8\u306e\u30c9\u30e1\u30a4\u30f3\u540d\u3092\u89e3\u6c7a\u3067\u304d\u307e\u3059\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nx\">resource<\/span> <span class=\"s2\">\"aws_vpc\"<\/span> <span class=\"s2\">\"vpc\"<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"nx\">cidr_block<\/span>           <span class=\"p\">=<\/span> <span class=\"s2\">\"192.168.0.0\/16\"<\/span>\r\n  <span class=\"nx\">enable_dns_hostnames<\/span> <span class=\"p\">=<\/span> <span class=\"kc\">true<\/span>\r\n\r\n  <span class=\"nx\">tags<\/span> <span class=\"p\">=<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"nx\">Name<\/span> <span class=\"p\">=<\/span> <span class=\"s2\">\"tutorial-vpc\"<\/span>\r\n  <span class=\"p\">}<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<p>\u5f53\u524d\u7684\u6587\u4ef6\u5939\u7ed3\u6784\u5982\u4e0b<\/p>\n<pre class=\"post-pre\"><code>.\r\n\u251c\u2500\u2500 .terraform\r\n\u251c\u2500\u2500 .terraform.lock.hcl\r\n\u251c\u2500\u2500 provider.tf\r\n\u251c\u2500\u2500 versions.tf\r\n\u2514\u2500\u2500 vpc.tf\r\n<\/code><\/pre>\n<h3>\u6267\u884c\u90e8\u7f72<\/h3>\n<p>\u8ba9\u6211\u4eec\u5b9e\u9645\u6267\u884c\u547d\u4ee4\u5e76\u8fdb\u884c\u90e8\u7f72\u3002<br \/>\n\u5f53\u6267\u884cterraform plan\u65f6\uff0c\u5b83\u4f1a\u8bfb\u53d6\u5f53\u524d\u76ee\u5f55\u4e2d\u7684.tf\u6587\u4ef6\uff0c\u5e76\u786e\u8ba4\u5c06\u90e8\u7f72\u54ea\u4e9bAWS\u8d44\u6e90\u3002<br \/>\n\u5982\u679c\u5b58\u5728\u8bed\u6cd5\u9519\u8bef\uff0c\u5b83\u4f1a\u5728\u6267\u884c\u6b64\u8ba1\u5212\u65f6\u62d2\u7edd\u90e8\u7f72\uff0c\u6240\u4ee5\u5728\u5b9e\u9645\u6267\u884c\u4e4b\u524d\uff0c\u8bf7\u52a1\u5fc5\u6267\u884c\u8ba1\u5212\u3002<\/p>\n<pre class=\"post-pre\"><code>terraform plan\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code>Terraform used the selected providers to generate the following execution plan.\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  # aws_vpc.vpc will be created\r\n  + resource \"aws_vpc\" \"tutorial_vpc\" {\r\n      + arn                                  = (known after apply)\r\n      + cidr_block                           = \"192.168.0.0\/16\"\r\n      + default_network_acl_id               = (known after apply)\r\n      + default_route_table_id               = (known after apply)\r\n      + default_security_group_id            = (known after apply)\r\n      + dhcp_options_id                      = (known after apply)\r\n      + enable_classiclink                   = (known after apply)\r\n      + enable_classiclink_dns_support       = (known after apply)\r\n      + enable_dns_hostnames                 = true\r\n      + enable_dns_support                   = true\r\n      + enable_network_address_usage_metrics = (known after apply)\r\n      + id                                   = (known after apply)\r\n      + instance_tenancy                     = \"default\"\r\n      + ipv6_association_id                  = (known after apply)\r\n      + ipv6_cidr_block                      = (known after apply)\r\n      + ipv6_cidr_block_network_border_group = (known after apply)\r\n      + main_route_table_id                  = (known after apply)\r\n      + owner_id                             = (known after apply)\r\n      + tags                                 = {\r\n          + \"Name\" = \"tutorial-vpc\"\r\n        }\r\n      + tags_all                             = {\r\n          + \"Name\" = \"tutorial-vpc\"\r\n        }\r\n    }\r\n\r\nPlan: 1 to add, 0 to change, 0 to destroy.\r\n\r\n\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\nNote: You didn't use the -out option to save this plan, so Terraform can't guarantee to\r\ntake exactly these actions if you run \"terraform apply\" now.\r\n<\/code><\/pre>\n<p>\u6267\u884cterraform apply\u547d\u4ee4\u6765\u90e8\u7f72\u3002<br \/>\n\u4e0e\u8ba1\u5212\u9636\u6bb5\u8f93\u51fa\u76f8\u540c\u7684\u5185\u5bb9\uff0c\u5982\u679c\u6ca1\u6709\u95ee\u9898\uff0c\u8bf7\u5728\u201c\u8f93\u5165\u4e00\u4e2a\u503c\uff1a\u201d\u5904\u8f93\u5165yes\u6765\u6267\u884c\u90e8\u7f72\u3002<br \/>\n\u7136\u540e\u5f00\u59cb\u6267\u884c\u90e8\u7f72\uff0c\u8fc7\u4e00\u6bb5\u65f6\u95f4\u540e\u4f1a\u8f93\u51fa\u5b8c\u6210\u7684\u6d88\u606f\u3002<\/p>\n<pre class=\"post-pre\"><code>terraform apply\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code>---omit(plan\u3068\u540c\u69d8)---\r\n  Enter a value: yes  \u2190yes\u3092\u5165\u529b\r\n\r\naws_vpc.vpc: Creating...\r\naws_vpc.vpc: Still creating... [10s elapsed]\r\naws_vpc.vpc: Creation complete after 12s [id=vpc-04fb5154d22486542]\r\n\r\nApply complete! Resources: 1 added, 0 changed, 0 destroyed.\r\n<\/code><\/pre>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d8554913a08637a6b8c4c\/55-0.png\" alt=\"AWS.png\" \/><\/div>\n<h2>\u5173\u4e8etfstate\u6587\u4ef6\u7684\u95ee\u9898\u3002<\/h2>\n<p>\u5b8c\u6210\u7533\u8bf7\u540e\uff0c\u5c06\u5728\u5f53\u524d\u76ee\u5f55\u4e0b\u751f\u6210\u4e00\u4e2a\u540d\u4e3a terraform.tfstate \u7684\u6587\u4ef6\u3002\u8be5\u6587\u4ef6\u4ee5 JSON \u683c\u5f0f\u4fdd\u5b58\u4e86\u5b9e\u9645\u90e8\u7f72\u7684\u8d44\u6e90\u4fe1\u606f\u3002<br \/>\n\u5c06\u6765\u6267\u884c terraform apply \u8fdb\u884c\u5dee\u5206\u6267\u884c\u65f6\uff0c\u4f1a\u6839\u636e terraform.tfstate \u6587\u4ef6\u3001\u5b9e\u4f8b\u548c tf \u6587\u4ef6\u7684\u4e09\u4e2a\u4fe1\u606f\u8fdb\u884c\u5dee\u5206\u68c0\u6d4b\u5e76\u6267\u884c\u3002<br \/>\n\u6709\u4e9b\u4eba\u53ef\u80fd\u4f1a\u8ba4\u4e3a\u53ea\u8981\u770b\u770b\u5b9e\u4f8b\u548c tf \u6587\u4ef6\u4e4b\u95f4\u7684\u5dee\u5f02\u5c31\u53ef\u4ee5\u4e86\uff0c\u4e0d\u9700\u8981\u770b tfstate\u3002\u4f46\u5b9e\u9645\u4e0a\uff0c\u8fd8\u9700\u8981\u4e00\u4e9b\u5b9e\u4f8b\u4e0a\u4e0d\u5b58\u5728\u7684\u8d44\u6e90\u4f9d\u8d56\u5173\u7cfb\u7b49\u4fe1\u606f\uff0c\u56e0\u6b64\u8be5\u6587\u4ef6\u4e5f\u662f\u5fc5\u4e0d\u53ef\u5c11\u7684\u72b6\u6001\u7ba1\u7406\u5de5\u5177\u3002\u66f4\u8be6\u7ec6\u7684\u89e3\u91ca\u8bf7\u53c2\u9605\u5b98\u65b9\u7f51\u9875\u3002<\/p>\n<p>\u987a\u4fbf\u8bf4\u4e00\u53e5\uff0c\u521b\u5efaVPC\u65f6\u7684tfstate\u6587\u4ef6\u7684\u5f62\u5f0f\u5982\u4e0b\u3002<\/p>\n<pre class=\"post-pre\"><code>{\r\n  \"version\": 4,\r\n  \"terraform_version\": \"1.4.4\",\r\n  \"serial\": 1,\r\n  \"lineage\": \"a2216e14-10e4-bfb0-99e2-d69cfa87452d\",\r\n  \"outputs\": {},\r\n  \"resources\": [\r\n    {\r\n      \"mode\": \"managed\",\r\n      \"type\": \"aws_vpc\",\r\n      \"name\": \"vpc\",\r\n      \"provider\": \"provider[\\\"registry.terraform.io\/hashicorp\/aws\\\"]\",\r\n      \"instances\": [\r\n        {\r\n          \"schema_version\": 1,\r\n          \"attributes\": {\r\n            \"arn\": \"arn:aws:ec2:ap-northeast-1:XXXXXXXXXXXX:vpc\/vpc-04fb5154d22486542\",\r\n            \"assign_generated_ipv6_cidr_block\": false,\r\n            \"cidr_block\": \"192.168.0.0\/16\",\r\n            \"default_network_acl_id\": \"acl-07759005723d928fc\",\r\n            \"default_route_table_id\": \"rtb-0ab93bd6a0c2cf95e\",\r\n            \"default_security_group_id\": \"sg-0f7cc93c60b68fbb6\",\r\n            \"dhcp_options_id\": \"dopt-01152b10208f13dd5\",\r\n            \"enable_classiclink\": false,\r\n            \"enable_classiclink_dns_support\": false,\r\n            \"enable_dns_hostnames\": true,\r\n            \"enable_dns_support\": true,\r\n            \"enable_network_address_usage_metrics\": false,\r\n            \"id\": \"vpc-04fb5154d22486542\",\r\n            \"instance_tenancy\": \"default\",\r\n            \"ipv4_ipam_pool_id\": null,\r\n            \"ipv4_netmask_length\": null,\r\n            \"ipv6_association_id\": \"\",\r\n            \"ipv6_cidr_block\": \"\",\r\n            \"ipv6_cidr_block_network_border_group\": \"\",\r\n            \"ipv6_ipam_pool_id\": \"\",\r\n            \"ipv6_netmask_length\": 0,\r\n            \"main_route_table_id\": \"rtb-0ab93bd6a0c2cf95e\",\r\n            \"owner_id\": \"878728386472\",\r\n            \"tags\": {\r\n              \"Name\": \"tutorial-vpc\"\r\n            },\r\n            \"tags_all\": {\r\n              \"Name\": \"tutorial-vpc\"\r\n            }\r\n          },\r\n          \"sensitive_attributes\": [],\r\n          \"private\": \"eyJzY2hlbWFfdmVyc2lvbiI6IjEifQ==\"\r\n        }\r\n      ]\r\n    }\r\n  ],\r\n  \"check_results\": null\r\n}\r\n<\/code><\/pre>\n<h2>\u521b\u5efaInternet Gateway<\/h2>\n<p>\u63a5\u4e0b\u6765\uff0c\u6211\u4eec\u5c06\u521b\u5efa\u4e00\u4e2a\u4e92\u8054\u7f51\u7f51\u5173\u3002<\/p>\n<h3>\u521b\u5efa.tf\u6587\u4ef6<\/h3>\n<p>\u521b\u5efa\u7528\u4e8e\u90e8\u7f72Internet Gateway\u7684.tf\u6587\u4ef6\u7684\u8d44\u6e90\u3002<br \/>\n\u8fd9\u4e2a\u8d44\u6e90\u7684\u5b98\u65b9\u6587\u6863\u5728\u8fd9\u91cc\u3002<\/p>\n<p>vpc_id \u306b\u306f\u3001\u5148\u307b\u3069\u4f5c\u6210\u3057\u305fVPC\u306eID\u3092\u5165\u529b\u3057\u3066\u304a\u304d\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u3063\u3066\u3053\u306eInternet Gateway\u306f tutorial-vpc \u5185\u306b\u4f5c\u6210\u3055\u308c\u307e\u3059\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nx\">resource<\/span> <span class=\"s2\">\"aws_internet_gateway\"<\/span> <span class=\"s2\">\"igw\"<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"nx\">vpc_id<\/span> <span class=\"p\">=<\/span> <span class=\"s2\">\"vpc-04fb5154d22486542\"<\/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\">\"tutorial-igw\"<\/span>\r\n  <span class=\"p\">}<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<h3>\u6267\u884c\u90e8\u7f72<\/h3>\n<p>\u4f7f\u7528Terraform apply \u521b\u5efa\u4e92\u8054\u7f51\u7f51\u5173\u3002<\/p>\n<pre class=\"post-pre\"><code>terraform plan\r\nterraform apply\r\n<\/code><\/pre>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d8554913a08637a6b8c4c\/69-0.png\" alt=\"AWS.png\" \/><\/div>\n<h2>\u521b\u5efa\u5b50\u7f51<\/h2>\n<p>\u63a5\u4e0b\u6765\uff0c\u6211\u4eec\u5c06\u521b\u5efa\u4e00\u4e2a\u7528\u4e8e\u90e8\u7f72EC2\u5b9e\u4f8b\u7684\u5b50\u7f51\u3002<\/p>\n<h3>\u521b\u5efa.tf\u6587\u4ef6<\/h3>\n<p>\u521b\u5efa.tf\u6587\u4ef6\u4ee5\u90e8\u7f72\u5b50\u7f51\u8d44\u6e90\u3002<br \/>\n\u6b64\u8d44\u6e90\u7684\u5b98\u65b9\u6587\u6863\u5728\u6b64\u5904\u3002<\/p>\n<p>vpc_id \u306f tutorial_vpc \u306eID\u3092\u5165\u529b\u3057\u307e\u3059\u3002<\/p>\n<p>cidr_block \u306eCIDR\u306fVPC CIDR\u306e\u7bc4\u56f2\u5185\u306b\u6307\u5b9a\u3057\u307e\u3059\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nx\">resource<\/span> <span class=\"nx\">aws_subnet<\/span> <span class=\"nx\">subnet<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"nx\">vpc_id<\/span>            <span class=\"p\">=<\/span> <span class=\"s2\">\"vpc-04fb5154d22486542\"<\/span>\r\n  <span class=\"nx\">cidr_block<\/span>        <span class=\"p\">=<\/span> <span class=\"s2\">\"192.168.1.0\/24\"<\/span>\r\n  <span class=\"nx\">availability_zone<\/span> <span class=\"p\">=<\/span> <span class=\"s2\">\"ap-northeast-1a\"<\/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\">\"tutorial-public-subnet\"<\/span>\r\n  <span class=\"p\">}<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<h3>\u6267\u884c\u90e8\u7f72<\/h3>\n<p>\u4f7f\u7528Terraform apply\u547d\u4ee4\u521b\u5efa\u5b50\u7f51\u3002<\/p>\n<pre class=\"post-pre\"><code>terraform plan\r\nterraform apply\r\n<\/code><\/pre>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d8554913a08637a6b8c4c\/79-0.png\" alt=\"AWS.png\" \/><\/div>\n<h2>\u521b\u5efa\u8def\u7531\u8868<\/h2>\n<p>\u5982\u679c\u4e0d\u5c06\u521b\u5efa\u7684\u5b50\u7f51\u548c\u4e92\u8054\u7f51\u7f51\u5173\u4e0e\u8def\u7531\u8868\u5173\u8054\u8d77\u6765\uff0cVPC\u5185\u7684EC2\u65e0\u6cd5\u4e0e\u4e92\u8054\u7f51\u901a\u4fe1\u3002\u56e0\u6b64\uff0c\u9700\u8981\u521b\u5efa\u7528\u4e8e\u901a\u5411\u4e92\u8054\u7f51\u7f51\u5173\u7684\u8def\u7531\u8868\u3002<\/p>\n<h3>\u521b\u5efa.tf\u6587\u4ef6<\/h3>\n<p>\u521b\u5efa\u4e00\u4e2a\u7528\u4e8e\u90e8\u7f72\u8def\u7531\u8868\u7684.tf\u6587\u4ef6\u8d44\u6e90\u3002<br \/>\n\u6b64\u8d44\u6e90\u7684\u5b98\u65b9\u6587\u6863\u5728\u8fd9\u91cc\u3002<\/p>\n<p>vpc_id \u306f tutorial-vpc \u306eID\u3092\u5165\u529b\u3057\u307e\u3059\u3002<\/p>\n<p>gateway_id \u306f tutorial-igw \u306eID\u3092\u5165\u529b\u3057\u307e\u3059\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nx\">resource<\/span> <span class=\"nx\">aws_route_table<\/span> <span class=\"nx\">route_table<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"nx\">vpc_id<\/span> <span class=\"p\">=<\/span> <span class=\"s2\">\"vpc-04fb5154d22486542\"<\/span>\r\n  <span class=\"nx\">route<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"nx\">cidr_block<\/span> <span class=\"p\">=<\/span> <span class=\"s2\">\"0.0.0.0\/0\"<\/span>\r\n    <span class=\"nx\">gateway_id<\/span> <span class=\"p\">=<\/span> <span class=\"s2\">\"igw-0e204fdaad34cae29\"<\/span>\r\n  <span class=\"p\">}<\/span>\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\">\"tutorial-route-table\"<\/span>\r\n  <span class=\"p\">}<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<h4>\u6267\u884c\u90e8\u7f72<\/h4>\n<p>\u7528terraform apply\u547d\u4ee4\u521b\u5efa\u8def\u7531\u8868\u3002<\/p>\n<pre class=\"post-pre\"><code>terraform plan\r\nterraform apply\r\n<\/code><\/pre>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d8554913a08637a6b8c4c\/89-0.png\" alt=\"AWS.png\" \/><\/div>\n<h2>\u8def\u7531\u8868\u548c\u5b50\u7f51\u7684\u5173\u8054\u8fde\u63a5<\/h2>\n<p>\u5c06\u521b\u5efa\u7684\u8def\u7531\u8868\u4e0e\u5b50\u7f51\u76f8\u5173\u8054\u3002<\/p>\n<h3>\u521b\u5efa.tf\u6587\u4ef6<\/h3>\n<p>\u521b\u5efa\u7528\u4e8e\u5173\u8054\u8def\u7531\u8868\u548c\u5b50\u7f51\u7684.tf\u6587\u4ef6\u7684\u8d44\u6e90\u3002<br \/>\n\u6b64\u8d44\u6e90\u7684\u5b98\u65b9\u6587\u6863\u5728\u6b64\u3002<\/p>\n<p>subnet_id \u306f\u5148\u307b\u3069\u4f5c\u6210\u3057\u305fSubnet\u306eID\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002<\/p>\n<p>route_table_id \u306f\u5148\u307b\u3069\u4f5c\u6210\u3057\u305fRoute Table\u306eID\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nx\">resource<\/span> <span class=\"nx\">aws_route_table_association<\/span> <span class=\"nx\">rta<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"nx\">subnet_id<\/span>      <span class=\"p\">=<\/span> <span class=\"s2\">\"subnet-0bf5661c57db0d425\"<\/span>\r\n  <span class=\"nx\">route_table_id<\/span> <span class=\"p\">=<\/span> <span class=\"s2\">\"rtb-072ca46273b6a88e6\"<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<h4>\u6267\u884c\u90e8\u7f72<\/h4>\n<p>\u4f7f\u7528terraform apply\u547d\u4ee4\u6765\u5173\u8054\u8def\u7531\u8868\u548c\u5b50\u7f51\u3002<\/p>\n<pre class=\"post-pre\"><code>terraform plan\r\nterraform apply\r\n<\/code><\/pre>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d8554913a08637a6b8c4c\/99-0.png\" alt=\"AWS.png\" \/><\/div>\n<h2>\u751f\u6210\u79c1\u94a5\u548c\u516c\u94a5<\/h2>\n<p>\u5728\u521b\u5efaEC2\u5b9e\u4f8b\u65f6\uff0c\u5982\u679c\u4f7f\u7528GUI\u8fdb\u884c\u64cd\u4f5c\uff0cAWS\u4f1a\u5e2e\u52a9\u6211\u4eec\u751f\u6210SSH\u5bc6\u94a5\u5e76\u8fdb\u884c\u516c\u94a5\u8bbe\u7f6e\u3002\u4f46\u662f\uff0c\u5982\u679c\u4f7f\u7528aws-cli\u6216Terraform\u6267\u884c\u64cd\u4f5c\uff0c\u5219\u53ea\u80fd\u5bfc\u5165\u4e8b\u5148\u521b\u5efa\u7684SSH\u5bc6\u94a5\u3002\u56e0\u6b64\uff0c\u6211\u4eec\u9700\u8981\u63d0\u524d\u521b\u5efaSSH\u5bc6\u94a5\u5bf9\u3002<\/p>\n<pre class=\"post-pre\"><code>ssh-keygen -t rsa -b 4096\r\n\r\nGenerating public\/private rsa key pair.\r\nEnter file in which to save the key (\/Users\/XXX\/.ssh\/id_rsa): \/Users\/XXX\/.ssh\/aws-ec2\r\nEnter passphrase (empty for no passphrase):\r\nEnter same passphrase again:\r\nYour identification has been saved in \/Users\/XXX\/.ssh\/aws-ec2.\r\nYour public key has been saved in \/Users\/XXX\/.ssh\/aws-ec2.pub\r\nThe key fingerprint is:\r\n-------omit-------------\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code>ll ~\/.ssh\/\r\n\r\n-rw-------  1 XXX        XXX        3326 11\u6708 26 01:10 aws-ec2\r\n-rw-r--r--  1 XXX        XXX         781 11\u6708 26 01:10 aws-ec2.pub\r\n<\/code><\/pre>\n<h2>\u4e0a\u4f20\u5bc6\u94a5\u5bf9<\/h2>\n<p>\u5c06\u521b\u5efa\u7684SSH\u516c\u94a5\u4e0a\u4f20\u5230AWS\u4e0a\u3002<\/p>\n<h3>\u521b\u5efa.tf\u6587\u4ef6\u3002<\/h3>\n<p>\u521b\u5efa\u4e00\u4e2a\u7528\u4e8e\u4e0a\u4f20\u5bc6\u94a5\u7684.tf\u6587\u4ef6\u8d44\u6e90\u3002<br \/>\n\u8be5\u8d44\u6e90\u7684\u5b98\u65b9\u6587\u6863\u5728\u8fd9\u91cc\u3002<\/p>\n<ul class=\"post-ul\">public_key\u306b\u306f\u516c\u958b\u9375(aws-ec2.pub)\u306e\u4e2d\u8eab\u3092\u8a18\u8f09\u3057\u307e\u3059\u3002<\/ul>\n<pre class=\"post-pre\"><code><span class=\"nx\">resource<\/span> <span class=\"s2\">\"aws_key_pair\"<\/span> <span class=\"s2\">\"tutorial_key\"<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"nx\">key_name<\/span>   <span class=\"p\">=<\/span> <span class=\"s2\">\"tutorial-key\"<\/span>\r\n  <span class=\"nx\">public_key<\/span> <span class=\"p\">=<\/span> <span class=\"s2\">\"ssh-rsa AAAAB3NzaC1yc2---omit---XXX\"<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<h3>\u6267\u884c\u90e8\u7f72<\/h3>\n<p>\u4f7f\u7528 Terraform apply \u547d\u4ee4\u4e0a\u4f20\u516c\u94a5\u3002<\/p>\n<pre class=\"post-pre\"><code>terraform plan\r\nterraform apply\r\n<\/code><\/pre>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d8554913a08637a6b8c4c\/113-0.png\" alt=\"AWS.png\" \/><\/div>\n<h2>\u521b\u5efa\u5b89\u5168\u7ec4<\/h2>\n<p>\u5728\u521b\u5efaEC2\u5b9e\u4f8b\u65f6\uff0c\u9700\u8981\u6307\u5b9a\u5b89\u5168\u7ec4\uff08Security Group\uff09\uff0c\u4f46\u5982\u679c\u4f7f\u7528\u9ed8\u8ba4\u7684\u5b89\u5168\u7ec4\uff0c\u53ef\u80fd\u4f1a\u57280.0.0.0\/0\u4e0a\u5f00\u653e22\u7aef\u53e3\u3002\u867d\u7136\u53ef\u4ee5\u901a\u8fc7\u5bc6\u94a5\u5bf9\u8fdb\u884c\u8bbf\u95ee\u63a7\u5236\uff0c\u4f46\u4e3a\u4e86\u786e\u4fdd\u5b89\u5168\u8d77\u89c1\uff0c\u5efa\u8bae\u9884\u5148\u521b\u5efa\u4e00\u4e2a\u53ea\u5141\u8bb8\u7279\u5b9a\u8bbf\u95ee\u6e90\u7684\u5b89\u5168\u7ec4\u3002<\/p>\n<h3>\u521b\u5efa.tf\u6587\u4ef6<\/h3>\n<p>\u6211\u5c06\u4e3aSecurity Group\u521b\u5efa\u4e00\u4e2a\u7528\u4e8eResource\u7684.tf\u6587\u4ef6\u3002<br \/>\n\u8fd9\u4e2a\u8d44\u6e90\u7684\u5b98\u65b9\u6587\u6863\u5728\u8fd9\u91cc\u3002<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u30a4\u30f3\u30d0\u30a6\u30f3\u30c9\u30eb\u30fc\u30eb\uff08ingress\uff09\u306b\u81ea\u5206\u306e\u4f5c\u696d\u7aef\u672b\u306eIP\u304b\u3089\u306eSSH\u30a2\u30af\u30bb\u30b9\u3092\u8a31\u53ef\u3057\u307e\u3059\u3002<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\u30a2\u30a6\u30c8\u30d0\u30a6\u30f3\u30c9\u30eb\u30fc\u30eb\uff08egress\uff09\u306f\u5168\u3066\u306e\u901a\u4fe1\u3092\u8a31\u53ef\u3057\u307e\u3059\u3002<\/ul>\n<pre class=\"post-pre\"><code><span class=\"nx\">resource<\/span> <span class=\"s2\">\"aws_security_group\"<\/span> <span class=\"s2\">\"sg\"<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"nx\">name<\/span>        <span class=\"p\">=<\/span> <span class=\"s2\">\"tutorial-security-group\"<\/span>\r\n  <span class=\"nx\">description<\/span> <span class=\"p\">=<\/span> <span class=\"s2\">\"Allow SSH inbound traffic from XXX\"<\/span>\r\n  <span class=\"nx\">vpc_id<\/span>      <span class=\"p\">=<\/span> <span class=\"s2\">\"vpc-04fb5154d22486542\"<\/span>\r\n\r\n  <span class=\"nx\">ingress<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"nx\">description<\/span> <span class=\"p\">=<\/span> <span class=\"s2\">\"SSH from XXX\"<\/span>\r\n    <span class=\"nx\">from_port<\/span>   <span class=\"p\">=<\/span> <span class=\"mi\">22<\/span>\r\n    <span class=\"nx\">to_port<\/span>     <span class=\"p\">=<\/span> <span class=\"mi\">22<\/span>\r\n    <span class=\"nx\">protocol<\/span>    <span class=\"p\">=<\/span> <span class=\"s2\">\"tcp\"<\/span>\r\n    <span class=\"nx\">cidr_blocks<\/span> <span class=\"p\">=<\/span> <span class=\"p\">[<\/span><span class=\"s2\">\"XXX.XXX.XXX.XXX\/32\"<\/span><span class=\"p\">]<\/span>\r\n  <span class=\"p\">}<\/span>\r\n\r\n  <span class=\"nx\">egress<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"nx\">from_port<\/span>   <span class=\"p\">=<\/span> <span class=\"mi\">0<\/span>\r\n    <span class=\"nx\">to_port<\/span>     <span class=\"p\">=<\/span> <span class=\"mi\">0<\/span>\r\n    <span class=\"nx\">protocol<\/span>    <span class=\"p\">=<\/span> <span class=\"s2\">\"-1\"<\/span>\r\n    <span class=\"nx\">cidr_blocks<\/span> <span class=\"p\">=<\/span> <span class=\"p\">[<\/span><span class=\"s2\">\"0.0.0.0\/0\"<\/span><span class=\"p\">]<\/span>\r\n  <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\">\"tutorial-security-group\"<\/span>\r\n  <span class=\"p\">}<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<h4>\u6267\u884c\u90e8\u7f72<\/h4>\n<p>\u4f7f\u7528 terraform apply \u547d\u4ee4\u521b\u5efa\u5b89\u5168\u7ec4\u3002<\/p>\n<pre class=\"post-pre\"><code>terraform plan\r\nterraform apply\r\n<\/code><\/pre>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d8554913a08637a6b8c4c\/123-0.png\" alt=\"AWS.png\" \/><\/div>\n<h2>\u521b\u5efaEC2\u5b9e\u4f8b<\/h2>\n<p>\u56e0\u4e3a\u521b\u5efa\u5b9e\u4f8b\u65f6\u6240\u9700\u7684Key\u548c\u5b89\u5168\u7ec4\u5df2\u7ecf\u521b\u5efa\u5b8c\u6210\uff0c\u6240\u4ee5\u6211\u4eec\u5c06\u5f00\u59cb\u90e8\u7f72\u5b9e\u9645\u7684\u5b9e\u4f8b\u3002<\/p>\n<h3>\u521b\u5efa.tf\u6587\u4ef6<\/h3>\n<p>\u521b\u5efa\u7528\u4e8eEC2\u5b9e\u4f8b\u7684.tf\u6587\u4ef6\u8d44\u6e90\u3002<br \/>\n\u8be5\u8d44\u6e90\u7684\u5b98\u65b9\u6587\u6863\u5728\u8fd9\u91cc\u3002<\/p>\n<p>ami \u306f ap-northeast-1 \u306eAmazon Linux\u306e\u30a4\u30e1\u30fc\u30b8\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002<\/p>\n<p>subnet_id \u306f\u4f5c\u6210\u3057\u305fSubnet\u306eID\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002<\/p>\n<p>key_name \u306f\u4f5c\u6210\u3057\u305f\u30ad\u30fc\u306e\u540d\u524d\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002<\/p>\n<p>vpc_security_group_ids \u306f\u4f5c\u6210\u3057\u305fSecurity Group\u306eID\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nx\">resource<\/span> <span class=\"nx\">aws_instance<\/span> <span class=\"nx\">instance<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"nx\">ami<\/span>                         <span class=\"p\">=<\/span> <span class=\"s2\">\"ami-02a2700d37baeef8b\"<\/span>\r\n  <span class=\"nx\">instance_type<\/span>               <span class=\"p\">=<\/span> <span class=\"s2\">\"t2.micro\"<\/span>\r\n  <span class=\"nx\">subnet_id<\/span>                   <span class=\"p\">=<\/span> <span class=\"s2\">\"subnet-0bf5661c57db0d425\"<\/span>\r\n  <span class=\"nx\">associate_public_ip_address<\/span> <span class=\"p\">=<\/span> <span class=\"kc\">true<\/span>\r\n  <span class=\"nx\">key_name<\/span>                    <span class=\"p\">=<\/span> <span class=\"s2\">\"tutorial-key\"<\/span>\r\n  <span class=\"nx\">vpc_security_group_ids<\/span>      <span class=\"p\">=<\/span> <span class=\"p\">[<\/span><span class=\"s2\">\"sg-09e5b29077cb81637\"<\/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\">\"tutorial-instance\"<\/span>\r\n  <span class=\"p\">}<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<h3>\u6267\u884c\u90e8\u7f72<\/h3>\n<p>\u4f7f\u7528terraform apply\u547d\u4ee4\u6765\u90e8\u7f72EC2\u5b9e\u4f8b\u3002<\/p>\n<pre class=\"post-pre\"><code>terraform plan\r\nterraform apply\r\n<\/code><\/pre>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d8554913a08637a6b8c4c\/133-0.png\" alt=\"AWS.png\" \/><\/div>\n<h2>\u8fde\u63a5\u5230EC2\u7684SSH<\/h2>\n<p>\u7531\u4e8e\u5b8c\u6210\u4e86\u6240\u9700\u7684\u914d\u7f6e\uff0c\u6211\u4eec\u73b0\u5728\u53ef\u4ee5\u5c1d\u8bd5\u8bbf\u95eeEC2\u3002<\/p>\n<pre class=\"post-pre\"><code>ssh -i .\/aws-ec2 ec2-user@43.207.107.19\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code>The authenticity of host '43.207.107.19 (43.207.107.19)' can't be established.\r\nED25519 key fingerprint is SHA256:D+N8jZVoLknkReqOBEr8zJS1HHfkyLt1Ks+DCuxUmhs.\r\nThis key is not known by any other names\r\nAre you sure you want to continue connecting (yes\/no\/[fingerprint])? yes\r\nWarning: Permanently added '43.207.107.19' (ED25519) to the list of known hosts.\r\nEnter passphrase for key '.\/aws-ec2':\r\n   ,     #_\r\n   ~\\_  ####_        Amazon Linux 2023\r\n  ~~  \\_#####\\\r\n  ~~     \\###|\r\n  ~~       \\#\/ ___   https:\/\/aws.amazon.com\/linux\/amazon-linux-2023\r\n   ~~       V~' '-&gt;\r\n    ~~~         \/\r\n      ~~._.   _\/\r\n         _\/ _\/\r\n       _\/m\/'\r\n[ec2-user@ip-192-168-1-197 ~]$\r\n<\/code><\/pre>\n<p>\u56e0\u6b64\uff0c\u6211\u6210\u529f\u5730\u80fd\u591f\u8bbf\u95eeEC2\u5b9e\u4f8b\u7684SSH\u3002<\/p>\n<h1>\u5220\u9664\u5df2\u90e8\u7f72\u7684\u8d44\u6e90<\/h1>\n<p>\u6709\u4e09\u79cd\u65b9\u6cd5\u53ef\u4ee5\u5220\u9664\u5728\u8fd9\u4e2a\u6559\u7a0b\u4e2d\u521b\u5efa\u7684\u73af\u5883\u3002<\/p>\n<ol>\n<li style=\"list-style-type: none;\">\n<ol>\u6267\u884c terraform apply \u524d\u5220\u9664\u6216\u6ce8\u91ca .tf \u6587\u4ef6\u4e2d\u7684 resource \u90e8\u5206\u7684\u63cf\u8ff0<\/ol>\n<\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<ol>\n<li style=\"list-style-type: none;\">\n<ol>\u5c06\u6587\u4ef6\u6269\u5c55\u540d\u66f4\u6539\u4e3a\u65b0\u7684\uff08\u4f8b\u5982\uff1aaaa.tf \u2192 aaa.tf_old\uff09\uff0c\u7136\u540e\u6267\u884c terraform apply<\/ol>\n<\/li>\n<\/ol>\n<p>\u6267\u884c terraform destroy<\/p>\n<h2>\u5728.tf\u6587\u4ef6\u4e2d\u5220\u9664\u6216\u6ce8\u91ca\u6389resource\u7684\u63cf\u8ff0\u3002<\/h2>\n<p>\u6211\u5011\u8a66\u8457\u5c07&#8221;route_table_association.tf&#8221;\u6587\u4ef6\u4e2d\u8207\u8def\u7531\u8868\u548c\u5b50\u7db2\u95dc\u806f\u7684\u90e8\u5206\u6ce8\u91cb\u6389\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"c1\">#resource aws_route_table_association rta {<\/span>\r\n<span class=\"c1\">#  subnet_id      = \"subnet-0bf5661c57db0d425\"<\/span>\r\n<span class=\"c1\">#  route_table_id = \"rtb-072ca46273b6a88e6\"<\/span>\r\n<span class=\"c1\">#}<\/span>\r\n<\/code><\/pre>\n<p>\u5f53\u60a8\u6267\u884c\u6b64\u8ba1\u5212\u548c\u89c2\u5bdf\uff0c\u53ef\u4ee5\u770b\u5230\u8f93\u51fa\u4e86\u4e0e\u5220\u9664\u8d44\u6e90\u5173\u8054\u7684\u5185\u5bb9\u3002<\/p>\n<pre class=\"post-pre\"><code>terraform plan\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code>---omit---\r\n\r\nTerraform used the selected providers to generate the following execution plan.\r\nResource actions are indicated with the following symbols:\r\n  - destroy\r\n\r\nTerraform will perform the following actions:\r\n\r\n  # aws_route_table_association.rta will be destroyed\r\n  # (because aws_route_table_association.rta is not in configuration)\r\n  - resource \"aws_route_table_association\" \"rta\" {\r\n      - id             = \"rtbassoc-089a58f9f877fe6d8\" -&gt; null\r\n      - route_table_id = \"rtb-072ca46273b6a88e6\" -&gt; null\r\n      - subnet_id      = \"subnet-0bf5661c57db0d425\" -&gt; null\r\n    }\r\n\r\nPlan: 0 to add, 0 to change, 1 to destroy.\r\n\r\n\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\nNote: You didn't use the -out option to save this plan, so Terraform can't guarantee to\r\ntake exactly these actions if you run \"terraform apply\" now.\r\n<\/code><\/pre>\n<p>\u5982\u679c\u6ca1\u6709\u95ee\u9898\uff0c\u6211\u4eec\u5c06\u6267\u884c&#8221;terraform apply&#8221;\u3002<\/p>\n<pre class=\"post-pre\"><code>terraform apply\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code>---omit(Plan\u3068\u540c\u69d8)---\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_route_table_association.rta: Destroying... [id=rtbassoc-089a58f9f877fe6d8]\r\naws_route_table_association.rta: Destruction complete after 0s\r\n\r\nApply complete! Resources: 0 added, 0 changed, 1 destroyed.\r\n<\/code><\/pre>\n<p>\u5728\u8fd9\u79cd\u72b6\u6001\u4e0b\uff0c\u6211\u4eec\u53ef\u4ee5\u770b\u5230\u65e0\u6cd5\u8bbf\u95eeSSH\u3002<\/p>\n<pre class=\"post-pre\"><code>ssh -i .\/aws-ec2 ec2-user@43.207.107.19 -vvv\r\n---omit---\r\ndebug3: ssh_connect_direct: entering\r\ndebug1: Connecting to 43.207.107.19 [43.207.107.19] port 22.\r\ndebug3: set_sock_tos: set socket 3 IP_TOS 0x48\r\n\r\n\r\n\uff1c\u4ee5\u964d\u3001\u8fd4\u7b54\u306a\u3057\uff1e\r\n<\/code><\/pre>\n<h2>2. \u66f4\u6539\u6587\u4ef6\u7684\u6269\u5c55\u540d\uff08\u4f8b\u5982\uff1a\u5c06aaa.tf\u6539\u4e3aaaa.tf_old\uff09\u3002<\/h2>\n<p>\u5c06\u6269\u5c55\u540d\u4e3a.tf\u7684\u6587\u4ef6\u66f4\u6539\u4e3a\u4e0e\u8981\u5220\u9664\u7684\u8d44\u6e90\u76f8\u5173\u8054\u7684\u6587\u4ef6\u3002<\/p>\n<pre class=\"post-pre\"><code>mv route_table_association.tf route_table_association.tf_old\r\n<\/code><\/pre>\n<p>\u540e\u7eed\u884c\u4e3a\u4e0e\u6ce8\u91ca\u65f6\u76f8\u540c\u3002<\/p>\n<h2>3. \u5f3a\u5236\u6467\u6bc1\u5730\u5f62<\/h2>\n<p>\u5728Terraform\u4e2d\uff0c\u5b58\u5728\u4e00\u4e2a\u7528\u4e8e\u5220\u9664\u7279\u5b9a\u8d44\u6e90\u6216\u6240\u6709\u8d44\u6e90\u7684\u547d\u4ee4terraform destroy\u3002<br \/>\n\u5982\u679c\u8981\u5220\u9664\u6240\u6709\u8d44\u6e90\uff0c\u8bf7\u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\u3002<\/p>\n<pre class=\"post-pre\"><code>terraform plan -destroy\r\nterraform destroy\r\n<\/code><\/pre>\n<p>\u8981\u5220\u9664\u7279\u5b9a\u7684\u8d44\u6e90\u65f6\uff0c\u8bf7\u4f7f\u7528-target\u9009\u9879\u6307\u5b9a\u8d44\u6e90\u3002<\/p>\n<pre class=\"post-pre\"><code>terraform plan -destroy -target aws_route_table_association.rta\r\nterraform destroy -target aws_route_table_association.rta\r\n<\/code><\/pre>\n<p>\u5728\u6307\u5b9a\u76ee\u6807\u65f6\uff0c\u53ef\u4ee5\u4f7f\u7528&lt;resource\u79cd\u7c7b&gt;.&lt;resource\u540d\u79f0&gt;\u7684\u65b9\u5f0f\u3002\u4f8b\u5982\uff0c\u5982\u679c\u8981\u5220\u9664\u7531aws_route_table_association\u8d44\u6e90\u521b\u5efa\u7684rta\u7ec4\u4ef6\uff0c\u5219\u9700\u8981\u6307\u5b9aaws_route_table_association.rta\u3002<\/p>\n<h1>\u73af\u5883\u7684\u6e05\u6d01<\/h1>\n<p>\u5728\u8fd9\u4e2a\u90e8\u5206\u6700\u540e\uff0c\u5c06\u5220\u9664\u5728\u6b64\u521b\u5efa\u7684\u4e00\u7cfb\u5217\u8d44\u6e90\u3002<\/p>\n<pre class=\"post-pre\"><code>terraform plan -destroy\r\nterraform destroy\r\n<\/code><\/pre>\n<h1>\u6700\u540e<\/h1>\n<p>\u5728\u672c\u8282\u4e2d\uff0c\u6211\u4eec\u5b66\u4e60\u4e86Terraform\u7684\u8ba1\u5212\/\u5e94\u7528\/\u9500\u6bc1\u7b49\u57fa\u672c\u64cd\u4f5c\uff0c\u4ee5\u53ca\u5982\u4f55\u7f16\u5199tf\u6587\u4ef6\u6765\u90e8\u7f72AWS\u7684\u7b80\u5355\u914d\u7f6e\u3002\u5728\u4e0b\u4e00\u8282\u201cAWS\u5b9e\u8df5\u5b66\u4e60Terraform2\u301c\u672c\u5730\u503c\u548c\u8d44\u6e90\u5f15\u7528\u7684\u5e94\u7528\u201d\u4e2d\uff0c\u6211\u4eec\u5c06\u5b66\u4e60\u66f4\u6709\u6548\u7684tf\u6587\u4ef6\u5199\u4f5c\u65b9\u6cd5\u3002<\/p>\n<h1>\u8bf7\u63d0\u4f9b\u4e00\u4e2a\u4e0a\u4e0b\u6587\u6216\u8005\u66f4\u591a\u7684\u4fe1\u606f\u3002<\/h1>\n<p>\u8fd9\u6b21\u4f7f\u7528\u7684\u4ee3\u7801\u5df2\u7ecf\u4e0a\u4f20\u5230\u4ee5\u4e0b\u7684\u4ed3\u5e93\u4e2d:<br \/>\nhttps:\/\/github.com\/skitamura7446\/terraform-tutorial\/tree\/master\/tutorial-1<br \/>\n\u8bf7\u6ce8\u610f\uff0c\u7531\u4e8e\u5404\u79cdtf\u6587\u4ef6\u4e2d\u5305\u542b\u4e86\u4e2a\u4eba\u4f7f\u7528\u7684ID\u3001AWS\u8d26\u6237\u4fe1\u606f\u548cEC2\u7684\u516c\u94a5\u7b49\uff0c\u8bf7\u52ff\u76f4\u63a5\u4f7f\u7528\u8be5\u4ed3\u5e93\u8fdb\u884capply\u64cd\u4f5c\uff0c\u8c22\u8c22\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u9996\u5148 \u5927\u5bb6\u6709\u6ca1\u6709\u5728\u4f7f\u7528IaC\uff1f \u8bf4\u5230IaC\u5de5\u5177\uff0c\u4eba\u4eec\u5e38\u5e38\u4f1a\u60f3\u5230Terraform\u548cAnsible\u8fd9\u4e24\u4e2a\u5de8\u5934\uff0c\u7ecf [&hellip;]<\/p>\n","protected":false},"author":9,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-48393","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>\u5728\u4e2d\u6587\u4e2d\uff0c\u91cd\u65b0\u8868\u8fbe\u5982\u4e0b\u5185\u5bb9\uff1a\u5b66\u4e60\u5728AWS\u4e0a\u5b9e\u8df5Terraform\u2460\u301c\u521b\u5efaAWS\u8d44\u6e90\uff08\u521d\u7ea7\u7bc7\uff09 - 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\/\u5728\u4e2d\u6587\u4e2d\uff0c\u91cd\u65b0\u8868\u8fbe\u5982\u4e0b\u5185\u5bb9\uff1a\u5b66\u4e60\u5728aws\u4e0a\u5b9e\u8df5terraform\/\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u5728\u4e2d\u6587\u4e2d\uff0c\u91cd\u65b0\u8868\u8fbe\u5982\u4e0b\u5185\u5bb9\uff1a\u5b66\u4e60\u5728AWS\u4e0a\u5b9e\u8df5Terraform\u2460\u301c\u521b\u5efaAWS\u8d44\u6e90\uff08\u521d\u7ea7\u7bc7\uff09\" \/>\n<meta property=\"og:description\" content=\"\u9996\u5148 \u5927\u5bb6\u6709\u6ca1\u6709\u5728\u4f7f\u7528IaC\uff1f \u8bf4\u5230IaC\u5de5\u5177\uff0c\u4eba\u4eec\u5e38\u5e38\u4f1a\u60f3\u5230Terraform\u548cAnsible\u8fd9\u4e24\u4e2a\u5de8\u5934\uff0c\u7ecf [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/zh\/blog\/\u5728\u4e2d\u6587\u4e2d\uff0c\u91cd\u65b0\u8868\u8fbe\u5982\u4e0b\u5185\u5bb9\uff1a\u5b66\u4e60\u5728aws\u4e0a\u5b9e\u8df5terraform\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog - Silicon Cloud\" \/>\n<meta property=\"article:published_time\" content=\"2023-12-25T13:48:58+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-04-30T08:43:10+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d8554913a08637a6b8c4c\/15-0.png\" \/>\n<meta name=\"author\" content=\"\u6e05, \u626c\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"\u6e05, \u626c\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 \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%a8%e4%b8%ad%e6%96%87%e4%b8%ad%ef%bc%8c%e9%87%8d%e6%96%b0%e8%a1%a8%e8%be%be%e5%a6%82%e4%b8%8b%e5%86%85%e5%ae%b9%ef%bc%9a%e5%ad%a6%e4%b9%a0%e5%9c%a8aws%e4%b8%8a%e5%ae%9e%e8%b7%b5terraform\/\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8%e4%b8%ad%e6%96%87%e4%b8%ad%ef%bc%8c%e9%87%8d%e6%96%b0%e8%a1%a8%e8%be%be%e5%a6%82%e4%b8%8b%e5%86%85%e5%ae%b9%ef%bc%9a%e5%ad%a6%e4%b9%a0%e5%9c%a8aws%e4%b8%8a%e5%ae%9e%e8%b7%b5terraform\/\",\"name\":\"\u5728\u4e2d\u6587\u4e2d\uff0c\u91cd\u65b0\u8868\u8fbe\u5982\u4e0b\u5185\u5bb9\uff1a\u5b66\u4e60\u5728AWS\u4e0a\u5b9e\u8df5Terraform\u2460\u301c\u521b\u5efaAWS\u8d44\u6e90\uff08\u521d\u7ea7\u7bc7\uff09 - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\"},\"datePublished\":\"2023-12-25T13:48:58+00:00\",\"dateModified\":\"2024-04-30T08:43:10+00:00\",\"author\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/cb5556d2501da73d864cac945e8d9461\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8%e4%b8%ad%e6%96%87%e4%b8%ad%ef%bc%8c%e9%87%8d%e6%96%b0%e8%a1%a8%e8%be%be%e5%a6%82%e4%b8%8b%e5%86%85%e5%ae%b9%ef%bc%9a%e5%ad%a6%e4%b9%a0%e5%9c%a8aws%e4%b8%8a%e5%ae%9e%e8%b7%b5terraform\/#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8%e4%b8%ad%e6%96%87%e4%b8%ad%ef%bc%8c%e9%87%8d%e6%96%b0%e8%a1%a8%e8%be%be%e5%a6%82%e4%b8%8b%e5%86%85%e5%ae%b9%ef%bc%9a%e5%ad%a6%e4%b9%a0%e5%9c%a8aws%e4%b8%8a%e5%ae%9e%e8%b7%b5terraform\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8%e4%b8%ad%e6%96%87%e4%b8%ad%ef%bc%8c%e9%87%8d%e6%96%b0%e8%a1%a8%e8%be%be%e5%a6%82%e4%b8%8b%e5%86%85%e5%ae%b9%ef%bc%9a%e5%ad%a6%e4%b9%a0%e5%9c%a8aws%e4%b8%8a%e5%ae%9e%e8%b7%b5terraform\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.silicloud.com\/zh\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u5728\u4e2d\u6587\u4e2d\uff0c\u91cd\u65b0\u8868\u8fbe\u5982\u4e0b\u5185\u5bb9\uff1a\u5b66\u4e60\u5728AWS\u4e0a\u5b9e\u8df5Terraform\u2460\u301c\u521b\u5efaAWS\u8d44\u6e90\uff08\u521d\u7ea7\u7bc7\uff09\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/\",\"name\":\"Blog - Silicon Cloud\",\"description\":\"\",\"inLanguage\":\"zh-Hans\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/cb5556d2501da73d864cac945e8d9461\",\"name\":\"\u6e05, \u626c\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/32a4239de8ff29adace466261d309424a1e5fe9f7e3036bf89fe03f2e3dbe717?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/32a4239de8ff29adace466261d309424a1e5fe9f7e3036bf89fe03f2e3dbe717?s=96&d=mm&r=g\",\"caption\":\"\u6e05, \u626c\"},\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/author\/qingyang\/\"},{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8%e4%b8%ad%e6%96%87%e4%b8%ad%ef%bc%8c%e9%87%8d%e6%96%b0%e8%a1%a8%e8%be%be%e5%a6%82%e4%b8%8b%e5%86%85%e5%ae%b9%ef%bc%9a%e5%ad%a6%e4%b9%a0%e5%9c%a8aws%e4%b8%8a%e5%ae%9e%e8%b7%b5terraform\/#local-main-organization-logo\",\"url\":\"\",\"contentUrl\":\"\",\"caption\":\"Blog - Silicon Cloud\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"\u5728\u4e2d\u6587\u4e2d\uff0c\u91cd\u65b0\u8868\u8fbe\u5982\u4e0b\u5185\u5bb9\uff1a\u5b66\u4e60\u5728AWS\u4e0a\u5b9e\u8df5Terraform\u2460\u301c\u521b\u5efaAWS\u8d44\u6e90\uff08\u521d\u7ea7\u7bc7\uff09 - 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\/\u5728\u4e2d\u6587\u4e2d\uff0c\u91cd\u65b0\u8868\u8fbe\u5982\u4e0b\u5185\u5bb9\uff1a\u5b66\u4e60\u5728aws\u4e0a\u5b9e\u8df5terraform\/","og_locale":"zh_CN","og_type":"article","og_title":"\u5728\u4e2d\u6587\u4e2d\uff0c\u91cd\u65b0\u8868\u8fbe\u5982\u4e0b\u5185\u5bb9\uff1a\u5b66\u4e60\u5728AWS\u4e0a\u5b9e\u8df5Terraform\u2460\u301c\u521b\u5efaAWS\u8d44\u6e90\uff08\u521d\u7ea7\u7bc7\uff09","og_description":"\u9996\u5148 \u5927\u5bb6\u6709\u6ca1\u6709\u5728\u4f7f\u7528IaC\uff1f \u8bf4\u5230IaC\u5de5\u5177\uff0c\u4eba\u4eec\u5e38\u5e38\u4f1a\u60f3\u5230Terraform\u548cAnsible\u8fd9\u4e24\u4e2a\u5de8\u5934\uff0c\u7ecf [&hellip;]","og_url":"https:\/\/www.silicloud.com\/zh\/blog\/\u5728\u4e2d\u6587\u4e2d\uff0c\u91cd\u65b0\u8868\u8fbe\u5982\u4e0b\u5185\u5bb9\uff1a\u5b66\u4e60\u5728aws\u4e0a\u5b9e\u8df5terraform\/","og_site_name":"Blog - Silicon Cloud","article_published_time":"2023-12-25T13:48:58+00:00","article_modified_time":"2024-04-30T08:43:10+00:00","og_image":[{"url":"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d8554913a08637a6b8c4c\/15-0.png"}],"author":"\u6e05, \u626c","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"\u6e05, \u626c","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"8 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8%e4%b8%ad%e6%96%87%e4%b8%ad%ef%bc%8c%e9%87%8d%e6%96%b0%e8%a1%a8%e8%be%be%e5%a6%82%e4%b8%8b%e5%86%85%e5%ae%b9%ef%bc%9a%e5%ad%a6%e4%b9%a0%e5%9c%a8aws%e4%b8%8a%e5%ae%9e%e8%b7%b5terraform\/","url":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8%e4%b8%ad%e6%96%87%e4%b8%ad%ef%bc%8c%e9%87%8d%e6%96%b0%e8%a1%a8%e8%be%be%e5%a6%82%e4%b8%8b%e5%86%85%e5%ae%b9%ef%bc%9a%e5%ad%a6%e4%b9%a0%e5%9c%a8aws%e4%b8%8a%e5%ae%9e%e8%b7%b5terraform\/","name":"\u5728\u4e2d\u6587\u4e2d\uff0c\u91cd\u65b0\u8868\u8fbe\u5982\u4e0b\u5185\u5bb9\uff1a\u5b66\u4e60\u5728AWS\u4e0a\u5b9e\u8df5Terraform\u2460\u301c\u521b\u5efaAWS\u8d44\u6e90\uff08\u521d\u7ea7\u7bc7\uff09 - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website"},"datePublished":"2023-12-25T13:48:58+00:00","dateModified":"2024-04-30T08:43:10+00:00","author":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/cb5556d2501da73d864cac945e8d9461"},"breadcrumb":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8%e4%b8%ad%e6%96%87%e4%b8%ad%ef%bc%8c%e9%87%8d%e6%96%b0%e8%a1%a8%e8%be%be%e5%a6%82%e4%b8%8b%e5%86%85%e5%ae%b9%ef%bc%9a%e5%ad%a6%e4%b9%a0%e5%9c%a8aws%e4%b8%8a%e5%ae%9e%e8%b7%b5terraform\/#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8%e4%b8%ad%e6%96%87%e4%b8%ad%ef%bc%8c%e9%87%8d%e6%96%b0%e8%a1%a8%e8%be%be%e5%a6%82%e4%b8%8b%e5%86%85%e5%ae%b9%ef%bc%9a%e5%ad%a6%e4%b9%a0%e5%9c%a8aws%e4%b8%8a%e5%ae%9e%e8%b7%b5terraform\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8%e4%b8%ad%e6%96%87%e4%b8%ad%ef%bc%8c%e9%87%8d%e6%96%b0%e8%a1%a8%e8%be%be%e5%a6%82%e4%b8%8b%e5%86%85%e5%ae%b9%ef%bc%9a%e5%ad%a6%e4%b9%a0%e5%9c%a8aws%e4%b8%8a%e5%ae%9e%e8%b7%b5terraform\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.silicloud.com\/zh\/blog\/"},{"@type":"ListItem","position":2,"name":"\u5728\u4e2d\u6587\u4e2d\uff0c\u91cd\u65b0\u8868\u8fbe\u5982\u4e0b\u5185\u5bb9\uff1a\u5b66\u4e60\u5728AWS\u4e0a\u5b9e\u8df5Terraform\u2460\u301c\u521b\u5efaAWS\u8d44\u6e90\uff08\u521d\u7ea7\u7bc7\uff09"}]},{"@type":"WebSite","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website","url":"https:\/\/www.silicloud.com\/zh\/blog\/","name":"Blog - Silicon Cloud","description":"","inLanguage":"zh-Hans"},{"@type":"Person","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/cb5556d2501da73d864cac945e8d9461","name":"\u6e05, \u626c","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/32a4239de8ff29adace466261d309424a1e5fe9f7e3036bf89fe03f2e3dbe717?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/32a4239de8ff29adace466261d309424a1e5fe9f7e3036bf89fe03f2e3dbe717?s=96&d=mm&r=g","caption":"\u6e05, \u626c"},"url":"https:\/\/www.silicloud.com\/zh\/blog\/author\/qingyang\/"},{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8%e4%b8%ad%e6%96%87%e4%b8%ad%ef%bc%8c%e9%87%8d%e6%96%b0%e8%a1%a8%e8%be%be%e5%a6%82%e4%b8%8b%e5%86%85%e5%ae%b9%ef%bc%9a%e5%ad%a6%e4%b9%a0%e5%9c%a8aws%e4%b8%8a%e5%ae%9e%e8%b7%b5terraform\/#local-main-organization-logo","url":"","contentUrl":"","caption":"Blog - Silicon Cloud"}]}},"_links":{"self":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/48393","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/users\/9"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/comments?post=48393"}],"version-history":[{"count":2,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/48393\/revisions"}],"predecessor-version":[{"id":93071,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/48393\/revisions\/93071"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/media?parent=48393"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/categories?post=48393"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/tags?post=48393"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}