Terraform 无法通过 ssh 进入 EC2 实例来上传文件
Terraform cannot ssh into EC2 instance to upload files
我正在尝试建立一个基本的 terraform 示例,运行 然后将一个非常简单的烧瓶应用程序推送到 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
部分似乎工作正常,我认为它与文件有关provisioner 尝试连接以添加我的文件。
这是我的脚本启动配置,我尝试使用从另一个 post 在线获得的连接块,但我看不出我做错了什么。
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 实例,而只是 'template' 来启动实例。因此,无法通过 SSH 连接到它。
要复制这些文件,您有两种选择:
正在创建自定义 AMI。为此,您可以使用 Packer 或 Terraform 本身,使用 aws_instance
和这些文件供应器启动 EC2 实例,并使用 aws_ami
[=26 从中创建 AMI =]
第二个不是最佳做法,但如果文件很短,您可以将它们包含在 user_data
.
我正在尝试建立一个基本的 terraform 示例,运行 然后将一个非常简单的烧瓶应用程序推送到 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
部分似乎工作正常,我认为它与文件有关provisioner 尝试连接以添加我的文件。
这是我的脚本启动配置,我尝试使用从另一个 post 在线获得的连接块,但我看不出我做错了什么。
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 实例,而只是 'template' 来启动实例。因此,无法通过 SSH 连接到它。
要复制这些文件,您有两种选择:
正在创建自定义 AMI。为此,您可以使用 Packer 或 Terraform 本身,使用
[=26 从中创建 AMI =]aws_instance
和这些文件供应器启动 EC2 实例,并使用aws_ami
第二个不是最佳做法,但如果文件很短,您可以将它们包含在
user_data
.