Usar um livro de receitas externo em uma instância do Linux: Berkshelf - 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á.

Usar um livro de receitas externo em uma instância do Linux: Berkshelf

Importante

O AWS OpsWorks Stacks 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 a AWS Support equipe no AWS re:POST ou por meio do Premium AWS Support.

nota

O Berkshelf está disponível apenas para pilhas do Linux do Chef 11.10.

Antes de iniciar a implementação de um livro de receitas, consulte Chef Community Cookbooks, que contém livros de receitas criados por membros da comunidade do Chef para diversas finalidades. Muitos desses livros de receitas podem ser usados com AWS OpsWorks Stacks sem modificações, então você pode aproveitá-los para algumas de suas tarefas em vez de implementar todo o código sozinho.

Para usar um livro de receitas externo em uma instância, você precisa de uma maneira de instalá-lo e gerenciar todas as dependências. A abordagem preferível é implementar um livro de receitas que suporte um gerenciador de dependência chamado Berkshelf. O Berkshelf funciona em instâncias do Amazon EC2, AWS OpsWorks incluindo instâncias Stacks, mas também foi projetado para funcionar com Test Kitchen e Vagrant. No entanto, o uso no Vagrant é um pouco diferente do que no AWS OpsWorks Stacks, então este tópico inclui exemplos para ambas as plataformas. Para obter mais informações sobre como usar o Berkshelf, consulte Berkshelf.

Usar o Berkshelf com o Test Kitchen e o Vagrant

Este exemplo mostra como usar o Berkshelf para instalar o livro de receitas da comunidade getting-started e executar sua receita, que instala um pequeno arquivo de texto em seu diretório inicial na instância.

Para instalar o Berkshelf e inicializar um livro de receitas
  1. Em sua estação de trabalho, instale o Berkshelf gem da seguinte maneira.

    gem install berkshelf

    Dependendo de sua estação de trabalho, esse comando pode exigir sudo. Você também pode usar um gerenciador de ambiente Ruby, como o RVM. Para verificar se o Berkshelf foi instalado com êxito, execute berks --version.

  2. O livro de receitas para este tópico se chama external_cookbook. Use o Berkshelf para criar um livro de receitas inicializado em vez de adotar a abordagem manual dos tópicos anteriores. Para fazer isso, vá até o diretório opsworks_cookbooks e execute o seguinte comando.

    berks cookbook external_cookbook

    O comando cria o diretório external_cookbook e vários subdiretórios padrão do Chef e do Test Kitchen, inclusive recipes e test. O comando também cria versões padrão de diversos arquivos padrão, incluindo:

    • metadata.rb

    • Arquivos de configuração para Vagrant, Test Kitchen e Berkshelf

    • Uma receita default.rb vazia no diretório recipes

    nota

    Não é necessário executar o comando kitchen init; o comando berks cookbook lida com essas tarefas.

  3. Executar kitchen converge. Neste ponto, o livro de receitas recém-criado não faz nada de interessante, mas converge.

nota

Você também pode usar berks init para inicializar um livro de receitas existente para usar o Berkshelf.

Para usar o Berkshelf para gerenciar as dependências externas de um livro de receitas, o diretório raiz do livro de receitas deve conter um Berksfile, que é um arquivo de configuração que especifica como o Berkshelf deve gerenciar dependências. Quando você usou berks cookbook para criar o livro de receitas external_cookbook, ele criou um Berksfile com o seguinte conteúdo.

source "https://supermarket.chef.io" metadata

Este arquivo tem as seguintes declarações:

  • source: o URL da origem de um livro de receitas.

    Um Berksfile pode ter qualquer número de declarações source, sendo que cada uma delas especifica uma origem padrão para livros de receitas dependentes. Se você não especificar explicitamente a origem de um livro de receitas, o Berkshelf procura um livro de receitas com o mesmo nome nos repositórios padrão. O Berksfile padrão inclui um único atributo source que especifica o repositório de receitas da comunidade. Esse repositório contém o livro de receitas getting-started, por isso, você pode deixar a linha inalterada.

  • metadata: direciona o Berkshelf a incluir as dependências de livro de receitas que são declaradas no arquivo metadata.rb do livro de receitas.

    Também é possível declarar um livro de receitas dependentes no Berksfile incluindo um atributo cookbook, como discutido posteriormente.

Há duas maneiras de declarar uma dependência de livro de receitas:

  • Incluindo uma declaração cookbook no Berksfile.

    Essa é a abordagem usada pelo AWS OpsWorks Stacks. Por exemplo, para especificar o livro de receitas getting-started usado neste exemplo, inclua cookbook "getting-started" no Berksfile. Em seguida, o Berkshelf procura um livro de receitas com esse nome nos repositórios padrão. Você também pode usar cookbook para especificar explicitamente uma origem de livro de receitas e, até mesmo, uma versão específica. Para obter mais informações, consulte Berkshelf.

  • Incluindo uma declaração metadata no Berksfile e declarando a dependência em metadata.rb.

    Essa declaração instrui o Berkshelf a incluir dependências de livro de receitas declaradas em metadata.rb. Por exemplo, para declarar uma dependência de getting-started, adicione uma declaração depends 'getting-started' ao arquivo metadata.rb do livro de receitas.

Este exemplo usa a primeira abordagem, para manter a consistência com AWS OpsWorks as pilhas.

Para instalar o livro de receitas getting-started
  1. Edite o Berksfile padrão para substituir a declaração metadata por uma declaração cookbook para getting-started. O conteúdo deve ser semelhante ao seguinte.

    source "https://supermarket.chef.io" cookbook 'getting-started'
  2. Execute berks install, que faz o download do livro de receitas getting-started do repositório de livros de receitas da comunidade para o diretório Berkshelf de sua estação de trabalho, que normalmente é ~/.berkshelf. Geralmente, esse diretório é simplesmente chamado de o Berkshelf. Procure no diretório cookbooks do Berkshelf e você verá o diretório do livro de receitas , que será nomeado como getting-started-0.4.0getting-started-.

  3. Substitua external_cookbook::default na lista de execução .kitchen.yml por getting-started::default. Este exemplo não executa receitas de external_cookbook. Ela é apenas uma maneira de usar o livro de receitas getting-started. O arquivo .kitchen.yml agora deve ser semelhante ao conteúdo a seguir.

    --- driver: name: vagrant provisioner: name: chef_solo platforms: - name: ubuntu-12.04 suites: - name: default run_list: - recipe[getting-started::default] attributes:
  4. Execute kitchen converge e use kitchen login para fazer login na instância. O diretório de login deve conter um arquivo chamado chef-getting-started.txt com conteúdo semelhante ao seguinte:

    Welcome to Chef! This is Chef version 11.12.8. Running on ubuntu. Version 12.04.

    O Test Kitchen instala livros de receitas no diretório /tmp/kitchen/cookbooks da instância. Se você listar o conteúdo do diretório, verá dois livros de receitas: external_cookbook e getting-started.

  5. Execute kitchen destroy para desligar a instância. O próximo exemplo usa uma instância do AWS OpsWorks Stacks.

Usando o Berkshelf com Stacks AWS OpsWorks

AWS OpsWorks O Stacks suporta opcionalmente as pilhas Berkshelf for Chef 11.10. Para usar o Berkshelf com sua pilha, faça o seguinte.

  • Habilite o Berkshelf na pilha.

    AWS OpsWorks Em seguida, o Stacks trata dos detalhes da instalação do Berkshelf nas instâncias do stack.

  • Adicione um Berksfile ao diretório raiz do repositório do seu livro de receitas.

    O Berksfile deve conter as declarações source e cookbook para todos os livros de receitas dependentes.

Quando o AWS OpsWorks Stacks instala seu repositório de livros de receitas personalizados em uma instância, ele usa o Berkshelf para instalar os livros de receitas dependentes que são declarados no Berksfile do repositório. Para ter mais informações, consulte Utilização do Berkshelf.

Este exemplo mostra como usar o Berkshelf para instalar o livro de receitas da comunidade de introdução em uma instância do Stacks. AWS OpsWorks Ele também instala uma versão do livro de receitas personalizado createfile, que cria um arquivo em um diretório especificado. Para obter mais informações sobre o funcionamento do createfile, consulte Instalação de um arquivo usando um livro de receitas.

nota

Se esta é a primeira vez que você instala um livro de receitas personalizado em uma pilha do AWS OpsWorks Stacks, primeiro veja o exemplo. Executar uma receita em uma instância Linux

Comece criando uma pilha, como resumido a seguir. Para ter mais informações, consulte Criar uma nova pilha.

Criar uma pilha
  1. Abra o console do AWS OpsWorks Stacks e clique em Add Stack (Adicionar pilha).

  2. Especifique as seguintes configurações, aceite os padrões para as outras configurações e clique em Add Stack.

    • Nome — BerksTest

    • Chave SSH padrão: um par de chaves do Amazon EC2

    Se for necessário criar um par de chaves do Amazon EC2, consulte Pares de chaves do Amazon EC2. Observe que o par de chaves deve pertencer a mesma região da AWS que a instância. O exemplo usa a região padrão, Oeste dos EUA (Oregon).

  3. Clique em Add a layer e adicione uma camada personalizada à pilha com as seguintes configurações.

    • Nome — BerksTest

    • Nome curto: berkstest

    Neste exemplo, é possível usar qualquer tipo de layer. No entanto, o exemplo não exige nenhum dos pacotes instalados pelas outras camadas, portanto, uma camada personalizada é a abordagem mais simples.

  4. Adicione uma instância 24 horas por dia, 7 dias por semana à BerksTest camada com as configurações padrão, mas não a inicie ainda.

Com o AWS OpsWorks Stacks, os livros de receitas devem estar em um repositório remoto com uma estrutura de diretórios padrão. Em seguida, você fornece as informações de download para o AWS OpsWorks Stacks, que baixa automaticamente o repositório para cada uma das instâncias da pilha na inicialização. Para simplificar, o repositório deste exemplo é um arquivo público do Amazon S3, AWS OpsWorks mas o Stacks também suporta arquivos HTTP, repositórios Git e repositórios Subversion. Para ter mais informações, consulte Repositórios de livro de receitas.

O conteúdo entregue aos buckets do Amazon S3 pode conter conteúdo do cliente. Para obter mais informações sobre a remoção de dados confidenciais, consulte Como faço para esvaziar um bucket do S3? ou Como faço para excluir um bucket do S3?.

Para criar o repositório do livro de receitas
  1. Criar um diretório opsworks_cookbooks no seu diretório berkstest_cookbooks. Se preferir, crie esse diretório em qualquer lugar que considere conveniente, porque você vai carregá-lo em um repositório.

  2. Adicione um arquivo chamado Berksfile a berkstest_cookbooks com o seguinte conteúdo.

    source "https://supermarket.chef.io" cookbook 'getting-started'

    Esse arquivo declara a dependência do livro de receitas getting-started e instrui o Berkshelf a fazer download dele no site do livro de receitas da comunidade.

  3. Adicione um diretório createfile a berkstest_cookbooks, que contém o seguinte.

    • Um arquivo metadata.rb com o seguinte conteúdo.

      name "createfile" version "0.1.0"
    • Um diretório files/default que contém um arquivo example_data.json com o seguinte conteúdo.

      { "my_name" : "myname", "your_name" : "yourname", "a_number" : 42, "a_boolean" : true }

      O nome e o conteúdo do arquivo são arbitrários. A receita simplesmente copia o arquivo para o local especificado.

    • Um diretório recipes que contém um arquivo default.rb com o seguinte código de receita.

      directory "/srv/www/shared" do mode 0755 owner 'root' group 'root' recursive true action :create end cookbook_file "/srv/www/shared/example_data.json" do source "example_data.json" mode 0644 action :create_if_missing end

      Essa receita cria /srv/www/shared e copia example_data.json nesse diretório a partir do diretório files do livro de receitas.

  4. Crie um arquivo .zip de berkstest_cookbooks, faça upload do arquivo em um bucket do Amazon S3, torne o arquivo público e registre o URL do arquivo.

Agora você pode instalar os livros de receitas e executar a receita.

Para instalar os livros de receitas e executar as receitas
  1. Edite a pilha para habilitar livros de receitas personalizados, e especifique as seguintes configurações.

    • Tipo de repositório: Arquivamento HTTP

    • URL do repositório: o URL do arquivo do livro de receitas que você registrou anteriormente

    • Gerenciar Berkshelf: Sim

    As duas primeiras configurações fornecem ao AWS OpsWorks Stacks as informações necessárias para baixar o repositório do livro de receitas para suas instâncias. A última configuração habilita o suporte ao Berkshelf, que faz download do livro de receitas getting-started para a instância. Aceite os valores padrão para as outras configurações e clique em Save para atualizar a configuração da pilha.

  2. Edite a BerksTest camada para adicionar as seguintes receitas ao evento de ciclo de vida de configuração da camada.

    • getting-started::default

    • createfile::default

  3. Inicie a instância. O evento de configuração ocorre após a conclusão da inicialização da instância. AWS OpsWorks O Stacks então instala o repositório do livro de receitas, usa o Berkshelf para baixar o livro de receitas de introdução e executa a configuração da camada e implementa receitas, incluindo e. getting-started::default createfile::default

  4. Depois que a instância estiver online, use SSH para fazer login. Você deverá ver o seguinte

    • /srv/www/shared deve conter example_data.json.

    • /root deve conter chef-getting-started.txt.

      AWS OpsWorks O Stacks executa receitas como root, portanto, o getting start instala o arquivo no diretório em vez de no seu /root diretório inicial.