Bootstrap do Chef ec2 - use o IP resultante na configuração de outro cliente chef

2

Digamos que eu tenha um aplicativo composto por um servidor da Web e um banco de dados. Se eu ec2 implantar um cliente chef com a função de banco de dados, como posso inserir automaticamente o IP dessa nova máquina ec2 na configuração do meu servidor web?

Mais generalizado, como posso adquirir metadados do EC2 no momento do lançamento para uso em atributos de outros livros de receitas?

Eu sei que uma maneira indireta de fazer isso pode ser atualizar um servidor de dns com scripts de shell, mas estou interessado aqui em uma solução usando apenas o chef.

    
por Jeff V 31.12.2012 / 20:01

3 respostas

6

Você pode usar um método search formatado corretamente nas receitas Chef executadas no servidor da web que retornam o objeto do nó para o servidor de banco de dados. Então você pode obter os IPs acima mencionados através do node ["ipaddress"] ou, se você precisar do IP / hostname público quando rodando no EC2, nó ["cloud"] ["public_hostname"] / node ["cloud"] ["public_ipv4 "]. Por exemplo, depois de implantar o servidor de banco de dados, use algo como:

db_servers = search(:node, 'roles:db-server').map{|n| n.attribute?('cloud') ? n['cloud']['public_ipv4'] : n['ipaddress'] }

template "web/config" do
    [...]
    variables({ :dbs_ervers => db_servers })
end

A atualização do servidor da web ocorrerá de forma assíncrona, sempre que o cliente Chef for executado ou você poderá forçar a execução manualmente por meio do manual ssh ou knife ssh

    
por 31.12.2012 / 20:55
1

O Chef é apenas um pouquinho na sua orquestração de nuvem e monitoramento / configuração de nuvem. Você pode usar o chef para configuração e nada mais. Não é para coordenação de muitos servidores.

No seu caso, você precisa do processo mestre, para iniciar o lançamento de uma nova instância, a instância será configurada e o processo mestre atualizará o servidor da web assim que a instância do db estiver operacional.

Muitas pessoas que usam o Chef cometem esse erro. Acima você tem solução correta. Apenas use sabiamente. Use servidores de autenticação também.

    
por 31.12.2012 / 20:40
0

Você pode querer analisar os modelos do AWS CloudFormation em combinação com o Chef. Instale as instâncias do EC2 e gere outros recursos da AWS usando o CloudFormation, ou seja, controle o AWS usando o CloudFormation. Em seguida, use o Chef para gerenciar o lado da configuração do servidor. Acredito que isso seja em parte a funcionalidade a que Andrew Smith está se referindo por "Processo mestre", o único ponto que você usa para controlar todo o ciclo de vida. Substitui definitivamente os scripts da API da AWS na abordagem de Andrew.

A implantação de código provavelmente também faz parte disso. Chef pode ser usado para isso, mas eu não acredito que esta é a melhor maneira (a menos que você está fazendo alguns este pequeno). Use um sistema de compilação de código, como Jenkins e sistema de implementação. Atualmente, usamos um sistema interno, mas procuramos passar para o link (já que somos basicamente uma casa .Net). Suponha que o código em algum sistema de controle de versão, como o Git.

Documento útil:

link

Aviso: Eu não sou especialista. Apenas recentemente comecei a trabalhar em nosso design de implantação. Mas a arquitetura está parecendo com a acima no momento.

    
por 23.01.2013 / 18:08