Передача значений переменных terraform из файла .tfvars в папках проекта в модуль - PullRequest
0 голосов
/ 21 ноября 2018

Ниже приведена структура моей папки проекта terraform для AWS:

c:\terraform
   ├─modules
   │   └─ec2-fullstacks
   │       ├─main.tf
   │       └─variables.tf
   └─qa
       └─testappapi
           ├─testappapi_backend.tfvars
           ├─main.tf
           └─terraform.tfvars

Под модулем:

Содержимое c:\terraform\modules\ec2-fullstacks\main.tf:

provider "aws" {
}

terraform {
  backend "s3" {
    encrypt = true
  }
}

data "aws_ami" "ami" {
  most_recent = true
  filter {
    name   = "name"
    values = ["${var.ec2_ami_name}*"]
  }
}

output "ami_id" {
  value = "${data.aws_ami.ami.id}"
}

Содержимое c:\terraform\modules\ec2-fullstacks\variables.tf:

variable "ec2_ami_name"  {}
variable "aws_account_name" {}
variable "aws_region" {}

В рамках проекта (testappapi):

Содержимое C:\terraform\qa\testappapi\main.tf:

provider "aws" {
}

terraform {
  backend "s3" {
    encrypt = true
  }
}

module "testappapiqa" {
  source = "C:/terraform/modules/ec2-fullstacks"
}

Содержимое C:\terraform\qa\testappapi\terraform.tfvars:

aws_account_name = "QA"
aws_region = "us-east-1"
ec2_ami_name = "WinAMI-2016-01-IIS"

Содержимое C:\terraform\qa\testappapi\testappapi_backend.tfvars:

profile = "qa"
region = "us-east-1"
bucket = "tfstate-123456789012"
key = "qa/testappapi.tfstate"
dynamodb_table = "tfstate"

Вот что происходит, когда я пытаюсь инициализировать:

C:\terraform\qa\testappapi>terraform get
- module.testappapi
  Getting source "C:/terraform/modules/ec2-fullstacks"

C:\terraform\qa\testappapi>terraform init -backend-config=testappapi_backend.tfvars
Initializing modules...
- module.testappapi

Initializing the backend...
Error: module "testappapi": missing required argument "ec2_ami_name"
Error: module "testappapi": missing required argument "aws_account_name"
Error: module "testappapi": missing required argument "aws_region"

C:\terraform\qa\testappapi>

Я ожидал, что source в main.tf в папке проекта (testappapi) получит значения из файла terraform.tfvars в той же папке проекта, но это не так.

Что мне здесь не хватает?

1 Ответ

0 голосов
/ 22 ноября 2018

Вы создали модуль в c:\terraform\modules\ec2-fullstacks\main.tf со следующими обязательными переменными

variable "ec2_ami_name"  {}
variable "aws_account_name" {}
variable "aws_region" {}

Таким образом, при обращении к этому модулю terraform ожидает, что вы также передадите эти обязательные параметры.Вы можете использовать его следующим образом в C:\terraform\qa\testappapi\main.tf

module "testappapiqa" {
  source = "C:/terraform/modules/ec2-fullstacks"
  ec2_ami_name = "${var.ec2_ami_name}"
  aws_account_name = "${var.aws_account_name}"
  aws_region = "${var.aws_region}"
}

Теперь основной файл ссылается на ec2_ami_name, aws_account_name, aws_region переменных, которые не определены в папке testappapi.Таким образом, вы можете определить эти переменные в C:\terraform\qa\testappapi\variables.tf

variable "ec2_ami_name"  {}
variable "aws_account_name" {}
variable "aws_region" {}

Теперь это должно сработать.

...