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

Jac*_*ack 5 amazon-rds terraform

我创建了 aws_db_instance 以使用 Terraform 配置来配置 RDS MySQL 数据库。我需要在 RDS 上执行 SQL 脚本(CREATE TABLE 和 INSERT 语句)。我被困在这里使用什么命令?有人在我的用例中有示例代码吗?请指教。谢谢。

resource "aws_db_instance" "mydb" {
  # ...

    provisioner "local-exec" {
      command = "command to execute script.sql"

    }
}
Run Code Online (Sandbox Code Playgroud)

Ste*_*hen 6

这可以使用依赖aws_db_instance.my_db. 这样,当您运行命令时,主机就可用,只有在没有规则阻止您访问数据库(例如安全组入口或不可公开访问)时,主机才会工作。

例子:

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"
  }
}
Run Code Online (Sandbox Code Playgroud)


Nat*_*han 0

我不相信您可以使用具有此类资源的配置程序。您可以探索的一个选项是执行一个额外步骤,从 Terraform 获取 RDS 实例的地址output并运行 SQL 脚本。

因此,例如在 CI 环境中,您将拥有Create Database -> Load Database -> Finished.

下面是你用 Terraform 创建并输出资源地址。

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}"
}
Run Code Online (Sandbox Code Playgroud)

然后,该Load Database步骤将使用 SQL 逻辑运行 shell 脚本,并执行以下操作来获取实例的地址 -terraform output address