我创建了aws_db_instance以使用Terraform配置来配置RDS MySQL数据库。我需要在RDS上执行SQL Scripts(CREATE TABLE和INSERT语句)。我被困在这里使用什么命令?任何人都有我的用例中的示例代码?请指教。感谢。
resource "aws_db_instance" "mydb" {
# ...
provisioner "local-exec" {
command = "command to execute script.sql"
}
}
答案 0 :(得分:0)
我不相信您可以使用具有该类型资源的供应商。您可以探索的一个选项是从Terraform output
获取RDS实例的地址并运行SQL脚本。
因此,例如在CI环境中,您将拥有Create Database -> Load Database -> Finished
。
下面是Terraform创建和output资源地址。
resource "aws_db_instance" "mydb" {
# ...
provisioner "local-exec" {
command = "command to execute script.sql"
}
}
output "username" {
value = "${aws_db_instance.mydb.username}"
}
output "address" {
value = "${aws_db_instance.mydb.address}"
}
Load Database
步骤将运行带有SQL逻辑和以下内容的shell脚本以获取实例的地址 - terraform output address
答案 1 :(得分:0)
可以使用取决于aws_db_instance.my_db
的{{3}}。这样,当您运行命令时主机可用,只有在没有规则阻止您访问数据库(例如安全组入口或不可公开访问)时,它才会起作用。
示例:强>
resource "null_resource" "setup_db" {
depends_on = ["aws_db_instance.my_db"] #wait for the db to be ready
provisioner "local-exec" {
command = "mysql -u ${aws_db_instance.my_db.username} -p${var.my_db_password} -h ${aws_db_instance.my_db.address} < file.sql"
}
}