我们的基础设施代码使用的是terraform。
我想通过terraform创建一个新的postgreSQL数据库,并启用pgaudit
日志。
以下是aws文档Working with the pgaudit Extension
它具有以下额外步骤:
CREATE ROLE rds_pgaudit
所以我需要先等待rds实例状态可用,然后再对这个新数据库(在vpc中)运行sql命令
但是如何在terraform中运行此sql命令?
我可以通过资源aws_db_parameter_group
执行此操作,设置变量parameters
通过供应商local-exec
或remote-exec
来确定如何使用terraform做到这一点?
似乎我需要等待数据库回到available
状态,然后才能运行sql脚本。那怎么跑?
有什么建议吗?
答案 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