#terraform #terraform-provider-aws
#terraform #terraform-поставщик-aws
Вопрос:
У меня есть модуль, который выводит карту, module.platformusers.paths
, вот так:
{
"user1_test" = "user1_value_path"
"user2_test" = "user2_value_path"
"user3_test" = "user3_value_path"
}
Я должен выполнить итерацию по local.musyers
карте, взять ключ и сравнить с module.platformusers.paths
ключом, и если ключ содержится во второй карте, тогда я должен скопировать значение
{
"user1" = "Allen"
"user2" = "john"
"user3" = "Rose"
}
Я хочу иметь что-то подобное, когда предполагаю, что они индивидуальны
resource "aws_ssm_parameter" "userspath" {
name = "Allen"
type = "String"
value = "user1_value_path"
}
resource "aws_ssm_parameter" "userspath" {
name = "john"
type = "String"
value = "user2_value_path"
}
resource "aws_ssm_parameter" "userspath" {
name = "Rose"
type = "String"
value = "user3_value_path"
}
Я пытаюсь, как показано здесь, но это не работает, поскольку мои ключи не совпадают:
resource "aws_ssm_parameter" "userspath" {
for_each = module.platformusers.paths
name = ${each.value}
type = "String"
value = lookup( module.platformusers.paths, ${each.key}, "")
}
Как применить contains здесь?
Ответ №1:
Могут быть лучшие способы сделать это, но вот один быстрый способ, который я мог придумать.. Если разница в ключах будет просто «_test», как вы показали выше, на самом деле это может быть просто. Вы можете использовать функцию форматирования, чтобы добавить «_test» и выполнить поиск.
В вашем примере кода вы не зацикливались на local.musyers.. Примечание: чувствителен к регистру. Вы можете использовать функцию UPPER, чтобы сделать ее нечувствительной.
resource "aws_ssm_parameter" "userspath" {
for_each = local.musyers
name = ${each.value}
type = "String"
value = lookup(module.platformusers.paths, format("%s_test", each.key) , "missing")
}