Schnellstart unter Ubuntu 14.04

Schnellstart unter Ubuntu 14.04

Seit Monaten versuche ich, den besten Workflow zum Erstellen und Testen meiner AWS OpsWorks-Cookbooks vor dem lokalen Übertragen auf OpsWorks zu finden.

Nach vielen erfolglosen Versuchen fand ich einen Blogbeitrag von Mike Greiling und habe mich seitdem für eine Umgebung entschieden, die für mich gut funktioniert. Ich möchte das Setup/die Konfiguration teilen, da es viele bewegliche Teile gibt.

Ich ermutige jeden, der seine eigenen Build-/Testumgebungen für Chef hat,die speziell auf Opsworks-Kochbücher ausgerichtet sind, um auch hier Antworten zu posten – danke!!

Antwort1

Ich kann jedem nur wärmstens empfehlen, Mike Greilings Blogbeitrag zu lesen.Vereinfachen Sie die OpsWorks-Entwicklung mit Packerund sein GitHub-Repoopsworks-vm die Ihnen helfen, den gesamten Opsworks-Stack einschließlich der Installation des Opsworks-Agenten zu simulierenSie können also auch App-Bereitstellungsrezepte, mehrere Ebenen, mehrere Instanzen gleichzeitig usw. testen. Es ist äußerst beeindruckend.

Ich habe alle erforderlichen Setups beigefügt, um Ihre Umgebung vorzubereiten, bevor Sie Mike Greilings Packer Virtualbox-Build verwenden.

Schnellstart unter Ubuntu 14.04

HINWEIS: Dies kann NICHT von einer virtuellen Ubuntu-Maschine aus durchgeführt werden, da Virtualbox die verschachtelte Virtualisierung von 64-Bit-Maschinen nicht unterstützt.

  1. InstallierenChefDK
    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. InstallierenVirtualBox
    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. InstallierenLandstreicher
    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. InstallierenPacker
    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. Bauen Sie Mike Greiling'sopsworks-vmVirtualbox-Image mit Packer
    1. mkdir ~/packer && cd ~/packer
    2. git clone https://github.com/pixelcog/opsworks-vm.git
    3. cd opsworks-vm
    4. rake build install
    5. Dadurch wird eine neue Virtualbox-VM in ~/.vagrant.d/boxes/ubuntu1404-opsworks/ installiert.

Um eine einzelne Opsworks-Instanz zu simulieren, erstellen Sie eine neue Vagrant-Datei wie folgt:

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

Der dna.jsonDateipfad wird relativ zur Vagrant-Datei festgelegt und sollte alle JSON-Daten enthalten, die Sie an OpsWorks Chef senden möchten.

Zum Beispiel:

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

Um mehrere Opsworks-Instanzen zu simulieren und Ebenen einzubinden, siehe seineAWS OpsWorks „Erste Schritte“-BeispielDazu gehören diestapel.jsonunten.

Vagrantfile (für mehrere Instanzen)

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

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

Für diejenigen, die mit Vagrant nicht vertraut sind: Führen Sie einfach ein aus, vagrant upum die Instanz(en) zu starten. Anschließend können Sie Ihr Kochbuch lokal ändern und alle Änderungen können angewendet werden, indem Sie Chef erneut mit den vorhandenen Instanz(en) ausführen. vagrant provision. Sie können ein vagrant destroyund ausführen vagrant up, um von vorne zu beginnen.

verwandte Informationen