Jak ludzie testują książki kucharskie opsworks?

[[0]}mam dość skomplikowane wdrożenie dynamicznie skonfigurowanych instancji aplikacji kolejowych na nginx przy użyciu pasażera, do którego obecnie używam Capistrano. Staram się zautomatyzować cały proces na Opworks od tworzenia stosu, warstw, instancji i dynamicznego wdrażania aplikacji. Żaden z istniejących receptur Opworks zbliżyć się do tego, czego potrzebuję, więc zacząłem własne niestandardowe książki kucharskie. Próbuję je przetestować za pomocą test-kitchen i vagrant, ale Książki kucharskie Opsworks mają zbyt wiele niestandardowych zależności do wykorzystania lokalnie. Wydaje się więc, że utknąłem albo ponownie wymyślając koło, używając tylko własnych przepisów, które nie zależą od książek kucharskich Opworks lub próbując przetestować moje książki kucharskie na AWS, który jest powolny i drogi.

Czy ktos robi jakis custom Cookbook development na Opworks i jesli tak to jak go testujecie? Czy korzystasz z książek kucharskich społeczności i jeśli tak, jak bolesne były one, aby pracować nad Opworks?

Author: duckworth, 2014-03-24

6 answers

Opsworks obsługuje teraz Chef 11.10 i Berkshelf ( http://berkshelf.com/) do zarządzania zależnościami, co sprawia, że korzystanie z niestandardowych książek kucharskich tak. much. łatwiej.

Byłem całkiem zadowolony z kuchni testowej ( https://github.com/test-kitchen/test-kitchen ) z Vagrant & Chef Solo do testów lokalnych.

DODATKOWO możesz ręcznie uruchamiać poszczególne receptury na stosie Opworks ze strony Ustawienia stosu. Zajrzyj tutaj: http://docs.aws.amazon.com/opsworks/latest/userguide/workingcookbook-manual.html .

Możesz również uruchomić testy książki kucharskiej podczas wdrażania Opsworks z niestandardowym JSON: http://docs.aws.amazon.com/opsworks/latest/userguide/troubleshoot-debug-test.html

 5
Author: imgrgry,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-06 12:57:24

Używamy Opworks z wieloma niestandardowymi książkami kucharskimi, a także vagrant. Chociaż zasięg testu jest daleki od doskonałości, działa całkiem gładko, dostosowując również społecznościowe książki kucharskie. Nasze repozytorium książek kucharskich jest publiczne: https://github.com/till/easybib-cookbooks

Ciekawe fragmenty tego repo to:

Przeglądanie naszych książek kucharskich powinno dać ci więcej wskazówek na swoje pytania. Testujemy nasze książki kucharskie z Travis, i nie testować opworks książki kucharskie w ogóle. Chociaż muszę zauważyć, że obecnie bawię się tam z kilkoma pomysłami, jak zintegrować je z naszymi testami, ponieważ bez ich dostawców testowanie naszej deploy cookbook jest prawie niemożliwe.

 6
Author: Florian Holzhauer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-30 22:47:20

Istnieje wiele przydatnych sugestii na tej stronie, ale Gorąco polecam wszystkim sprawdzić Mike Greiling ' s blog post uprościć rozwój OpsWorks z Packer i jego github repo opsworks-vm które pomogą Ci naszkicować cały stos opsworks, w tym instalację agenta opsworks, dzięki czemu można również testować receptury wdrażania aplikacji, wiele warstw, wiele instancji w tym samym czasie, itp . Jest to niezwykle imponujące.

Szybki Start Ubuntu 14.04

Uwaga: nie można tego zrobić z maszyny wirtualnej ubuntu, ponieważ virtualbox nie obsługuje zagnieżdżonej wirtualizacji maszyn 64-bitowych.

  1. Install ChefDK
    1. mkdir /tmp/packages && cd /tmp/packages
    2. wget https://opscode-omnibus-packages.s3.amazonaws.com/ubuntu/12.04/x86_64/chefdk_0.8.1-1_amd64.deb
    3. sudo dpkg -i chefdk_0.8.0-1_amd64.deb
    4. cd /opt/chefdk/
    5. chef verify
    6. which ruby
    7. echo 'eval "$(chef shell-init bash)"' >> ~/.bash_profile && source ~/.bash_profile
  2. zainstaluj VirtualBox
    1. echo 'deb http://download.virtualbox.org/virtualbox/debian vivid contrib' > /etc/apt/sources.list.d/virtualbox.list
    2. wget -q https://www.virtualbox.org/download/oracle_vbox.asc -O- | sudo apt-key add -
    3. sudo apt-get update -qqy
    4. sudo apt-get install virtualbox-5.0 dkms
  3. Install Vagrant
    1. cd /tmp/packages
    2. wget https://dl.bintray.com/mitchellh/vagrant/vagrant_1.7.4_x86_64.deb
    3. sudo dpkg -i vagrant_1.7.4_x86_64.deb
    4. vagrant plugin install vagrant-berkshelf
    5. vagrant plugin install vagrant-omnibus
    6. vagrant plugin list
  4. Install Packer
    1. mkdir /opt/packer && cd /opt/packer
    2. wget https://dl.bintray.com/mitchellh/packer/packer_0.8.6_linux_amd64.zip
    3. unzip packer_0.8.6_linux_amd64.zip
    4. echo 'PATH=$PATH:/opt/packer' >> ~/.bash_profile && source ~/.bash_profile
  5. Zbuduj OpsWorks-vm obraz virtualbox przy użyciu Pakowacz
    1. mkdir ~/packer && cd ~/packer
    2. git clone https://github.com/pixelcog/opsworks-vm.git
    3. cd opsworks-vm
    4. rake build install
    5. spowoduje to zainstalowanie nowej maszyny wirtualnej virtualbox do~/.włóczęga.d / boxes/ubuntu1404-opsworks/
Aby wyśmiewać pojedynczą instancję opsworks, utwórz nowy plik Vagrantfile w następujący sposób:]}
Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu1404-opsworks"
  config.vm.provision :opsworks, type: 'shell', args: 'path/to/dna.json'
end

Ścieżka pliku dna.json jest ustawiona względem pliku Vagrantfile i powinna zawierać wszelkie dane JSON, które chcesz wysłać do OpsWorks Chef.

Na przykład:

{
  "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]"
    ]
  }
}

Aby wyśmiewać wiele opsworks instancje i warstwy zawierają zobacz jego AWS OpsWorks" Getting Started " przykład, który zawiera stos .json poniżej.

Vagrantfile (dla wielu instancji)

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"
    }
  }
}

Dla tych, którzy nie znają vagranta, wystarczy wykonać vagrant up, Aby uruchomić instancję(instancje). Następnie możesz modyfikować książkę kucharską lokalnie, a wszelkie zmiany można zastosować, uruchamiając ponownie chef przeciwko istniejącym instancjom za pomocą vagrant provision. możesz wykonać vagrant destroy i vagrant up, Aby zacznij od zera.

 3
Author: Peter M,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-12 14:09:56

Opworks cookbooks opiera się na niestandardowych pudełkach, więc skonfigurowanie lokalnej maszyny Wirtualnej, w której można uruchamiać ich książki kucharskie obok swoich, to wyzwanie.]}

Na szczęście ich Ubuntu box został odtworzony przez ten projekt. https://github.com/wwestenbrink/vagrant-opsworks

/ Align = "center" bgcolor = "# e0ffe0 " / cesarz chin / / align = center / https://github.com/erupenkman/opsworks-example

With this you może faktycznie przetestować w prawie identycznym środowisku lokalnym przed wdrożeniem.

 2
Author: roo2,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-24 23:41:50

Checkout Travis - ci i sous-chef może się okazać, że nadaje się do testowania książek kucharskich itp.

Https://github.com/michaelklishin/sous-chef http://docs.travis-ci.com/user/deployment/opsworks/

 0
Author: Jamie,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-27 09:48:07

Udało mi się rozwiązać ten problem używając Chef+Kitchen+Vagrant

Oto moje opakowanie: https://github.com/elitechance/opsworks-cookbooks-wrapper

Poniżej jak przetestować

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

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

CD opsworks-cookbooks-wrapper

Cp .kuchnia.próbka.yml .kuchnia.yml

Cp Berksfile.próbka Berksfile

Metadane Cp.próbka.metadane rb.rb

Ostatnie polecenie symuluje Ustawienia OpsWorks NodeJS, zobacz szczegóły .kitchen.sample.yml.

$ chef exec kitchen setup

ZNANE BŁĘDY

Przy pierwszym uruchomieniu $ chef exec kitchen setup napotkasz błędy mówiące:

Uruchomione programy obsługi: [2016-04-08t17:08:34+00: 00] błąd:uruchomione programy obsługi wyjątków zakończone programy obsługi wyjątków zakończone [2016-04-08t17:08:34+00: 00] błąd: program obsługi wyjątków zakończony nie powiodło się. 43 zasoby zaktualizowane w 01 minut 02 sekund [2016-04-08t17:08:34+00:00] FATAL: Stacktrace wyrzucony do /tmp/kitchen/cache/chef-stacktrace.out [2016-04-08t17:08:34+00:00] FATAL: proszę podać zawartość stosu.out file jeśli zgłosisz błąd [2016-04-08t17:08:34+00:00] ERROR: ruby_blockFallback for remote_file [/tmp/rubygems-2.2.2.tgz] wystąpił błąd: NoMethodError: remote_file / tmp / rubygems-2.2.2.w tgz wystąpił błąd: NoMethodError: undefined metoda `to_sym ' dla [:create]:Array [2016-04-08t17:08:34+00:00] FATAL: Chef:: Exceptions:: ChildConvergeError: Chef uruchom proces zakończony bezskutecznie (kod wyjścia 1)

Just run again:

$ chef exec kitchen setup

 0
Author: elitechance,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-11 14:56:12