Создать Имя Ресурса На Основе Terraform.workspace

  • Автор темы Relox
  • Обновлено
  • 22, Oct 2024
  • #1

Я хочу иметь разные имена s3 в зависимости от разных сред с использованием terraform.

Если я определю имя в terraform.tfvar, это не сработает:

resource "aws_s3_bucket" "s3" {

bucket        = "tf-${terraform.workspace}"

....
}

Если я жестко закодирую имя корзины s3 в s3.tf, это сработает:

s3_bucket_name          = "tf-${terraform.workspace}"

как определить имя, связанное с рабочей областью, из terraform.tfvar? Я не хочу жестко кодировать это в файле tf.

#терраформировать

Relox


Рег
17 Jan, 2011

Тем
80

Постов
185

Баллов
605
  • 25, Oct 2024
  • #2

Переменные — это статические, буквальные входные данные вашей конфигурации, которые поступают либо из командной строки, либо из

override_s3_bucket_name
files. It is not possible to use interpolations here, since the variable values are processed before interpolation begins in order to make them available to other expressions.


Если цель состоит в том, чтобы определить имя корзины S3 в одном месте и повторно использовать его несколько раз в одной и той же конфигурации, Местные ценности функция может сделать это, если вы используете Terraform v0.10.4 или новее. Вы можете объявить именованное значение в одном из ваших

variable "override_s3_bucket_name" {

default = ""
}

locals {

s3_bucket_name = "${var.override_s3_bucket_name != "" ? var.override_s3_bucket_name : "tf-${terraform.workspace}"}"
}

resource "aws_s3_bucket" "s3" {

bucket = "${local.s3_bucket_name}"

...
}
files:

resource "aws_s3_bucket" "s3" {

bucket = "${local.s3_bucket_name}"

...
}

Затем вы можете интерполировать это значение в различных местах вашей конфигурации, используя имя

local.s3_bucket_name
, like this:

locals {

s3_bucket_name = "tf-${terraform.workspace}"
}

Локальные значения концептуально аналогичны выходы модуля но они предоставляются внутри того же модуля, в котором они определены, вместо того, чтобы передавать значение родительскому модулю.


Если цель состоит в том, чтобы разрешить возможность переопределения этого сгенерированного имени по умолчанию переменной, то этого можно достичь с помощью некоторой условной логики:

.tf

Приведенное выше сгенерирует имя по умолчанию на основе выбранного рабочего пространства, если

tfvars
is not set, but if that variable is set then its value will be used instead.

 

Evgenyzz


Рег
16 Jan, 2008

Тем
83

Постов
193

Баллов
618
Похожие темы Дата
Тем
403,760
Комментарии
400,028
Опыт
2,418,908

Интересно