Terraform не может ssh в экземпляр EC2 для загрузки файлов - PullRequest
0 голосов
/ 13 октября 2018

Я пытаюсь получить базовый пример terraform и запустить его, а затем поместить туда очень простое колб-приложение в докер-контейнер.Сценарий все работает, если я удаляю раздел поставщика файлов и раздел пользовательских данных.Файл 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
  }
}

Вероятно, это что-то очень простое и глупое, что я делаю, заранее спасибо всем, кто взглянул.

1 Ответ

0 голосов
/ 13 октября 2018

aws_launch_configuration - это не фактический экземпляр EC2, а просто «шаблон» для запуска экземпляров.Таким образом, невозможно подключиться к нему через SSH.

Чтобы скопировать этот файл, у вас есть две опции:

  • Создание пользовательского AMI.Для этого вы можете использовать Packer или сам Terraform, запустив экземпляр EC2 с aws_instance и этими файловыми провайдерами и создав из него AMI с aws_ami

  • Второй вариант не рекомендуется, но если файлы короткие, вы можете включить их в user_data.

...