使用模板的Bootstrap EC2实例引用了另一个模板

时间:2019-07-27 00:06:01

标签: amazon-web-services amazon-ec2 terraform terraform-provider-aws ec2-ami

我正在尝试使用terraform引导AWS EC2实例。我正在使用用户数据并引用一个包含用户数据启动脚本的文件(而不是内联文件)。该文件还引用其他文件进行某些配置。该实例位于专用子网中,我不处理密钥。

到目前为止,我已经尝试使用文件配置器将配置文件复制到实例,然后可以在启动脚本中引用文件路径。我怀疑terraform无法复制文件,因为我什至没有指定连接块,但是,由于没有键,我不确定在此添加什么。

到目前为止的代码:

resource "aws_instance" "fe_proxy" {
  ami                     = "${var.fe_proxy}"
  instance_type           = "t2.micro"
  subnet_id               = "${aws_subnet.public_a.id}"
  monitoring              = true
  vpc_security_group_ids  = [ "${aws_security_group.fe_proxy.id}" ]
  iam_instance_profile    = "${aws_iam_instance_profile.proxy-instance-profile.name}"

  user_data = "${file("./start-up-scripts/install_proxy_deps.sh")}"

  provisioner "file" {
    source = "./start-up-scripts/haproxy.cfg"
    destination = "/tmp/haproxy.cfg"
  }

}

有没有办法解决这个问题?

1 个答案:

答案 0 :(得分:0)

您是正确的,如果没有连接块,此处的文件配置程序将无济于事。您肯定需要使用SSH,并且由于您已经提到要在专用子网中进行部署,因此我建议您为Terraform支持的连接块配置一个堡垒主机:

https://www.terraform.io/docs/provisioners/connection.html

否则,我最好的建议是让用户数据脚本卷曲(如果已连接到NAT网关)或S3副本(如果配置了S3 VPC端点,则可以在没有Internet访问的情况下进行此操作),以这种方式拉出您需要的代理文件。但这意味着您将需要远程存储源文件。