我正在使用Terraform创建一个脚本,该脚本构建一些EC2服务器和一个MySQL RDS(使用AWS Amazon Provider)。
有没有一种方法可以在此创建的RDS上执行SQL脚本(我想创建用户,表等)?
提前致谢,
Att,
像此解决方案一样,如果RDS数据库是公开可用的并且您已设置ingress允许计算机连接,则还可以通过将本地计算机与local-exec一起使用来避免实例设置的时间/成本。然后,将凭据安全地存储在您的环境中,您将可以执行以下操作:
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}"
}
}
}
Run Code Online (Sandbox Code Playgroud)
请记住,密码和其他敏感变量可以分别输入到terraform中。
基于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}"
}
}
}
Run Code Online (Sandbox Code Playgroud)
您需要在配置程序资源中使用 terraform 远程执行。获取实例的数据库凭据是另一回事。您可以使用consul之类的工具或从 s3 中提取凭据并进行脚本解析。
resource "aws_instance" "web" {
provisioner "remote-exec" {
inline = [
"chmod +x /tmp/script.sh",
"/tmp/script.sh args",
]
}
}
Run Code Online (Sandbox Code Playgroud)
https://www.terraform.io/docs/provisioners/remote-exec.html#script
| 归档时间: |
|
| 查看次数: |
7486 次 |
| 最近记录: |