Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to use Terraform to execute SQL script on RDS MySQL?

I created the aws_db_instance to provision the RDS MySQL database using Terraform configuration. Now my next question is to execute the SQL Script (CREATE TABLE and INSERT statements) on the RDS. I did the following but there is no effect. terraform plan cannot even see my changes on executing the sql. What did I miss here? Thanks.

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

  provisioner "remote-exec" {
    inline = [
      "chmod +x script.sql",
      "script.sql args",
    ]
  }
}
like image 580
Julie Avatar asked Mar 28 '18 18:03

Julie


People also ask

How do I run a SQL script from a database?

Open SQL Server Management Studio > File > Open > File > Choose your . sql file (the one that contains your script) > Press Open > the file will be opened within SQL Server Management Studio, Now all what you need to do is to press Execute button. Save this answer.

How do I run a MySQL script in SQL Server?

To run SQL script in MySQL, use the MySQL workbench. First, you need to open MySQL workbench. Now, File -> Open SQL Script to open the SQL script. Note − Press OK button twice to connect with MySQL.


1 Answers

Check out this post: How to apply SQL Scripts on RDS with Terraform


If you're just trying to setup user's and permissions (you shouldn't use the root pw you set when you generate the RDS) there is a terraform provider for that:

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


But you're looking for DB schema and seeding. That provider cannot do that.

If you're open to doing it another way, you may want to check out using ssm automation documents and/or lambda. I'd use lambda. Pick a language that you're comfortable with. Set the role of the lambda to have permissions to read the password it needs to do the work. You can save the password in ssm parameter store. Then script your DB work.

Then do a local exec in terraform that simply calls the lambda and pass it the ID of the RDS and the path to the secret in ssm parameter store. That will ensure that the DB operations are done from compute inside the VPC without having to setup an EC2 bastion just for that purpose.

Here's how javascript can get this done, for example: https://www.w3schools.com/nodejs/nodejs_mysql_create_table.asp

like image 72
Geoff Avatar answered Nov 13 '22 19:11

Geoff