Terraform 无法通过 ssh 进入 EC2 实例以上传文件



我正在尝试启动并运行一个基本的地形示例,然后将一个非常简单的烧瓶应用程序推送到那里的 docker 容器中。如果我删除文件配置器部分和用户数据部分,该脚本都可以正常工作。pem 文件与main.tf脚本和terraform.exe文件位于磁盘上的同一位置。

如果我保留文件配置器,则脚本将失败并显示以下错误:

Error: Error applying plan:
1 error(s) occurred:
* aws_launch_configuration.example: 1 error(s) occurred:
* dial tcp :22: connectex: No connection could be made because the target    machine actively refused it.

如果我删除文件配置部分,脚本运行良好,我可以使用我的私钥 ssh 到创建的实例,因此key_name部分似乎工作正常,我认为这与文件配置器尝试连接以添加我的文件有关。

这是我从脚本中启动的配置,我尝试使用从在线另一篇文章中获得的连接块,但我看不到我做错了什么。

resource "aws_launch_configuration" "example" {
image_id = "${lookup(var.eu_west_ami, var.region)}"
instance_type = "t2.micro"
key_name      = "Terraform-python"
security_groups = ["${aws_security_group.instance.id}"]
provisioner "file" {
source      = "python/hello_flask.py"
destination = "/home/ec2-user/hello_flask.py"
connection {
type     = "ssh"
user     = "ec2-user"       
private_key = "${file("Terraform-python.pem")}"
timeout = "2m"
agent = false
}
}
provisioner "file" {
source      = "python/flask_dockerfile"
destination = "/home/ec2-user/flask_dockerfile" 
connection {
type     = "ssh"
user     = "ec2-user"       
private_key = "${file("Terraform-python.pem")}"
timeout = "2m"
agent = false
}
}
user_data = <<-EOF
#!/bin/bash
sudo yum update -y
sudo yum install -y docker
sudo service docker start
sudo usermod -a -G docker ec2-user
sudo docker build -t flask_dockerfile:latest /home/ec2-user/flask_dockerfile
sudo docker run -d -p 5000:5000 flask_dockerfile
EOF
lifecycle {
create_before_destroy = true
}
}

我正在做的事情可能是非常简单和愚蠢的事情,提前感谢任何看过的人。

aws_launch_configuration

不是实际的EC2实例,而只是启动实例的"模板"。因此,无法通过SSH连接到它。

要复制这些文件,您有两个选择:

  • 创建自定义 AMI。为此,您可以使用 Packer 或 Terraform 本身,使用aws_instance和这些文件预置器启动 EC2 实例,并使用aws_ami从中创建 AMI。

  • 第二个不是最佳做法,但如果文件很短,您可以将它们包含在user_data.

相关内容

  • 没有找到相关文章

最新更新