我正在使用Terraform创建一个脚本来构建一些EC2服务器和一个MySQL RDS(使用AWS Amazon Provider)。
有没有办法在这个创建的RDS上执行SQL脚本(我想创建用户,表等)?
提前致谢,
ATT,
答案 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}"
}
}
}