我们的基础设施作为代码正在使用terraform。
我想通过terraform创建一个新的postgreSQL数据库,启用pgaudit日志。
以下aws文档使用pgaudit扩展插件
它还有额外的步骤:
CREATE ROLE rds_pgaudit因此,我需要先等待rds实例状态可用,然后对这个新数据库(在vpc中)运行一个sql命令。
但是如何在terraform中运行这个sql命令呢?
我可以通过资源aws_db_parameter_group实现这一点,设置变量parameters
不确定如何使用地形,由提供程序local-exec或remote-exec?
似乎我需要等待数据库返回到available状态,然后我可以运行sql脚本。那怎么跑?
有什么建议吗?
发布于 2018-10-23 06:31:45
您可以使用remote-exec或local -exec(如果RDS是可公开的,并且可以从本地计算机到达RDS )。
远程-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的参数提供。
参考文献:https://www.terraform.io/docs/provisioners/remote-exec.html#script
当地-主管:
如果您的RDS是可公开访问的,或者是可以从本地机器访问的,那么您就不需要启动一个新的实例来运行sql查询。只需准备好执行sql查询的命令,包括RDS用户凭据。
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
https://stackoverflow.com/questions/52942185
复制相似问题