首先创建 terraform aws rds 然后创建 ec2 实例

Creating terraform aws rds first then create ec2 instance

我想使用 terraform 创建一个 rds 和 ec2 实例,我能够做到,但问题是我想在 ec2 bash 脚本中使用 rds 端点使用模板数据源脚本现在发生的事情是我的 ec2 实例首先创建,然后我的 rds 被创建,因为我无法使用 rds 端点,因为它是在那个时候创建​​的。所以一旦创建,我的 ec2 数据源脚本应该 运行.


# RDS 
resource "aws_db_parameter_group" "terraform_postgres_parameters" {
  name        = format("%s-%s-%s", var.PROJECT_NAME, var.RDS_IDENTIFIER , "parameters")
  family      = format("%s%s", var.ENGINE, var.ENGINE_VERSION)
  description = format("%s %s %s", var.PROJECT_NAME, var.ENGINE , "parameter group")

}

resource "aws_db_instance" "terraform_postgres" {
  allocated_storage       = 20               # min_storage
  max_allocated_storage   = 100              # max_storage
  engine                  = var.ENGINE
  engine_version          = var.ENGINE_VERSION
  instance_class          = "db.t2.micro"
  identifier              = var.RDS_IDENTIFIER
  name                    = var.RDS_NAME
  username                = var.RDS_USERNAME
  password                = var.RDS_PASSWORD
  parameter_group_name    = aws_db_parameter_group.terraform_postgres_parameters.name
  multi_az                = "false"
  storage_type            = "gp2"
  backup_retention_period = 30
  skip_final_snapshot     = true
  publicly_accessible     = true
  tags = {
    Name = "terraform_postgres_instance"
  }
}


# EC2 Instance
resource "aws_instance" "example" {
  ami           = "ami-0bdef2eb518663879"
  instance_type = "t2.micro"

  user_data = data.template_cloudinit_config.cloudinit-example.rendered
}

# Templete File
data "template_file" "shell-script" {
  template = file("script/cloud-init.sh")
  vars = {
    DB_HOST = aws_db_instance.terraform_postgres.endpoint   # Need to use rds endpoint here
    DB_USER = var.RDS_USERNAME
    DB_PASSWORD = var.RDS_PASSWORD
    DB_NAME = "kong"
  }
}

data "template_cloudinit_config" "cloudinit-example" {
  gzip          = false
  base64_encode = false

  part {
    content_type = "text/x-shellscript"
    content      = data.template_file.shell-script.rendered
  }

}



# script/cloud-init.sh file
...
...
...

if true; then
    psql --host ${DB_HOST} --port=5432 --username=${DB_USERNAME} <<EOF      # creating database for kong api-gateway
CREATE DATABASE kong OWNER ${DB_USER}; 
EOF
fi

...
...
...

# Setup Configuration file

...
...
...
...
...
...
...

sudo -u kong kong migrations bootstrap

# Start Kong
sudo /usr/local/bin/kong start
# end of cloud-init.sh file

您应该可以使用 aws_instance 资源中的 depends_on 元参数来做到这一点。

试着查看官方文档https://www.terraform.io/docs/language/meta-arguments/depends_on.html