Я хочу написать модуль terraform, который будет создавать таблицы DynamoDb. Предполагается, что атрибуты будут считаны из .tfvars
или переменной по умолчанию вместо того, чтобы быть уже названными в .tf
, как в справочнике ресурсов здесь
Чтобы объяснить дальше, предположим, что для достижения этого псевдокода используется список атрибутов:
resource "aws_dynamodb_table" "basic-dynamodb-table" {
name = "GameScores"
... #Other required feilds
...
...
# attributes is a list of names
for(attribute_name:${length(var.attributes)}){
attribute {
name = "${var.attributes[i]}"
type = "N"
}
}
}
Как я могу перебирать список атрибутов и создавать атрибут {} во время планирования / применения терраформирования? Количество блоков атрибутов не может быть статическим, как показано в документации terraform, и их имена должны считываться из переменных.
@ThomasVdBerge отредактировал сейчас
При создании таблицы DynamoDB единственные атрибуты, которые вам нужно указать, - это ключ раздела и, необязательно, ключ сортировки. Все остальные атрибуты хранятся как часть каждого документа (или элемента), который вы храните в таблице.
То же самое относится и к глобальным вторичным индексам. Вам нужно только указать ключ раздела и ключ сортировки для каждого индекса.
Если у вас нет статических атрибутов, вы не можете создать таблицу. Имена разделов и ключей сортировки должны быть одинаковыми на протяжении всего времени существования таблицы / индекса.
Наконец, это не ясно из вопроса, но, пожалуйста, не используйте Teraform для загрузки данных в свою таблицу. Это не тот инструмент!
Спасибо @Mike. Вы правы, и это не предназначалось для загрузки данных. Мне пришлось написать модуль, который другие могут использовать повторно всякий раз, когда им приходилось создавать таблицу Dynamodb, просто меняя значения в файлах переменных. Итак, скажем, нужен ли ключ сортировки или нет, должно быть определено vars.sort_key_name == "" ? 0:1
, а затем создать для него блок атрибутов.
В чем именно заключается ваш вопрос?