Создание рабочих пространств Terraform

#amazon-web-services #terraform #terraform-provider-aws

Вопрос:

Я пытаюсь написать код терраформирования для создания рабочих пространств и буду использовать его также для создания в будущем. Я столкнулся с проблемой при ссылке на bundle_ids, так как доступно несколько пакетов, и они меняются в соответствии с запросом. каждый раз. если кто-нибудь может предложить лучший подход к этому.

 resource "aws_workspaces_workspace" "this" {

directory_id = var.directory_id

for_each = var.workspace_user_names

user_name = each.key
bundle_id = [local.bundle_ids["${each.value}"]]
root_volume_encryption_enabled = true
user_volume_encryption_enabled = true
volume_encryption_key          = var.volume_encryption_key
workspace_properties {
user_volume_size_gib                      = 50
root_volume_size_gib                      = 80
running_mode                              = "AUTO_STOP"
running_mode_auto_stop_timeout_in_minutes = 60
}
tags = var.tags
}
 

terraform.tfvars

 directory_id          = "d-xxxxxxx"
##Add the Workspace Username amp; bundle_id; 
workspace_user_names = {
"User1"  = "n"
"User2"  = "y"
"User3"  = "k"
}
 

locals.tf

 locals {
bundle_ids = {
"n" = "wsb-nn"
"y" = "wsb-yy"
"k" = "wsb-kk"
 }
}
 

План терраформирования

 Error: Incorrect attribute value type
│
│   on r_aws_workspaces.tf line 8, in resource "aws_workspaces_workspace" "this":
│    8:   bundle_id = [local.bundle_ids["${each.value}"]]
│     ├────────────────
│     │ each.value will be known only after apply
│     │ local.bundle_ids is object with 3 attributes
│
│ Inappropriate value for attribute "bundle_id": string required.
 

Комментарии:

1. Я также заметил, что почти на все ваши вопросы есть ответы, но ни один из них не принят. Принятие хороших ответов-это не только хорошая практика, но и уменьшает количество дубликатов и увеличивает шансы на то, что на ваши вопросы действительно будут даны ответы.

Ответ №1:

При движении у вас есть list , но так и должно быть string . Предполагая, что все остальное правильно, следующее должно устранить вашу ошибку:

 bundle_id = local.bundle_ids[each.value]
 

Комментарии:

1. это действительно исправило ошибку; но, глядя в более широкий контекст, есть ли лучший способ сделать это. т. Е. написать модуль, а затем вызвать их или что-нибудь еще.

2. @Zuntoo, если мой ответ был полезен, мы будем признательны за его принятие. Я бы предложил задать новый вопрос относительно модулей с соответствующими подробностями.