

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
<a name="cookbooks-101-opsworks-berkshelf"></a>

**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](https://repost.aws/) ou por meio do Premium [AWS Support](https://aws.amazon.com/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](https://github.com/opscode-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 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 EC2 instâncias da Amazon, incluindo instâncias OpsWorks 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 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](http://berkshelf.com/).

**Topics**
+ [Usar o Berkshelf com o Test Kitchen e o Vagrant](#cookbooks-101-opsworks-berkshelf-vagrant)
+ [Usando o Berkshelf com Stacks OpsWorks](#opsworks-berkshelf-opsworks)

## Usar o Berkshelf com o Test Kitchen e o Vagrant
<a name="cookbooks-101-opsworks-berkshelf-vagrant"></a>

 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](https://rvm.io/). Para verificar se o Berkshelf foi instalado com êxito, execute `berks --version`.

1. O livro de receitas para este tópico se chama external\$1cookbook. 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.

1. 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 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](http://berkshelf.com/).
+ 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 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'
   ```

1. 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.0`getting-started-.

1. Substitua `external_cookbook::default` na lista de execução `.kitchen.yml` por `getting-started::default`. Este exemplo não executa receitas de external\$1cookbook. 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:
   ```

1. 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\$1cookbook e getting-started.

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

## Usando o Berkshelf com Stacks OpsWorks
<a name="opsworks-berkshelf-opsworks"></a>

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.

  OpsWorks Em seguida, o Stacks trata dos detalhes da instalação do Berkshelf nas instâncias da pilha.
+ 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 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 obter mais informações, consulte [Utilização do Berkshelf](workingcookbook-chef11-10.md#workingcookbook-chef11-10-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. 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](cookbooks-101-basics-files.md#cookbooks-101-basics-files-cookbook_file).

**nota**  
Se esta é a primeira vez que você instala um livro de receitas personalizado em uma pilha do OpsWorks Stacks, primeiro veja o exemplo. [Executar uma receita em uma instância Linux](cookbooks-101-opsworks-opsworks-instance.md)

Comece criando uma pilha, como resumido a seguir. Para obter mais informações, consulte [Criar uma nova pilha](workingstacks-creating.md).

**Criar uma pilha**

1. Abra o [console do OpsWorks Stacks](https://console.aws.amazon.com/opsworks/) e clique em **Add Stack (Adicionar pilha)**.

1. 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 EC2 chaves da Amazon

   Se você precisar criar um par de EC2 chaves da Amazon, consulte [Amazon EC2 Key Pairs](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html). 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).

1. Clique em **Add a layer** e [adicione uma camada personalizada à pilha](workinglayers-custom.md) 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.

1. [Adicione uma instância 24 horas por dia, 7 dias](workinginstances-add.md) por semana à BerksTest camada com as configurações padrão, mas não a inicie ainda.

Com o 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 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, OpsWorks mas o Stacks também oferece suporte a arquivos HTTP, repositórios Git e repositórios Subversion. Para obter mais informações, consulte [Repositórios de livro de receitas](workingcookbook-installingcustom-repo.md).

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?](https://docs.aws.amazon.com/AmazonS3/latest/userguide/empty-bucket.html) ou [Como faço para excluir um bucket do S3?](https://docs.aws.amazon.com/AmazonS3/latest/userguide/delete-bucket.html).

**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.

1. 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.

1. 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.

1. Crie um arquivo `.zip` de `berkstest_cookbooks`, [faça upload do arquivo em um bucket do Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/UG/UploadingObjectsintoAmazonS3.html), [torne o arquivo público](https://docs.aws.amazon.com/AmazonS3/latest/UG/EditingPermissionsonanObject.html) 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](workingcookbook-installingcustom-enable.md), 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 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. 

1. Edite a BerksTest camada para [adicionar as seguintes receitas ao evento de ciclo de vida de configuração da camada](workingcookbook-assigningcustom.md).
   + `getting-started::default`
   + `createfile::default`

1. [Inicie](workinginstances-starting.md) a instância. O evento de configuração ocorre após a conclusão da inicialização da instância. 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`

1. Depois que a instância estiver online, [use SSH para fazer login](workinginstances-ssh.md). Você deverá ver o seguinte
   + `/srv/www/shared` deve conter `example_data.json`.
   + `/root` deve conter `chef-getting-started.txt`.

     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.