

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.

# Ampliación de una capa
<a name="workingcookbook-extend"></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 existentes. 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).

A veces, es necesario personalizar una capa integrada más allá de lo que se puede gestionar modificando los atributos de OpsWorks Stacks o personalizando plantillas. Por ejemplo, supongamos que necesita crear symlinks, definir modos de archivo o de carpeta, instalar paquetes adicionales, etc. Debe ampliar las capas personalizadas para ampliar la funcionalidad mínima. En ese caso, tendrá que implementar uno o varios libros de recetas personalizados, con recetas para gestionar las tareas de personalización. En este tema se dan algunos ejemplos de cómo utilizar recetas para ampliar capas.

Si no conoce Chef, es conveniente que lea primero [Cookbooks 101](cookbooks-101.md), un tutorial en el que se introducen los conceptos básicos de la implementación de libros de recetas para realizar varias tareas habituales. Para ver un ejemplo detallado de cómo implementar una capa personalizada, consulte [Crear una capa personalizada de servidor Tomcat](create-custom.md). 

**Topics**
+ [

# Uso de recetas para ejecutar scripts
](workingcookbook-extend-scripts.md)
+ [

# Uso de enlaces de implementación Chef
](workingcookbook-extend-hooks.md)
+ [

# Ejecución de trabajos cron en instancias de Linux
](workingcookbook-extend-cron.md)
+ [

# Instalación y configuración de paquetes en instancias de Linux
](workingcookbook-extend-package.md)

# Uso de recetas para ejecutar scripts
<a name="workingcookbook-extend-scripts"></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).

Si ya tiene un script que se encarga de realizar las tareas de personalización necesarias, el enfoque más sencillo de la ampliación de una capa consiste en implementar una receta sencilla para ejecutar el script. Después puede asignar la receta a los eventos del ciclo de vida adecuados (normalmente Setup o Deploy) o bien usar el comando de pila `execute_recipes` para ejecutar manualmente la receta.

El siguiente ejemplo ejecuta un script de shell en instancias de Linux, pero puedes usar el mismo enfoque para otros tipos de scripts, incluidos los scripts de Windows PowerShell .

```
cookbook_file "/tmp/lib-installer.sh" do
  source "lib-installer.sh"
  mode 0755
end

execute "install my lib" do
  command "sh /tmp/lib-installer.sh"
end
```

El recurso `cookbook_file` representa un archivo que está almacenado en el directorio `files` de un libro de recetas y transfiere el archivo a una ubicación especificada en la instancia. En este ejemplo se transfiere un script shell, `lib-installer.sh`, al directorio `/tmp` de la instancia y establece el modo de archivo en `0755`. Para obtener más información, consulte [cookbook\$1file](https://docs.chef.io/chef/resources.html#cookbook-file).

El recurso `execute` representa un comando, como un comando shell. En este ejemplo se ejecuta `lib-installer.sh`. Para obtener más información, consulte [ejecutar](https://docs.chef.io/chef/resources.html#execute).

También puede ejecutar un script incorporándolo en una receta. En el siguiente ejemplo se ejecuta un script bash, aunque Chef también admite Csh, Perl, Python y Ruby.

```
script "install_something" do
  interpreter "bash"
  user "root"
  cwd "/tmp"
  code <<-EOH
    #insert bash script
  EOH
end
```

El recurso `script` representa un script. En el ejemplo se especifica un intérprete bash, se establece el usuario en `"root"` y el directorio de trabajo en `/tmp`. A continuación se ejecuta el script bash en el bloque `code`, que puede incluir tantas líneas como sea necesario. Para obtener más información, consulte [script](https://docs.chef.io/chef/resources.html#script).

Para obtener más información acerca de cómo ejecutar scripts, consulte [Ejemplo 7: Ejecución de comandos o scripts](cookbooks-101-basics-commands.md). Para ver un ejemplo de cómo ejecutar un PowerShell script en una instancia de Windows, consulte[Ejecución de un PowerShell script de Windows](cookbooks-101-opsworks-opsworks-powershell.md).

# Uso de enlaces de implementación Chef
<a name="workingcookbook-extend-hooks"></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 existentes. 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).

Puede personalizar la implementación mediante una receta personalizada que permita realizar las tareas necesarias y asignando la implementación al evento Deploy de la capa adecuada. Un enfoque alternativo y en ocasiones más sencillo (sobre todo si no tiene que implementar un libro de recetas con otros objetivos) consiste en usar los enlaces de implementación Chef para ejecutar el código de personalización. Además, las recetas Deploy personalizadas se ejecutan después de que las recetas integradas hayan realizado la implementación. Los enlaces de implementación le permiten interactuar durante una implementación; por ejemplo, después de extraer el código de aplicación del repositorio, pero antes de reiniciar Apache.

Chef implementa las aplicaciones en cuatro fases:
+ **Extracción**: descarga los archivos desde el repositorio
+ **Migración**: ejecuta una migración, según sea necesario
+ **Symlink** - crea enlaces simbólicos
+ **Reinicio**: reinicia la aplicación.

Los enlaces de implementación de Chef son una forma sencilla de personalizar una implementación, ya que ejecutan opcionalmente una aplicación Ruby facilitada por el usuario después de que cada fase termine. Para utilizar enlaces de implementación, implemente una o varias aplicaciones Ruby y póngalas en el directorio `/deploy` de su aplicación. (Si su aplicación no tiene un directorio `/deploy`, cree uno en el nivel `APP_ROOT`). La aplicación debe tener uno de los nombres siguientes, lo que determinará cuándo se ejecuta.
+ `before_migrate.rb` se ejecuta después de la fase de extracción, pero antes de la fase de migración.
+ `before_symlink.rb` se ejecuta después de la fase de migración, pero antes de la fase symlink.
+ `before_restart.rb` se ejecuta después de la fase symlink, pero antes de la fase de reinicio.
+ `after_restart.rb` se ejecuta una vez que finaliza la fase de reinicio.

Los enlaces de implementación de Chef pueden obtener acceso al nodo de objeto usando una sintaxis de nodo estándar, como en el caso de las recetas. Los enlaces de implementación también pueden obtener acceso a los valores de cualquier [variable de entorno de aplicaciones](workingapps-creating.md#workingapps-creating-environment) que haya especificado. Sin embargo, debe utilizar `new_resource.environment["VARIABLE_NAME"] ` para obtener acceso al valor de la variable, en vez de `ENV["VARIABLE_NAME"]`.

# Ejecución de trabajos cron en instancias de Linux
<a name="workingcookbook-extend-cron"></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).

Un trabajo cron de Linux indica al daemon cron que ejecute uno o varios comandos siguiendo una programación especificada. Por ejemplo, supongamos que su pila admite una aplicación de e-commerce PHP. Puede configurar un trabajo cron para que el servidor le envíe un informe de ventas a una hora determinada de cada semana. Para obtener más información sobre cron, consulte [cron](http://en.wikipedia.org/wiki/Cron) en Wikipedia. Para obtener más información acerca de cómo ejecutar un trabajo cron directamente en una instancia o un equipo basado en Linux, consulte [What are cron and crontab, and how do I use them?](https://kb.iu.edu/d/afiz) en el sitio web de la base de conocimientos de la Universidad de Indiana.

Aunque puede configurar manualmente trabajos `cron` en instancias individuales basadas en Linux conectándose a ellas con SSH y editando sus entradas `crontab`, una de las principales ventajas de OpsWorks Stacks es que puede indicarle que ejecute la tarea en una capa completa de instancias. En el procedimiento siguiente se describe cómo configurar un trabajo `cron` en las instancias de una capa del servidor de aplicaciones PHP, pero puede utilizar el mismo enfoque con cualquier capa.

**Para configurar un trabajo `cron` en las instancias de una capa**

1. Implemente un libro de recetas con una receta que tenga un recurso `cron` que configure el trabajo. En este ejemplo se presupone que la receta se denomina `cronjob.rb`; los detalles de implementación se describen más tarde. Para obtener más información acerca de los libros de recetas y las recetas, consulte [Cookbooks and Recipes](workingcookbook.md).

1. Instale el libro de recetas en la pila. Para obtener más información, consulte [Instalación de libros de recetas personalizados](workingcookbook-installingcustom-enable.md).

1. Haz que OpsWorks Stacks ejecute la receta automáticamente en las instancias de la capa asignándola a los siguientes eventos del ciclo de vida. Para obtener más información, consulte [Ejecución automática de recetas](workingcookbook-assigningcustom.md).
   + **Configuración**: `cronjob.rb` al asignar este evento, OpsWorks Stacks debe ejecutar la receta en todas las instancias nuevas.
   + **Implementación**: `cronjob.rb` al asignar este evento, OpsWorks Stacks debe ejecutar la receta en todas las instancias en línea al implementar o volver a implementar una aplicación en la capa.

   También puede ejecutar manualmente la receta en las instancias online ejecutando el comando de pila `Execute Recipes`. Para obtener más información, consulte [Ejecución de comandos de pila](workingstacks-commands.md).

A continuación se presenta el ejemplo `cronjob.rb` en el que se configura un trabajo cron para que ejecute una vez a la semana una aplicación PHP implementada por el usuario que recopila los datos de ventas en el servidor y envía por correo un informe. Para obtener más ejemplos de cómo utilizar un recurso cron, consulte [cron](https://docs.chef.io/chef/resources.html#cron). 

```
cron "job_name" do
  hour "1"
  minute "10"
  weekday "6"
  command "cd /srv/www/myapp/current && php .lib/mailing.php"
end
```

`cron` es un recurso de Chef que representa un trabajo `cron`. Cuando OpsWorks Stacks ejecuta la receta en una instancia, el proveedor asociado se encarga de los detalles de la configuración del trabajo.
+ `job_name` es un nombre definido por el usuario para el trabajo `cron`, como `weekly report`.
+ `hour`/`minute`/`weekday` especifica cuándo deben ejecutarse los comandos. En este ejemplo se ejecutan los comandos cada sábado a la 1:10 de la mañana.
+ `command` especifica los comandos que deben ejecutarse.

  En este ejemplo se ejecutan dos comandos. El primero navega hasta el directorio `/srv/www/myapp/current`. El segundo ejecuta la aplicación `mailing.php` implementada por el usuario, que recopila los datos de ventas y envía el informe.

**nota**  
El comando `bundle` no funciona con trabajos `cron` de forma predeterminada. La razón es que OpsWorks Stacks instala el paquete en el directorio. `/usr/local/bin` Para utilizar `bundle` con un trabajo `cron`, debe añadir de forma explícita la ruta `/usr/local/bin` al trabajo cron. Además, como es posible que la variable de entorno \$1PATH no se amplíe en el trabajo `cron`, una práctica recomendada es añadir explícitamente cualquier información de ruta necesaria al trabajo sin recurrir a la expansión de las variables \$1PATH. Los siguientes ejemplos muestran dos maneras de utilizar `bundle` en un trabajo `cron`.  

```
cron "my first task" do
  path "/usr/local/bin"
  minute "*/10"
  command "cd /srv/www/myapp/current && bundle exec my_command"
end
```

```
cron_env = {"PATH" => "/usr/local/bin"}
cron "my second task" do
  environment cron_env
  minute "*/10"
  command "cd /srv/www/myapp/current && /usr/local/bin/bundle exec my_command"
end
```

Si la pila tiene varios servidores de aplicaciones, puede que asignar `cronjob.rb` a los eventos del ciclo de vida de la capa del servidor de aplicaciones PHP no sea el enfoque más adecuado. Por ejemplo, la receta se ejecuta en todas las instancias de la capa, por lo que recibirá varios informes. Es mejor usar una capa personalizada para asegurarse de que solo un servidor envíe un informe.

**Para ejecutar una receta en solo una de las instancias de una capa**

1. Cree una capa personalizada llamada, por ejemplo, PHPAdmin y asígnela `cronjob.rb` a sus eventos de configuración e implementación. No es necesario que las capas personalizadas hagan mucho. En este caso, PHPAdmin solo ejecuta una receta personalizada en sus instancias.

1. Asigne una de las instancias de PHP App Server a AdminLayer. Si una instancia pertenece a más de una capa, OpsWorks Stacks ejecuta las recetas integradas y personalizadas de cada capa.

Como solo una instancia pertenece al servidor de aplicaciones PHP y a PHPAdmin las capas, solo `cronjob.rb` se ejecuta en esa instancia y solo recibes un informe.

# Instalación y configuración de paquetes en instancias de Linux
<a name="workingcookbook-extend-package"></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 existentes. 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 capas integradas admiten únicamente determinados paquetes. Para obtener más información, consulte [Capas](workinglayers.md). Puede instalar otros paquetes, como un servidor Redis, implementando recetas personalizadas para gestionar las tareas de instalación, configuración e implementación asociadas. En algunos casos, el mejor enfoque consiste en ampliar una capa integrada para que esta instale el paquete en sus instancias, junto con los paquetes estándar de la capa. Por ejemplo, si tiene una pila que admite una aplicación PHP y desea incluir un servidor Redis, puede ampliar la capa del servidor de aplicaciones PHP para instalar y configurar un servidor Redis en las instancias de la capa, además de un servidor de aplicaciones PHP.

Una receta de instalación de paquetes necesita normalmente realizar tareas como las siguientes:
+ Crear uno o varios directorios y definir sus modos.
+ Crear un archivo de configuración a partir de una plantilla.
+ Ejecutar el instalador para instalar el paquete en la instancia.
+ Comenzar uno o varios servicios.

Si desea ver un ejemplo de cómo instalar un servidor Tomcat, consulte [Crear una capa personalizada de servidor Tomcat](create-custom.md). En este tema se describe cómo configurar una capa de Redis personalizada, pero puede utilizar prácticamente el mismo código para instalar y configurar Redis en una capa integrada. [Para ver ejemplos de cómo instalar otros paquetes, consulta los libros de cocina integrados, en opsworks-cookbooks. https://github.com/aws/](https://github.com/aws/opsworks-cookbooks)