#amazon-web-services #terraform #devops #terraform0.11
#amazon-веб-сервисы #terraform #devops #terraform0.11
Вопрос:
У меня есть секрет, хранящийся в AWS secret manager, и я пытаюсь интегрировать его в terraform во время выполнения. Мы используем версию terraform 0.11.13, и обновление до последней версии terraform предусмотрено в дорожной карте.
Мы все хотим использовать jsondecode()
доступный как часть последней версии terraform, но перед обновлением нашей terraform необходимо интегрировать несколько вещей.
Мы попытались использовать приведенную ниже вспомогательную программу внешних данных, предложенную как часть 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. Эй, у меня нет опыта работы с windows10 для проверки. Внешний помощник — это плагин golang, используемый terraform для запуска помощников. Я бы проверил и установил соответствующий плагин golang (помощник / схема, я полагаю), а также проверил совместимость с ОС, поддерживается ли echo в Windows или нет.
2. теперь echo поддерживается в Windows powershell. но terraform не может этого получить.
PS C:UsersSanjeev> echo "sanjeev" sanjeev
Ответ №1:
Похоже, вы хотите использовать a data source
для aws_secretsmanager_secret
.
Ресурсы в terraform создают новые ресурсы. Источники данных в terraform ссылаются на значение существующих ресурсов в terraform.
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"
}
Примечание: вы также можете использовать секретное имя
Документы: 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 специфичной для модуля, а не для всей вашей организации. Я делаю это с помощью контейнеров docker, которые запускают определенные версии корзины terraform. В корне каждого модуля есть скрипт, который преобразует команды terraform в версию terraform, предназначенную для этого проекта. Просто совет.
Комментарии:
1. Хотя это было бы полезно для Terraform 0.12 , на вопрос конкретно требуется ответ Terraform 0.11.
2. ах, пропустил эту деталь. Мой плохой.