Существует несколько проблем с настройкой terraform, которые вы указали выше.
- В вашем экземпляре не определены авторизованные сети. Вы должны изменить свой ресурс экземпляра, чтобы он выглядел следующим образом: (Примечание: я использовал 0.0.0.0/0 только для целей тестирования)
resource "google_sql_database_instance" "my-database" {
name = "my-${var.deployment_name}"
database_version = "POSTGRES_9_6"
region = "${var.deployment_region}"
settings {
tier = "db-f1-micro"
ip_configuration {
ipv4_enabled = true
authorized_networks {
name = "all"
value = "0.0.0.0/0"
}
}
}
depends_on = [
"google_project_services.vpc"
]
}
Как уже упоминалось
здесь , вам необходимо создать пользователя с надежным паролем
resource "google_sql_user" "user" {
name = "test_user"
instance = "${google_sql_database_instance.my-database.name}"
password = "VeryStrongPassword"
depends_on = [
"google_sql_database_instance.my-database"
]
}
Вы должны использовать атрибут «public_ip_address» или «ip_address.0.ip_address» вашего экземпляра для доступа к IP-адресу. Кроме того, вам следует обновить свой провайдер и ресурс схемы, чтобы отразить пользователя, созданного выше.
provider "postgresql" {
host = "${google_sql_database_instance.my-database.public_ip_address}"
username = "${google_sql_user.user.name}"
password = "${google_sql_user.user.password}"
}
resource "postgresql_schema" "my_schema" {
name = "my_schema"
owner = "test_user"
}
Ваш поставщик postgres зависит от ресурса google_sql_database_instance, который необходимо выполнить, прежде чем он сможет настроить поставщика:
Все поставщики инициализируются в начале плана / применяются, поэтому, если один из них имеетневерный конфиг (в данном случае пустой хост), после чего Terraform потерпит неудачу. Невозможно определить зависимость между поставщиком и ресурсом внутри другого поставщика. Однако существует обходной путь с использованием целевого параметра terraform apply -target=google_sql_user.user
Это создаст пользователя базы данных (а также все его зависимости - в данном случае экземпляр базы данных), и после его завершения выполните следующее:terraform apply
Это должно завершиться успешно, так как экземпляр уже создан, и ip_address доступен для использования поставщиком postgres.
Заключительное примечание: Использование публичных IP-адресов без SSL дляподключение к экземплярам Cloud SQL не рекомендуется для производственных экземпляров.