Terraform backend.tf через модули - PullRequest
0 голосов
/ 15 января 2019

У меня есть модули в другом каталоге. Поэтому я хочу добавить 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 ]

0 голосов
/ 15 января 2019

Это то, что документы говорят о переменных в конфигурации бэкенда.

Может быть указан только один бэкэнд, а конфигурация не может содержат интерполяции. Terraform подтвердит это

Это может помочь - # 17288

0 голосов
/ 15 января 2019

Значение переменных в скрипте Terraform может быть предоставлено несколькими различными способами.

Конфигурация входных переменных

Поскольку выпытаясь предоставить их через переменные окружения, вы должны следовать обязательному шаблону именования.

$ 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"
}

*** Edit 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}"
}
...