

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.

# Recetas
<a name="workingcookbook-installingcustom-components-recipes"></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).

Las recetas son aplicaciones de Ruby que definen la configuración de un sistema. Instalan paquetes, crean archivos de configuración a partir de plantillas, ejecutan comandos shell, crean archivos y directorios, etc. Por lo general, haces que OpsWorks Stacks ejecute las recetas automáticamente cuando se produce un [evento del ciclo](workingcookbook-events.md) de vida en la instancia, pero también puedes ejecutarlas de forma explícita en cualquier momento mediante el comando [Execute Recipes stack.](workingcookbook-executing.md) Para obtener más información, consulte [Acerca de las recetas](http://docs.chef.io/recipes.html).

Normalmente, una receta está compuesta por muchos *recursos*, cada uno de los cuales representa el estado deseado de un aspecto del sistema. Cada recurso incluye un conjunto de atributos que define el estado deseado y especifica la acción que se debe llevar a cabo. Chef asocia cada recurso a un *proveedor* adecuado que realiza la acción. Para obtener más información, consulte [Referencia de recursos y proveedores](https://docs.chef.io/resource.html).

Un recurso `package` le ayuda a administrar paquetes de software en instancias de Linux. En el siguiente ejemplo se instala el paquete de Apache.

```
...
package 'apache2' do
  case node[:platform]
  when 'centos','redhat','fedora','amazon'
    package_name 'httpd'
  when 'debian','ubuntu'
    package_name 'apache2'
  end
  action :install
end
...
```

Chef utiliza el proveedor de paquetes adecuado para la plataforma. Los atributos de recurso a menudo solo asignan un valor, pero puede utilizar las operaciones lógicas de Ruby para realizar asignaciones condicionales. El ejemplo utiliza un operador `case` que utiliza `node[:platform]` para identificar el sistema operativo de la instancia y que define el atributo `package_name` en consecuencia. Puede utilizar la sintaxis de nodo estándar de Chef para insertar atributos en una receta para que Chef los sustituya por el valor asociado. Puede utilizar cualquier atributo del objeto de nodo, no solo los atributos del libro de recetas.

Tras determinar el nombre del paquete apropiado, el segmento del código termina con una acción `install` que instala el paquete. Otras acciones de este recurso incluyen `upgrade` y `remove`. Para obtener más información, consulte [paquete](https://docs.chef.io/chef/resources.html#id150).

Suele resultar útil para dividir tareas de instalación y configuración complejas en una o varias subtareas, cada una implementada como una receta independiente, y hacer que la receta principal las ejecute en el momento oportuno. El siguiente ejemplo muestra la línea de código que sigue al ejemplo anterior:

```
include_recipe 'apache2::service'
```

Para que una receta ejecute una receta secundaria, utilice la palabra clave `include_recipe` seguida del nombre de la receta. Las recetas se identifican mediante la utilización de la sintaxis `CookbookName::RecipeName` estándar de Chef, donde `RecipeName` omite la extensión `.rb`.

**nota**  
Una declaración `include_recipe` ejecuta la receta de forma efectiva en ese momento en la receta principal. Sin embargo, lo que realmente ocurre es que Chef sustituye cada declaración `include_recipe` de Chef por el código de la receta especificada antes de ejecutar la receta principal.

Un recurso `directory` representa un directorio, como el que debe contener un paquete de archivos. El siguiente recurso, `default.rb`, crea un directorio de registro de Linux.

```
directory node[:apache][:log_dir] do
    mode 0755
    action :create
end
```

El directorio del registro se define en uno de los archivos de atributos del libro de recetas. El recurso especifica que el modo del directorio es 0755 y utiliza una acción `create` para crearlo. Para obtener más información, consulte [directorio](https://docs.chef.io/chef/resources.html#directory). También puede utilizar este recurso en instancias de Windows.

El recurso `execute` representa comandos, como comandos shell o scripts. El siguiente ejemplo genera archivos module.load.

```
execute 'generate-module-list' do
  if node[:kernel][:machine] == 'x86_64'
    libdir = 'lib64'
  else
    libdir = 'lib'
  end
  command "/usr/local/bin/apache2_module_conf_generate.pl /usr/#{libdir}/httpd/modules /etc/httpd/mods-available"
  action :run
end
```

El recurso determina en primer lugar el tipo de CPU. `[:kernel][:machine]` es otro de los atributos automáticos que Chef genera para representar diferentes propiedades del sistema, el tipo de CPU en este caso. A continuación, especifica el comando, un script Perl y utiliza una acción `run` para ejecutar el script, que genera los archivos module.load. Para obtener más información, consulte [ejecutar](https://docs.chef.io/chef/resources.html#execute).

Un recurso de `template` representa un archivo, generalmente un archivo de configuración, que se genera a partir de uno de los archivos de plantilla del libro de recetas. El siguiente ejemplo crea un archivo de configuración `httpd.conf` a partir de la plantilla `apache2.conf.erb` de la que se habló en [Plantillas](workingcookbook-installingcustom-components-templates.md).

```
template 'apache2.conf' do
  case node[:platform]
  when 'centos','redhat','fedora','amazon'
    path "#{node[:apache][:dir]}/conf/httpd.conf"
  when 'debian','ubuntu'
    path "#{node[:apache][:dir]}/apache2.conf"
  end
  source 'apache2.conf.erb'
  owner 'root'
  group 'root'
  mode 0644
  notifies :restart, resources(:service => 'apache2')
end
```

El recurso determina el nombre y la ubicación del archivo generado en función del sistema operativo de la instancia. A continuación, especifica `apache2.conf.erb` como la plantilla que se va a utilizar para generar el archivo y establece su propietario, grupo y modo. Ejecuta la acción `notify` para solicitar al recurso `service`, que representa al servidor de Apache, que reinicie el servidor. Para obtener más información, consulte [plantilla](https://docs.chef.io/chef/resources.html#template).