首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Terraform命令不使用tfvars文件提供的-var- file中的值。

Terraform命令不使用tfvars文件提供的-var- file中的值。
EN

Stack Overflow用户
提问于 2022-09-16 18:18:12
回答 1查看 24关注 0票数 0

我在Terraform中非常新,试图在我的应用程序的每个环境(dev、stg、prod)下为每个AWS区域创建单独的后端。因此,我使用单独的.config文件来配置单独的后端,使用单独的.tfvars文件在相关的环境/区域上创建资源。

我将详细说明以下各点:

文件夹结构:

代码语言:javascript
复制
.
├── config
│   ├── stg-useast1.config
│   ├── stg-uswest2.config
│   ├── prod-useast1.config
│   └── prod-uswest2.config
├── vars
│   ├── stg-useast1.tfvars
│   ├── stg-uswest2.tfvars
│   ├── prod-useast1.tfvars
│   └── prod-useast1.tfvars
└── modules
    ├── backend.tf
    ├── main.tf
    ├── variables.tf
    └── module-ecs
        ├── main.tf
        └── variables.tf

此问题所需的文件内容如下(仅一个区域):

./config/stg-useast1.config

代码语言:javascript
复制
profile        = "myapp-stg"
region         = "us-east-1"
bucket         = "myapp-tfstate-stg-useast1"
key            = "myapp-stg-useast1.tfstate"
dynamodb_table = "myapp-tfstate-stg-useast1-lock"

./vars/stg-useast1.tfvars

代码语言:javascript
复制
environment = "stg"
app_name    = "myapp-ecs"
aws_region  = "us-east-1"
aws_profile = "myapp-stg"

./modules/backend.tf

代码语言:javascript
复制
terraform {
  backend "s3" {
  }
}

./modules/main.tf

代码语言:javascript
复制
provider "aws" {
  region                   = var.aws_region
  shared_credentials_files = ["~/.aws/credentials"]
  profile                  = var.aws_profile
}

module "aws-ecr" {
  source = "./ecs"
}

./modules/variables.tf

代码语言:javascript
复制
variable "app_name" {}
variable "environment" {}
variable "aws_region" {}
variable "aws_profile" {}

./modules/module-ecs/main.tf

代码语言:javascript
复制
resource "aws_ecr_repository" "aws-ecr" {
  name = "${var.app_name}-${var.environment}-ecr"
  tags = {
    Name        = "${var.app_name}-ecr"
    Environment = var.environment
  }
}

./modules/module-ecs/variables.tf

代码语言:javascript
复制
variable "app_name" {
    default = "myapp-ecs"
}
variable "environment" {
    default = "stg"
}
variable "aws_region" {
    default = "us-east-1"
}
variable "aws_profile" {
    default = "myapp-stg"
}

terraform init进行得很好。

代码语言:javascript
复制
$ terraform init --backend-config=../config/stg-useast1.config
Initializing modules...

Initializing the backend...

Initializing provider plugins...
- Reusing previous version of hashicorp/aws from the dependency lock file
- Using previously-installed hashicorp/aws v4.31.0

Terraform has been successfully initialized!

我运行terraform plan如下:

代码语言:javascript
复制
terraform plan --var-file=../vars/stg-useast1.tfvars

但是它没有使用这个.tfvars文件中的值。我必须在./modules/module-ecs/variables.tf中为每个变量提供它们作为default = <value>

如何使用.tfvars命令使用terraform plan文件?

欢迎任何重组建议。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-16 19:35:18

您创建的本地模块不继承变量。你得把它们传进去。例如:

代码语言:javascript
复制
module "aws-ecr" {
  source = "./ecs" # in your example it looks like the folder is ecs-module?
  app_name = var.app_name
  environment = var.environment
  aws_region = var.region
  aws_profile = var.profile
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73748857

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档