Implementação de receitas em pilhas do Chef 11.10 - AWS OpsWorks

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Implementação de receitas em pilhas do Chef 11.10

Importante

A ferramenta AWS OpsWorks Stacks o serviço chegou ao fim da vida útil em 26 de maio de 2024 e foi desativado para clientes novos e existentes. É altamente recomendável que os clientes migrem suas cargas de trabalho para outras soluções o mais rápido possível. Se você tiver dúvidas sobre migração, entre em contato com o AWS Support Equipe em AWS Re:post ou através de AWS Premium Support.

As pilhas do Chef 11.10 apresentam as seguintes vantagens em relação às stacks do Chef 11.4:

  • As execuções do Chef usam o Ruby 2.0.0 e, portanto, suas receitam podem usar a nova sintaxe do Ruby.

  • As receitas podem usar a pesquisa e os recipientes de dados do Chef.

    As pilhas do Chef 11.10 podem usar muitos livros de receitas da comunidade sem alterá-los.

  • Você pode usar o Berkshelf para gerenciar os livros de receitas.

    O Berkshelf oferece uma maneira muito mais flexível de gerenciar os seus livros de receitas personalizados e usar os livros de receitas da comunidade em uma pilha.

  • Os livros de receitas devem ter suas dependências declaradas no metadata.rb.

    Se o seu livro de receitas depende de outro livro de receitas, você deve incluir essa dependência no arquivo metadata.rb do livro de receitas. Por exemplo, se o seu livro de receitas inclui uma receita com a instrução include_recipe anothercookbook::somerecipe, o arquivo metadata.rb do livro de receitas deve incluir a seguinte linha: depends "anothercookbook".

  • AWS OpsWorks O Stacks instala um SQL cliente My nas instâncias de uma pilha somente se a pilha incluir uma camada My. SQL

  • AWS OpsWorks O Stacks instala um cliente Ganglia nas instâncias de uma pilha somente se a pilha incluir uma camada Ganglia.

  • Se uma implantação executar a bundle install e a instalação falhar, a implantação também falha.

Importante

Não reutilize nomes de livros de receitas integrados para livros de receitas personalizados ou da comunidade. Livros de receitas personalizados com o mesmo nome de livros de receitas integrados podem falhar. Para obter uma lista completa dos livros de receitas integrados que estão disponíveis com as pilhas Chef 11.10, 11.4 e 0.9, consulte o repositório opsworks-cookbooks em. GitHub

Livros de receitas sem ASCII caracteres que são executados com sucesso nas pilhas do Chef 0.9 e 11.4 podem falhar em uma pilha do Chef 11.10. Isso ocorre porque as pilhas do Chef 11.10 usam o Ruby 2.0.0 para execuções do Chef, que é muito mais rigoroso em relação à codificação do que o Ruby 1.8.7. Para garantir que esses livros de receitas sejam executados com sucesso nas pilhas do Chef 11.10, cada arquivo que não usa ASCII caracteres deve ter um comentário na parte superior que forneça uma dica sobre a codificação. Por exemplo, para a codificação UTF -8, o comentário seria. # encoding: UTF-8 Para obter mais informações sobre a codificação no Ruby 2.0.0, consulte Codificação.

Instalação e precedência em livros de receitas

O procedimento para instalar AWS OpsWorks Os livros de receitas Stacks funcionam de forma um pouco diferente para as pilhas do Chef 11.10 do que para as versões anteriores do Chef. Para pilhas do Chef 11.10, depois AWS OpsWorks O Stacks instala os livros de receitas integrados, personalizados e da Berkshelf e os mescla em um diretório comum na seguinte ordem:

  1. Livros de receitas integrados.

  2. Livros de receitas do Berkshelf, se houver.

  3. Livros de receitas personalizados, se houver.

Quando AWS OpsWorks Stacks realiza essa mesclagem, copia todo o conteúdo dos diretórios, incluindo receitas. Se houver duplicatas, as seguintes regras se aplicam:

  • O conteúdo dos livros de receitas do Berkshelf tem preferência sobre os livros de receitas integrados.

  • O conteúdo dos livros de receitas personalizados tem preferência sobre os livros de receitas do Berkshelf.

Para ilustrar como esse processo funciona, considere o seguinte cenário, onde todos os três diretórios de livros de receitas contêm um livro de receitas chamado mycookbook:

  • Livros de receitas integrados: mycookbook inclui um arquivo de atributos chamado someattributes.rb, um arquivo de modelo chamado sometemplate.erb e uma receita chamada somerecipe.rb.

  • Livros de receitas do Berkshelf: mycookbook inclui sometemplate.erb e somerecipe.rb.

  • Livros de receitas personalizados: mycookbook inclui somerecipe.rb.

O livro de receitas mesclado contém o seguinte:

  • someattributes.rb do livro de receitas integrado.

  • sometemplate.erb do livro de receitas do Berkshelf.

  • somerecipe.rb do livro de receitas personalizado.

Importante

Você não deve personalizar sua pilha do Chef 11.10 copiando um livro de receitas integrado inteiro para o repositório e, em seguida, modificando partes dele. Se fizer isso, você estará substituindo todo o livro de receitas integrado, incluindo as receitas. If (Se) AWS OpsWorks O Stacks atualiza esse livro de receitas. Sua pilha não obterá os benefícios dessas atualizações, a menos que você atualize manualmente sua cópia privada. Para obter mais informações sobre como personalizar as pilhas, consulte Personalizando AWS OpsWorks Pilhas.

Você pode utilizar o método search do Chef em suas receitas para consultar os dados da pilha. Você usa a mesma sintaxe que usaria para o Chef Server, mas AWS OpsWorks Stacks obtém os dados do objeto do nó local em vez de consultar um servidor Chef. Esses dados incluem:

Os atributos de configuração e implantação da pilha contêm a maioria das informações que as receitas obtém normalmente por meio de pesquisa, incluindo dados como nomes de host e endereços IP, para cada instância online na pilha. AWS OpsWorks O Stacks atualiza esses atributos em cada evento do ciclo de vida, o que garante que eles representem com precisão o estado atual da pilha. Isso significa que você pode, muitas vezes, usar receitas da comunidade que sejam dependentes de pesquisa em sua pilha sem alterá-las. O método de pesquisa ainda retorna os dados apropriados; o que ocorre é que eles estão vindo dos atributos de configuração e implantação da pilha, em vez de um servidor.

A principal limitação do AWS OpsWorks A pesquisa de pilhas é aquela que manipula somente os dados no objeto do nó local, em particular a configuração da pilha e os atributos de implantação. Por esse motivo, os seguintes tipos de dados podem não estar disponíveis por meio de pesquisa:

  • Atributos definidos localmente em outras instâncias.

    Se uma receita definir um atributo localmente, essas informações não serão reportadas ao AWS OpsWorks Serviço de pilha, então você não pode acessar esses dados de outras instâncias usando a pesquisa.

  • Atributos deploy personalizados.

    Você pode especificar a personalização JSON ao implantar um aplicativo e os atributos correspondentes são instalados nas instâncias da pilha para essa implantação. No entanto, se você implantar apenas em instâncias selecionadas, os atributos são instalados apenas nessas instâncias. As consultas desses JSON atributos personalizados falharão em todas as outras instâncias. Além disso, os atributos personalizados são incluídos na configuração e implantação da pilha JSON somente para aquela implantação específica. Eles estarão acessíveis apenas até que o próximo evento de ciclo de vida instale um novo conjunto de atributos de configuração e implantação da pilha. Observe que, se você especificar customização JSON para a pilha, os atributos serão instalados em cada instância para cada evento do ciclo de vida e estarão sempre acessíveis por meio de pesquisa.

  • Dados do Ohai de outras instâncias.

    A ferramenta Ohai do Chef obtém uma variedade de dados de sistema de uma instância e os adiciona ao objeto de nó. Esses dados são armazenados localmente e não são reportados ao AWS OpsWorks Serviço de pilhas, portanto, a pesquisa não pode acessar dados do Ohai de outras instâncias. No entanto, alguns desses dados podem ser incluídos nos atributos de configuração e implantação da pilha.

  • Instâncias off-line.

    Os atributos de configuração e implantação da pilha somente contêm dados de instâncias online.

O trecho da receita a seguir mostra como obter o endereço IP privado da instância de uma PHP camada usando a pesquisa.

appserver = search(:node, "role:php-app").first Chef::Log.info("The private IP is '#{appserver[:private_ip]}'")
nota

Quando AWS OpsWorks O Stacks adiciona a configuração da pilha e os atributos de implantação ao objeto do nó. Na verdade, ele cria dois conjuntos de atributos de camada, cada um com os mesmos dados. Um conjunto está no layers namespace, que é como AWS OpsWorks O Stacks armazena os dados. O outro conjunto fica no namespace role, que é como o servidor Chef armazena os dados equivalentes. O objetivo do role namespace é permitir que o código de pesquisa que foi implementado para o servidor Chef seja executado em um AWS OpsWorks Instância de pilhas. Se você estiver escrevendo código especificamente para AWS OpsWorks Pilhas, você poderia usar qualquer uma layers:php-app ou role:php-app no exemplo anterior e search retornaria o mesmo resultado.

Utilização de recipientes de dados

Você pode usar o método data_bag_item do Chef nas suas receitas para consultar informações em um recipiente de dados. Você usa a mesma sintaxe que usaria para o Chef Server, mas AWS OpsWorks O Stacks obtém os dados da configuração da pilha e dos atributos de implantação da instância. No entanto, AWS OpsWorks Atualmente, o Stacks não oferece suporte a ambientes Chef, portanto, node.chef_environment sempre retorna_default.

Você cria um saco de dados usando o personalizado JSON para adicionar um ou mais atributos ao [:opsworks][:data_bags] atributo. O exemplo a seguir mostra o formato geral para criar uma bolsa de dados personalizadaJSON.

nota

Não é possível criar um recipiente de dados adicionando-o ao repositório de livros de receitas. Você deve usar personalizadoJSON.

{ "opsworks": { "data_bags": { "bag_name1": { "item_name1: { "key1" : “value1”, "key2" : “value2”, ... } }, "bag_name2": { "item_name1": { "key1" : “value1”, "key2" : “value2”, ... } }, ... } } }

Normalmente, você especifica JSON customização para a pilha, que instala os atributos personalizados em cada instância para cada evento de ciclo de vida subsequente. Você também pode especificar a personalização JSON ao implantar um aplicativo, mas esses atributos são instalados somente para essa implantação e podem ser instalados somente em um conjunto selecionado de instâncias. Para obter mais informações, consulte Implementação de aplicativos.

O JSON exemplo personalizado a seguir cria um pacote de dados chamadomyapp. Ele possui um item mysql com dois pares de chave e valor.

{ "opsworks": { "data_bags": { "myapp": { "mysql": { "username": "default-user", "password": "default-pass" } } } } }

Para usar os dados em sua receita, você pode chamar o data_bag_item e passar para ele os nomes do recipiente de dados e do valor, como mostra o trecho a seguir.

mything = data_bag_item("myapp", "mysql") Chef::Log.info("The username is '#{mything['username']}' ")

Para modificar os dados na bolsa de dados, basta modificar o personalizado JSON e ele será instalado nas instâncias da pilha para o próximo evento do ciclo de vida.

Utilização do Berkshelf

Em pilhas do Chef 0.9 e Chef 11.4, você pode instalar apenas um repositório de livros de receitas personalizados. Em pilhas do Chef 11.10, você pode usar o Berkshelf para gerenciar os livros de receitas e suas dependências, o que permite a você instalar livros de receitas de vários repositórios. (Para ter mais informações, consulte Empacotar dependências do livro de receitas localmente.) Em particular, com o Berkshelf, você pode instalar AWS OpsWorks Livros de receitas da comunidade compatíveis com pilhas diretamente de seus repositórios, em vez de precisar copiá-los para seu repositório de livros de receitas personalizado. As versões compatíveis do Berkshelf dependem do sistema operacional. Para obter mais informações, consulte AWS OpsWorks Sistemas operacionais de pilha.

Para usar o Berkshelf, você deve habilitá-lo de forma explícita, conforme descrito em Instalação de livros de receitas personalizados. Em seguida, inclua um arquivo Berksfile no diretório raiz do repositório do seu livro de receitas para especificar os livros de receitas a serem instalados.

Para especificar uma fonte externa de livro de receitas em um Berksfile, inclua um atributo de origem na parte superior do arquivo que especifique o repositório padrão. URL A Berkshelf procurará os livros de receitas na fonte, a URLs menos que você especifique explicitamente um repositório. Em seguida, inclua uma linha para cada livro de receitas que você deseja instalar no seguinte formato:

cookbook 'cookbook_name', ['>= cookbook_version'], [cookbook_options]

Os campos que vêm logo após cookbook especificam o livro de receitas específico.

  • cookbook_name — (Obrigatório) Especifica o nome do livro de receitas.

    Se você não incluir nenhum outro campo, a Berkshelf instala o livro de receitas a partir da fonte especificada. URLs

  • cookbook_version — (Opcional) Especifica a versão ou versões do livro de receitas.

    Você pode usar um prefixo como = ou >= para especificar uma versão específica ou um intervalo de versões aceitas. Se você não especificar uma versão, o Berkshelf instala a mais recente.

  • cookbook_options — (Opcional) O campo final é um hash contendo um ou mais pares de valores-chave que especificam opções como a localização do repositório.

    Por exemplo, você pode incluir uma chave git para designar um repositório Git específico e uma chave tag para designar uma ramificação específica do repositório. Especificar a ramificação do repositório é geralmente a melhor forma de garantir que você está instalando o livro de receitas de sua preferência.

Importante

Não faça a declaração de livros de receitas incluindo uma linha de metadata em seu Berksfile ou incluindo a declaração das dependências do livro de receitas no metadata.rb. Para que isso funcione corretamente, ambos os arquivos devem estar no mesmo diretório. Com AWS OpsWorks Pilhas, o Berksfile deve estar no diretório raiz do repositório, mas os metadata.rb arquivos devem estar em seus respectivos diretórios do livro de receitas. Em vez disso, você deve incluir as declarações explícitas dos livros de receitas externos no Berksfile.

Veja a seguir o exemplo de um Berksfile que mostra diferentes maneiras para especificar livros de receitas. Para obter mais informações sobre como criar um Berksfile, consulte Berkshelf.

source "https://supermarket.chef.io" cookbook 'apt' cookbook 'bluepill', '>= 2.3.1' cookbook 'ark', git: 'git://github.com/opscode-cookbooks/ark.git' cookbook 'build-essential', '>= 1.4.2', git: 'git://github.com/opscode-cookbooks/build-essential.git', tag: 'v1.4.2'

Este arquivo instala os seguintes livros de receitas:

  • A versão mais recente do apt do repositório de livros de receitas da comunidade.

  • A versão mais recente do bluepill dos livros de receitas da comunidade, desde que seja a versão 2.3.1 ou posterior.

  • A versão mais recente do ark de um repositório especificado.

    Este exemplo é URL para um repositório público de livros de receitas da comunidade em GitHub, mas você pode instalar livros de receitas de outros repositórios, incluindo repositórios privados. Para obter mais informações, consulte Berkshelf.

  • O livro de receitas build-essential da ramificação v1.4.2 do repositório especificado.

Um repositório de livros de receitas personalizados pode conter livros de receitas personalizados, além de um Berksfile. Nesse caso, AWS OpsWorks O Stacks instala os dois conjuntos de livros de receitas, o que significa que uma instância pode ter até três repositórios de livros de receitas.

  • Os livros de receitas integrados são instalados em /opt/aws/opsworks/current/cookbooks.

  • Se o seu repositório de livros de receitas personalizados contém livros de receitas, eles estão instalados em /opt/aws/opsworks/current/site-cookbooks.

  • Se você habilitou o Berkshelf e seu repositório de livros de receitas personalizados contém um Berksfile, os livros de receitas especificados são instalados em /opt/aws/opsworks/current/berkshelf-cookbooks.

Os livros de receitas integrados e seus livros de receitas personalizados são instalados em cada instância durante a instalação e não são atualizados posteriormente, a menos que você execute manualmente o comando da pilhaUpdate Custom Cookbooks. AWS OpsWorks O Stacks executa o berks install para cada execução do Chef e, portanto, seus livros de receitas do Berkshelf são atualizados em cada evento do ciclo de vida, de acordo com as seguintes regras:

  • Se você tiver uma nova versão de um livro de receitas no repositório, esta operação atualiza o livro de receitas do repositório.

  • Caso contrário, essa operação atualiza os livros de receitas do Berkshelf de um cache local.

nota

A operação sobrescreve os livros de receitas do Berkshelf e, portanto, se você tiver modificado as cópias locais de quaisquer livros de receitas, essas alterações serão sobrescritas. Para obter mais informações, consulte Berkshelf

Você também pode atualizar seus livros de receitas do Berkshelf executando o comando da pilhaUpdate Custom Cookbooks, que atualiza ambos os livros de receitas do Berkshelf e personalizados.