【问题标题】:How to use Terraform to execute SQL script on RDS MySQL?如何使用 Terraform 在 RDS MySQL 上执行 SQL 脚本?
【发布时间】:2020-10-17 04:23:44
【问题描述】:

我创建了aws_db_instance 以使用 Terraform 配置来配置 RDS MySQL 数据库。现在我的下一个问题是在 RDS 上执行 SQL 脚本(CREATE TABLE 和 INSERT 语句)。我做了以下但没有效果。 terraform plan 甚至看不到我在执行 sql 时所做的更改。我在这里错过了什么?谢谢。

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

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

【问题讨论】:

  • 我不认为 remote-exec 是你需要的。您需要使用local-exec 供应商来实现这一点。文档:terraform.io/docs/provisioners/local-exec.html。我相信,remote-exec 类似于用户数据(terraform 登录到实例 - linux/windows 并在那里运行一些脚本)。
  • 如果你切换到本地 exec,你需要在安全组上打开你的 IP 地址,你还需要能够通过 vpn 或如果 db 连接到它在公共子网上,那么您的 ip 需要打开。
  • 这能回答你的问题吗? How to apply SQL Scripts on RDS with Terraform

标签: amazon-web-services amazon-rds terraform


【解决方案1】:

查看这篇文章:How to apply SQL Scripts on RDS with Terraform


如果您只是尝试设置用户和权限(您不应使用生成 RDS 时设置的根密码),那么有一个 terraform 提供程序:

https://www.terraform.io/docs/providers/mysql/index.html


但您正在寻找数据库架构和种子。该提供商无法做到这一点。

如果您愿意以其他方式执行此操作,则可能需要使用 ssm 自动化文档和/或 lambda 进行检查。我会使用 lambda。选择一种你觉得舒服的语言。将 lambda 的角色设置为有权读取完成工作所需的密码。您可以将密码保存在 ssm 参数存储中。然后编写您的数据库工作脚本。

然后在 terraform 中执行本地 exec,简单地调用 lambda 并将 RDS 的 ID 和 ssm 参数存储中的密钥路径传递给它。这将确保数据库操作是从 VPC 内部的计算完成的,而无需为此设置 EC2 堡垒。

以下是 javascript 如何完成此操作,例如: https://www.w3schools.com/nodejs/nodejs_mysql_create_table.asp

【讨论】:

    猜你喜欢
    • 2018-01-05
    • 2022-06-10
    • 1970-01-01
    • 2022-09-22
    • 1970-01-01
    • 1970-01-01
    • 2021-06-14
    • 2013-02-20
    • 2013-03-27
    相关资源
    最近更新 更多