web-dev-qa-db-ja.com

Terraformを使用してRDSにSQLスクリプトを適用する方法

Terraformを使用して、いくつかのEC2サーバーとMySQL RDS(AWS Amazonプロバイダーを使用)を構築するスクリプトを作成しています。

この作成されたRDSでSQLスクリプトを実行する方法はありますか(ユーザー、テーブルなどを作成したい)。

前もって感謝します、

Att、

12

このソリューション のように、RDSデータベースが公開されており、セットアップを行っている場合は、local-execで独自のマシンを使用することで、インスタンスのセットアップ時間/コストを回避することもできます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}"
        }
    }
}

パスワードおよびその他の機密変数は terraformに個別に入力 である可能性があることに注意してください。

6
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}"
    }
  }
}
1
rishikarri

プロビジョナーリソースでterraform remote execを使用する必要があります。インスタンスへの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

1
strongjz