首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Terraform:在terraform初始化期间,“变量可能不能在这里使用”

Terraform:在terraform初始化期间,“变量可能不能在这里使用”
EN

Stack Overflow用户
提问于 2021-01-22 11:41:53
回答 4查看 5.3K关注 0票数 6

我正在使用Terraform snowflake插件。我想在terraform作用域中使用${terraform.workspace}变量。

代码语言:javascript
复制
terraform {
  required_providers {
    snowflake = {
      source  = "chanzuckerberg/snowflake"
      version = "0.20.0"
    }
  }
  backend "s3" {
    bucket         = "data-pf-terraform-backend-${terraform.workspace}"
    key            = "backend/singlife/landing"
    region         = "ap-southeast-1"
    dynamodb_table = "data-pf-snowflake-terraform-state-lock-${terraform.workspace}"
  }
}

但是我得到了这个错误。变量在此作用域中不可用?

代码语言:javascript
复制
Error: Variables not allowed

  on provider.tf line 9, in terraform:
   9:     bucket         = "data-pf-terraform-backend-${terraform.workspace}"

Variables may not be used here.


Error: Variables not allowed

  on provider.tf line 12, in terraform:
  12:     dynamodb_table = "data-pf-snowflake-terraform-state-lock-${terraform.workspace}"

Variables may not be used here.
EN

回答 4

Stack Overflow用户

发布于 2021-10-21 15:30:32

  • Set backend.tf

terraform { backend "azurerm“{} }

  • 创建文件backend.conf

storage_account_name =“部署管理器”container_name = "terraform“key = "production.terraform.tfstate"

  • 运行:

terraform初始化-backend-config=backend.conf

票数 10
EN

Stack Overflow用户

发布于 2021-08-15 08:50:52

terraform backend docs状态:

后端块不能引用命名值(如输入变量、局部变量或数据源属性)。

但是,s3 backend docs向您展示了如何根据当前工作区对一些s3存储进行分区,以便每个工作区都有自己的独立状态文件。您不能为每个工作区指定不同的存储桶。您只能为所有工作空间指定一个存储桶,但s3后端会添加workspace prefix to the path

当使用非默认工作区时,状态路径将是/ workspace_key_prefix / workspace _name/key (另请参阅workspace_key_prefix配置)。

一个发电机工作台就可以满足所有工作空间的需求。所以只需使用:

代码语言:javascript
复制
  backend "s3" {
    bucket         = "data-pf-terraform-backend"
    key            = "terraform.tfstate"
    region         = "ap-southeast-1"
    dynamodb_table = "data-pf-snowflake-terraform-state-lock"
  }

并在部署前根据需要切换工作空间。

票数 4
EN

Stack Overflow用户

发布于 2022-01-11 10:00:01

遇到类似的问题,解决方法是在Terraform Init中指定变量文件

Main.tf

代码语言:javascript
复制
terraform {
  required_providers {
    azurerm = {
      source = "hashicorp/azurerm"
      version = "2.91.0"
    }

    mongodbatlas = {
      source  = "mongogdb/mongodbatlas"
      version = "1.1.1" 
    }

    time = {
      source = "hashicorp/time"
      version = "0.7.2"
    }

    random = {
      source = "hashicorp/random"
      version = "3.1.0"
    }
  }

  backend "azurerm" {
    resource_group_name   = local.tfResourceGroupName
    storage_account_name  = var.tf_backend.storage_name
    container_name        = local.tfContainerName
    key                   = var.tf_backend.storage_key
  } 
}

terraform init -var-file="<your-var-file>"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65838989

复制
相关文章

相似问题

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