

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.

# Personalización de la configuración de OpsWorks Stacks anulando los atributos
<a name="workingcookbook-attributes"></a>

**importante**  
El AWS OpsWorks Stacks servicio finalizó 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).

**nota**  
En el caso de las pilas de Windows y las de Chef 12 para Linux, OpsWorks Stacks utiliza versiones independientes de Chef para crear recetas integradas y personalizadas. Esto significa que no puede utilizar las técnicas que se explican en esta sección para anular atributos integrados en pilas de Windows y en pilas de Chef 12 de Linux.

Las recetas y plantillas dependen de una serie de atributos de Chef para la información específica de la instancia o de la pila como, por ejemplo, las configuraciones de capa o del servidor de aplicaciones. Estos atributos disponen de varias fuentes:
+ **JSON personalizado**: de manera opcional, puede especificar atributos JSON personalizados al crear, actualizar o clonar una pila o al implementar una aplicación.
+ **Atributos de configuración de la pila**:OpsWorks Stacks define estos atributos para contener la información de configuración de la pila, incluida la información que se especifica en la configuración de la consola. 
+ Atributos de **implementación: AWS OpsWorks define los atributos** relacionados con la implementación para los eventos de implementación.
+ **Atributos del libro de recetas**: normalmente, los libros de recetas integrados y personalizados incluyen uno o más [archivos de atributos](workingcookbook-installingcustom-components-attributes.md), que contienen atributos que representan valores específicos de libros de recetas, como los valores de configuración del servidor de aplicaciones. 
+ **Chef**: la [herramienta Ohai](http://docs.chef.io/resource_ohai.html) de Chef define atributos que representan una gran variedad de valores de configuración del sistema como el tipo de CPU y la memoria instalada.

Para obtener una lista completa de los atributos de configuración e implementación de la pila y de los atributos integrados del libro de recetas, consulte [Atributos de configuración e implementación de pila: Linux](attributes-json-linux.md) y [Atributos integrados de los libros de recetas](attributes-recipes.md). Para obtener más información sobre los atributos Ohai, consulte [Ohai](https://docs.chef.io/ohai.html).

Cuando se produce un [evento del ciclo de vida](workingcookbook-events.md) como Deploy o Configure o se ejecuta un [comando de pila](workingstacks-commands.md) como `execute_recipes` o `update_packages`, OpsWorks Stacks hace lo siguiente:
+ Envía un comando correspondiente al agente de cada instancia afectada.

  El agente ejecuta las recetas adecuadas. Por ejemplo, para un evento Deploy, el agente ejecuta las recetas Deploy integradas, seguidas de cualquier receta Deploy personalizada.
+ Combina cualquier atributo de implementación y JSON personalizado con los atributos de configuración de la pila y los instala en las instancias.

Los atributos del JSON personalizado, los atributos de configuración e implementación de la pila, los atributos del libro de recetas y los atributos Ohai se fusionan en un *objeto nodo*, que suministra los valores de los atributos a las recetas. En general, una instancia se considera sin estado en lo que se refiere a los atributos de configuración de la pila, incluidos los JSON personalizados. Cuando ejecuta un comando de implementación o de pila, las recetas asociadas utilizan los atributos de configuración de la pila que se han descargado con el comando.

**Topics**
+ [Prioridad de los atributos](workingcookbook-attributes-precedence.md)
+ [Anulación de atributos con un JSON personalizado](workingcookbook-json-override.md)
+ [Anular los atributos de OpsWorks Stacks mediante atributos de libros de cocina personalizados](workingcookbook-cookbook-attributes.md)

# Prioridad de los atributos
<a name="workingcookbook-attributes-precedence"></a>

**importante**  
El AWS OpsWorks Stacks servicio finalizó 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).

Si un atributo se define de forma exclusiva, Chef simplemente lo incorpora en el objeto nodo. Sin embargo, cualquier origen de atributo puede definir a cualquier atributo, por lo que es posible que el mismo atributo tenga varias definiciones con valores distintos. Por ejemplo, el libro de recetas `apache2` integrado define `node[:apache][:keepalive]`, pero también podría definir dicho atributo en el JSON personalizado o en un libro de recetas personalizado. Si un atributo tiene varias definiciones, se evalúan en un orden que se describe posteriormente y el objeto nodo recibe la definición con la máxima prioridad.

Un atributo se define de la siguiente manera:

```
node.type[:attribute][:sub_attribute][:...]=value
```

Si un atributo tiene varias definiciones, el tipo determina qué definición tiene prioridad y esa definición se incorpora al objeto de nodo. OpsWorks Stacks usa los siguientes tipos de atributos:
+ **default**: es el tipo más común y esencialmente significa "utilizar este valor si todavía no se ha definido el atributo". Si todas las definiciones de un atributo son del tipo `default`, la primera definición en el orden de evaluación tiene prioridad y se obvian los valores subsiguientes. Ten en cuenta que OpsWorks Stacks establece todas las definiciones de atributos de configuración y despliegue de la pila en un tipo. `default`
+ **normal**: los atributos de este tipo anulan cualquier atributo `default` o `normal` definido anteriormente en el orden de evaluación. Por ejemplo, si el primer atributo es de un libro de recetas integrado y tiene un tipo `default` y el segundo es un atributo definido por el usuario con el tipo `normal`, la segunda definición tiene prioridad.
+ **set**: es un tipo en desuso que se encuentra en libros de recetas antiguos. Se ha reemplazado por `normal`, que tiene la misma prioridad. 

Chef es compatible con varios tipos de atributo adicionales, incluido un tipo `automatic` que prevalece sobre el resto de las definiciones de atributo. Las definiciones de atributo generadas por la herramienta Ohai de Chef son todas del tipo `automatic`, por lo que son de solo lectura. Esto no suele ser un problema, ya que no hay motivo para anularlos y son distintos de los atributos de OpsWorks Stacks. Sin embargo, debe tener cuidado al denominar los atributos de su libro de recetas personalizado para que sean exclusivos de los atributos Ohai. Para obtener más información, consulte [Acerca de los atributos](http://docs.chef.io/attributes.html).

**nota**  
La herramienta Ohai es un archivo ejecutable que puede ejecutar desde la línea de comandos. Para enumerar los atributos Ohai de una instancia, inicie sesión en la instancia y ejecute `ohai` en una ventana de la terminal. Tenga en cuenta que produce una salida muy larga.

Estos son los pasos que incorporan las distintas definiciones de atributo en el objeto nodo:

1. Combine cualquier atributo personalizado de configuración de la pila con los atributos de configuración e implementación de la pila. 

   Los atributos JSON personalizados se pueden configurar para la pila o para una implementación determinada. Son los primeros en el orden de evaluación y son del tipo `normal` efectivo. Si uno o varios atributos de configuración de la pila también están definidos en el JSON personalizado, los valores del JSON personalizado tienen preferencia. De lo contrario, OpsWorks Stacks simplemente incorpora los atributos JSON personalizados en la configuración de la pila. 

1. Combine cualquier atributo JSON personalizado de implementación con los atributos de configuración e implementación de la pila.

   Los atributos de JSON personalizado de implementación también son tipos `normal` efectivos, por lo que prevalecen sobre el JSON de configuración de la pila integrado y el JSON de implementación integrado.

1. Combine los atributos de implementación y de configuración de la pila con el nodo objeto de la instancia.

1. Combine los atributos integrados del libro de recetas de la instancia con el objeto nodo.

   Los atributos integrados del libro de recetas son todos del tipo `default`. Si uno o varios atributos integrados del libro de recetas también se definen en los atributos de configuración e implementación de la pila (normalmente, porque se han definido con un JSON personalizado), las definiciones de configuración de la pila prevalecen sobre las definiciones de libros de rectas integradas. Todos los demás atributos integrados del libro de recetas simplemente se incorporan en el objeto nodo.

1. Combine los atributos personalizados del libro de recetas de la instancia con el objeto nodo.

   Los atributos personalizados del libro de recetas suelen ser del tipo `normal` o `default`. Los atributos únicos se incorporan en el objeto nodo. Si los atributos personalizados del libro de recetas también se definen en los pasos 1 a 3 (por lo general, porque se definen con un JSON personalizado), la prioridad depende del tipo de atributo personalizado del libro de recetas:
   + Los atributos definidos en los pasos 1 a 3 prevalecen sobre los atributos `default` personalizados del libro de recetas.
   + Los atributos `normal` personalizados del libro de recetas prevalecen sobre las definiciones de los pasos 1 a 3. 

**importante**  
No utilice los atributos `default` personalizados del libro de recetas para anular los atributos de configuración de la pila o los atributos integrados del libro de recetas. Dado que los atributos personalizados del libro de recetas se evalúan los últimos, los atributos `default` tienen la prioridad más baja y no pueden anular nada.

# Anulación de atributos con un JSON personalizado
<a name="workingcookbook-json-override"></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).

**nota**  
Como OpsWorks Stacks gestiona Chef de forma diferente para las pilas de Windows que para las de Linux, no puede utilizar las técnicas que se describen en esta sección para las pilas de Windows.

La forma más sencilla de anular un atributo de OpsWorks Stacks es definirlo en un JSON personalizado, que tiene prioridad sobre los atributos de configuración y despliegue de la pila, así como sobre los atributos de los libros de cocina integrados y personalizados. `default` Para obtener más información, consulte [Prioridad de los atributos](workingcookbook-attributes-precedence.md).

**importante**  
Debe anular los atributos de configuración e implementación de la pila con cuidado. Por ejemplo, la anulación de atributos en el espacio de nombres `opsworks` puede interferir con las recetas integradas. Para obtener más información, consulte [Atributos de configuración e implementación de pilas](workingcookbook-json.md).

También puede utilizar un JSON personalizado para definir atributos únicos, normalmente para transferir datos a las recetas personalizadas. Los atributos se incorporan simplemente en el objeto nodo y las recetas pueden hacer referencia a ellos mediante la sintaxis de nodo de Chef estándar.

## Cómo especificar un JSON personalizado
<a name="workingcookbook-json-override-specify"></a>

Para utilizar un JSON personalizado para anular un valor de atributo, primero debe determinar el nombre completo del atributo. A continuación, debe crear un objeto JSON que contenga los atributos que desea anular y definir los valores deseados. Para su comodidad, los documentos [Atributos de configuración e implementación de pila: Linux](attributes-json-linux.md) y [Atributos integrados de los libros de recetas](attributes-recipes.md) normalmente utilizan los atributos de implementación y configuración de la pila y los atributos integrados del libro de recetas, incluidos sus nombres completos.

Las relaciones principal-secundario del objeto deben corresponder a los nodos de Chef completos adecuados. Por ejemplo, suponga que desea cambiar los siguientes atributos de Apache: 
+ El atributo [`keepalivetimeout`](attributes-recipes-apache.md#attributes-recipes-apache-keep-timeout), cuyo nodo es `node[:apache][:keepalivetimeout]`, y tiene un valor predeterminado de `3`
+ El atributo `logrotate` [`schedule`](attributes-recipes-apache.md#attributes-recipes-apache-log-schedule), cuyo nodo es `node[:apache][:logrotate][:schedule]`, y tiene un valor predeterminado de `"daily"`.

Para anular los atributos y definir los valores en `5` y `"weekly"`, respectivamente, debería utilizar el siguiente JSON personalizado:

```
{
  "apache" : {
    "keepalivetimeout" : 5,
    "logrotate" : {
       "schedule" : "weekly"
    }
  }
}
```

## Cuándo especificar un JSON personalizado
<a name="workingcookbook-json-override-when"></a>

Puede especificar una estructura JSON personalizada para las siguientes tareas:
+ [Crear una pila nueva](workingstacks-creating.md)
+ [Actualizar una pila](workingstacks-edit.md)
+ [Ejecutar un comando de pila](workingstacks-edit.md)
+ [Clonar una pila](workingstacks-cloning.md)
+ [Implementar una aplicación](workingapps-deploying.md)

Para cada tarea, OpsWorks Stacks fusiona los atributos JSON personalizados con los atributos de configuración y despliegue de la pila y los envía a las instancias para que se fusionen con el objeto de nodo. Sin embargo, tenga en cuenta lo siguiente:
+ Si especifica un JSON personalizado al crear, clonar o actualizar una pila, los atributos se fusionan en los atributos de configuración e implementación de la pila para todos los eventos del ciclo de vida y los comandos de pila.
+ Si especifica un JSON personalizado para una implementación, los atributos se fusionan en los atributos de configuración e implementación de la pila solo para el evento correspondiente.

  Si desea utilizar dichos atributos personalizados para las implementaciones posteriores, debe especificar de nuevo explícitamente el JSON personalizado.

Es importante recordar que los atributos solo afectan a la instancia cuando los utilizan recetas. Si anula un valor de atributo, pero ninguna de las recetas posteriores hace referencia al atributo, el cambio no tiene ningún efecto. Debe asegurarse de que el JSON personalizado se envía antes de ejecutar las recetas asociadas o garantizar que se vuelvan a ejecutar las recetas adecuadas. 

## Prácticas recomendadas para los JSON personalizados
<a name="workingcookbook-json-override-best"></a>

Puedes usar un JSON personalizado para anular cualquier atributo de OpsWorks Stacks, pero ingresar la información manualmente es algo engorroso y no está bajo ningún tipo de control de código fuente. El uso del JSON personalizado es más adecuado para los siguientes fines:
+ Si solo quiere anular un pequeño número de atributos y, además, no necesita utilizar libros de recetas personalizados

  Con un JSON personalizado puede evitar la sobrecarga de la configuración y el mantenimiento de un repositorio de libro de recetas simplemente para anular un par de atributos.
+ Para valores confidenciales, como contraseñas o claves de autenticación

  Los atributos del libro de recetas se almacenan en un repositorio, por lo que cualquier información confidencial está en riesgo. En cambio, puede definir atributos con valores ficticios y utilizar un JSON personalizado para definir valores reales.
+ Para valores que se espera que varíen

  Por ejemplo, una práctica recomendada consiste en hacer que su pila de producción sea compatible con pilas de desarrollo y de ensayo distintas. Supongamos que estas pilas admiten una aplicación que acepta pagos. Si utiliza un JSON personalizado para especificar el punto de enlace de pago, puede especificar una dirección URL de prueba para su pila de ensayo. Cuando esté listo para migrar una pila actualizada a la pila de producción, podrá utilizar los mismos libros de recetas y el JSON personalizado para definir el punto de enlace de pago a la dirección URL de producción.
+ Para valores específicos de un comando de pila o de implementación determinado

# Anular los atributos de OpsWorks Stacks mediante atributos de libros de cocina personalizados
<a name="workingcookbook-cookbook-attributes"></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).

**nota**  
En el caso de las pilas de Windows, OpsWorks Stacks utiliza versiones de Chef independientes para crear recetas integradas y personalizadas. Esto significa que no puede utilizar las técnicas explicadas en esta sección para anular atributos integrados para pilas de Windows.

El JSON personalizado es una forma cómoda de anular la configuración de la pila de OpsWorks Stacks y los atributos integrados en los libros de cocina, pero tiene algunas limitaciones. En particular, debe introducir el JSON personalizado manualmente para cada uso, por lo que no dispone de una forma sólida para administrar las definiciones. Un método mejor suele ser utilizar archivos de atributos personalizados del libro de recetas para anular los atributos integrados. Esto le permite que las definiciones estén bajo el control del código fuente.

El procedimiento para usar archivos de atributos personalizados para anular las definiciones de OpsWorks Stacks es sencillo.

**Para anular las definiciones de atributos de Stacks OpsWorks**

1. Configure un repositorio de libros de recetas, tal y como se describe en [Cookbooks and Recipes](workingcookbook.md).

1. Cree un libro de recetas con el mismo nombre que el libro de recetas integrado que contiene los atributos que desea anular. Por ejemplo, para anular los atributos de Apache, el libro de recetas debe llamarse apache2. 

1. Añada una carpeta `attributes` al libro de recetas y añada un archivo en dicha carpeta denominado `customize.rb`. 

1. Añada una definición de atributo al archivo para cada uno de los atributos del libro de recetas integrado que desea anular y defina el valor deseado. El atributo debe ser de un `normal` tipo o superior y tener exactamente el mismo nombre de nodo que el atributo de OpsWorks Stacks correspondiente. Para obtener una lista detallada de los atributos de OpsWorks Stacks, incluidos los nombres de los nodos, consulta [Atributos de configuración e implementación de pila: Linux](attributes-json-linux.md) y. [Atributos integrados de los libros de recetas](attributes-recipes.md) Para obtener más información sobre los atributos y los archivos de atributos, consulte [Acerca de los archivos de atributos](http://docs.chef.io/attributes.html).
**importante**  
Los atributos deben ser de `normal` tipo para anular los atributos de OpsWorks Stacks; los `default` tipos no tienen prioridad. Por ejemplo, si su archivo `customize.rb` contiene una definición de atributo `default[:apache][:keepalivetimeout] = 5`, el atributo correspondiente en el archivo de atributos `apache.rb` integrado se evalúa primero y prevalece. Para obtener más información, consulte [Anulación de atributos](workingcookbook-attributes.md).

1. Repita los pasos 2 a 4 para cada libro de recetas integrado con los atributos que desea anular.

1. Activa libros de cocina personalizados para tu pila y proporciona la información necesaria para que OpsWorks Stacks descargue tus libros de cocina en las instancias de la pila. Para obtener más información, consulte [Instalación de libros de recetas personalizados](workingcookbook-installingcustom-enable.md).

**nota**  
Para ver un tutorial completo de este procedimiento, consulte [Anulación de atributos integrados](cookbooks-101-opsworks-attributes.md).

El objeto de nodo utilizado en los eventos del ciclo de vida posteriores, los comandos de despliegue y los comandos de pila ahora contendrá tus definiciones de atributos en lugar de los OpsWorks valores de Stacks. 

Por ejemplo, para anular los valores integrados `keepalivetimeout` y `logrotate schedule` explicados en [Cómo especificar un JSON personalizado](workingcookbook-json-override.md#workingcookbook-json-override-specify), añada un libro de recetas `apache2` en su repositorio y un archivo `customize.rb` en la carpeta `attributes` del libro de recetas con el siguiente contenido.

```
normal[:apache][:keepalivetimeout] = 5
normal[:apache][:logrotate][:schedule] = 'weekly'
```

**importante**  
No debes anular los atributos de OpsWorks Stacks modificando una copia del archivo de atributos integrado asociado. Si, por ejemplo, copia `apache.rb` en la carpeta `apache2/attributes` y modifica algunos de sus valores, básicamente anulará cada atributo del archivo integrado. Las recetas utilizarán las definiciones de atributos de su copia y pasará por alto el archivo integrado. Si posteriormente OpsWorks Stacks modifica el archivo de atributos integrado, las recetas no obtendrán acceso a los cambios a menos que actualice manualmente la copia.   
Para evitar esta situación, todos los libros de recetas integrados incluyen un archivo de atributos `customize.rb` vacío, que debe estar en todos los módulos a través de una directiva `include_attribute`. La anulación de los atributos de la copia de `customize.rb` solo afecta a dichos atributos específicos. Las recetas obtendrán cualquier otro valor de atributo de los archivos de atributos integrados y recibirán automáticamente los valores actuales de cualquier atributo que no haya anulado.  
Este enfoque le ayuda a limitar el número de atributos en el repositorio de libros de recetas, lo que reduce los gastos de mantenimiento y facilita la gestión de las actualizaciones futuras.