BLUF: мне нужно иметь возможность добавлять SCHEMA в экземпляр RDS БД PostgreSQL 10.4 через terraform полностью автоматизированным способом.
Я пытаюсь выполнить полностью автоматическую установку Private Terraform Enterprise (PTFE).Руководство по развертыванию требует PostgreSQL v9.4 или новее.Это развертывание на AWS, поэтому я решил развернуть PSQL через RDS.В настоящее время RDS имеет только версию 10.5.
У меня нет опыта работы с psql и ограниченный опыт работы с bash.Я попытался использовать «Null Resource» terraform и запустить локальный поставщик для выполнения нескольких команд.См. Ниже:
resource "null_resource" "db_setup" {
depends_on = ["aws_db_instance.pes", "aws_security_group.db_main", "random_pet.db-pwd"]
provisioner "local-exec" {
command = <<-EOF
ssh -i '~/example.pem' ubuntu@${var.ec2_instance}
sudo apt-get -y install postgresql
psql --host=${aws_db_instance.pes.address} --port=5432 --username=example_username --dbname=example_name -c 'CREATE SCHEMA rails;' -c 'CREATE SCHEMA vault;' -c 'CREATE SCHEMA registry;'
EOF
environment {
PGPASSWORD = "${random_pet.db-pwd.id}"
}
}
}
Когда я запускаю это в моем "terraform apply", БД и все другие ресурсы собираются правильно.Когда terraform переходит к выполнению нулевого ресурса "db-setup", похоже, что он не передает пароль при запросе и также получает "Псевдо-терминал не будет выделен, потому что stdin не является терминалом."
module.pes.null_resource.db_setup: Creating...
module.pes.null_resource.db_setup: Provisioning with 'local-exec'...
module.pes.null_resource.db_setup (local-exec): Executing: ["/bin/sh" "-c" "ssh -i '~/example.pem' ubuntu@<redacted>\nsudo apt-get -y install postgresql \npsql --host=<redacted> --port=5432 --username=example_username --dbname=example_name -c 'CREATE SCHEMA rails;' -c 'CREATE SCHEMA vault;' -c 'CREATE SCHEMA registry;' \n"]
module.pes.null_resource.db_setup (local-exec): Pseudo-terminal will not be allocated because stdin is not a terminal.
module.pes.null_resource.db_setup (local-exec): Welcome to Ubuntu 18.04.1 LTS (GNU/Linux 4.15.0-1032-aws x86_64)
module.pes.null_resource.db_setup (local-exec): * Documentation: https://help.ubuntu.com
module.pes.null_resource.db_setup (local-exec): * Management: https://landscape.canonical.com
module.pes.null_resource.db_setup (local-exec): * Support: https://ubuntu.com/advantage
......
Password:module.pes.null_resource.db_setup: Still creating... (10s elapsed)
Как вы можете видеть выше, он показывает запрос пароля, который вы обычно видите при запуске команды.Время создания истекает.Я проверил командную строку вручную через экземпляр, на котором я запускаю команду, и она прошла успешно.Переменные, которые интерполируются, верны, и генерация пароля работает.Я думаю, что что-то не так с "local-exec", который не передает PGPASSWORD.
ОС: Ubuntu 18.04 PostreSQL: 10.4
Я открыт для любых идей, чтобы автоматизировать это с помощью terraform и работы.Заранее спасибо.