通过 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 之类的东西。