É realmente super fácil de fazer. O Vagrant 1.2.x permite o provedor aws, o que significa que o Vagrant pode provisionar uma instância EC2 da mesma forma que faz com uma VM. Além disso, se usarmos o Berkshelf para gerenciamento de dependência de livro de receitas, podemos conectá-lo diretamente ao processo do Vagrant e evitar o armazenamento local de todos esses livros de receitas.
./Berksfile
site :opscode
cookbook 'apt'
cookbook 'statsd', git: 'https://github.com/librato/statsd-cookbook.git'
cookbook 'graphite', git: 'https://github.com/hw-cookbooks/graphite.git'
./Vagrantfile
# -*- mode: ruby -*-
# vi: set ft=ruby :
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.omnibus.chef_version = :latest
config.vm.box = "dummy"
config.vm.box_url = "https://github.com/mitchellh/vagrant-aws/raw/master/dummy.box"
# Provider
config.vm.provider :aws do |aws, override|
aws.access_key_id = "<redacted>"
aws.secret_access_key = "<redacted>"
aws.keypair_name = "<redacted>"
aws.ami = "ami-5f2abc6f" # "Ubuntu 12.04 LTS with Chef"
aws.region = "us-west-2"
aws.instance_type = "t1.micro"
aws.security_groups = ["Basic", "StatsD"]
override.ssh.username = "ubuntu"
override.ssh.private_key_path = "path/to/your/key"
aws.tags = {
'Name' => 'Stats (Vagrant Provision)'
}
end
# Provisioning
config.berkshelf.enabled = true
config.vm.provision :chef_solo do |chef|
chef.add_recipe "apt"
chef.add_recipe "statsd"
chef.add_recipe "graphite"
end
end
Apenas 2 arquivos necessários! Você vai querer ter certeza de ter resolvido as seguintes dependências:
- Vagrant 1.2.x instalado
- gema berkshelf (
gem install berkshelf
) - Plugin vagrant-berkshelf instalado ( )
vagrant plugin install vagrant-berkshelf
- Plug – in vagrant-omnibus instalado ( )
vagrant plugin install vagrant-omnibus
- Chave de acesso da AWS e chave de acesso secreta
- Par de chaves local AWS
- Grupo (s) de segurança EC2 permitindo
- http (80) para a visualização da web de grafite
- udp (8125 por padrão) o protocolo e a porta usados pelo statsd
- ssh (22) necessário para que o vagrant forneça a instância
Supondo que todas essas dependências sejam cobertas e os valores corretos estejam conectados ao Vagrantfile
(como chaves de acesso e caminhos de chave, bem como região e nome de ami, caso precisem ser diferentes), basta o seguinte comando:
vagrant up --provider aws
Esse comando criará a instância. Antes do provisionamento, o plug-in omnibus verificará se o chef está instalado e o plug-in berskshelf executará seu comando de instalação, e o provisionamento chef cuidará do resto a partir daí. A criação da instância e o provisionamento podem demorar um pouco, portanto, esteja preparado para aguardar cerca de 10 minutos.
Quando estiver concluído, abra sua instância ec2 em um navegador da web e você encontrará a interface Graphite. Envie algumas estatísticas para o servidor StatsD:
Concha:
gem install statsd-ruby
irb
rubi:
require 'statsd-ruby'
statsd = Statsd.new "<your ec2 instance host name>"
# Incrementer:
statsd.increment "hello.world"
# Timer
statsd.timing 'glork', 320
# Guage
statsd.gauge 'bork', 100
Lembre-se também de que o StatsD tem opções de back-end adicionais , e o livro de receitas de statsd declarado Berksfile
aqui é mantido pelo Librato , que fornece um back-end próprio. A configuração é tão simples quanto alguns atributos json no Vagrantfile
.
Eu também passei por esse processo em uma essência aqui: https://gist.github.com/amoslanka/6245043
Ressalvas
O mundo da AWS é um pouco particular e, se algo der errado, você geralmente receberá uma resposta 400, que o Vagrant não consegue explicar além disso, então não há muitas explicações. Algumas coisas que observei são as seguintes:
- Certifique-se de que o ami especificado vive na região especificada.
- Certifique-se de especificar grupos de segurança por nome, não por id.