1

在增加terraform的EC2资源和应用Ansible中的更改方面存在一些问题。我现在有一个基本的模板:在Terraform中增加EC2资源计数并应用Ansible

resource "aws_instance" "linux_node" { 
    count = 2 
    ami   = "ami-6df1e514" 
    instance_type = "t2.micro" 
    key_name = "" 
    vpc_security_group_ids = [""] 
    iam_instance_profile = "" 
    user_data = "${file("userdata.sh")}" 

    tags { 
    Name = "linux-node" 
    } 

    provisioner "local-exec" { 
     command = "sleep 120; ANSIBLE_HOST_KEY_CHECKING=False ansible-playbook --private-key ~/.ssh/aws-patrick-oregon.pem -i '${aws_instance.linux_node.public_ip},' ../install_packages.yml" 
    } 
} 

的问题,当我增加数到任何超过1,我得到aws_instance.linux_node.public_ip一个错误的错误说:

* aws_instance.linux_node[1]: 1 error(s) occurred: 

* Resource 'aws_instance.linux_node' not found for variable 'aws_instance.linux_node.public_ip' 

我认为它的茎从括号[1]。我想知道如何编写一个有说服力的命令,以便在更改EC2实例时进行更改。

+1

Suplemental提醒,但我注意到您正在做一些可能通过使用Ansible/terraform解决方案的EC2中的Auto Scaling(https://aws.amazon.com/autoscaling/)来支持的内容。您可以考虑评估Auto Scaling是否可以减轻您正在做的一些工作。 –

回答

1

当资源有count集合时,它需要以不同的方式来指定您希望使用哪个实例。

特别是对于供应方是希望基于“当前”的实例置备正在运行采取行动常见的情况,所以简写具备self变量类型:

provisioner "local-exec" { 
    command = "sleep 120; ANSIBLE_HOST_KEY_CHECKING=False ansible-playbook --private-key ~/.ssh/aws-patrick-oregon.pem -i '${self.public_ip},' ../install_packages.yml" 
} 
+0

不错的答案,很高兴认识它。 – BMW

+0

优秀。无懈可击的感谢很多马丁 – Patrick