Комментарии 10
module "address" {
source = "terraform-google-modules/address/google"
version = "2.0.0"
region = var.region
project_id = var.project_id
}
Как прицепить полученный айпишник на cloud_nat, если его конфиг такой:
module "cloud-nat" {
source = "terraform-google-modules/cloud-nat/google"
version = "~> 1.2"
router = var.router_name
project_id = var.project_id
region = var.region
name = "my-cloud-nat-${var.router_name}"
nat_ip_allocate_option = MANUAL_ONLY
nat_ips = ["https://www.googleapis.com/compute/v1/module.address.addresses"]
}
Как исправить последние две строки конфига ната? Терраформ на них ругается:
Error: Invalid reference
on main.tf line 62, in module "cloud-nat":
62: nat_ip_allocate_option = MANUAL_ONLY
A reference to a resource type must be followed by at least one attribute
access, specifying the resource name
Спросите в чате по terraform https://t.me/terraform_ru
Смотрим https://registry.terraform.io/modules/terraform-google-modules/cloud-nat/google/1.1.0?tab=inputs.
nat_ip_allocate_option
— это строка, MANUAL_ONLY
нужно заключить в кавычки, иначе terrаform думает, что это сслыка на какой-то ресурс.
Что касается nat_ips
, то согласно линку выше, это массив аттрибутов self_link
созданных адресов. Смотрим, что "экспортирует" модуль address в своих output: https://registry.terraform.io/modules/terraform-google-modules/address/google/latest?tab=outputs
Там как раз есть self_links
— list of URIs of the created address resources.
То есть поседние две строки должны выглядеть так:
nat_ip_allocate_option = "MANUAL_ONLY"
nat_ips = module.address.self_links
Вставил предложенные две строки, теперь получаю такое:
Error: Unsupported attribute
on main.tf line 63, in module "cloud-nat":
63: nat_ips = module.address.self_links
This object does not have an attribute named "self_links".
Я понимаю, что здесь не место для решение подобных вопросов, но если все же будут идеи, буду благодареню
Если вдруг будут какие-то вопросы — охотно отвечу!
На всякий случай уточню, что статья ориентирована на новичков в Terraform, её цель объяснить основы, а не рассказать про best practices.
Спасибо за оригинальный пост. Планируется ли создать пост по созданию модулей terraform, передачу параметров в модуль, примеры кода?
Но на freeCodeCamp у меня еще есть вот такая статья, если вам интересно — про практики работы с кодом Terraform.
Да, вы правы: иногда этот момент «доставляет» эмоций.
Однако, есть пара нюансов:
- такая ситуация не обязательна для всех провайдеров
- бывает и так, что скрупулёзное указание значений для атрибутов ресурса спасает от внезапностей, если какое-то умолчателное значение внезапно меняется.
Ну и да, модули в том числе решают и такую проблему :)
Что такое модули Terraform и как они работают?