通过 Terraform 将文件从本地机器复制到 AWS EC2 CoreOS 机器
Copy File(s) From Local Machine to AWS EC2 CoreOS Machine(s) Via Terraform
我正在尝试通过 Terraform(在 "main.tf" 文件中)将一些文件从我的本地机器复制到创建的 CoreOS 机器上。我尝试了配置块的不同排列但无济于事。例如,为此,当我将此块嵌套在资源 "aws_autoscaling_group" "myfoo" {...} 块中时,我得到 "unable to authenticate":
provisioner "file" {
source = "foo.txt"
destination = "/etc/foo.txt"
connection {
user = "root"
private_key = "${file("~/.ssh/mykeyfile.pem")}"
}
}
我得到的错误是:
...
aws_autoscaling_group.myfoo: Still creating... (30s elapsed)
aws_autoscaling_group.myfoo: Provisioning with 'file'...
aws_autoscaling_group.myfoo: Still creating... (40s elapsed)
...
aws_autoscaling_group.myfoo: Still creating... (5m10s elapsed)
aws_autoscaling_group.myfoo: Still creating... (5m20s elapsed)
aws_autoscaling_group.myfoo: Still creating... (5m30s elapsed)
Error: Error applying plan:
1 error(s) occurred:
* aws_autoscaling_group.myfoo: 1 error(s) occurred:
* ssh: handshake failed: ssh: unable to authenticate, attempted methods [none publickey], no supported methods remain
这些文件是安全文件,我不想将它们烘焙成 Docker 图像。此外,由于它们是安全文件,我不想在云中使用 write_files-config.template.yaml 来写出它们。也许在云配置中还有另一种方法可以做到这一点?谢谢
如果您使用的是 CoreOS,则默认用户名是 core
而不是 root
https://coreos.com/os/docs/latest/booting-on-ec2.html
Key也需要在AWS中存在才能使用,这样才能分配给实例。
resource "aws_key_pair" "mykeyfile" {
key_name = "mykeyfile"
public_key = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQD3F6tyPEFEzV0LX3X8BsXdMsQz1x2cEikKDEY0aIj41qgxMCP/iteneqXSIFZBp5vizPvaoIR3Um9xK7PGoW8giupGn+EPuxIA4cDM4vzOqOkiMPhz5XK0whEjkVzTo4+S0puvDZuwIsdiW9mxhJc7tgBNL0cYlWSYVkz4G/fslNfRPW5mYAM49f4fhtxPb5ok4Q2Lg9dPKVHO/Bgeu5woMc7RY0p1ej6D4CKFE6lymSDJpW0YHX/wqE9+cfEauh7xZcG0q9t2ta6F6fmX0agvpFyZo8aFbXeUBr7osSCJNgvavWbM/06niWrOvYX2xwWdhXmXSrbX8ZbabVohBK41 email@example.com"
}
https://www.terraform.io/docs/providers/aws/r/key_pair.html
https://www.terraform.io/docs/providers/aws/r/instance.html#key_name
此外,如果您使用自动缩放,我会将该文件放在 S3 存储桶中,并授予实例角色访问该 s3 存储桶的权限,如果实例被 ASG 替换,它将无法访问该本地文件.或者对配置文件使用 Consul or etcd 之类的东西。
我正在尝试通过 Terraform(在 "main.tf" 文件中)将一些文件从我的本地机器复制到创建的 CoreOS 机器上。我尝试了配置块的不同排列但无济于事。例如,为此,当我将此块嵌套在资源 "aws_autoscaling_group" "myfoo" {...} 块中时,我得到 "unable to authenticate":
provisioner "file" {
source = "foo.txt"
destination = "/etc/foo.txt"
connection {
user = "root"
private_key = "${file("~/.ssh/mykeyfile.pem")}"
}
}
我得到的错误是:
...
aws_autoscaling_group.myfoo: Still creating... (30s elapsed)
aws_autoscaling_group.myfoo: Provisioning with 'file'...
aws_autoscaling_group.myfoo: Still creating... (40s elapsed)
...
aws_autoscaling_group.myfoo: Still creating... (5m10s elapsed)
aws_autoscaling_group.myfoo: Still creating... (5m20s elapsed)
aws_autoscaling_group.myfoo: Still creating... (5m30s elapsed)
Error: Error applying plan:
1 error(s) occurred:
* aws_autoscaling_group.myfoo: 1 error(s) occurred:
* ssh: handshake failed: ssh: unable to authenticate, attempted methods [none publickey], no supported methods remain
这些文件是安全文件,我不想将它们烘焙成 Docker 图像。此外,由于它们是安全文件,我不想在云中使用 write_files-config.template.yaml 来写出它们。也许在云配置中还有另一种方法可以做到这一点?谢谢
如果您使用的是 CoreOS,则默认用户名是 core
而不是 root
https://coreos.com/os/docs/latest/booting-on-ec2.html
Key也需要在AWS中存在才能使用,这样才能分配给实例。
resource "aws_key_pair" "mykeyfile" {
key_name = "mykeyfile"
public_key = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQD3F6tyPEFEzV0LX3X8BsXdMsQz1x2cEikKDEY0aIj41qgxMCP/iteneqXSIFZBp5vizPvaoIR3Um9xK7PGoW8giupGn+EPuxIA4cDM4vzOqOkiMPhz5XK0whEjkVzTo4+S0puvDZuwIsdiW9mxhJc7tgBNL0cYlWSYVkz4G/fslNfRPW5mYAM49f4fhtxPb5ok4Q2Lg9dPKVHO/Bgeu5woMc7RY0p1ej6D4CKFE6lymSDJpW0YHX/wqE9+cfEauh7xZcG0q9t2ta6F6fmX0agvpFyZo8aFbXeUBr7osSCJNgvavWbM/06niWrOvYX2xwWdhXmXSrbX8ZbabVohBK41 email@example.com"
}
https://www.terraform.io/docs/providers/aws/r/key_pair.html
https://www.terraform.io/docs/providers/aws/r/instance.html#key_name
此外,如果您使用自动缩放,我会将该文件放在 S3 存储桶中,并授予实例角色访问该 s3 存储桶的权限,如果实例被 ASG 替换,它将无法访问该本地文件.或者对配置文件使用 Consul or etcd 之类的东西。