gpt4 book ai didi

variables - 将 terraform 变量值从项目文件夹中的 .tfvars 文件传递​​到模块

转载 作者:行者123 更新时间:2023-12-02 23:09:46 29 4
gpt4 key购买 nike

以下是我的 AWS terraform 项目的文件夹结构:

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>

我期望项目文件夹 (testappapi) 下 main.tf 中的 source 将从 terraform 获取值.tfvars 文件位于同一项目文件夹下,但事实并非如此。

我在这里缺少什么?

最佳答案

您已在 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" {}

现在应该可以了。

关于variables - 将 terraform 变量值从项目文件夹中的 .tfvars 文件传递​​到模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53420087/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com