Yoh*_*shi 5 terraform snowflake-cloud-data-platform
我正在使用 Terraform 雪花插件。我想${terraform.workspace}在terraform范围内使用变量。
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}"
}
}
Run Code Online (Sandbox Code Playgroud)
但我收到了这个错误。变量在此范围内不可用?
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.
Run Code Online (Sandbox Code Playgroud)
Jho*_*los 70
设置后端.tf
terraform {
backend "azurerm" {}
}
Run Code Online (Sandbox Code Playgroud)
创建文件 backend.conf
storage_account_name = "deploymanager"
container_name = "terraform"
key = "production.terraform.tfstate"
Run Code Online (Sandbox Code Playgroud)
跑步:
terraform init -backend-config=backend.conf
Run Code Online (Sandbox Code Playgroud)
terraform后端文档指出:
后端块不能引用命名值(例如输入变量、局部变量或数据源属性)。
但是,s3 后端文档向您展示了如何根据当前工作空间对某些 s3 存储进行分区,以便每个工作空间都有自己独立的状态文件。您无法为每个工作区指定不同的存储桶。您只能为所有工作空间指定一个存储桶,但 s3 后端会将工作空间前缀添加到路径中:
使用非默认工作区时,状态路径将为 /workspace_key_prefix/workspace_name/key (另请参阅workspace_key_prefix 配置)。
一张发电机桌就足以满足所有工作空间。所以只需使用:
backend "s3" {
bucket = "data-pf-terraform-backend"
key = "terraform.tfstate"
region = "ap-southeast-1"
dynamodb_table = "data-pf-snowflake-terraform-state-lock"
}
Run Code Online (Sandbox Code Playgroud)
并在部署之前根据需要切换工作区。
Fel*_*ffa -3
首先检查 Jhonny 的解决方案:
(保留此以供历史参考)
似乎是 Terraform 中更常见问题的一个特定实例:连接变量。
使用当地人来连接应该可以修复它。请参阅https://www.terraform.io/docs/configuration/locals.html
locals {
BUCKET_NAME = [
"bh.${var.TENANT_NAME}.o365.attachments",
"bh.${var.TENANT_NAME}.o365.eml"
]
}
resource "aws_s3_bucket" "b" {
bucket = "${element(local.BUCKET_NAME, 2)}"
acl = "private"
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2679 次 |
| 最近记录: |