我正在尝试使用 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"
}
}
有没有办法解决这个问题?
您是对的,如果没有连接块,您将无法在此处使用文件配置器到达任何地方。您肯定需要 SSH 加入,并且由于您提到要部署在私有子网中,因此我建议您为 Terraform 支持的连接块配置堡垒主机:
https://www.terraform.io/docs/provisioners/connection.html
否则,我最好的建议是让您的用户数据脚本执行 curl(如果连接到 NAT 网关(或 S3 副本(如果您配置了 S3 VPC 终端节点,则可以在没有互联网访问的情况下执行此操作(,以这种方式拉取 haproxy 所需的文件。这意味着您需要远程存储源文件。