Implementación de recetas para pilas de Chef 11.10 - AWS OpsWorks

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.

Implementación de recetas para pilas de Chef 11.10

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 o a través de Premium AWS Support.

Las pilas de Chef 11.10 ofrecen las siguientes ventajas con respecto a las pilas de Chef 11.4:

  • Las ejecuciones de Chef usan Ruby 2.0.0; por lo tanto, las recetas pueden usar la nueva sintaxis de Ruby.

  • Y también la búsqueda y las bolsas de datos de Chef.

    Las pilas de Chef 11.10 pueden usar muchos libros de recetas de la comunidad sin modificaciones.

  • Puede utilizar Berkshelf para administrar los libros de recetas.

    Berkshelf ofrece una forma mucho más flexible de administrar los libros de recetas personalizados y usar los libros de la comunidad en una pila.

  • Los libros de recetas deben declarar las dependencias en metadata.rb.

    Si su libro de recetas depende de otro, deberá incluir la dependencia en el archivo metadata.rb de su libro de recetas. Por ejemplo, si su libro de recetas incluye una receta con una instrucción del tipo include_recipe anothercookbook::somerecipe, el archivo metadata.rb de su libro de recetas debe incluir la línea siguiente: depends "anothercookbook".

  • AWS OpsWorks Stacks instala un cliente MySQL en las instancias de una pila solo si la pila incluye una capa MySQL.

  • AWS OpsWorks Stacks instala un cliente de Ganglia en las instancias de una pila solo si la pila incluye una capa de Ganglia.

  • Si una implementación ejecuta bundle install y la instalación da error, la implementación también da error.

importante

No reutilice los nombres de los libros de recetas integrados con libros personalizados o de la comunidad. Los libros de recetas personalizados que tienen el mismo nombre que los libros integrados podrían dar error. Para ver una lista completa de los libros de cocina integrados que están disponibles con las versiones Chef 11.10, 11.4 y 0.9, consulta el repositorio opsworks-cookbooks en. GitHub

Los libros de recetas con caracteres que no sean ASCII y que se ejecutan satisfactoriamente en pilas de Chef 0.9 y 11.4 podrían dar error en una pila de Chef 11.10. El motivo es que las pilas de Chef 11.10 utilizan Ruby 2.0.0 para las ejecuciones de Chef, lo que tiene unos requisitos de codificación mucho mayores que los de Ruby 1.8.7. Para garantizar que dichos libros de recetas se ejecuten correctamente en las pilas de Chef 11.10, cada archivo que utilice caracteres que no sean ASCII debería tener un comentario en la parte superior que ofrezca información sobre la codificación. Por ejemplo, en el caso de la codificación UTF-8, el comentario sería # encoding: UTF-8. Para obtener más información sobre la codificación de Ruby 2.0.0, consulte Codificación.

Instalación y prioridad de los libros de recetas

El procedimiento para instalar los libros de cocina de AWS OpsWorks Stacks funciona de forma algo diferente en las pilas de Chef 11.10 que en las versiones anteriores de Chef. En el caso de las pilas Chef 11.10, una vez que AWS OpsWorks Stacks instala los libros de cocina integrados, personalizados y de Berkshelf, los fusiona en un directorio común en el siguiente orden:

  1. Libros de recetas integrados.

  2. Libros de recetas de Berkshelf, si los hay.

  3. Libros de recetas personalizados, si los hay.

Cuando AWS OpsWorks Stacks realiza esta combinación, copia todo el contenido de los directorios, incluidas las recetas. Si hay duplicados, se aplican las reglas siguientes:

  • El contenido de los libros de recetas de Berkshelf prevalece sobre los libros de recetas integrados.

  • El contenido de los libros de recetas personalizados prevalece sobre los libros de recetas de Berkshelf.

Para ilustrar este proceso, considere la siguiente situación, donde los tres directorios incluyen un libro de recetas llamado mycookbook:

  • Libros de recetas integrados: mycookbook incluye un archivo de atributos llamado someattributes.rb, un archivo de plantilla llamado sometemplate.erb y una receta llamada somerecipe.rb.

  • Libros de recetas de Berkshelf: mycookbook incluye y sometemplate.erb y somerecipe.rb.

  • Libros de recetas personalizados: mycookbook incluye somerecipe.rb.

El libro de recetas fusionado contiene lo siguiente:

  • someattributes.rb del libro de recetas integrado.

  • sometemplate.erb del libro de recetas de Berkshelf.

  • somerecipe.rb del libro de recetas personalizado.

importante

No debe personalizar la pila de Chef 11.10 copiando todo un libro de recetas integrado en el repositorio y después modificando una parte. Si lo hace de esta forma, se anula todo el libro integrado y las recetas. Si AWS OpsWorks Stacks actualiza ese libro de cocina, tu stack no se beneficiará de esas actualizaciones a menos que actualices manualmente tu copia privada. Para obtener más información sobre cómo personalizar las pilas, consulte Personalización AWS OpsWorks de Stacks.

Puede utilizar el método search de Chef en las recetas para hacer consultas de datos de la pila. Usas la misma sintaxis que usarías para el servidor Chef, pero AWS OpsWorks Stacks obtiene los datos del objeto del nodo local en lugar de consultarlos en un servidor Chef. Estos datos incluyen:

Los atributos de configuración e implementación de la pila contienen la mayor parte de la información que las recetas suelen obtener mediante la búsqueda, incluidos datos como los nombres de host y las direcciones IP de cada instancia en línea de la pila. AWS OpsWorks Stacks actualiza estos atributos para cada evento del ciclo de vida, lo que garantiza que reflejen con precisión el estado actual de la pila. Esto se traduce en que podrá utilizar con frecuencia recetas de la comunidad dependientes de búsqueda en su pila sin modificaciones. El método de búsqueda seguirá devolviendo los datos adecuados, solo que procederán de los atributos de configuración e implementación de la pila, en lugar de un servidor.

La principal limitación de la búsqueda de AWS OpsWorks Stacks es que solo gestiona los datos del objeto del nodo local, en particular los atributos de configuración y despliegue de la pila. Por este motivo, los siguientes tipos de datos podrían no estar disponibles en la búsqueda:

  • Atributos definidos localmente en otras instancias.

    Si una receta define un atributo de forma local, esa información no se envía al servicio AWS OpsWorks Stacks, por lo que no puedes acceder a esos datos desde otras instancias mediante la búsqueda.

  • Atributos deploy personalizados.

    Puede especificar JSON personalizado cuando implementa una aplicación y los atributos correspondientes se instalan en las instancias de la pila para dicha implementación. Sin embargo, si implementa únicamente en instancias seleccionadas, los atributos solo se instalarán en tales instancias. Las consultas de esos atributos JSON personalizados darán error en todas las demás instancias. Además, los atributos personalizados se incluyen en el JSON de configuración e implementación de la pila solo para esa implementación específica. Se podrá obtener acceso a ellos solo hasta que el siguiente evento del ciclo de vida instale un nuevo conjunto de atributos de configuración e implementación de la pila. Tenga en cuenta que si especifica JSON personalizado para la pila, los atributos se instalarán en todas las instancias con cada evento del ciclo de vida, y siempre se podrá obtener acceso a ellos a través de la búsqueda.

  • Datos de Ohai de otras instancias.

    La herramienta Ohai de Chef obtiene varios datos del sistema en una instancia y los añade al objeto de nodo. Estos datos se almacenan localmente y no se devuelven al servicio de búsqueda AWS OpsWorks Stacks, por lo que no puede obtener acceso a ellos desde otras instancias. No obstante, algunos de estos datos podrían incluirse en los atributos de configuración e implementación de la pila.

  • Instancias sin conexión.

    Los atributos de configuración e implementación de la pila contienen únicamente datos para las instancias online.

En el siguiente extracto de una receta se muestra cómo obtener la dirección IP privada de una instancia de una capa PHP utilizando la búsqueda.

appserver = search(:node, "role:php-app").first Chef::Log.info("The private IP is '#{appserver[:private_ip]}'")
nota

Cuando AWS OpsWorks Stacks añade los atributos de configuración y despliegue de la pila al objeto de nodo, en realidad crea dos conjuntos de atributos de capa, cada uno con los mismos datos. Un conjunto está en el espacio de layers nombres, que es la forma en que AWS OpsWorks Stacks almacena los datos. El otro conjunto está en el espacio de nombres role, que es el modo en que el servidor de Chef almacena los datos equivalentes. El propósito del espacio de role nombres es permitir que el código de búsqueda que se implementó para el servidor Chef se ejecute en una instancia de Stacks. AWS OpsWorks Si estás escribiendo código específicamente para AWS OpsWorks Stacks, puedes usar uno de los ejemplos anteriores layers:php-app o role:php-app el ejemplo anterior y obtendrás el mismo search resultado.

Uso de las bolsas de datos

Puede utilizar el método data_bag_item de Chef en las recetas para consultar la información en un contenedor de datos. Si bien se utiliza la misma sintaxis que usaría para el servidor de Chef, AWS OpsWorks Stacks obtendrá los datos de los atributos de configuración e implementación de pila de la instancia. Sin embargo, AWS OpsWorks Stacks no es compatible actualmente con los entornos de Chef, por lo que node.chef_environment siempre regresa. _default

Las bolsas de datos se crean usando JSON personalizado para agregar uno o varios atributos al atributo [:opsworks][:data_bags]. En el siguiente ejemplo se muestra el formato general para crear una bolsa de datos en JSON personalizado.

nota

No puede crear una bolsa de datos añadiéndola al repositorio del libro de recetas. Debe utilizar JSON personalizado.

{ "opsworks": { "data_bags": { "bag_name1": { "item_name1: { "key1" : “value1”, "key2" : “value2”, ... } }, "bag_name2": { "item_name1": { "key1" : “value1”, "key2" : “value2”, ... } }, ... } } }

Por lo general, usted especifica JSON personalizado para la pila, el cual instalará los atributos personalizados en todas las instancias con cada evento del ciclo de vida subsecuente. También puede especificar JSON personalizado cuando implementa una aplicación, pero esos atributos se instalan solo para dicha implementación y solo en un conjunto de instancias seleccionado. Para obtener más información, consulte Implementación de aplicaciones.

En el siguiente ejemplo de JSON personalizado se crea una bolsa de datos llamada myapp. Tiene un elemento, mysql, con dos pares clave-valor.

{ "opsworks": { "data_bags": { "myapp": { "mysql": { "username": "default-user", "password": "default-pass" } } } } }

Para utilizar los datos en la receta, puede llamar a data_bag_item y pasarle los nombres de la bolsa de datos y de los valores, tal y como se muestra en el siguiente fragmento.

mything = data_bag_item("myapp", "mysql") Chef::Log.info("The username is '#{mything['username']}' ")

Para modificar los datos de la bolsa de datos, solo tiene que modificar el JSON personalizado, que se instalará en las instancias de la pila con el siguiente evento del ciclo de vida.

Uso de Berkshelf

Con pilas de Chef 0.9 y Chef 11.4, solo se puede instalar un repositorio de libro de recetas personalizado. Con pilas de Chef 11.10 , puede utilizar Berkshelf para administrar los libros de recetas y sus dependencias, lo que le permite instalar libros de recetas de varios repositorios. (Para obtener más información, consulte Empaquetado local de las dependencias del libro de recetas). En concreto, con Berkshelf, puedes instalar libros de cocina comunitarios AWS OpsWorks compatibles con Stacks directamente desde sus repositorios en lugar de tener que copiarlos a tu repositorio de libros de cocina personalizado. Las versiones compatibles de Berkshelf dependen del sistema operativo. Para obtener más información, consulte AWS OpsWorks Sistemas operativos Stacks.

Para utilizar Berkshelf, debe habilitarlo de forma explícita, como se describe en Instalación de libros de recetas personalizados. Después, incluya un archivo Berksfile en el directorio raíz del repositorio del libro de recetas donde especifique qué libros de recetas instalar.

Para especificar un libro de recetas externo en un archivo Berksfile, incluya un atributo de origen en la parte superior del archivo que especifique la URL del repositorio predeterminado. Berkshelf buscará libros de recetas en las URL de origen, a menos que especifique de forma explícita un repositorio. Después, incluya una línea por cada libro de recetas que desea instalar con el siguiente formato:

cookbook 'cookbook_name', ['>= cookbook_version'], [cookbook_options]

Los campos siguientes cookbook especifican el libro de recetas en particular.

  • cookbook_name: (obligatorio) especifica el nombre del libro de recetas.

    Si no incluye otros campos, Berkshelf instala el libro de recetas desde la URL de origen especificada.

  • cookbook_version: (opcional) especifica la versión o versiones del libro de recetas.

    Puede utilizar un prefijo como = o >= para especificar una versión determinada o un intervalo de versiones aceptables. Si no especifica ninguna versión, Berkshelf instala la última.

  • cookbook_options: (opcional) el campo final es un hash que contiene uno o varios pares clave-valor que especifican opciones como la ubicación del repositorio.

    Por ejemplo, puede incluir una clave git para designar un repositorio determinado de Git y una clave tag para designar una ramificación concreta del repositorio. Especificar la ramificación del repositorio suele ser la mejor forma de garantizar que instala su libro de recetas preferido.

importante

No declare los libros de recetas incluyendo una línea metadata en el archivo Berksfile y declarando las dependencias de los libros en metadata.rb. Para que esto funcione correctamente, ambos archivos deben estar en el mismo directorio. Con AWS OpsWorks Stacks, el Berksfile debe estar en el directorio raíz del repositorio, pero los archivos deben estar en sus respectivos directorios de libros de cocina. metadata.rb En lugar de esto, debería declarar explícitamente los libros de recetas externos en el archivo Berksfile.

A continuación se incluye un ejemplo de un archivo Berksfile que muestra diferentes maneras de especificar los libros de recetas. Para obtener más información acerca de cómo crear un archivo Berksfile, consulte Berkshelf.

source "https://supermarket.chef.io" cookbook 'apt' cookbook 'bluepill', '>= 2.3.1' cookbook 'ark', git: 'git://github.com/opscode-cookbooks/ark.git' cookbook 'build-essential', '>= 1.4.2', git: 'git://github.com/opscode-cookbooks/build-essential.git', tag: 'v1.4.2'

Este archivo instala los siguientes libros de recetas:

  • La versión más reciente de apt desde el repositorio de libros de recetas de la comunidad.

  • La versión más reciente de bluepill desde los libros de recetas de la comunidad, siempre que sea la versión 2.3.1 o posterior.

  • La versión más reciente de ark desde un repositorio especificado.

    La URL de este ejemplo corresponde a un repositorio de libros de cocina de una comunidad pública GitHub, pero puedes instalar libros de cocina de otros repositorios, incluidos los privados. Para obtener más información, consulte Berkshelf.

  • El libro de recetas build-essential de la ramificación v1.4.2 del repositorio especificado.

Un repositorio de libros de recetas personalizados puede contener libros de recetas personalizados además de un archivo Berksfile. En ese caso, AWS OpsWorks Stacks instala ambos conjuntos de libros de cocina, lo que significa que una instancia puede tener hasta tres repositorios de libros de cocina.

  • Los libros de recetas integrados se instalan en /opt/aws/opsworks/current/cookbooks.

  • Si en su repositorio de libros de recetas personalizados hay alguno, se instalará en /opt/aws/opsworks/current/site-cookbooks.

  • Si ha habilitado Berkshelf y el repositorio de libros de recetas personalizados contiene un archivo Berksfile, los libros especificados se instalarán en /opt/aws/opsworks/current/berkshelf-cookbooks.

Los libros de cocina integrados y los libros de cocina personalizados se instalan en cada instancia durante la configuración y no se actualizan posteriormente a menos que ejecutes manualmente el comando Update Custom Cookbooks stack. AWS OpsWorks Stacks se ejecuta cada vez que ejecuta Chef, berks install por lo que tus libros de cocina de Berkshelf se actualizan para cada evento del ciclo de vida, de acuerdo con las siguientes reglas:

  • Si tiene una nueva versión del libro de recetas en el repositorio, esta operación actualiza el libro de recetas desde el repositorio.

  • De lo contrario, esta operación actualiza los libros de recetas de Berkshelf desde una caché local.

nota

La operación sobrescribe los libros de recetas de Berkshelf, de manera que si se ha modificado las copias locales de algún libro, se sobrescribirán dichos cambios. Para obtener más información, consulte Berkshelf.

También puede actualizar los libros de recetas de Berkshelf ejecutando el comando de pila Update Custom Cookbooks, que actualiza tanto los libros de Berkshelf como los personalizados.