Terraformを使用して、いくつかのEC2サーバーとMySQL RDS(AWS Amazonプロバイダーを使用)を構築するスクリプトを作成しています。
この作成されたRDSでSQLスクリプトを実行する方法はありますか(ユーザー、テーブルなどを作成したい)。
前もって感謝します、
Att、
このソリューション のように、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に個別に入力 である可能性があることに注意してください。
エコの答えに基づいて:
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}"
}
}
}
プロビジョナーリソースで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