如何使用Terraform在RDS上应用SQL脚本

时间:2017-07-29 21:59:45

标签: terraform

我正在使用Terraform创建一个脚本来构建一些EC2服务器和一个MySQL RDS(使用AWS Amazon Provider)。

有没有办法在这个创建的RDS上执行SQL脚本(我想创建用户,表等)?

提前致谢,

ATT,

3 个答案:

答案 0 :(得分:5)

this solution一样,您也可以通过本地执行使用自己的计算机来避免实例设置时间/成本如果您的RDS数据库是公开可用的,并且您已设置ingress以允许机器连接。然后,凭借在您的环境中安全存储的凭据,您可以执行以下操作:

resource "null_resource" "db_setup" {

  # runs after database and security group providing external access is created
  depends_on = ["aws_db_instance.your_database_instance", "aws_security_group.sg_allowing_external_access"]

    provisioner "local-exec" {
        command = "database connection command goes here"
        environment {
          # for instance, postgres would need the password here:
          PGPASSWORD = "${var.database_admin_password}"
        }
    }
}

请记住,密码和其他敏感变量可以是input into terraform separately

答案 1 :(得分:1)

您希望在供应商资源中使用terraform远程执行程序。将db凭据获取到实例是另一回事。您可以使用类似consul的内容或从s3中提取信用卡并让脚本解析。

resource "aws_instance" "web" {


  provisioner "remote-exec" {
    inline = [
      "chmod +x /tmp/script.sh",
      "/tmp/script.sh args",
    ]
  }
}

https://www.terraform.io/docs/provisioners/remote-exec.html#script

答案 2 :(得分:0)

以ecoe的答案为基础:

对于以后使用Postgres RDS实例的读者来说,这对我有用(您的计算机上必须安装psql):

variable "db_username" {
  type = string
}

variable "db_password" {
  type = string
}

resource "null_resource" "db_setup" {

  provisioner "local-exec" {

    command = "psql -h host_name_here -p 5432 -U \"${var.db_username}\" -d database_name_here -f \"path-to-file-with-sql-commands\""

    environment = {
      PGPASSWORD = "${var.db_password}"
    }
  }
}