Как я могу ссылаться на переменную в `main.tf»?

#terraform #terraform-provider-aws #terraform-provider-gcp

Вопрос:

У меня есть два файла с терраформами main.tf и var.tfvars :

main.tf:

 provider "google" {
  project = var.project_id
  region  = var.gcp_region
}

provider "aws" {
  region = var.aws_region
    alias = "aws"
}

 

варс.тфварс:

 variable "gcp_region" {
    type = string
    default = "asia-southeast1"
}

variable "aws_region" {
    type = string
    default = "ap-southeast-2"
}

variable "project_id" {
    type = string
    default = "test-oidc-arosha"
}
 

когда я бегу terraform apply , я получил ошибку ниже:

 Error: Reference to undeclared input variable
│
│   on local.tf line 6, in locals:
│    6:     state_backet = "${local.component_name}-${local.part_name}-deployment-${var.aws_region}-${data.aws_caller_identity.current.account_id}"
│
│ An input variable with the name "aws_region" has not been declared. This variable can be declared
│ with a variable "aws_region" {} block.
╵
╷
│ Error: Reference to undeclared input variable
│
│   on main.tf line 2, in provider "google":
│    2:   project = var.project_id
│
│ An input variable with the name "project_id" has not been declared. This variable can be declared
│ with a variable "project_id" {} block.
╵
╷
│ Error: Reference to undeclared input variable
│
│   on main.tf line 3, in provider "google":
│    3:   region  = var.gcp_region
│
│ An input variable with the name "gcp_region" has not been declared. This variable can be declared
│ with a variable "gcp_region" {} block.
 

Я не понимаю, почему я получил эту ошибку, даже если я уже указал значения по умолчанию для каждой переменной.

Моя версия терраформирования такова:

 $ terraform --version
Terraform v1.0.0
on darwin_amd64
  provider registry.terraform.io/hashicorp/aws v3.45.0
  provider registry.terraform.io/hashicorp/google v3.72.0
 

Комментарии:

1. Вы проверили это обсуждение? hashicorp.com/t/… Что вам, вероятно, следует сделать, так это изменить расширение с .tfvars на .tf , потому .tfvars что оно используется для анализа фактических значений. Объявление переменных и их значений по умолчанию будет выполнено в вашем main.tf или в var.tf . tfvars на самом деле это перезапись значений по умолчанию, если вы хотите, чтобы ваш код был настроен для каждой среды и т. Д

Ответ №1:

вам нужно добавить определение переменной в свой main.tf а затем используйте свою переменную в var.tf приблизительно

пример

  variable "aws_region" {
    type = string
    default = "ap-southeast-2"
}
 

вар.тфварс

пример

 aws_region = {
    Name = "created by jatin/terraform",
    instance_type="t2.micro"
}
 

Ответ №2:

Измените имя vars.tfvars файла на variables.tf , и он должен принять значение по умолчанию. .tfvars файлы предназначены для ввода переменных, которые, в свою очередь, определены в variables.tf файле (или любом .tf файле на самом деле, не имеет значения, как вы его называете).