

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Paso 2.3: Implementar un libro de recetas personalizado
<a name="gettingstarted-windows-cookbook"></a>

**importante**  
El AWS OpsWorks Stacks servicio llegó al final de su vida útil el 26 de mayo de 2024 y se ha desactivado tanto para los clientes nuevos como para los actuales. Recomendamos encarecidamente a los clientes que migren sus cargas de trabajo a otras soluciones lo antes posible. Si tienes preguntas sobre la migración, ponte en contacto con el AWS Support equipo en [AWS Re:post](https://repost.aws/) o a través de Premium [AWS Support](https://aws.amazon.com/support).

Aunque una pila es básicamente un contenedor de instancias, las instancias no se añaden directamente a una pila. Añada una o varias capas, cada una de las cuales representa un grupo de instancias relacionadas y, a continuación, añada instancias a las capas.

Una capa es básicamente un modelo que OpsWorks Stacks utiliza para crear un conjunto de EC2 instancias de Amazon con la misma configuración. La instancia parte de una versión base del sistema operativo en la cual la capa de la instancia ejecuta una serie de tareas para implementar dicho plan. Entre esta tareas tenemos:
+ Crear directorios y archivos.
+ Administración de usuarios
+ Instalar y configurar software.
+ Iniciar o detener servidores.
+ Implementar código de aplicaciones y archivos relacionados.

La capas realizan tareas en las instancias ejecutando [recetas de Chef](https://docs.chef.io/recipes.html) (para abreviar, "recetas"). Una receta es una aplicación Ruby que utiliza el lenguaje específico de dominio (DSL) de Chef para describir el estado final de la instancia. Con OpsWorks Stacks, cada receta se suele asignar a uno de los [eventos del ciclo de vida](workingcookbook-events.md) de la capa: instalación, configuración, despliegue, desdespliegue y cierre. Cuando se produce un evento del ciclo de vida en una instancia, OpsWorks Stacks ejecuta las recetas del evento para realizar las tareas adecuadas. Por ejemplo, el evento de configuración se produce cuando una instancia termina de arrancar. OpsWorks Luego, Stacks ejecuta las recetas de configuración, que normalmente realizan tareas como instalar y configurar el software del servidor e iniciar los servicios relacionados.

OpsWorks Stacks proporciona a cada capa un conjunto de recetas integradas que realizan tareas estándar. También se puede ampliar la funcionalidad de una capa implementando recetas personalizadas para realizar otras tareas y asignándolas a eventos del ciclo de vida de la capa. Las pilas de Windows admiten [capas personalizadas](workinglayers-custom.md). Estas constan de un conjunto mínimo de recetas que realizan solo unas pocas tareas básicas. Para añadir funcionalidad a las instancias de Windows, debe implementar recetas personalizadas que instalen software, implementen aplicaciones, etcétera. En este tema se describe cómo crear una capa personalizada sencilla para admitir instancias de IIS.

**Topics**
+ [Breve introducción a las recetas y los libros de recetas](#gettingstarted-windows-layer-recipes)
+ [Implementar una receta para instalar e iniciar IIS](#gettingstarted-windows-layer-recipe-iis)
+ [Habilitar el libro de recetas personalizado](#gettingstarted-windows-layer-enable-cookbook)

## Breve introducción a las recetas y los libros de recetas
<a name="gettingstarted-windows-layer-recipes"></a>

Una receta define uno o varios aspectos del estado que se espera tenga una instancia: qué directorios debe tener, qué paquetes de software deben instalarse, qué aplicaciones deben implementarse, etcétera. Las recetas se empaquetan en un *libro de recetas* que, por lo general, contiene una o varias recetas relacionadas y archivos asociados (por ejemplo, plantillas) para crear los archivos de configuración.

Este tema constituye una introducción básica a las recetas, suficiente para mostrar cómo implementar un libro de recetas personalizado que admita una capa de IIS sencilla. Para ver una introducción más completa a los libros de recetas, consulte [Cookbooks and Recipes](workingcookbook.md). Para ver un tutorial detallado de introducción a la implementación de los libros de recetas, con varios temas específicos de Windows, consulte [Cookbooks 101](cookbooks-101.md).

Las recetas de Chef son técnicamente aplicaciones Ruby, pero la mayor parte del código, por no decir todo el código, está en DSL de Chef. El lenguaje DSL consiste, principalmente, en un conjunto de *recursos* que se pueden utilizar para especificar de forma declarativa un aspecto del estado de las instancias. Por ejemplo, un [recurso `directory`](https://docs.chef.io/chef/resources.html#directory) define un directorio que debe añadirse al sistema. En el siguiente ejemplo se define un directorio `C:\data` con derechos de control total que pertenece al usuario especificado y que no hereda los derechos del directorio principal.

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

Cuando Chef ejecuta una receta, ejecuta cada recurso pasando los datos a un *proveedor* asociado, un objeto Ruby que administra los detalles de la modificación del estado de la instancia. En este caso, el proveedor crea un directorio nuevo con la configuración especificada.

El libro de recetas personalizado para la capa de IIS personalizada debe llevar a cabo las tareas siguientes:
+ Instalar la característica IIS e iniciar el servicio.

  Esta tarea se realiza durante la configuración, generalmente, justo después de que termine de arrancar la instancia.
+ Implementar una aplicación en la instancia, una página HTML sencilla en este ejemplo.

  Esta tarea se suele realizar durante la instalación. Sin embargo, lo habitual es que las aplicaciones se actualicen con regularidad, de forma que también deberá implementar actualizaciones cuando la instancia esté online.

Podría tener una única receta que realizara todas estas tareas. No obstante, el método preferido es disponer de recetas independientes para las tareas de instalación e implementación. De esta forma, es posible implementar las actualizaciones de las aplicaciones en cualquier momento, sin necesidad de ejecutar código de instalación. A continuación se describe cómo configurar un libro de recetas personalizado para admitir una capa de IIS personalizada. En temas posteriores se indicará cómo implementar las recetas.

**Primeros pasos**

1. Cree un directorio denominado `iis-cookbook` en una ubicación cómoda dentro de la estación de trabajo.

1. Añada un archivo `metadata.rb` a `iis-cookbook` con el contenido siguiente.

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

   En este ejemplo se utiliza un archivo `metadata.rb` mínimo. Para obtener más información sobre cómo usar este archivo, consulte [metadata.rb](https://docs.chef.io/config_rb_metadata.html).

1. Añada un directorio `recipes` a `iis-cookbook`.

   Este directorio, que debe llamarse `recipes`, contiene las recetas del libro de recetas.

Por lo general, los libros de recetas contienen otros directorios más. Por ejemplo, si en una receta se utiliza una plantilla para crear un archivo de configuración, la plantilla se encuentra, normalmente, en el directorio `templates\default`. El libro de recetas de este ejemplo consta únicamente de recetas; por consiguiente, no necesita otros directorios. Además, en este ejemplo se emplea un único libro de recetas, pero puede utilizar tantos como precise; en los proyectos complejos, es preferible disponer de varios. Por ejemplo, podría tener libros de recetas independientes para las tareas de instalación e implementación. Para obtener más ejemplos sobre libros de recetas, consulte [Cookbooks and Recipes](workingcookbook.md).

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

 IIS es una *característica* de Windows entre una serie de componentes opcionales del sistema que se pueden instalar en Windows Server. Puede hacer que receta instale de IIS de una de las formas siguientes:
+ Utilizando un recurso [https://docs.chef.io/chef/resources.html#powershell-script](https://docs.chef.io/chef/resources.html#powershell-script) para ejecutar el 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).
+ Utilizando el recurso [del libro de recetas de Windows](https://github.com/opscode-cookbooks/windows) `windows_feature` de Chef.

  El libro de recetas `windows` contiene un conjunto de recursos cuyos proveedores emplean el [sistema de administración y mantenimiento de imágenes de implementación](https://technet.microsoft.com/en-us/library/dd744256%28v=ws.10%29.aspx) (DISM) para realizar diversas tareas en instancias de Windows, entre ellas la instalación de las características.

**nota**  
`powershell_script` es uno de los recursos más útiles con las recetas de Windows. Puedes usarla para realizar diversas tareas en una instancia mediante la ejecución de un PowerShell script o un cmdlet. Es especialmente útil para aquellas tareas no compatibles con recursos de Chef.

En este ejemplo, se ejecuta un PowerShell script para instalar e iniciar el servidor web (IIS). El libro de recetas de `windows` se describe más adelante. Si desea ver un ejemplo sobre el uso de `windows_feature` para instalar IIS, consulte [Instalación de una característica de Windows: IIS](cookbooks-101-opsworks-install-software-feature.md).

Añada una receta llamada `install.rb` con el contenido siguiente al directorio `recipes` del libro de recetas.

```
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
```

La receta contiene dos recursos.

**powershell\$1script**  
`powershell_script`ejecuta el PowerShell script o cmdlet especificado. El ejemplo tiene la configuración de atributos siguiente:  
+ `code`— Los PowerShell cmdlets que se van a ejecutar.

  En este ejemplo se ejecuta un cmdlet `Install-WindowsFeature` que instala Web Server (IIS). En general, el atributo `code` admite cualquier número de líneas, de manera que puede ejecutar tantos cmdlets como necesite.
+  `not-if`: un [https://docs.chef.io/chef/resources.html#guards](https://docs.chef.io/chef/resources.html#guards) que garantiza que la receta instala IIS si no está instalado.

  En general se prefieren recetas *idempotentes* que no pierdan tiempo realizando la misma tarea más de una vez.
Cada recurso tiene una acción que especifica la acción que va a emprender el proveedor. No hay ninguna acción explícita para este ejemplo, por lo que el proveedor realiza la `:run` acción predeterminada, que ejecuta el script especificado PowerShell . Para obtener más información, consulte [Ejecución de un PowerShell script de Windows](cookbooks-101-opsworks-opsworks-powershell.md).

**service**  
Un [https://docs.chef.io/chef/resources.html#service](https://docs.chef.io/chef/resources.html#service) administra un servicio; en este caso, el servicio de Web Server IIS (W3SVC). En el ejemplo se utilizan atributos predeterminados y se especifican dos acciones, `:start` y `:enable`, que inician y habilitan IIS.

**nota**  
Si desea instalar software que utiliza un instalador de paquete, como MSI, puede usar un recurso `windows_package`. Para obtener más información, consulte [Instalación de un paquete](cookbooks-101-opsworks-install-software-package.md).

## Habilitar el libro de recetas personalizado
<a name="gettingstarted-windows-layer-enable-cookbook"></a>

OpsWorks Stacks ejecuta recetas desde una caché local en cada instancia. Para ejecutar recetas personalizadas, haga lo siguiente:
+ Guarde el libro de recetas en un repositorio remoto.

  OpsWorks Stacks descarga los libros de cocina de este repositorio a la caché local de cada instancia.
+ Modifique la pila para habilitar los libros de recetas personalizados.

  Los libros de recetas personalizados están desactivados de forma predeterminada, de forma que debe habilitarlos para la pila y proporcionar la dirección URL y la información relacionada del repositorio.

OpsWorks Stacks admite archivos S3 y repositorios Git para libros de cocina personalizados; este ejemplo usa un archivo S3. Para obtener más información, consulte [Repositorios de libros de recetas](workingcookbook-installingcustom-repo.md).

**Para utilizar un archivo S3**

1. Cree un archivo `.zip` del directorio `iis-cookbook`.

   OpsWorks Stacks también admite archivos `.tgz` (tar comprimido con gzip) para las pilas de Windows.

1. Cargue el archivo en un bucket de S3 en la región Oeste de EE. UU. (Norte de California) y haga público el archivo. También puede utilizar archivos S3 privados, pero para este ejemplo son suficientes los archivos públicos, que son un poco más sencillos de utilizar. 

   1. Inicie sesión en la consola de Amazon S3 Consola de administración de AWS y ábrala en [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/).

   1. Si aún no dispone de un bucket en `us-west-1`, seleccione **Crear bucket** y cree un bucket en la región Oeste de EE. UU. (Norte de California).

   1. En la lista de buckets, elija el nombre del bucket en el que desea cargar el archivo y, a continuación, elija **Upload (Cargar)**. 

   1. Seleccione **Add Files (Añadir archivos)**.

   1. Seleccione el archivo que desea cargar y, a continuación, elija **Open (Abrir)**.

   1. En la parte inferior del cuadro de diálogo **Upload - Select Files and Folders (Cargar - Seleccionar archivos y carpetas)**, elija **Set Details (Establecer detalles)**.

   1. En la parte inferior del cuadro de diálogo **Set Details (Establecer detalles)**, elija **Set Permissions (Establecer permisos)**.

   1. En el cuadro de diálogo **Set permissions (Establecer permisos)**, elija **Make everything public (Publicar todo)**.

   1. En la parte inferior del cuadro de diálogo **Set Permissions (Establecer permisos)**, elija **Start Upload (Iniciar carga)**. Cuando termine la carga, el archivo `iis-cookbook.zip` aparece en el bucket.

   1. Elija el bucket y, a continuación, elija la pestaña **Properties (Propiedades)** del bucket. Junto a **Link (Enlace)**, registre la URL del archivo de almacenamiento para usarlo después.

   Para obtener más información sobre la carga de archivos en un bucket de Amazon S3, consulte [¿Cómo puedo cargar archivos y carpetas en un bucket de S3?](https://docs.aws.amazon.com/AmazonS3/latest/UG/UploadingObjectsintoAmazonS3.html) en la *Guía del usuario de la consola de Amazon S3*.

**importante**  
Hasta ahora, el tutorial le ha costado solo un poco tiempo, ya que el servicio OpsWorks Stacks es gratuito. No obstante, deberá pagar por los recursos de AWS que utilice; por ejemplo, el almacenamiento de Amazon S3. En cuanto cargue el archivo, comenzará a incurrir en gastos. Para obtener más información, consulte [Precios de AWS](https://aws.amazon.com/pricing/).

**Para habilitar libros de recetas personalizados para la pila**

1. En la consola de OpsWorks Stacks, selecciona **Stack** en el panel de navegación y, a continuación, selecciona **Stack Settings** en la esquina superior derecha.

1. En la parte superior derecha de la página **Settings (Configuración)**, elija **Edit (Editar)**.

1. En la página **Settings (Configuración)**, establezca **Use custom Chef cookbooks (Usar libros de recetas de Chef personalizadas)** en **Yes (Sí)** e introduzca la información siguiente:
   + Tipo de repositorio: **Archivo S3**.
   + URL del repositorio: la URL de S3 del archivo de almacenamiento del libro de recetas que ha registrado previamente.

1. Elija **Save (Guardar)** para actualizar la configuración de la pila.

OpsWorks Stacks instala tu libro de cocina personalizado en todas las instancias nuevas. Tenga en cuenta que OpsWorks Stacks no instala ni actualiza automáticamente los libros de recetas personalizados en las instancias online. Puede hacerlo manualmente como se describe más adelante.