

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

# Etapa 2.3: Implementar um livro de receitas personalizado
<a name="gettingstarted-windows-cookbook"></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).

Apesar de uma pilha ser basicamente um contêiner de instâncias, você não adiciona instâncias diretamente à pilha. Você pode adicionar uma ou mais camadas, cada uma representando um grupo de instâncias relacionadas, e então adicionar instâncias às camadas.

Uma camada é basicamente um modelo que o OpsWorks Stacks usa para criar um conjunto de EC2 instâncias da Amazon com a mesma configuração. Uma instância começa com uma versão base do sistema operacional, e a camada da instância executa uma variedade de tarefas na instância para implementar o esquema, que podem incluir:
+ Criação de diretórios e arquivos
+ Gerenciamento de usuários
+ Instalação e configuração de software
+ Iniciar ou interromper servidores
+ Implantação de código de aplicativo e arquivos relacionados.

Uma camada executa tarefas em instâncias ao executar [receitas do Chef](https://docs.chef.io/recipes.html), receitas, para abreviar. Uma receita é um aplicativo Ruby que usa uma linguagem específica de domínio (DSL) do Chef para descrever o estado final da instância. Com o OpsWorks Stacks, cada receita geralmente é atribuída a um dos [eventos do ciclo](workingcookbook-events.md) de vida da camada: instalação, configuração, implantação, desimplantação e desativação. Quando ocorre um evento de ciclo de vida em uma instância, o OpsWorks Stacks executa as receitas do evento para realizar as tarefas apropriadas. Por exemplo, o evento Setup ocorre após a conclusão da inicialização de uma instância. OpsWorks Em seguida, o Stacks executa as receitas de instalação, que normalmente executam tarefas como instalar e configurar o software do servidor e iniciar serviços relacionados.

OpsWorks O Stacks fornece a cada camada um conjunto de receitas integradas que executam tarefas padrão. Você pode estender a funcionalidade de uma camada ao implementar receitas personalizadas para realizar tarefas adicionais e atribuí-las aos eventos de ciclo de vida da camada. As pilhas do Windows são compatíveis com [camadas personalizadas](workinglayers-custom.md), que têm um conjunto mínimo de receitas que executam apenas algumas tarefas básicas. Para adicionar funcionalidade às suas instâncias do Windows, você deve implementar as receitas personalizadas para instalar software, implantar aplicativos e assim por diante. Este tópico descreve como criar uma camada personalizada simples para dar suporte a instâncias do IIS.

**Topics**
+ [Uma rápida introdução aos livros de receitas e às receitas](#gettingstarted-windows-layer-recipes)
+ [Implementar uma receita para instalar e iniciar o IIS](#gettingstarted-windows-layer-recipe-iis)
+ [Ativar o livro de receitas personalizado](#gettingstarted-windows-layer-enable-cookbook)

## Uma rápida introdução aos livros de receitas e às receitas
<a name="gettingstarted-windows-layer-recipes"></a>

Uma receita define um ou mais aspectos do estado esperado de uma instância: quais diretórios ela deve ter, quais pacotes de software devem estar instalados, quais aplicativos devem ser implantados e assim por diante. As receitas são empacotadas em um *livro de receitas*, que normalmente contém uma ou mais receitas relacionadas, além de arquivos associados, como modelos para a criação de arquivos de configuração.

Este tópico é uma introdução básica às receitas, apenas o suficiente para mostrar como implementar um livro de receitas para dar suporte a uma camada do IIS personalizada simples. Para obter uma introdução mais geral aos livros de receitas, consulte [Livros de receitas e receitas](workingcookbook.md). Para um tutorial detalhado de introdução à implementação de livros de receitas, incluindo alguns tópicos específicos do Windows, consulte [Introdução a livros de receitas](cookbooks-101.md).

Tecnicamente, as receitas do Chef são aplicativos Ruby, mas a maior parte do código está no Chef DSL. O DSL é composto principalmente de um conjunto de *recursos*, que você pode usar para especificar de forma declarativa um aspecto do estado das instâncias. Por exemplo, um [`directory` recurso](https://docs.chef.io/chef/resources.html#directory) define um diretório a ser adicionado ao sistema. O exemplo a seguir define um diretório `C:\data` com direitos de controle total que pertence ao usuário especificado e não herda direitos do diretório pai.

```
directory 'C:\data' do
  rights :full_control, 'WORKGROUP\username'
  inherits false
  action :create
end
```

Quando o Chef executa uma receita, ele executa cada recurso ao passar os dados para um *provedor* associado, um objeto Ruby que lida com os detalhes da modificação do estado da instância. Neste caso, o fornecedor cria um novo diretório com a configuração especificada.

O livro de receitas personalizado para a camada personalizada do IIS deve realizar as seguintes tarefas:
+ Instalar o recurso IIS e iniciar o serviço.

  Você normalmente realiza essa tarefa durante a instalação, logo após o término da inicialização da instância.
+ Implantar um aplicativo na instância, uma página HTML simples para este exemplo.

  Você normalmente realiza esta tarefa durante a instalação. No entanto, os aplicativos geralmente precisam ser atualizados regularmente e, portanto, você também precisa implantar as atualizações enquanto a instância está online.

Você poderia ter uma única receita para realizar todas essas tarefas. No entanto, a abordagem preferencial é ter receitas separadas para as tarefas de instalação e de implantação. Dessa maneira, você pode implantar as atualizações de aplicativo a qualquer momento, sem que seja necessário executar o código de instalação também. A seguir, como configurar um livro de receitas para dar suporte a uma camada personalizada do IIS. Os tópicos subsequentes mostrarão como implementar as receitas.

**Para começar**

1. Crie um diretório chamado `iis-cookbook` em um local conveniente na sua estação de trabalho.

1. Adicione um arquivo `metadata.rb` com o seguinte conteúdo a `iis-cookbook`.

   ```
   name "iis-cookbook"
   version "0.1.0"
   ```

   Este exemplo usa um `metadata.rb` mínimo. Para obter mais informações sobre como você pode usar este arquivo, consulte [metadata.rb](https://docs.chef.io/config_rb_metadata.html).

1. Adicione um diretório `recipes` a `iis-cookbook`.

   Esse diretório, que deve ser nomeado como `recipes`, contém as receitas do livro de receitas.

Em geral, os livros de receitas podem conter uma variedade de outros diretórios. Por exemplo, se uma receita usar um modelo para criar um arquivo de configuração, o modelo geralmente ficará no diretório `templates\default`. O livro de receitas para este exemplo consiste inteiramente em receitas e, portanto, não precisará de outros diretórios. Além disso, este exemplo usa um único livro de receitas, mas você pode usar a quantidade necessária; com frequência, é preferível usar vários livros de receitas para projetos complexos. Por exemplo, você pode ter livros de receitas separados para as tarefas de instalação e de implementação. Para obter mais exemplos de livros de receitas, consulte [Livros de receitas e receitas](workingcookbook.md).

## Implementar uma receita para instalar e iniciar o IIS
<a name="gettingstarted-windows-layer-recipe-iis"></a>

 O IIS é um *recurso* do Windows, uma de um conjunto de componentes opcionais do sistema que você pode instalar no Windows Server. Você pode fazer uma receita instalar o IIS de uma das seguintes formas:
+ Usando um recurso [https://docs.chef.io/chef/resources.html#powershell-script](https://docs.chef.io/chef/resources.html#powershell-script) para executar o cmdlet [https://docs.microsoft.com/en-us/powershell/module/servermanager/install-windowsfeature?view=winserver2012-ps](https://docs.microsoft.com/en-us/powershell/module/servermanager/install-windowsfeature?view=winserver2012-ps).
+ Usando o recurso [livro de receitas do Windows](https://github.com/opscode-cookbooks/windows) `windows_feature` do Chef.

  O livro de receitas do `windows` contém um conjunto de recursos cujos provedores usam o [Deployment Image Servicing and Management](https://technet.microsoft.com/en-us/library/dd744256%28v=ws.10%29.aspx) (DISM) para realizar uma variedade de tarefas em instâncias do Windows, incluindo a instalação de recursos.

**nota**  
O `powershell_script` está entre os recursos mais úteis para receitas do Windows. Você pode usá-lo para realizar várias tarefas em uma instância executando um PowerShell script ou cmdlet. Ele é especialmente útil para as tarefas que não são compatíveis com recursos do Chef.

Este exemplo executa um PowerShell script para instalar e iniciar o Servidor Web (IIS). O livro de receitas do `windows` será descrito mais tarde. Para obter um exemplo de como usar o `windows_feature` para instalar o IIS, consulte [Instalar um recurso do Windows: IIS](cookbooks-101-opsworks-install-software-feature.md).

Adicione uma receita chamada `install.rb` com o conteúdo a seguir ao diretório `recipes` do livro de receitas.

```
powershell_script 'Install IIS' do
  code 'Install-WindowsFeature Web-Server'
  not_if "(Get-WindowsFeature -Name Web-Server).Installed"
end

service 'w3svc' do
  action [:start, :enable]
end
```

A receita contém dois recursos.

**powershell\$1script**  
`powershell_script`executa o PowerShell script ou cmdlet especificado. O exemplo tem as seguintes configurações de atributo:  
+ `code`— Os PowerShell cmdlets a serem executados.

  Este exemplo executa um cmdlet `Install-WindowsFeature`, que instala o servidor web (IIS). Em geral, o atributo `code` pode ter qualquer número de linhas para que você possa executar quantos cmdlets precisar.
+ `not-if`: um [https://docs.chef.io/chef/resources.html#guards](https://docs.chef.io/chef/resources.html#guards) que garante que a receita só instalará o IIS se ele ainda não tiver sido instalado.

  Você geralmente deseja que as receitas sejam *idempotentes*, de forma que elas não percam tempo realizando a mesma tarefa mais de uma vez.
Cada recurso tem uma ação, que especifica a ação que o provedor deve realizar. Não há nenhuma ação explícita neste exemplo, então o provedor executa a `:run` ação padrão, que executa o PowerShell script especificado. Para obter mais informações, consulte [Executando um PowerShell script do Windows](cookbooks-101-opsworks-opsworks-powershell.md).

**service**  
Um [https://docs.chef.io/chef/resources.html#service](https://docs.chef.io/chef/resources.html#service) gerencia um serviço, neste caso, o serviço Servidor web IIS (W3SVC). O exemplo usa atributos padrão e especifica duas ações, `:start` e `:enable`, as quais iniciam e ativam o IIS.

**nota**  
Se você quiser instalar software que use um instalador de pacotes, como o MSI, use um recurso `windows_package`. Para obter mais informações, consulte [Instalar um pacote](cookbooks-101-opsworks-install-software-package.md).

## Ativar o livro de receitas personalizado
<a name="gettingstarted-windows-layer-enable-cookbook"></a>

OpsWorks O Stacks executa receitas de um cache local em cada instância. Para executar suas receitas personalizadas, você deve fazer o seguinte:
+ Armazene o livro de receitas em um repositório remoto.

  OpsWorks O Stacks baixa os livros de receitas desse repositório para o cache local de cada instância.
+ Edite a pilha para ativar os livros de receitas personalizados.

  Os livros de receitas personalizados estão desativados por padrão; portanto, você deve ativar os livros de receitas personalizados para a pilha e fornecer o URL do repositório e as informações relacionadas.

OpsWorks O Stacks oferece suporte a arquivos S3 e repositórios Git para livros de receitas personalizados; este exemplo usa um arquivo S3. Para obter mais informações, consulte [Repositórios de livro de receitas](workingcookbook-installingcustom-repo.md).

**Para usar um arquivo do S3**

1. Crie um arquivo `.zip` do diretório `iis-cookbook`.

   OpsWorks As pilhas também oferecem suporte a arquivos `.tgz` (tar compactado com gzip) para pilhas do Windows.

1. Faça upload do arquivo para um bucket do S3 na região Oeste dos EUA (N. da Califórnia) e torne o arquivo público. Você também pode usar arquivos privados do S3, mas os arquivos públicos são suficientes para este exemplo e um pouco mais simples de trabalhar. 

   1. Faça login no Console de gerenciamento da AWS e abra o console do Amazon S3 em. [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)

   1. Se você ainda não tiver um bucket na `us-west-1`, escolha **Criar bucket** e crie um bucket na região Oeste dos EUA (N. da Califórnia).

   1. Na lista de buckets, clique no nome do bucket para o qual você deseja fazer upload do arquivo e clique em **Upload (Fazer upload)**. 

   1. Escolha **Adicionar arquivos**.

   1. Selecione o arquivo para fazer upload e escolha **Open (Abrir)**.

   1. Na parte inferior da caixa de diálogo **Upload - Select Files and Folders (Fazer upload — Selecionar arquivos e pastas)**, escolha **Set Details (Definir detalhes)**.

   1. Na parte inferior da caixa de diálogo **Set Details**, escolha **Set Permissions**.

   1. Na caia de diálogo **Set Permissions**, escolha **Make everything public**.

   1. Na parte inferior da caixa de diálogo **Set Permissions (Definir permissões)**, escolha **Start Upload (Iniciar upload)**. Quando o upload for concluído, o arquivo `iis-cookbook.zip` será exibido em seu bucket.

   1. Escolha o bucket e escolha a guia **Properties (Propriedades)** para o bucket. Ao lado de **Link**, registre o URL do arquivo para uso posterior.

   Para obter mais informações sobre o upload de arquivos para um bucket do Amazon S3, consulte [Como fazer upload de arquivos e pastas para um bucket do S3?](https://docs.aws.amazon.com/AmazonS3/latest/UG/UploadingObjectsintoAmazonS3.html) no *Guia do usuário do console do Amazon S3*.

**Importante**  
Até agora, a demonstração só custou a você um pouco de tempo, o serviço OpsWorks Stacks é gratuito. No entanto, você deverá pagar por qualquer recurso da AWS que utilizar, como o armazenamento no Amazon S3. Assim que você fizer o upload do arquivo, começará a ser cobrado. Para obter mais informações, consulte [Definição de preço da AWS](https://aws.amazon.com/pricing/).

**Para ativar os livros de receitas personalizados para a pilha**

1. No console OpsWorks Stacks, escolha **Stack** no painel de navegação e, em seguida, escolha **Stack Settings** no canto superior direito.

1. Na parte superior direita da página **Settings**, escolha **Edit**.

1. Na página **Settings**, defina **Use custom Chef cookbooks** como **Yes** e insira as seguintes informações:
   + Tipo de repositório: **Arquivamento do S3**.
   + URL do repositório: o URL do S3 do arquivo do livro de receitas registrado anteriormente.

1. Escolha **Save (Salvar)** para atualizar a configuração da pilha.

OpsWorks O Stacks instala seu livro de receitas personalizado em todas as novas instâncias. Observe que o OpsWorks Stacks não instala ou atualiza automaticamente os livros de receitas personalizadas em instâncias online. Você pode fazer isso manualmente, conforme descrito posteriormente.