Raf*_*fiq 7 variables module terraform terraform-provider-aws
以下是我的 AWS terraform 项目的文件夹结构:
c:\terraform
??modules
? ??ec2-fullstacks
? ??main.tf
? ??variables.tf
??qa
??testappapi
??testappapi_backend.tfvars
??main.tf
??terraform.tfvars
Run Code Online (Sandbox Code Playgroud)
在模块下:
内容c:\terraform\modules\ec2-fullstacks\main.tf:
c:\terraform
??modules
? ??ec2-fullstacks
? ??main.tf
? ??variables.tf
??qa
??testappapi
??testappapi_backend.tfvars
??main.tf
??terraform.tfvars
Run Code Online (Sandbox Code Playgroud)
的c:\terraform\modules\ec2-fullstacks\variables.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}"
}
Run Code Online (Sandbox Code Playgroud)
在项目(testappapi)下:
内容C:\terraform\qa\testappapi\main.tf:
variable "ec2_ami_name" {}
variable "aws_account_name" {}
variable "aws_region" {}
Run Code Online (Sandbox Code Playgroud)
内容C:\terraform\qa\testappapi\terraform.tfvars:
provider "aws" {
}
terraform {
backend "s3" {
encrypt = true
}
}
module "testappapiqa" {
source = "C:/terraform/modules/ec2-fullstacks"
}
Run Code Online (Sandbox Code Playgroud)
内容C:\terraform\qa\testappapi\testappapi_backend.tfvars:
aws_account_name = "QA"
aws_region = "us-east-1"
ec2_ami_name = "WinAMI-2016-01-IIS"
Run Code Online (Sandbox Code Playgroud)
这是我尝试初始化时发生的情况:
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>
Run Code Online (Sandbox Code Playgroud)
我原以为项目文件夹 ( )下的sourcein会从同一项目文件夹下的文件中获取值,但事实并非如此。main.tftestappapiterraform.tfvars
我在这里缺少什么?
小智 8
您已经c:\terraform\modules\ec2-fullstacks\main.tf使用以下强制变量创建了一个模块
variable "ec2_ami_name" {}
variable "aws_account_name" {}
variable "aws_region" {}
Run Code Online (Sandbox Code Playgroud)
因此,在引用此模块时,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}"
}
Run Code Online (Sandbox Code Playgroud)
现在主文件正在引用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" {}
Run Code Online (Sandbox Code Playgroud)
现在这应该有效。