首页 > 解决方案 > 模块实例依赖于 Terraform 中相同模块的另一个实例

问题描述

我试图找出一种方法,使模块的一个实例依赖于同一模块的另一个实例的成功部署。不幸的是,尽管资源支持它,模块似乎不支持显式depends_on开关:

➜ db_terraform git:(master) ✗ terraform 计划

错误:模块“slave”:“depends_on”不是有效参数

我在根模块中有这些:main.tf

module "master" {
  source = "./modules/database"
  cluster_role    = "master"
  ..
  server_count    = 1
}

module "slave" {
  source = "./modules/database"
  cluster_role    = "slave"
  ..
  server_count    = 3
}

resource "aws_route53_record" "db_master" {
  zone_id = "<PRIVZONE>"
  name    = "master.example.com"
  records = ["${module.master.instance_private_ip}"]
  type    = "A"
  ttl     = "300"
}

我想先部署master。我要做的是启动两个安装了数据库产品的 AWS 实例。一旦 master 出现,它的 IP 将用于创建 DNS 记录。完成此操作后,将创建从属服务器并将使用该 IP 将主服务器“登记”为集群的一部分。如何防止奴隶与主人同时出现?我试图避免从站无法与主站连接,因为在从站准备好时可能尚未创建数据库记录。

我已经阅读了在这种情况下使用 a 的建议null_resource,但我不清楚应该如何使用它来解决我的问题。

Fwiw,这是模块中 main.tf 的内容。

resource "aws_instance" "database" {
  ami                    = "${data.aws_ami.amazonlinux_legacy.id}"
  instance_type          = "t2.xlarge"

  user_data = "${data.template_file.db_init.rendered}"
  count     = "${var.server_count}"
}

提前感谢您的任何答案。

标签: configurationterraform

解决方案


推荐阅读