Как преобразовать строку секретного менеджера aws в карту в terraform (0.11.13)

У меня есть секрет, хранящийся в секретном менеджере AWS, и я пытаюсь интегрировать его в terraform во время выполнения. Мы используем версию terraform 0.11.13, и обновление до последней версии terraform находится в дорожной карте.

Мы все хотим использовать jsondecode() доступно как часть последней версии терраформы, но нужно интегрировать несколько вещей, прежде чем мы обновим нашу терраформу.

Мы попытались использовать приведенную ниже вспомогательную программу внешних данных, предложенную как часть https://github.com/terraform-providers/terraform-provider-aws/issues/4789.

data "external" "helper" {
  program = ["echo", "${replace(data.aws_secretsmanager_secret_version.map_example.secret_string, "\\\"", "\"")}"]
}

Но сейчас мы получили эту ошибку.

data.external.helper: can't find external program "echo"

Поиск в Google не особо помог.

Любая помощь будет высоко ценится.

ОС: Windows 10

1 ответ

Похоже, вы хотите использовать data source для aws_secretsmanager_secret.

Ресурсы в терраформе создают новые ресурсы. Источники данных в терраформе ссылаются на ценность существующих ресурсов в терраформе.

data "aws_secretsmanager_secret" "example" {
  arn = "arn:aws:secretsmanager:us-east-1:123456789012:secret:example-123456"
}

data "aws_secretsmanager_secret_version" "example" {
  secret_id     = data.aws_secretsmanager_secret.example.id
  version_stage = "example"
}

Примечание: вы также можете использовать секретное имя Docs: https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/secretsmanager_secret

Затем вы можете использовать это значение следующим образом:

output MySecretJsonAsString {
  value = data.aws_secretsmanager_secret_version.example.secret_string
}

Согласно документам, secret_string Свойство этого ресурса:

Расшифрованная часть защищенной секретной информации, которая изначально была представлена ​​в виде строки.

Вы также должны иметь возможность передать это значение в jsondecode а затем получить индивидуальный доступ к свойствам тела json.


но вы просили решение terraform 0.11.13. Если секретное значение определяется terraform, вы можете использовать источник данных состояния terraform для получения значения. Это действительно верит, что ничто другое не обновляет секрет, кроме терраформирования. Но лучший ответ - обновить вашу терраформу. До тех пор это может быть полезным временным решением.

В качестве рекомендации вы можете сделать версию terraform специфичной для модуля, а не для всей организации. Я делаю это с помощью контейнеров докеров, которые запускают определенные версии корзины терраформ. В корне каждого модуля есть сценарий, который обернет команды terraform, чтобы они соответствовали версии terraform, предназначенной для этого проекта. Просто совет.

Другие вопросы по тегам