【发布时间】:2019-07-08 04:51:03
【问题描述】:
我看到google_compute_firewall 有一些奇怪的地方,计算实例位于共享子网中。
我假设防火墙规则需要与该子网所属的网络相关联。但我们无法将防火墙规则添加到该网络,因为:
google_compute_firewall.intacct-firewall: Error creating Firewall: googleapi: Error 400: Invalid value for field 'resource.network': 'projects/it-production-186816/global/networks/production'. Cross project referencing is not allowed for this resource., invalid
找不到任何记录在共享网络上的防火墙规则的内容。我们是否将防火墙添加到本地 VPC 而不是共享 VPC?
计算映像具有以下网络配置:
network_interface {
subnetwork = "${var.subnetwork}"
subnetwork_project = "${var.vpc_parent}"
access_config = {
nat_ip = "${google_compute_address.dokku.address}"
}
}
因此,虽然计算实例位于 project-1,但它使用的网络位于 project-2
编辑:
我的 main.tf:
# Backend config
terraform {
backend "gcs" {
bucket = "intacct-staging-remote-backend"
project = "fr-intacct-staging"
credentials = "./creds/serviceaccount.json"
}
}
#
# Provider config
provider "google" {
region = "${var.gcp_region}"
project = "${var.gcp_project}"
credentials = "${file("./creds/serviceaccount.json")}"
}
#
# Static IP Address for the app
resource "google_compute_address" "dokku" {
name = "fr-intacct-staging-ip"
address_type = "EXTERNAL"
}
#
# Compute Instance Config
resource "google_compute_instance" "dokku" {
project = "${var.gcp_project}"
name = "dokku-host1"
machine_type = "${var.comp_type}"
zone = "${var.gcp_zone}"
allow_stopping_for_update = "true"
tags = ["intacct"]
# Install Dokku
metadata_startup_script = <<SCRIPT
sudo yum install -y wget
wget https://raw.githubusercontent.com/dokku/dokku/v0.14.5/bootstrap.sh
sudo DOKKU_TAG=${var.dokku_version} bash bootstrap.sh
sudo dokku apps:create fr-intacct-staging
sudo echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sudo systemctl restart network
setenforce 0
SCRIPT
boot_disk {
initialize_params {
image = "${var.compute_image}"
}
}
network_interface {
subnetwork = "${var.subnetwork}"
subnetwork_project = "${var.vpc_parent}"
access_config = {
nat_ip = "${google_compute_address.dokku.address}"
}
}
}
#
# Firewall rule for app access
resource "google_compute_firewall" "intacct-firewall" {
name = "intacct-firewall"
network = "projects/it-production-186816/global/networks/production"
allow {
protocol = "tcp"
ports = [ "80" ]
}
source_ranges = [ "0.0.0.0/0" ]
target_tags = [ "intacct" ]
}
为另一个项目使用另一个提供程序配置来添加防火墙规则似乎是错误的。
如果是这样,那就这样吧……但是由于正在使用的服务帐户对另一个项目具有权限,所以我们必须为另一个项目使用另一个提供者似乎是错误的?
【问题讨论】:
-
我们需要查看 terraform 代码才能正确回答您的帖子,实际上您应该有多个声明,因为您有多个项目?
-
我没有多个项目。这是一个共享的 VPC。所以计算实例正在使用其他项目网络。我在原帖中添加了更多细节。
标签: google-cloud-platform terraform