{"id":48919,"date":"2023-07-10T04:30:58","date_gmt":"2023-04-15T08:41:21","guid":{"rendered":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%86terraform%e8%84%9a%e6%9c%ac%e6%a8%a1%e5%9d%97%e5%8c%96%ef%bc%8c%e5%b9%b6%e5%ba%94%e7%94%a8%e4%ba%8egcp%e7%9a%84%e5%a4%9a%e4%b8%aa%e7%8e%af%e5%a2%83%e3%80%82\/"},"modified":"2024-04-30T12:48:36","modified_gmt":"2024-04-30T04:48:36","slug":"%e5%b0%86terraform%e8%84%9a%e6%9c%ac%e6%a8%a1%e5%9d%97%e5%8c%96%ef%bc%8c%e5%b9%b6%e5%ba%94%e7%94%a8%e4%ba%8egcp%e7%9a%84%e5%a4%9a%e4%b8%aa%e7%8e%af%e5%a2%83%e3%80%82","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%86terraform%e8%84%9a%e6%9c%ac%e6%a8%a1%e5%9d%97%e5%8c%96%ef%bc%8c%e5%b9%b6%e5%ba%94%e7%94%a8%e4%ba%8egcp%e7%9a%84%e5%a4%9a%e4%b8%aa%e7%8e%af%e5%a2%83%e3%80%82\/","title":{"rendered":"\u5c06Terraform\u811a\u672c\u6a21\u5757\u5316\uff0c\u5e76\u5e94\u7528\u4e8eGCP\u7684\u591a\u4e2a\u73af\u5883"},"content":{"rendered":"<p>\u6211\u6b63\u5728\u4f7f\u7528Terraform\u7684v0.12.16\u7248\u672c\uff08\u6b64\u6587\u7ae0\u53d1\u5e03\u65f6\u7684\u6700\u65b0\u7248\u672c\uff09\u3002<\/p>\n<p>\u672c\u6587\u7684\u76ee\u7684\u662f\u4ecb\u7ecd\u5982\u4f55\u5c06Terraform\u811a\u672c\u6a21\u5757\u5316\uff0c\u4ee5\u9002\u7528\u4e8eGCP\u7684\u5f00\u53d1\u73af\u5883\u3001\u6d4b\u8bd5\u73af\u5883\u548c\u751f\u4ea7\u73af\u5883\u3002<\/p>\n<p>\u5982\u679c\u60a8\u662f\u7b2c\u4e00\u6b21\u4f7f\u7528Terraform\uff0c\u8bf7\u67e5\u770b\u8fd9\u7bc7\u6587\u7ae0\uff08\u4f7f\u7528Terraform\u5de5\u5177\u8fdb\u884cGCP\u8d44\u6e90\u7ba1\u7406\uff09\u3002<\/p>\n<h2>1. \u521b\u5efaTerraform\u811a\u672c<\/h2>\n<p>\u5728\u8fd9\u7bc7\u6587\u7ae0\u4e2d\uff0c\u6211\u4eec\u5c06\u4ee5GKE\u96c6\u7fa4\u3001\u5b58\u50a8\u6876Bucket\u548cPubsub\u4e3b\u9898\u4e0e\u8ba2\u9605\u4f5c\u4e3a\u4f8b\u5b50\u6765\u521b\u5efa\u90e8\u7f72\u811a\u672c\u3002<\/p>\n<p>Terraform\u811a\u672c\u6587\u4ef6\u5939\u7684\u7ed3\u6784<\/p>\n<pre class=\"post-pre\"><code>terraform_script_folder\r\n\u251c\u2500\u2500 _modules\r\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 cluster\r\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 main.tf\r\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 outputs.tf\r\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2514\u2500\u2500 variables.tf\r\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 pubsub\r\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 main.tf\r\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 outputs.tf\r\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2514\u2500\u2500 variables.tf\r\n\u2502\u00a0\u00a0 \u2514\u2500\u2500 storage\r\n\u2502\u00a0\u00a0     \u251c\u2500\u2500 main.tf\r\n\u2502\u00a0\u00a0     \u251c\u2500\u2500 outputs.tf\r\n\u2502\u00a0\u00a0     \u2514\u2500\u2500 variables.tf\r\n\u251c\u2500\u2500 dev\r\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 account.json\r\n\u2502\u00a0  \u2514\u2500\u2500 terraform.tfstate\r\n\u251c\u2500\u2500 dev.tfvars\r\n\u251c\u2500\u2500 main.tf\r\n\u251c\u2500\u2500 prod\r\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 account.json\r\n\u2502\u00a0  \u2514\u2500\u2500 terraform.tfstate\r\n\u251c\u2500\u2500 prod.tfvars\r\n\u251c\u2500\u2500 staging\r\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 account.json\r\n\u2502\u00a0  \u2514\u2500\u2500 terraform.tfstate\r\n\u251c\u2500\u2500 staging.tfvars\r\n\u2514\u2500\u2500 variables.tf\r\n<\/code><\/pre>\n<p>\u6587\u4ef6\u5939\u7ed3\u6784\u7684\u8bf4\u660e<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">_modules\u30d5\u30a9\u30eb\u30c0\uff1a\u30ea\u30bd\u30fc\u30b9\u7a2e\u985e\u306e\u3054\u3068\u306b\u5171\u6709\u5b9a\u7fa9\u30b9\u30af\u30ea\u30d7\u30c8\u3092\u683c\u7d0d\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\">dev\u3001staging\u3001prod\u306e\u30d5\u30a9\u30eb\u30c0\uff1a\u958b\u767a\u3001\u30b9\u30c6\u30fc\u30b8\u30f3\u30b0\u3001\u672c\u756a\u306e\u74b0\u5883\u7528\u306b\u30a2\u30af\u30bb\u30b9\u7528\u306e\u30a2\u30ab\u30a6\u30f3\u30c8\u30d5\u30a1\u30a4\u30eb\u3068State\u30d5\u30a1\u30a4\u30eb\u3092\u683c\u7d0d<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">dev.tfvars\u3001staging.tfvars\u3001prod.tfvars\u306e\u30d5\u30a1\u30a4\u30eb\uff1a\u5404\u7a2e\u74b0\u5883\u306b\u3088\u308b\u30d1\u30e9\u30e1\u30fc\u30bf\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb<\/ul>\n<h2>2. \u521b\u5efaTerraform\u811a\u672c<\/h2>\n<h4>2.1 \u5171\u6709\u6a21\u5757\u811a\u672c\uff08_modules\uff09<\/h4>\n<p>_\u6a21\u5757\/\u5b58\u50a8\/\u4e3b.tf<\/p>\n<pre class=\"post-pre\"><code>resource <span class=\"s2\">\"google_storage_bucket\"<\/span> <span class=\"s2\">\"sample-bucket\"<\/span> <span class=\"o\">{<\/span>\r\n  name          <span class=\"o\">=<\/span> var.name\r\n  location      <span class=\"o\">=<\/span> var.region\r\n  storage_class <span class=\"o\">=<\/span> var.storage_class\r\n\r\n  labels <span class=\"o\">=<\/span> <span class=\"o\">{<\/span>\r\n    app <span class=\"o\">=<\/span> var.app\r\n    <span class=\"nb\">env<\/span> <span class=\"o\">=<\/span> var.env\r\n  <span class=\"o\">}<\/span>\r\n<span class=\"o\">}<\/span>\r\n<\/code><\/pre>\n<p>_modules\/storage\/variables.tf \u7684\u4e2d\u6587\u91ca\u4e49\u662f\u4ec0\u4e48\uff1f<\/p>\n<pre class=\"post-pre\"><code>resource <span class=\"s2\">\"google_storage_bucket\"<\/span> <span class=\"s2\">\"sample-bucket\"<\/span> <span class=\"o\">{<\/span>\r\n  name          <span class=\"o\">=<\/span> var.name\r\n  location      <span class=\"o\">=<\/span> var.region\r\n  storage_class <span class=\"o\">=<\/span> var.storage_class\r\n\r\n  labels <span class=\"o\">=<\/span> <span class=\"o\">{<\/span>\r\n    app <span class=\"o\">=<\/span> var.app\r\n    <span class=\"nb\">env<\/span> <span class=\"o\">=<\/span> var.env\r\n  <span class=\"o\">}<\/span>\r\n<span class=\"o\">}<\/span>\r\n<\/code><\/pre>\n<p>\u4e0d\u4f7f\u7528\u300coutputs.tf\u300d\u811a\u672c\u3002<\/p>\n<h4>2.2 \u4e3b\u811a\u672c<\/h4>\n<p>\u4e3b\u8981.tf<\/p>\n<pre class=\"post-pre\"><code>terraform <span class=\"o\">{<\/span>\r\n  required_version <span class=\"o\">=<\/span> <span class=\"s2\">\"~&gt;0.12.14\"<\/span>\r\n<span class=\"o\">}<\/span>\r\n\r\n<span class=\"c\">## project ##<\/span>\r\nprovider <span class=\"s2\">\"google\"<\/span> <span class=\"o\">{<\/span>\r\n  project     <span class=\"o\">=<\/span> var.project\r\n  region      <span class=\"o\">=<\/span> var.region\r\n<span class=\"o\">}<\/span>\r\n\r\n<span class=\"c\">## storage buckets ##<\/span>\r\nmodule <span class=\"s2\">\"storage\"<\/span> <span class=\"o\">{<\/span>\r\n  <span class=\"nb\">source<\/span> <span class=\"o\">=<\/span> <span class=\"s2\">\".\/_modules\/storage\"<\/span>\r\n\r\n  name   <span class=\"o\">=<\/span> var.storage_name\r\n  region <span class=\"o\">=<\/span> var.region\r\n  app    <span class=\"o\">=<\/span> var.app\r\n  <span class=\"nb\">env<\/span>    <span class=\"o\">=<\/span> var.env\r\n<span class=\"o\">}<\/span>\r\n\r\n<span class=\"c\">## cluster ##<\/span>\r\nmodule <span class=\"s2\">\"cluster\"<\/span> <span class=\"o\">{<\/span>\r\n  <span class=\"nb\">source<\/span> <span class=\"o\">=<\/span> <span class=\"s2\">\".\/_modules\/cluster\"<\/span>\r\n\r\n  name  <span class=\"o\">=<\/span> var.cluster_name\r\n  zone  <span class=\"o\">=<\/span> var.zone\r\n  node_count <span class=\"o\">=<\/span> var.node_count\r\n  initial_node_count <span class=\"o\">=<\/span> var.initial_node_count\r\n  node_pool_name <span class=\"o\">=<\/span> var.node_pool_name\r\n  node_machine_type <span class=\"o\">=<\/span> var.node_machine_type\r\n<span class=\"o\">}<\/span>\r\n\r\n<span class=\"c\">## topic &amp; subscription ##<\/span>\r\n<span class=\"c\">## the first one<\/span>\r\nmodule <span class=\"s2\">\"the-first-topic\"<\/span> <span class=\"o\">{<\/span>\r\n  <span class=\"nb\">source<\/span> <span class=\"o\">=<\/span> <span class=\"s2\">\".\/_modules\/pubsub\"<\/span>\r\n\r\n  topic_name  <span class=\"o\">=<\/span> var.first_topic_name\r\n  subscription_name  <span class=\"o\">=<\/span> var.first_subscription_name\r\n\r\n  app    <span class=\"o\">=<\/span> var.app\r\n  <span class=\"nb\">env<\/span>    <span class=\"o\">=<\/span> var.env\r\n<span class=\"o\">}<\/span>\r\n\r\n<span class=\"c\">## the second one<\/span>\r\nmodule <span class=\"s2\">\"the-second-topic\"<\/span> <span class=\"o\">{<\/span>\r\n  <span class=\"nb\">source<\/span> <span class=\"o\">=<\/span> <span class=\"s2\">\".\/_modules\/pubsub\"<\/span>\r\n\r\n  topic_name  <span class=\"o\">=<\/span> var.second_topic_name\r\n  subscription_name  <span class=\"o\">=<\/span> var.second_subscription_name\r\n\r\n  app    <span class=\"o\">=<\/span> var.app\r\n  <span class=\"nb\">env<\/span>    <span class=\"o\">=<\/span> var.env\r\n<span class=\"o\">}<\/span>\r\n<\/code><\/pre>\n<p>variables.tf \u53d8\u91cf.tf<\/p>\n<pre class=\"post-pre\"><code><span class=\"c\">## global variables<\/span>\r\nvariable <span class=\"s2\">\"project\"<\/span> <span class=\"o\">{}<\/span>\r\nvariable <span class=\"s2\">\"app\"<\/span> <span class=\"o\">{}<\/span>\r\nvariable <span class=\"s2\">\"env\"<\/span> <span class=\"o\">{}<\/span>\r\nvariable <span class=\"s2\">\"region\"<\/span> <span class=\"o\">{<\/span>\r\n  default <span class=\"o\">=<\/span> <span class=\"s2\">\"asia-northeast1\"<\/span>\r\n<span class=\"o\">}<\/span>\r\nvariable <span class=\"s2\">\"zone\"<\/span> <span class=\"o\">{<\/span>\r\n  default <span class=\"o\">=<\/span> <span class=\"s2\">\"asia-northeast1-b\"<\/span>\r\n<span class=\"o\">}<\/span>\r\n\r\n<span class=\"c\">## storage variables<\/span>\r\nvariable <span class=\"s2\">\"storage_name\"<\/span> <span class=\"o\">{}<\/span>\r\n\r\n<span class=\"c\">## cluster variables<\/span>\r\nvariable <span class=\"s2\">\"cluster_name\"<\/span> <span class=\"o\">{}<\/span>\r\nvariable <span class=\"s2\">\"node_count\"<\/span> <span class=\"o\">{}<\/span>\r\nvariable <span class=\"s2\">\"initial_node_count\"<\/span> <span class=\"o\">{}<\/span>\r\nvariable <span class=\"s2\">\"node_pool_name\"<\/span> <span class=\"o\">{}<\/span>\r\nvariable <span class=\"s2\">\"node_machine_type\"<\/span> <span class=\"o\">{}<\/span>\r\n\r\n<span class=\"c\">## pubsub variables<\/span>\r\nvariable <span class=\"s2\">\"first_topic_name\"<\/span> <span class=\"o\">{}<\/span>\r\nvariable <span class=\"s2\">\"first_subscription_name\"<\/span> <span class=\"o\">{}<\/span>\r\nvariable <span class=\"s2\">\"second_topic_name\"<\/span> <span class=\"o\">{}<\/span>\r\nvariable <span class=\"s2\">\"second_subscription_name\"<\/span> <span class=\"o\">{}<\/span>\r\n<\/code><\/pre>\n<h4>2.3 \u73af\u5883\u6bcf\u4e2a\u53c2\u6570\u6587\u4ef6<\/h4>\n<p>\u5f00\u53d1\u73af\u5883\uff08dev.tfvars\uff09<\/p>\n<pre class=\"post-pre\"><code><span class=\"c\">## global variables<\/span>\r\nproject <span class=\"o\">=<\/span> <span class=\"s2\">\"project-dev\"<\/span>\r\n<span class=\"nb\">env<\/span>     <span class=\"o\">=<\/span> <span class=\"s2\">\"dev\"<\/span>\r\napp     <span class=\"o\">=<\/span> <span class=\"s2\">\"sample-app\"<\/span>\r\nregion  <span class=\"o\">=<\/span> <span class=\"s2\">\"asia-northeast1\"<\/span>\r\nzone    <span class=\"o\">=<\/span> <span class=\"s2\">\"asia-northeast1-b\"<\/span>\r\n\r\n\r\n<span class=\"c\">## storage variables<\/span>\r\nstorage_name <span class=\"o\">=<\/span> <span class=\"s2\">\"dev_private_bucket_abc123\"<\/span>\r\n\r\n<span class=\"c\">## cluster variables<\/span>\r\ncluster_name        <span class=\"o\">=<\/span> <span class=\"s2\">\"sample-cluster\"<\/span>\r\ninitial_node_count  <span class=\"o\">=<\/span> 1\r\nnode_count          <span class=\"o\">=<\/span> 2\r\nnode_pool_name      <span class=\"o\">=<\/span> <span class=\"s2\">\"sample-node-pool\"<\/span>\r\nnode_machine_type   <span class=\"o\">=<\/span> <span class=\"s2\">\"n1-standard-1\"<\/span>\r\n\r\n<span class=\"c\">## pubsub variables<\/span>\r\nfirst_topic_name            <span class=\"o\">=<\/span> <span class=\"s2\">\"sample-first-topic\"<\/span>\r\nfirst_subscription_name     <span class=\"o\">=<\/span> <span class=\"s2\">\"sample-first-topic-sub\"<\/span>\r\nsecond_topic_name           <span class=\"o\">=<\/span> <span class=\"s2\">\"sample-second-topic\"<\/span>\r\nsecond_subscription_name    <span class=\"o\">=<\/span> <span class=\"s2\">\"sample-second-topic-sub\"<\/span>\r\n<\/code><\/pre>\n<p>\u6682\u5b58\u73af\u5883\uff08staging.tfvars\uff09<\/p>\n<pre class=\"post-pre\"><code><span class=\"c\">## global variables<\/span>\r\nproject <span class=\"o\">=<\/span> <span class=\"s2\">\"project-staging\"<\/span>\r\n<span class=\"nb\">env<\/span>     <span class=\"o\">=<\/span> <span class=\"s2\">\"staging\"<\/span>\r\napp     <span class=\"o\">=<\/span> <span class=\"s2\">\"sample-app\"<\/span>\r\nregion  <span class=\"o\">=<\/span> <span class=\"s2\">\"asia-northeast1\"<\/span>\r\nzone    <span class=\"o\">=<\/span> <span class=\"s2\">\"asia-northeast1-b\"<\/span>\r\n\r\n\r\n<span class=\"c\">## storage variables<\/span>\r\nstorage_name <span class=\"o\">=<\/span> <span class=\"s2\">\"staging_private_bucket_abc123\"<\/span>\r\n\r\n<span class=\"c\">## cluster variables<\/span>\r\ncluster_name        <span class=\"o\">=<\/span> <span class=\"s2\">\"sample-cluster\"<\/span>\r\ninitial_node_count  <span class=\"o\">=<\/span> 1\r\nnode_count          <span class=\"o\">=<\/span> 2\r\nnode_pool_name      <span class=\"o\">=<\/span> <span class=\"s2\">\"sample-node-pool\"<\/span>\r\nnode_machine_type   <span class=\"o\">=<\/span> <span class=\"s2\">\"n1-standard-1\"<\/span>\r\n\r\n<span class=\"c\">## pubsub variables<\/span>\r\nfirst_topic_name            <span class=\"o\">=<\/span> <span class=\"s2\">\"sample-first-topic\"<\/span>\r\nfirst_subscription_name     <span class=\"o\">=<\/span> <span class=\"s2\">\"sample-first-topic-sub\"<\/span>\r\nsecond_topic_name           <span class=\"o\">=<\/span> <span class=\"s2\">\"sample-second-topic\"<\/span>\r\nsecond_subscription_name    <span class=\"o\">=<\/span> <span class=\"s2\">\"sample-second-topic-sub\"<\/span>\r\n<\/code><\/pre>\n<p>\u4ea7\u54c1\u73af\u5883\uff08prod.tfvars\uff09<\/p>\n<pre class=\"post-pre\"><code><span class=\"c\">## global variables<\/span>\r\nproject <span class=\"o\">=<\/span> <span class=\"s2\">\"project-prod\"<\/span>\r\n<span class=\"nb\">env<\/span>     <span class=\"o\">=<\/span> <span class=\"s2\">\"prod\"<\/span>\r\napp     <span class=\"o\">=<\/span> <span class=\"s2\">\"sample-app\"<\/span>\r\nregion  <span class=\"o\">=<\/span> <span class=\"s2\">\"asia-northeast1\"<\/span>\r\nzone    <span class=\"o\">=<\/span> <span class=\"s2\">\"asia-northeast1-b\"<\/span>\r\n\r\n\r\n<span class=\"c\">## storage variables<\/span>\r\nstorage_name <span class=\"o\">=<\/span> <span class=\"s2\">\"prod_private_bucket_abc123\"<\/span>\r\n\r\n<span class=\"c\">## cluster variables<\/span>\r\ncluster_name        <span class=\"o\">=<\/span> <span class=\"s2\">\"sample-cluster\"<\/span>\r\ninitial_node_count  <span class=\"o\">=<\/span> 1\r\nnode_count          <span class=\"o\">=<\/span> 2\r\nnode_pool_name      <span class=\"o\">=<\/span> <span class=\"s2\">\"sample-node-pool\"<\/span>\r\nnode_machine_type   <span class=\"o\">=<\/span> <span class=\"s2\">\"n1-standard-1\"<\/span>\r\n\r\n<span class=\"c\">## pubsub variables<\/span>\r\nfirst_topic_name            <span class=\"o\">=<\/span> <span class=\"s2\">\"sample-first-topic\"<\/span>\r\nfirst_subscription_name     <span class=\"o\">=<\/span> <span class=\"s2\">\"sample-first-topic-sub\"<\/span>\r\nsecond_topic_name           <span class=\"o\">=<\/span> <span class=\"s2\">\"sample-second-topic\"<\/span>\r\nsecond_subscription_name    <span class=\"o\">=<\/span> <span class=\"s2\">\"sample-second-topic-sub\"<\/span>\r\n<\/code><\/pre>\n<h2>3. \u6839\u636e\u73af\u5883\u8fdb\u884c\u90e8\u7f72\u3002<\/h2>\n<h4>3.1 \u5f00\u53d1\u73af\u5883 translates to &#8220;Development environment&#8221; in English.<\/h4>\n<pre class=\"post-pre\"><code><span class=\"c\"># \u5c02\u7528\u306e\u74b0\u5883\u5909\u6570\u306bCredential\u30d5\u30a1\u30a4\u30eb\u3092\u8a2d\u5b9a\u3059\u308b<\/span>\r\n<span class=\"nv\">$ <\/span><span class=\"nb\">export <\/span><span class=\"nv\">GOOGLE_CLOUD_KEYFILE_JSON<\/span><span class=\"o\">=<\/span>path_to\/dev\/account.json\r\n\r\n<span class=\"c\"># tf\u30d5\u30a1\u30a4\u30eb\u3092\u9069\u7528\u3059\u308b\u524d\u306b\u5fc5\u305a\u5dee\u5206\u3092\u78ba\u8a8d\u3059\u308b<\/span>\r\n<span class=\"nb\">cd<\/span> <span class=\"o\">[<\/span>TERRAFORM_FOLDER]\r\nterraform plan <span class=\"nt\">-var-file<\/span><span class=\"o\">=<\/span><span class=\"s2\">\"dev.tfvars\"<\/span> <span class=\"nt\">-state<\/span><span class=\"o\">=<\/span>.\/dev\/terraform.tfstate\r\n\r\n<span class=\"c\"># plan\u306e\u7d50\u679c\u304c\u60f3\u5b9a\u901a\u308a\u306a\u3089\u3001tf\u30d5\u30a1\u30a4\u30eb\u3092\u9069\u7528\u3059\u308b<\/span>\r\nterraform apply <span class=\"nt\">-var-file<\/span><span class=\"o\">=<\/span><span class=\"s2\">\"dev.tfvars\"<\/span> <span class=\"nt\">-state<\/span><span class=\"o\">=<\/span>.\/dev\/terraform.tfstate\r\n<\/code><\/pre>\n<h4>3.2 \u4e34\u65f6\u73af\u5883<\/h4>\n<pre class=\"post-pre\"><code><span class=\"c\"># \u5c02\u7528\u306e\u74b0\u5883\u5909\u6570\u306bCredential\u30d5\u30a1\u30a4\u30eb\u3092\u8a2d\u5b9a\u3059\u308b<\/span>\r\n<span class=\"nv\">$ <\/span><span class=\"nb\">export <\/span><span class=\"nv\">GOOGLE_CLOUD_KEYFILE_JSON<\/span><span class=\"o\">=<\/span>path_to\/staging\/account.json\r\n\r\n<span class=\"c\"># tf\u30d5\u30a1\u30a4\u30eb\u3092\u9069\u7528\u3059\u308b\u524d\u306b\u5fc5\u305a\u5dee\u5206\u3092\u78ba\u8a8d\u3059\u308b<\/span>\r\n<span class=\"nb\">cd<\/span> <span class=\"o\">[<\/span>TERRAFORM_FOLDER]\r\nterraform plan <span class=\"nt\">-var-file<\/span><span class=\"o\">=<\/span><span class=\"s2\">\"staging.tfvars\"<\/span> <span class=\"nt\">-state<\/span><span class=\"o\">=<\/span>.\/staging\/terraform.tfstate\r\n\r\n<span class=\"c\"># plan\u306e\u7d50\u679c\u304c\u60f3\u5b9a\u901a\u308a\u306a\u3089\u3001tf\u30d5\u30a1\u30a4\u30eb\u3092\u9069\u7528\u3059\u308b<\/span>\r\nterraform apply <span class=\"nt\">-var-file<\/span><span class=\"o\">=<\/span><span class=\"s2\">\"staging.tfvars\"<\/span> <span class=\"nt\">-state<\/span><span class=\"o\">=<\/span>.\/staging\/terraform.tfstate\r\n<\/code><\/pre>\n<h4>3.3 \u672c\u5730\u73af\u5883<\/h4>\n<pre class=\"post-pre\"><code><span class=\"c\"># \u5c02\u7528\u306e\u74b0\u5883\u5909\u6570\u306bCredential\u30d5\u30a1\u30a4\u30eb\u3092\u8a2d\u5b9a\u3059\u308b<\/span>\r\n<span class=\"nv\">$ <\/span><span class=\"nb\">export <\/span><span class=\"nv\">GOOGLE_CLOUD_KEYFILE_JSON<\/span><span class=\"o\">=<\/span>path_to\/prod\/account.json\r\n\r\n<span class=\"c\"># tf\u30d5\u30a1\u30a4\u30eb\u3092\u9069\u7528\u3059\u308b\u524d\u306b\u5fc5\u305a\u5dee\u5206\u3092\u78ba\u8a8d\u3059\u308b<\/span>\r\n<span class=\"nb\">cd<\/span> <span class=\"o\">[<\/span>TERRAFORM_FOLDER]\r\nterraform plan <span class=\"nt\">-var-file<\/span><span class=\"o\">=<\/span><span class=\"s2\">\"staging.tfvars\"<\/span> <span class=\"nt\">-state<\/span><span class=\"o\">=<\/span>.\/prod\/terraform.tfstate\r\n\r\n<span class=\"c\"># plan\u306e\u7d50\u679c\u304c\u60f3\u5b9a\u901a\u308a\u306a\u3089\u3001tf\u30d5\u30a1\u30a4\u30eb\u3092\u9069\u7528\u3059\u308b<\/span>\r\nterraform apply <span class=\"nt\">-var-file<\/span><span class=\"o\">=<\/span><span class=\"s2\">\"staging.tfvars\"<\/span> <span class=\"nt\">-state<\/span><span class=\"o\">=<\/span>.\/prod\/terraform.tfstate\r\n<\/code><\/pre>\n<p>\u672c\u6587\u4f7f\u7528\u7684\u6e90\u4ee3\u7801\u53ef\u5728\u6b64\u5904\u627e\u5230\uff1a<br \/>\nhttps:\/\/github.com\/dssolutioninc\/dss_gke\/tree\/master\/terraform_gcp_module<\/p>\n<p>\u975e\u5e38\u611f\u8c22\u60a8\u8bfb\u5230\u6700\u540e\uff01DSS\u6865\u672c<\/p>\n<p>\u76f8\u5173\u6587\u7ae0\uff1a\u4f7f\u7528Terraform\u5de5\u5177\u8fdb\u884cGCP\u8d44\u6e90\u7ba1\u7406<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u6211\u6b63\u5728\u4f7f\u7528Terraform\u7684v0.12.16\u7248\u672c\uff08\u6b64\u6587\u7ae0\u53d1\u5e03\u65f6\u7684\u6700\u65b0\u7248\u672c\uff09\u3002 \u672c\u6587\u7684\u76ee\u7684\u662f\u4ecb\u7ecd\u5982\u4f55\u5c06Terr [&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-48919","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>\u5c06Terraform\u811a\u672c\u6a21\u5757\u5316\uff0c\u5e76\u5e94\u7528\u4e8eGCP\u7684\u591a\u4e2a\u73af\u5883 - 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\/\u5c06terraform\u811a\u672c\u6a21\u5757\u5316\uff0c\u5e76\u5e94\u7528\u4e8egcp\u7684\u591a\u4e2a\u73af\u5883\u3002\/\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u5c06Terraform\u811a\u672c\u6a21\u5757\u5316\uff0c\u5e76\u5e94\u7528\u4e8eGCP\u7684\u591a\u4e2a\u73af\u5883\" \/>\n<meta property=\"og:description\" content=\"\u6211\u6b63\u5728\u4f7f\u7528Terraform\u7684v0.12.16\u7248\u672c\uff08\u6b64\u6587\u7ae0\u53d1\u5e03\u65f6\u7684\u6700\u65b0\u7248\u672c\uff09\u3002 \u672c\u6587\u7684\u76ee\u7684\u662f\u4ecb\u7ecd\u5982\u4f55\u5c06Terr [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/zh\/blog\/\u5c06terraform\u811a\u672c\u6a21\u5757\u5316\uff0c\u5e76\u5e94\u7528\u4e8egcp\u7684\u591a\u4e2a\u73af\u5883\u3002\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog - Silicon Cloud\" \/>\n<meta property=\"article:published_time\" content=\"2023-04-15T08:41:21+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-04-30T04:48:36+00:00\" \/>\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=\"3 \u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%86terraform%e8%84%9a%e6%9c%ac%e6%a8%a1%e5%9d%97%e5%8c%96%ef%bc%8c%e5%b9%b6%e5%ba%94%e7%94%a8%e4%ba%8egcp%e7%9a%84%e5%a4%9a%e4%b8%aa%e7%8e%af%e5%a2%83%e3%80%82\/\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%86terraform%e8%84%9a%e6%9c%ac%e6%a8%a1%e5%9d%97%e5%8c%96%ef%bc%8c%e5%b9%b6%e5%ba%94%e7%94%a8%e4%ba%8egcp%e7%9a%84%e5%a4%9a%e4%b8%aa%e7%8e%af%e5%a2%83%e3%80%82\/\",\"name\":\"\u5c06Terraform\u811a\u672c\u6a21\u5757\u5316\uff0c\u5e76\u5e94\u7528\u4e8eGCP\u7684\u591a\u4e2a\u73af\u5883 - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\"},\"datePublished\":\"2023-04-15T08:41:21+00:00\",\"dateModified\":\"2024-04-30T04:48:36+00:00\",\"author\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/f044a4b7fa4ee2701702942002419ca6\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%86terraform%e8%84%9a%e6%9c%ac%e6%a8%a1%e5%9d%97%e5%8c%96%ef%bc%8c%e5%b9%b6%e5%ba%94%e7%94%a8%e4%ba%8egcp%e7%9a%84%e5%a4%9a%e4%b8%aa%e7%8e%af%e5%a2%83%e3%80%82\/#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%86terraform%e8%84%9a%e6%9c%ac%e6%a8%a1%e5%9d%97%e5%8c%96%ef%bc%8c%e5%b9%b6%e5%ba%94%e7%94%a8%e4%ba%8egcp%e7%9a%84%e5%a4%9a%e4%b8%aa%e7%8e%af%e5%a2%83%e3%80%82\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%86terraform%e8%84%9a%e6%9c%ac%e6%a8%a1%e5%9d%97%e5%8c%96%ef%bc%8c%e5%b9%b6%e5%ba%94%e7%94%a8%e4%ba%8egcp%e7%9a%84%e5%a4%9a%e4%b8%aa%e7%8e%af%e5%a2%83%e3%80%82\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.silicloud.com\/zh\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u5c06Terraform\u811a\u672c\u6a21\u5757\u5316\uff0c\u5e76\u5e94\u7528\u4e8eGCP\u7684\u591a\u4e2a\u73af\u5883\"}]},{\"@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%86terraform%e8%84%9a%e6%9c%ac%e6%a8%a1%e5%9d%97%e5%8c%96%ef%bc%8c%e5%b9%b6%e5%ba%94%e7%94%a8%e4%ba%8egcp%e7%9a%84%e5%a4%9a%e4%b8%aa%e7%8e%af%e5%a2%83%e3%80%82\/#local-main-organization-logo\",\"url\":\"\",\"contentUrl\":\"\",\"caption\":\"Blog - Silicon Cloud\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"\u5c06Terraform\u811a\u672c\u6a21\u5757\u5316\uff0c\u5e76\u5e94\u7528\u4e8eGCP\u7684\u591a\u4e2a\u73af\u5883 - 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\/\u5c06terraform\u811a\u672c\u6a21\u5757\u5316\uff0c\u5e76\u5e94\u7528\u4e8egcp\u7684\u591a\u4e2a\u73af\u5883\u3002\/","og_locale":"zh_CN","og_type":"article","og_title":"\u5c06Terraform\u811a\u672c\u6a21\u5757\u5316\uff0c\u5e76\u5e94\u7528\u4e8eGCP\u7684\u591a\u4e2a\u73af\u5883","og_description":"\u6211\u6b63\u5728\u4f7f\u7528Terraform\u7684v0.12.16\u7248\u672c\uff08\u6b64\u6587\u7ae0\u53d1\u5e03\u65f6\u7684\u6700\u65b0\u7248\u672c\uff09\u3002 \u672c\u6587\u7684\u76ee\u7684\u662f\u4ecb\u7ecd\u5982\u4f55\u5c06Terr [&hellip;]","og_url":"https:\/\/www.silicloud.com\/zh\/blog\/\u5c06terraform\u811a\u672c\u6a21\u5757\u5316\uff0c\u5e76\u5e94\u7528\u4e8egcp\u7684\u591a\u4e2a\u73af\u5883\u3002\/","og_site_name":"Blog - Silicon Cloud","article_published_time":"2023-04-15T08:41:21+00:00","article_modified_time":"2024-04-30T04:48:36+00:00","author":"\u96c5, \u609f","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"\u96c5, \u609f","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"3 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%86terraform%e8%84%9a%e6%9c%ac%e6%a8%a1%e5%9d%97%e5%8c%96%ef%bc%8c%e5%b9%b6%e5%ba%94%e7%94%a8%e4%ba%8egcp%e7%9a%84%e5%a4%9a%e4%b8%aa%e7%8e%af%e5%a2%83%e3%80%82\/","url":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%86terraform%e8%84%9a%e6%9c%ac%e6%a8%a1%e5%9d%97%e5%8c%96%ef%bc%8c%e5%b9%b6%e5%ba%94%e7%94%a8%e4%ba%8egcp%e7%9a%84%e5%a4%9a%e4%b8%aa%e7%8e%af%e5%a2%83%e3%80%82\/","name":"\u5c06Terraform\u811a\u672c\u6a21\u5757\u5316\uff0c\u5e76\u5e94\u7528\u4e8eGCP\u7684\u591a\u4e2a\u73af\u5883 - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website"},"datePublished":"2023-04-15T08:41:21+00:00","dateModified":"2024-04-30T04:48:36+00:00","author":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/f044a4b7fa4ee2701702942002419ca6"},"breadcrumb":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%86terraform%e8%84%9a%e6%9c%ac%e6%a8%a1%e5%9d%97%e5%8c%96%ef%bc%8c%e5%b9%b6%e5%ba%94%e7%94%a8%e4%ba%8egcp%e7%9a%84%e5%a4%9a%e4%b8%aa%e7%8e%af%e5%a2%83%e3%80%82\/#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%86terraform%e8%84%9a%e6%9c%ac%e6%a8%a1%e5%9d%97%e5%8c%96%ef%bc%8c%e5%b9%b6%e5%ba%94%e7%94%a8%e4%ba%8egcp%e7%9a%84%e5%a4%9a%e4%b8%aa%e7%8e%af%e5%a2%83%e3%80%82\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%86terraform%e8%84%9a%e6%9c%ac%e6%a8%a1%e5%9d%97%e5%8c%96%ef%bc%8c%e5%b9%b6%e5%ba%94%e7%94%a8%e4%ba%8egcp%e7%9a%84%e5%a4%9a%e4%b8%aa%e7%8e%af%e5%a2%83%e3%80%82\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.silicloud.com\/zh\/blog\/"},{"@type":"ListItem","position":2,"name":"\u5c06Terraform\u811a\u672c\u6a21\u5757\u5316\uff0c\u5e76\u5e94\u7528\u4e8eGCP\u7684\u591a\u4e2a\u73af\u5883"}]},{"@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%86terraform%e8%84%9a%e6%9c%ac%e6%a8%a1%e5%9d%97%e5%8c%96%ef%bc%8c%e5%b9%b6%e5%ba%94%e7%94%a8%e4%ba%8egcp%e7%9a%84%e5%a4%9a%e4%b8%aa%e7%8e%af%e5%a2%83%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\/48919","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=48919"}],"version-history":[{"count":2,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/48919\/revisions"}],"predecessor-version":[{"id":92003,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/48919\/revisions\/92003"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/media?parent=48919"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/categories?post=48919"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/tags?post=48919"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}