Подтвердить что ты не робот

Как люди тестируют поваренные книги opsworks?

У меня довольно сложное развертывание динамически настроенных экземпляров рельсовых приложений на nginx с использованием пассажира, для которого я в настоящее время пользуюсь Capistrano. Я пытаюсь автоматизировать весь процесс на Opsworks от создания стека, слоев, экземпляров и развертывания динамического приложения. Ни один из существующих рецептов Opsworks не приближается к тому, что мне нужно, поэтому я начал свои собственные кулинарные книги. Я пытаюсь проверить их, используя тестовую кухню и бродягу, но в поваренных книжках Opsworks слишком много пользовательских зависимостей, которые будут использоваться локально. Так что кажется, что я застрял либо заново изобретать колесо, используя только мои собственные рецепты, которые не зависят от кулинарных книг Opsworks, или пытается проверить мои поваренные книги на AWS, которые медленны и дороги.

Кто-нибудь делает какую-либо разработку поваренной книги на Opsworks, и если да, то как вы ее тестируете? Используете ли вы какие-либо общественные кулинарные книги, и если да, то насколько болезненно они должны были работать на Opsworks?

4b9b3361

Ответ 1

Opsworks теперь поддерживает Chef 11.10 и Berkshelf (http://berkshelf.com/) для управления зависимостями, которые делают использование пользовательских кулинарных книг таким образом. много. проще.

Я был очень доволен тестовой кухней (https://github.com/test-kitchen/test-kitchen) с Vagrant и Chef Solo для локального тестирования.

Кроме того, вы можете вручную запускать определенные рецепты в стеке Opsworks со страницы настроек стека. Посмотрите здесь: http://docs.aws.amazon.com/opsworks/latest/userguide/workingcookbook-manual.html.

Вы также можете запускать тесты поваренной книги во время развертывания Opsworks с помощью некоторого пользовательского JSON: http://docs.aws.amazon.com/opsworks/latest/userguide/troubleshoot-debug-test.html

Ответ 2

Мы используем Opsworks с множеством заказных кулинарных книг и бродячих. Хотя охват тестированием далек от совершенства, он работает довольно гладко, адаптируя общинные поваренные книги. Наш репозиторий поваренной книги является общедоступным: https://github.com/till/easybib-cookbooks

Интересными битами этого репо являются:

  • Мы используем роль-рецепт в качестве точки входа для каждого слоя вместо того, чтобы указывать несколько рецептов со слоем в opsworks: https://github.com/till/easybib-cookbooks/blob/master/easybib/recipes/role-nginxapp-api.rb
  • Мы проверяем, запущен ли рецепт в AWS или в Vagrant, используя пользовательскую библиотечную функцию: https://github.com/till/easybib-cookbooks/blob/master/easybib/libraries/easybib.rb#L208-L216
  • Все кулинарные книги/провайдеры, специфичные для opsworks, обычно используются только в книге cookie для развертывания, которую мы включаем только тогда, когда is_aws является истинным, иначе мы отказываемся от развертывания приложений по умолчанию.

Просмотр наших кулинарных книг должно дать вам несколько советов по вашим вопросам. Мы тестируем наши поваренные книги с Travis и не тестируем поваренные книги opsworks. Хотя я должен отметить, что сейчас я играю с некоторыми идеями о том, как их интегрировать в наши тестовые прогоны, так как без их поставщиков тестирование нашей поваренной книги для развертывания практически невозможно.

Ответ 3

На этой странице есть много полезных предложений, но я бы очень рекомендовал всем проверить сообщение в блоге Mike Greiling Упростить разработку OpsWorks с помощью Packer и его github repo opsworks-vm , который поможет вам высмеять весь стек opsworks, включая установку агента opsworks, чтобы вы также могли тестировать приложение развернуть рецепты, несколько уровней, несколько экземпляров одновременно и т.д.. Это очень впечатляет.

Быстрый старт на Ubuntu 14.04

ПРИМЕЧАНИЕ. Это невозможно сделать с виртуальной машины ubuntu, потому что виртуальный бокс не поддерживает вложенную виртуализацию 64-разрядных машин.

  • Установить ChefDK
    • mkdir /tmp/packages && cd /tmp/packages
    • wget https://opscode-omnibus-packages.s3.amazonaws.com/ubuntu/12.04/x86_64/chefdk_0.8.1-1_amd64.deb
    • sudo dpkg -i chefdk_0.8.0-1_amd64.deb
    • cd /opt/chefdk/
    • chef verify
    • which ruby
    • echo 'eval "$(chef shell-init bash)"' >> ~/.bash_profile && source ~/.bash_profile
  • Установить VirtualBox
    • echo 'deb http://download.virtualbox.org/virtualbox/debian vivid contrib' > /etc/apt/sources.list.d/virtualbox.list
    • wget -q https://www.virtualbox.org/download/oracle_vbox.asc -O- | sudo apt-key add -
    • sudo apt-get update -qqy
    • sudo apt-get install virtualbox-5.0 dkms
  • Установить Vagrant
    • cd /tmp/packages
    • wget https://dl.bintray.com/mitchellh/vagrant/vagrant_1.7.4_x86_64.deb
    • sudo dpkg -i vagrant_1.7.4_x86_64.deb
    • vagrant plugin install vagrant-berkshelf
    • vagrant plugin install vagrant-omnibus
    • vagrant plugin list
  • Установить Packer
    • mkdir /opt/packer && cd /opt/packer
    • wget https://dl.bintray.com/mitchellh/packer/packer_0.8.6_linux_amd64.zip
    • unzip packer_0.8.6_linux_amd64.zip
    • echo 'PATH=$PATH:/opt/packer' >> ~/.bash_profile && source ~/.bash_profile
  • Построить Mike Greiling opsworks-vm изображение виртуальной камеры с помощью Packer
    • mkdir ~/packer && cd ~/packer
    • git clone https://github.com/pixelcog/opsworks-vm.git
    • cd opsworks-vm
    • rake build install
    • Это установит новый виртуальный бокс vm в ~/.vagrant.d/boxes/ubuntu1404-opsworks/

Чтобы высмеять один экземпляр opsworks, создайте новый Vagrantfile следующим образом:

Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu1404-opsworks"
  config.vm.provision :opsworks, type: 'shell', args: 'path/to/dna.json'
end

Путь к файлу dna.json задан относительно Vagrantfile и должен содержать любые данные JSON, которые вы хотите отправить шеф-повалу OpsWorks.

Например:

{
  "deploy": {
    "my-app": {
      "application_type": "php",
      "scm": {
        "scm_type": "git",
        "repository": "path/to/my-app"
      }
    }
  },
  "opsworks_custom_cookbooks": {
    "enabled": true,
    "scm": {
      "repository": "path/to/my-cookbooks"
    },
    "recipes": [
      "recipe[opsworks_initial_setup]",
      "recipe[dependencies]",
      "recipe[mod_php5_apache2]",
      "recipe[deploy::default]",
      "recipe[deploy::php]",
      "recipe[my_custom_cookbook::configure]"
    ]
  }
}

Чтобы издеваться над несколькими экземплярами opsworks и включить слои, см. его Пример AWS OpsWorks "Начало работы" , который включает stack.json ниже.

Vagrantfile (для нескольких экземпляров)

Vagrant.configure("2") do |config|

  config.vm.box = "ubuntu1404-opsworks"

  # Create the php-app layer
  config.vm.define "app" do |layer|

    layer.vm.provision "opsworks", type:"shell", args:[
      'ops/dna/stack.json',
      'ops/dna/php-app.json'
    ]

    # Forward port 80 so we can see our work
    layer.vm.network "forwarded_port", guest: 80, host: 8080
    layer.vm.network "private_network", ip: "10.10.10.10"
  end

  # Create the db-master layer
  config.vm.define "db" do |layer|

    layer.vm.provision "opsworks", type:"shell", args:[
      'ops/dna/stack.json',
      'ops/dna/db-master.json'
    ]

    layer.vm.network "private_network", ip: "10.10.10.20"
  end
end

stack.json

{
  "opsworks": {
    "layers": {
      "php-app": {
        "instances": {
          "php-app1": {"private-ip": "10.10.10.10"}
        }
      },
      "db-master": {
        "instances": {
          "db-master1": {"private-ip": "10.10.10.20"}
        }
      }
    }
  },
  "deploy": {
    "simple-php": {
      "application_type": "php",
      "document_root": "web",
      "scm": {
        "scm_type": "git",
        "repository": "dev/simple-php"
      },
      "memcached": {},
      "database": {
        "host": "10.10.10.20",
        "database": "simple-php",
        "username": "root",
        "password": "correcthorsebatterystaple",
        "reconnect": true
      }
    }
  },
  "mysql": {
    "server_root_password": "correcthorsebatterystaple",
    "tunable": {"innodb_buffer_pool_size": "256M"}
  },
  "opsworks_custom_cookbooks": {
    "enabled": true,
    "scm": {
      "repository": "ops/cookbooks"
    }
  }
}

Для тех, кто не знаком с бродягой, просто выполните vagrant up, чтобы запустить экземпляр (ы). Затем вы можете изменить свою кулинарию локально, и любые изменения могут быть применены путем повторного запуска шеф-повара против существующих экземпляров с помощью vagrant provision. Вы можете сделать vagrant destroy и vagrant up, чтобы начать с нуля.

Ответ 4

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

К счастью, их проект Ubuntu был воссоздан этим проектом. https://github.com/wwestenbrink/vagrant-opsworks

Основываясь на этом, я создал местную бродячую среду, в которой работают кулинарные книги opsworks и один из моих собственных. https://github.com/erupenkman/opsworks-example

С этим вы можете протестировать почти идентичную локальную среду перед развертыванием.

Ответ 6

Я смог решить эту проблему, используя Chef + Kitchen + Vagrant

Здесь моя обложка: https://github.com/elitechance/opsworks-cookbooks-wrapper

Ниже приведен пример тестирования

git clone https://github.com/elitechance/opsworks-cookbooks-wrapper.git

git clone https://github.com/aws/opsworks-cookbooks.git

cd opsworks-cookbooks-wrapper

cp.kitchen.sample.yml.kitchen.yml

cp Berksfile.sample Berksfile

cp metadata.sample.rb metadata.rb

Последняя команда будет имитировать Рецепты настройки OpsWorks NodeJs, подробнее см. .kitchen.sample.yml.

$ chef exec kitchen setup

ИЗВЕСТНЫЕ ОШИБКИ

При первом запуске $ chef exec kitchen setup вы столкнетесь с ошибками, говорящими:

Запуск обработчиков: [2016-04-08T17: 08: 34 + 00: 00] ОШИБКА: Запуск обработчиков исключений Запуск обработчиков завершен [2016-04-08T17: 08: 34 + 00: 00] ОШИБКА: Обработчики исключений завершены Шеф-повар Клиент отказал. 43 ресурсов обновлено за 01 минут 02 секунд [2016-04-08T17: 08: 34 + 00: 00] FATAL: Stacktrace сбрасывается в /tmp/kitchen/cache/chef -stacktrace.out [2016-04-08T17: 08: 34 +00: 00] FATAL: Пожалуйста, предоставьте содержимое файла stacktrace.out, если вы отправите отчет об ошибке [2016-04-08T17: 08: 34 + 00: 00] ОШИБКА: ruby_blockFallback для файла remote_file [/tmp/rubygems-2.2.2.tgz] была ошибка: NoMethodError: у remote_file/tmp/rubygems-2.2.2.tgz была ошибка: NoMethodError: undefined метод `to_sym 'для [: create]: Array [2016-04-08T17: 08: 34 + 00: 00] FATAL: Chef:: Exceptions:: ChildConvergeError: процесс запуска шеф-повара вышел неудачно (код выхода 1)

Просто запустите снова:

$ chef exec kitchen setup