关于Terraform的一般问题

时间:2017-05-28 11:50:16

标签: amazon-web-services amazon-ec2 chef terraform

是否可以使用相同的terraform脚本创建多个实例?

如果我已经创建了一个实例,如何在不破坏另一个实例的情况下创建一个新实例?

例如我在AWS中有一个实例并且它连接到Chef Server,当我运行terraform destroy时它会删除AWS中的所有内容但是在Chef Server中实例仍然可见,是否可以告诉terraform将其从Chef中删除服务器也是?

提前致谢。

2 个答案:

答案 0 :(得分:0)

Terraform chef provisioner有一个" recreate_client"可以设置为true的选项:

  

recreate_client(boolean) - (可选)如果为true,请先删除any   注册新的Chef Client之前的现有Chef Node和Client。

希望这有帮助

更新1

找到一个旧的被拒绝的问题Chef-1867,要求在Chef中使用自动删除功能。建议的解决方法是在未在指定时间段内办理登机手续时删除节点的脚本。

更新2

Terraform允许您指定destroy time provisioner。我还没有测试过,但您可以尝试以下内容:

resource "aws_instance" "web" {
  # ...

  provisioner "local-exec" {
    command = "knife node delete -y ${var.instance_name}; knife client delete -y ${var.instance_name}"
    when = "destroy"
    on_failure = "continue"
  }
}

就个人而言,我不喜欢这给我的terraform模板带来的额外复杂性(以及其他需要测试的逻辑)。我认为定期的厨师服务器清除更简单。

答案 1 :(得分:0)

我发现添加定义实例数的count属性就可以了。例如:

resource "aws_instance" "name" {
  ami                         = "${var.ami}"
  count                       = 1
  disable_api_termination     = false
  instance_type               = "${var.instance_flavor["server_type"]}"
  subnet_id                   = "${var.aws_network["subnet"]}"
  vpc_security_group_ids      = ["${aws_security_group.name.id}"]
  key_name                    = "${var.instance_key["name"]}"

  tags = {
    Name        = "${var.instance_flavor["server_tag_name"]}"
    Description = "Name"
  }
}