自动执行-在rds参数组中应用更改,重新启动rds,然后应用其他更改

时间:2018-10-23 06:09:25

标签: amazon-rds terraform

我们的基础设施代码使用的是terraform。

我想通过terraform创建一个新的postgreSQL数据库,并启用pgaudit日志。

以下是aws文档Working with the pgaudit Extension

它具有以下额外步骤:

  • 第1步CREATE ROLE rds_pgaudit

所以我需要先等待rds实例状态可用,然后再对这个新数据库(在vpc中)运行sql命令

但是如何在terraform中运行此sql命令?

  • 第2步。修改参数组

我可以通过资源aws_db_parameter_group执行此操作,设置变量parameters

  • 第3步。重新启动实例

通过供应商local-execremote-exec来确定如何使用terraform做到这一点?

  • 第4〜6步更多的sql命令

似乎我需要等待数据库回到available状态,然后才能运行sql脚本。那怎么跑?

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

您可以使用remote-exec或local-exec(如果RDS是公开可用的,并且您可以从本地计算机访问RDS)。

远程执行:

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。

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

Local-Exec:

如果您的RDS是可公开访问的,或者可以从本地计算机访问的,则无需启动新实例来运行sql查询。只需准备好用于执行包含RDS用户凭据的sql查询的命令即可。

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

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

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