1

我愿意通过 Terraform 启动两个实例。第一个将生成一些证书文件,推送到 S3 存储桶。第二个实例将从特定的 S3 存储桶中提取这些证书。这两个操作都将由用户数据处理。这里的问题是第二个实例的用户数据中的拉取命令(aws cli)不起作用。(当我从 shell 尝试时它正在工作)我认为问题是关于 terraform 同步启动两个实例,以便在第一个实例将证书推送到 S3 之前启动第二个实例。

我还尝试通过在我的代码中添加“depends_on”来解决这个问题,但它不起作用。我正在寻找一种异步启动实例的方法。就像第二个实例将在 30 秒后启动,然后启动第一个实例。这里我粘贴代码的相关部分。

data "template_file" "first_executor" {
  template = file("some_path/first_executor.sh")
}

resource "aws_instance" "first_instance" {
  ami = data.aws_ami.amazon-linux-2.id
  instance_type = "t2.micro"
  user_data = data.template_file.first_executor.rendered
  network_interface {
    device_index = 0
    network_interface_id = aws_network_interface.first_instance-network-interface.id
  }
}

###

data "template_file" "second_executor" {
  template = file("some_path/second_executor.sh")
}

resource "aws_instance" "second_instance" {
  depends_on = [aws_instance.first_instance]
  ami = data.aws_ami.amazon-linux-2.id
  instance_type = "t2.micro"
  user_data = data.template_file.second_executor.rendered
  network_interface {
    device_index = 0
    network_interface_id = aws_network_interface.second-network-interface.id
  }
}
4

1 回答 1

1

答案是否定的。Terraform 中的“depends_on”意味着它将等待资源可用。这意味着,一旦第一个 EC2 被触发,您的第二个 EC2 就会被创建。

Terraform 不会等到您的第一个 EC2 处于“运行”状态或执行用户数据。

我建议使用 depdens_on 然后,在您的第二个 EC2 用户数据脚本中,添加一些逻辑以生成一个循环,该循环将查找 S3 并等待并重复直到找到资源。

于 2020-06-19T14:41:57.600 回答