Terraform backend.tf через модули
У меня есть модули в другом каталоге. Поэтому я хочу добавить backend.tf и установить данные поставщика из переменной среды linux.
Но терраформ дает ошибку.
Моя структура показывает, как показано ниже.
main.tf
└── vpc
├── backend.tf
├── export.sh
├── vars.tf
└── vpc.tf
## main.tf
module "my_vpc" {
source = "../../vpc"
instance_tenancy = "default"
}
## backend.tf
terraform {
backend "s3" {
region = "${var.aws_region}"
bucket = "${var.TERRAFORM_BUCKET}-vpc"
profile = "${var.ORGANISATION}"
key = "${var.ORGANISATION}"
}
}
provider aws {
profile = "${var.ORGANISATION}"
region = "${var.aws_region}"
}
Я экспортировал переменные ORGANIZATION,REGION и TERRAFORM_BUCKET из терминала, но он выдает эту ошибку:
Error: module "my_vpc": missing required argument "aws_region"
Error: module "my_vpc": missing required argument "TERRAFORM_BUCKET"
Error: module "my_vpc": missing required argument "ORGANISATION"
Как я могу решить эту проблему?
Примечание: вызовите backend.tf из модуля через переменные окружения. (Динамические переменные и переменные по умолчанию)
Пожалуйста помоги!
2 ответа
Значение для переменных в скрипте Terraform может быть предоставлено несколькими различными способами.
Конфигурация входной переменной
- Через
.tfvars
file => Переменные файлы - Через командную строку
- Через переменные среды => Переменные среды
Поскольку вы пытаетесь предоставить их через переменные окружения, вам следует придерживаться требуемого шаблона именования.
$ TF_VAR_terraform_bucket=bucket_name
$ TF_VAR_organisation=org_name
Затем, когда вы выполняете terraform plan
или же terraform apply
terraform загрузит переменные.
Если у вас нет aws_region
переменная, определенная как переменная среды, то вам нужно будет поместить ее в .tfvars
файл и использование terraform plan -var-file config.tfvars
или передать его через командную строку, используя terraform plan -var us-east-1
,
Все это при условии, что в вашем файле vars.tf определены переменные.
variable "organisation" {
type = "string"
}
variable "terraform_bucket" {
type = "string"
}
variable "aws_region" {
type = "string"
}
*** Редактировать 1
Продумывая ваш вопрос, если переменные нужны внутри модуля, вам необходимо обновить ваш вызов к модулю, чтобы включить эти переменные в его использование.
Я не могу сказать по форматированию вашей структуры, если backend.tf
, vars.tf
а также vpc.tf
находятся внутри vpc
папка или нет.
module "my_vpc" {
source = "../../vpc"
instance_tenancy = "default"
bucket = "${var.TERRAFORM_BUCKET}-vpc"
profile = "${var.ORGANISATION}"
key = "${var.ORGANISATION}"
}