Я работал над этим уже целую вечность ... так что хост-проект уже существует ... и имеет все настройки VPN и сети.Я стремлюсь создать новый проект через Terraform и позволить ему использовать хост-проекты с общим VPC.
Каждый раз, когда я сталкиваюсь с проблемой и в итоге решаю ее, я просто сталкиваюсь с другим.
Прямо сейчас я вижу:
google_compute_shared_vpc_service_project.project: googleapi: Error 404: The resource 'projects/intacct-staging-db3b7e7a' was not found, notFound
* google_compute_instance.dokku: 1 error(s) occurred:
А также:
google_compute_instance.dokku: Error loading zone 'europe-west2-a': googleapi: Error 404: Failed to find project intacct-staging, notFound
Первоначально я был убежден, что это заказ, поэтому я играл вокругс depends_on
конфигурациями, чтобы попытаться разобраться в порядке.Это, казалось, не решило это.
Если читать просто, google_compute_shared_vpc_service_project
не существует, если рассматривать google_compute_shared_vpc_service_project
.Несмотря на то, что я добавил следующее к google_compute_shared_vpc_service_project
:
depends_on = ["google_project.project",
"google_compute_shared_vpc_host_project.host_project",
]
Возможно, поскольку хост-проект уже существует, я должен использовать data
для ссылки на него вместо resource
?
Мой полный файл TF находится здесь:
provider "google" {
region = "${var.gcp_region}"
credentials = "${file("./creds/serviceaccount.json")}"
}
resource "random_id" "id" {
byte_length = 4
prefix = "${var.project_name}-"
}
resource "google_project" "project" {
name = "${var.project_name}"
project_id = "${random_id.id.hex}"
billing_account = "${var.billing_account}"
org_id = "${var.org_id}"
}
resource "google_project_services" "project" {
project = "${google_project.project.project_id}"
services = [
"compute.googleapis.com"
]
depends_on = [ "google_project.project" ]
}
# resource "google_service_account" "service-account" {
# account_id = "intacct-staging-service"
# display_name = "Service Account for the intacct staging app"
# }
resource "google_compute_shared_vpc_host_project" "host_project" {
project = "${var.vpc_parent}"
}
resource "google_compute_shared_vpc_service_project" "project" {
host_project = "${google_compute_shared_vpc_host_project.host_project.project}"
service_project = "${google_project.project.project_id}"
depends_on = ["google_project.project",
"google_compute_shared_vpc_host_project.host_project",
]
}
resource "google_compute_address" "dokku" {
name = "fr-intacct-staging-ip"
address_type = "EXTERNAL"
project = "${google_project.project.project_id}"
depends_on = [ "google_project_services.project" ]
}
resource "google_compute_instance" "dokku" {
project = "${google_project.project.name}"
name = "dokku-host"
machine_type = "${var.comp_type}"
zone = "${var.gcp_zone}"
allow_stopping_for_update = "true"
tags = ["intacct"]
# Install Dokku
metadata_startup_script = <<SCRIPT
sed -i 's/PermitRootLogin no/PermitRootLogin yes/' /etc/ssh/sshd_config && service sshd restart
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}"
}
}
metadata {
sshKeys = "root:${file("./id_rsa.pub")}"
}
}
РЕДАКТИРОВАТЬ:
Как обсуждалось ниже, я смог устранить ошибку, связанную с последним проектом, не найдя, изменив ссылку на project_id
вместо name
, поскольку имя не включает в себя случайный гекс.
Теперь я также вижу другую ошибку, относящуюся к статическому IP.Сетевой интерфейс настроен на использование подсети с хоста VPC ...
network_interface {
subnetwork = "${var.subnetwork}"
subnetwork_project = "${var.vpc_parent}"
access_config = {
nat_ip = "${google_compute_address.dokku.address}"
}
}
Здесь настраивается IP:
resource "google_compute_address" "dokku" {
name = "fr-intacct-staging-ip"
address_type = "EXTERNAL"
project = "${google_project.project.project_id}"
}
IP действительно должен быть в проекте хоста,что я пытался .. и когда я это делаю, я получаю сообщение об ошибке, говорящее, что кросс-проект не разрешен с этим ресурсом.
Когда я переключаюсь на выше, это также приводит к ошибкам, говоря, что новый проект сейчасспособен обрабатывать вызовы API.Что, я полагаю, имело бы смысл, поскольку я разрешал вычислять только вызовы API для ресурса google_project_services
.
Я попытаюсь разрешить вызовы сетевого API и посмотрю, работает ли это, но я думаю, что внешний IP должен быть в общем VPC хост-проекта?