сделать это автоматически - применить изменения в группе параметров rds, перезагрузить rds и применить другое изменение - PullRequest
0 голосов
/ 23 октября 2018

Наша инфраструктура в качестве кода использует terraform.

Я хочу создать новую базу данных postgreSQL с помощью terraform, с включенным pgaudit log.

Следующий документ aws Работа с расширением pgaudit

Имеются дополнительные шаги для:

  • Шаг 1 CREATE ROLE rds_pgaudit

поэтому мне нужно дождаться, когда сначала будет доступен статус экземпляра rds, а затем запустить команду sql для этой новой базы данных (в vpc)

Но как запустить эту команду sql в terraform?

  • Шаг 2. Изменить группу параметров

Я могу сделать это через ресурс aws_db_parameter_group, установить переменную parameters

  • Шаг 3.перезагрузите экземпляр

Не знаете, как это сделать с помощью terraform, инициатором local-exec или remote-exec ???

  • Шаг 4 ~ еще 6 команд sql

Кажется, мне нужно подождать, пока база данных вернется к состоянию available, затем я смогу запустить скрипт sql.Тогда как запустить?

Есть предложения?

1 Ответ

0 голосов
/ 23 октября 2018

Вы можете использовать remote-exec или local-exec (если RDS общедоступен и вы можете связаться с RDS с локального компьютера).

Remote-Exec:

resource "aws_instance" "remote_execution_server" 
{
 provisioner "remote-exec" {
 inline = [
  "Download the sql related script from S3"
  "aws s3 cp s3://your_bucket/sql.sh /home/ec2-user/",
  "sh /home/ec2-user/sql.sh",
  ]
 }
}

Добавьте этот фрагмент в вашу terraform, и он запустит новый сервер как часть вашего обновления / создания RDS и выполнит запрос sql.Убедитесь, что учетные данные RDS предоставлены в качестве аргументов для сценария sql.sh для подключения к RDS.

Ref: https://www.terraform.io/docs/provisioners/remote-exec.html#script

Local-Exec:

Если ваш RDSобщедоступный или доступный с вашего локального компьютера, тогда вам не нужно запускать новый экземпляр для запуска SQL-запроса.Просто подготовьте свои команды для выполнения запроса sql, включая учетные данные пользователя RDS.

resource "aws_instance" "web" {
# ...

    provisioner "local-exec" {
    command = "echo ${aws_instance.web.private_ip} >> private_ips.txt"
  }
}

Ref: https://www.terraform.io/docs/provisioners/local-exec.html

...