Скопируйте файл (ы) с локального компьютера на машину (ы) AWS EC2 CoreOS через Terraform

Я пытаюсь скопировать некоторые файлы из моего локального ящика на созданную машину CoreOS через Terraform (в файле main.tf). Я пробовал разные перестановки блока инициатора, но безрезультатно. Например, для этого я получаю сообщение «невозможно аутентифицироваться», когда я вкладываю этот блок в блок ресурса «aws_autoscaling_group» «myfoo» {...}:

  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 в cloud-config.template.yaml для их записи. Возможно, есть другой способ сделать это в Cloud Config? Спасибо.


person TonyW    schedule 17.01.2018    source источник
comment
У пользователя нет ключа ssh, возможно, вы хотите использовать другого пользователя, например ubuntu или ec2-user, покажите определение экземпляра.   -  person Jakub Kania    schedule 18.01.2018
comment
Если вы создаете группу автомасштабирования, как вы предоставляете IP-адреса экземпляров для подключения?   -  person ydaetskcoR    schedule 18.01.2018


Ответы (1)


Если вы используете CoreOS, имя пользователя по умолчанию core, а не root.

https://coreos.com/os/docs/latest/booting-on-ec2.html

Ключ должен существовать в AWS, прежде чем вы сможете его использовать, чтобы его можно было назначить экземпляру.

resource "aws_key_pair" "mykeyfile" {
  key_name   = "mykeyfile"
  public_key = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQD3F6tyPEFEzV0LX3X8BsXdMsQz1x2cEikKDEY0aIj41qgxMCP/iteneqXSIFZBp5vizPvaoIR3Um9xK7PGoW8giupGn+EPuxIA4cDM4vzOqOkiMPhz5XK0whEjkVzTo4+S0puvDZuwIsdiW9mxhJc7tgBNL0cYlWSYVkz4G/fslNfRPW5mYAM49f4fhtxPb5ok4Q2Lg9dPKVHO/Bgeu5woMc7RY0p1ej6D4CKFE6lymSDJpW0YHX/wqE9+cfEauh7xZcG0q9t2ta6F6fmX0agvpFyZo8aFbXeUBr7osSCJNgvavWbM/06niWrOvYX2xwWdhXmXSrbX8ZbabVohBK41 [email protected]"
}

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 или etcd для файла конфигурации.

person strongjz    schedule 18.01.2018
comment
Спасибо. Переход по маршруту корзины S3 и извлечение файлов через интерфейс командной строки AWS в Cloud Config оказались плодотворными и успешно решили мой сценарий. Я думаю, вы правы в том, что инициатор файлов был неправильным подходом для ASG. - person TonyW; 19.01.2018
comment
Рад, что смог помочь вам указать правильное направление. Если бы вы могли принять этот ответ, я был бы признателен. - person strongjz; 20.01.2018