用于执行mysql脚本的terraform local-exec命令

时间:2018-03-29 19:00:57

标签: amazon-rds terraform

我创建了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"

    }
}

2 个答案:

答案 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"
  }
}