Поиск по сайту:

Как загрузить локальные файлы в инстанс Amazon EC2 с помощью Terraform


На этой странице

  1. Что мы рассмотрим?
  2. Для чего используются Provisioners?
  3. Предварительные условия
  4. Использование File Provisioner для копирования файлов
  5. Практическое применение File Provisioner
  6. Заключение

Когда мы работаем с инстансами EC2, нам часто нужно скопировать локальный файл в инстанс. Это особенно необходимо, если файл должен быть сразу же доступен на экземпляре, как только он будет создан. Например, одним из требований моего проекта Terraform было то, что файл конфигурации для виртуального хоста Apache должен быть доступен на экземпляре EC2 сразу после его создания. Этот файл использовался в качестве шаблона для создания двух файлов конфигурации виртуального хоста. Для этого я использовал инструмент Terraforms File Provisioner для копирования этих файлов.

Вы должны знать, что Terraform не рекомендует использовать средства подготовки и рекомендует альтернативные методы для тех случаев, когда они доступны. Причин для этого ограничения много, о них говорится на сайте Terraform.

Что мы будем освещать?

В этом руководстве мы рассмотрим, как скопировать файл с локального компьютера, на котором работает Terraform, во вновь созданный экземпляр Amazon EC2 (Ubuntu) на AWS. В этом методе мы будем использовать утилиту File, предоставленную Terraform. Мы демонстрируем его использование, просто скопировав файл в экземпляр EC2.

Для чего используются Provisioners?

Provisioners обычно используются для выполнения сценариев создания, уничтожения различных ресурсов и подготовки машины к использованию в производственной среде или среде разработки. Операции подготовки включают в себя такие вещи, как приведенная ниже:

  1. Обновите операционную систему.
  2. Создавайте учетные записи, настраивайте службы и выполняйте другие административные задачи системы.
  3. Установка программного обеспечения.
  4. Передача файлов и управление файлами в системе.
  5. Настройка системных IP-адресов, портов и других задач.

Предпосылки

  1. Основы Terraform.
  2. Terraform и интерфейс командной строки AWS установлены в локальной системе.
  3. CLI AWS настроен для доступа к вашему аккаунту AWS.

Использование File Provisioner для копирования файлов

File Provisioner используется для копирования файлов и каталогов с компьютера, на котором работает Terraform, на тот же или другой компьютер, например экземпляры EC2. Provisioners можно применять как в локальных, так и в удаленных системах. Хотя Terraform отлично справляется с операциями развертывания, он не так хорош в подготовке. Многие операционные системы и команды не поддерживаются Terraform должным образом. Вот почему Terraform предлагает использовать Provisioners в качестве последнего варианта.

Практическое применение файлового Provisioner

В этом разделе мы увидим практический способ использования файлового поставщика. Мы создадим ресурс экземпляра EC2 с помощью Terraform, а затем скопируем файл из локальной системы в этот экземпляр. Давайте сделаем это прямо сейчас:

Шаг 1. Сначала создайте файл, который мы хотим скопировать в удаленную систему. Мы создаем его внутри каталога, содержащего все наши файлы конфигурации:

$ nano dummy.txt

Также добавьте содержимое в этот файл:

$ echo “Our dummy file” > dummy.txt

Шаг 2. Создайте файл с именем «instance.tf» или с любым другим именем, но с расширением «.tf»:

$ sudo instance.tf

Теперь заполните этот файл следующим содержимым:

provider "aws" {
region ="us-east-1"
}

resource "aws_instance" "webserver" {
ami ="ami-id-you-want-to-use"
instance_type = "t2.micro"
key_name = "Name-of-your- EC2-keypair"
vpc_security_group_ids = ["Use-an-existing-SG"]
associate_public_ip_address = true

  provisioner "file" {
       source      = "dummy.txt"
       destination = "/home/ubuntu/file1.txt"
      
connection {
     type        = "ssh"
     user        = "ubuntu"
     private_key = "${file("Path-to-EC2-keyPair-on-Local-system.pem")}"
     host        = "${self.public_ip}"
   }
  }


tags = {
   Name = "FileProvisionerDemo"
}
}

Приведенный выше код скопирует файл «dummy.txt» в экземпляр EC2 с именем «file1.txt». Здесь мы использовали существующую группу безопасности, вы можете создать новую с помощью Terraform и использовать ее здесь. Давайте посмотрим на описание некоторых аргументов, используемых здесь:

  • источник: абсолютное расположение файлов и каталогов или относительное расположение, соответствующее каталогу проекта Terraform.
  • пункт назначения: это абсолютный путь в целевой системе.
  • блок подключения: Terraform узнает, как взаимодействовать с сервером, используя блок подключения. Соединения типа «ssh» и «winrm» поддерживаются поставщиками файлов.
  • type: В этом поле указывается тип соединения, который может быть «ssh» или «winrm». В этой лабораторной работе мы использовали соединение SSH.
  • user: указывает пользователя, который будет использоваться для соединения.
  • private_key: содержимое ключа SSH для установления соединения.
  • хост: укажите адрес ресурса, с которым мы хотим соединиться.
  • self: объект, представляющий родительский ресурс соединения и содержащий все атрибуты ресурса.

Поставщик файлов также поддерживает другие аргументы, такие как сертификат, агент, host_key и т. д.

Шаг 3. Инициализируйте каталог проекта, используя:

$ terraform init
$ terraform validate
$ terraform apply

Пример вывода:

Terraform used the selected providers to generate the following execution plan.
Resource actions are indicated with the following symbols:
  + create

Terraform will perform the following actions:

  # aws_instance.webserver will be created
  + resource "aws_instance" "webserver"

Шаг 5. Теперь наш экземпляр создается, как показано ниже:

Заключение

В этом руководстве мы увидели, как мы можем использовать средство подготовки файлов для копирования файла в экземпляр.