Vagrant – основы работы

04/05/2019


Один из необходимых инструментов в повседневной работе администратора или программиста – Vagrant. Эта небольшая утилита позволяет оперативно запустить виртуальные машины для нашей тестовой среды. При этом Vagrant поддерживает различные тестовые среды. Начиная от системы виртуализации VirtualBox, и вплоть до различных провайдеров публичных облаков, таких как Amazon AWS. Vagrant – очередной инструмент, созданный HashiCorp. Это пожалуй, один из наиболее старых продуктов, который использует методологию Infrastructure-as-a-Code. Данный продукт не является аналогом Terraform или CloudFormation. Он не хранит в себе данных о различных сервисах облака. Его основная задача – оператвный запуск и остановка вычислительных ресурсов для проведения тестовых работ.

Ранее уже поднимал тему IaaC, а также инструментов, которые используются для этого. Это были статьи о Terraform (Автоматизируем облако с Terraform) и Packer (Создаем образ ОС с Packer). С помощью Packer мы создаем образы виртуальных машин, которые после этого можем использовать в Vagrant для запуска работы наших приложений. Он может при своей работе задействовать возможности Ansible. Часто можно услышать вопрос, а зачем это нужно, когда и так можно запускать виртуалки без дополнительного софта. Однако, Vagrant при частом использовании хорошо экономит время и добавляет лишнее удобство в работе.

Использование с облаком Amazon

Сама установка Vagrant предельно проста. В MacOS это делается так: #brew install vagrant. После этого нам нужно настроить стыковку с облаком AWS. Мы устанавливаем специальный плагин для этого:

# vagrant plugin install vagrant-aws

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

# vagrant box add dummy https://github.com/mitchellh/vagrant-aws/raw/master/dummy.box

Теперь для работы с конкретными виртуальными машинами нам нужно создать в рабочей директории файл с названием Vagrant. Пример такого конфигурационного файла, который позволит сформировать новый инстанс EC2 и запустить его в AWS представлен ниже:

# Require the AWS provider plugin
require 'vagrant-aws'

# Create and configure the AWS instance(s)    
Vagrant.configure("2") do |config|
  config.vm.box = "dummy"
  config.vm.synced_folder ".", "/vagrant", disabled: true

  config.vm.provider :aws do |aws, override|
    aws.access_key_id = "SOMEACCESSKEY"
    aws.secret_access_key = "SOMESECRETKEY"
    aws.keypair_name = "MyRSAKey"
    aws.region = "us-east-2"
    aws.ami = "ami-0d224dd294fbc1164"
    aws.instance_type = "t2.micro"

    override.ssh.username = "myself"
    override.ssh.private_key_path = "/home/user/.ssh/MyRSAPair.pem"
  end       

В данном файле мы указываем в разделе provider основные настройки для подключения к AWS: access_key, secret_access_key, регион, тип инстанса и AMI. Также прописываем настройки ssh, чтобы можно было подключаться после запуска виртуалки. Отдельно упомяну про параметр synced_folder, который отключает синхронизацию общих папок между хостом с Vagrant и запускаемой виртуальной машиной. В случае с AWS и управляющим компьютером за NATом, синхронизация не может быть использована. Поэтому ее мы отключаем.

Когда конфигурационный файл готов, пришло время запускать удаленную систему. Это делается с помощью следующей команды:

# vagrant up --provider=aws

В консоли появятся логи исполнения команды. Результатом станет запущенная виртуальная машинка. Для подключения к ней можно использовать команду

# vagrant ssh

Заключение

Разобрали в статье еще один очень полезный инструмент в работе ITшника. Показано его применение с облаком Amazon. Но точно так же его можно использовать и на локальной машине с виртуализацией VirtualBox или VMware. В используемом примере мы запустили одну виртуальную машину в облаке. При желании можно запускать две и более виртуалок. Вообщем, софтина очень гибкая, с большими возможностями и хорошей документацией.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *