我想使用Terraform在GCP中创建公共和私有子网

时间:2019-08-16 07:32:30

标签: google-cloud-platform terraform terraform-provider-gcp private-subnet

我使用Terraform在GCP中创建了VPC,现在我想添加两个子网Public和private。在创建虚拟机时。如果我通过公共子网,则VM应该获得公共IP;如果我通过私有子网,则VM应该获得唯一的私有内部IP地址

## Create VPC
resource "google_compute_network" "vpc" {
     name                    = "${var.name}-vpc"
     auto_create_subnetworks = "false"
    }


    ## Create Subnet
 ##  Create public subnet  

resource "google_compute_subnetwork" "pub-subnet" {
     name          = "${var.name}-public-subnet"
     ip_cidr_range = "${var.pub-subnet-cidr}"
     network       = "${var.name}-vpc"
     depends_on    = ["google_compute_network.vpc"]
     region        = "asia-south1"
    }

## Create private subnet

resource "google_compute_subnetwork" "private-subnet" {
     name          = "${var.name}-private-subnet"
     ip_cidr_range = "${var.private-subnet-cidr}"
     network       = "${var.name}-vpc"
     depends_on    = ["google_compute_network.vpc"]
     region        = "asia-south1"
     private_ip_google_access = "true"
    }

#####创建虚拟机实例

  resource "google_compute_instance" "default" {
name = "qa7-web-linux-${count.index + 1}"
count = "${var.count}"
machine_type = "${var.machine_type}"

boot_disk {
     initialize_params {
         image = "${var.web-srv-image}"
         }
     }   
network_interface {
    subnetwork = "${var.subnet-private}"
    access_config {
         }
    }
metadata {
sshKeys = "indra:${file(".//modules//instances//key.pub")}"
    }
}

1 个答案:

答案 0 :(得分:0)

我知道这是一个老问题,但是最近我遇到了同样的问题。您的代码存在的问题是您有一个

access_config { }
您的network_interface定义中的

block。如果存在此选项,则将外部IP分配给正在创建的网络接口。您需要为“私有”子网中的VM提供一个不同的network_interface块,而没有access_config参数。与AWS不同,该子网并不是真正的私有网络,您可以随时随地分配一个外部IP。 private_ip_google_access可能并不代表您的意思。