Uso de un libro de recetas externo en una instancia de Linux: Berkshelf - 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.

Uso de un libro de recetas externo en una instancia de Linux: Berkshelf

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

nota

Berkshelf solo está disponible para pilas de Linux en Chef 11.10.

Antes de empezar a implementar un libro de recetas, consulte Chef Community Cookbooks, que contiene los libros de recetas que han creado miembros de la comunidad de Chef con una amplia variedad de fines. Muchos de estos libros de cocina se pueden usar con AWS OpsWorks Stacks sin necesidad de modificarlos, así que quizá puedas aprovecharlos para algunas de tus tareas en lugar de implementar todo el código tú mismo.

Para utilizar un libro de recetas externo en una instancia, necesita una forma de instalarlo y administrar cualquier dependencia. El enfoque preferido es implementar un libro de recetas compatible con un administrador de dependencias llamado Berkshelf. Berkshelf funciona en instancias Amazon EC2, AWS OpsWorks incluidas las instancias de Stacks, pero también está diseñado para funcionar con Test Kitchen y Vagrant. Sin embargo, el uso en Vagrant es un poco diferente al de AWS OpsWorks Stacks, por lo que en este tema se incluyen ejemplos para ambas plataformas. Para obtener más información sobre cómo utilizar Berkshelf, consulte Berkshelf.

Uso de Berkshelf en Test Kitchen y Vagrant

Este ejemplo muestra cómo utilizar Berkshelf para instalar el libro de recetas getting-started de la comunidad y ejecutar la receta, que instala un breve archivo de texto en el directorio de inicio de la instancia.

Para instalar Berkshelf e inicializar un libro de recetas
  1. En la estación de trabajo, instale la gema Berkshelf tal y como se indica a continuación.

    gem install berkshelf

    En función de la estación de trabajo, este comando puede necesitar sudo, o puede utilizar un administrador de entornos de Ruby, como RVM. Para verificar que Berkshelf se ha instalado correctamente, ejecute berks --version.

  2. El libro de recetas que se utiliza en este tema se llama external_cookbook. Puede utilizar Berkshelf para crear un libro de recetas inicializado en lugar del enfoque manual que se ha seguido en temas anteriores. Para ello, abra al directorio opsworks_cookbooks y ejecute el siguiente comando.

    berks cookbook external_cookbook

    El comando crea el directorio external_cookbook y varios subdirectorios estándar de Chef y Test Kitchen, incluidos recipes y test. El comando también crea versiones predeterminadas de un número de archivos estándar, incluidos los siguientes:

    • metadata.rb

    • Archivos de configuración de Vagrant, Test Kitchen y Berkshelf

    • Una receta default.rb vacía en el directorio recipes

    nota

    No necesita ejecutar kitchen init; el comando berks cookbook se encarga de estas tareas.

  3. Ejecute kitchen converge. El libro de recetas que acaba de crear no tiene nada de interesante en este momento, pero coincide.

nota

También puede utilizar berks init para inicializar un libro de recetas existente y utilizar Berkshelf.

Si desea utilizar Berkshelf para administrar las dependencias externas de un libro de recetas, el directorio raíz del libro de recetas debe contener Berksfile, un archivo de configuración que especifica cómo Berkshelf debería administrar las dependencias. Cuando utilizó berks cookbook para crear el libro de recetas external_cookbook, se creó un Berksfile con el siguiente contenido.

source "https://supermarket.chef.io" metadata

Este archivo tiene las siguientes declaraciones:

  • source: la dirección URL del origen de un libro de recetas

    Un Berksfile puede contener cualquier número de declaraciones source, cada una de las cuales especifica un origen predeterminado de los libros de recetas dependientes. Si no especifica el origen de un libro de recetas de forma explícita, Berkshelf busca en los repositorios predeterminados un libro de recetas con el mismo nombre. El Berksfile predeterminado incluye un único atributo source que especifica repositorio de libros de recetas de la comunidad. Ese repositorio contiene el libro de recetas getting-started, por lo que no es necesario modificar la línea.

  • metadata: solicita a Berkshelf que incluya las dependencias del libro de recetas definidas en el archivo metadata.rb del libro de recetas.

    Tal y como se explica más adelante, puede incluir un atributo cookbook en el Berksfile para definir un libro de recetas dependiente.

Hay dos formas de definir la dependencia de un libro de recetas:

  • Incluir una declaración cookbook en el Berksfile.

    Este es el enfoque utilizado por Stacks. AWS OpsWorks Por ejemplo, para especificar el libro de recetas getting-started que se utiliza en este ejemplo, incluya cookbook "getting-started" en el Berksfile. A continuación, Berkshelf buscará en los repositorios predeterminados un libro de recetas con ese nombre. También puede utilizar cookbook para especificar de forma explícita el origen de un libro de recetas, e incluso una determinada versión. Para obtener más información, consulte Berkshelf.

  • Incluir una declaración metadata en el Berksfile y definir la dependencia en metadata.rb.

    Esta declaración solicita a Berkshelf que incluya las dependencias del libro de recetas definidas en metadata.rb. Por ejemplo, para definir una dependencia getting-started, añada una declaración depends 'getting-started' al archivo metadata.rb del libro de recetas.

En este ejemplo, se utiliza el primer enfoque, para mantener la coherencia con AWS OpsWorks Stacks.

Para instalar el libro de recetas getting-started
  1. Edite el valor predeterminado de Berksfile para sustituir la declaración metadata por una declaración cookbook para getting-started. El contenido debe ser similar al siguiente.

    source "https://supermarket.chef.io" cookbook 'getting-started'
  2. Ejecute berks install, que descarga el libro de recetas getting-started del repositorio de libros de recetas de la comunidad en el directorio de Berkshelf de la estación de trabajo, que suele ser ~/.berkshelf. Por lo general, el nombre de este directorio es Berkshelf. Examine el directorio cookbooks de Berkshelf. Debería ver el directorio del libro de recetas , con un nombre parecido a getting-started-0.4.0getting-started-.

  3. Sustituya external_cookbook::default en la lista de ejecución .kitchen.yml por getting-started::default. Este ejemplo no ejecuta las recetas de external_cookbook; se trata, básicamente, de una forma de utilizar el libro de recetas getting-started. El archivo .kitchen.yml debe ser ahora similar a lo siguiente.

    --- driver: name: vagrant provisioner: name: chef_solo platforms: - name: ubuntu-12.04 suites: - name: default run_list: - recipe[getting-started::default] attributes:
  4. Ejecute kitchen converge y, a continuación, utilice kitchen login para iniciar sesión en la instancia. El directorio de inicio de sesión debería contener un archivo llamado chef-getting-started.txt con algo parecido a lo siguiente:

    Welcome to Chef! This is Chef version 11.12.8. Running on ubuntu. Version 12.04.

    Test Kitchen instala los libros de recetas en el directorio /tmp/kitchen/cookbooks de la instancia. Si examina el contenido de ese directorio, verá dos libros de recetas: external_cookbook y getting-started.

  5. Ejecute kitchen destroy para apagar la instancia. El siguiente ejemplo usa una instancia de AWS OpsWorks Stacks.

Uso de Berkshelf con Stacks AWS OpsWorks

AWS OpsWorks Stacks admite opcionalmente las pilas Berkshelf for Chef 11.10. Para utilizar Berkshelf con la pila, debe hacer lo siguiente.

  • Habilite Berkshelf en la pila.

    AWS OpsWorks Luego, Stacks se encarga de los detalles de la instalación de Berkshelf en las instancias de la pila.

  • Añada un Berksfile al directorio raíz del repositorio de libros de recetas.

    El Berksfile debe contener las declaraciones source y cookbook de todos los libros de recetas dependientes.

Cuando AWS OpsWorks Stacks instala tu repositorio de libros de cocina personalizado en una instancia, usa Berkshelf para instalar los libros de cocina dependientes que se declaran en el Berksfile del repositorio. Para obtener más información, consulte Uso de Berkshelf.

En este ejemplo, se muestra cómo usar Berkshelf para instalar el libro de cocina comunitario de introducción en una instancia de Stacks. AWS OpsWorks También instala una versión del libro de recetas personalizado createfile, que crea un archivo en un directorio específico. Para obtener más información sobre cómo funciona createfile, consulte Instalación de un archivo a partir de un libro de recetas.

nota

Si es la primera vez que instalas un libro de cocina personalizado en una pila de AWS OpsWorks Stacks, primero debes seguir el ejemplo. Ejecución de una receta en una instancia de Linux

Comience por crear una pila tal y como se resume a continuación. Para obtener más información, consulte Crear una pila nueva.

Creación de una pila
  1. Abra la consola de AWS OpsWorks Stacks y haga clic en Add Stack (Añadir pila).

  2. Especifique las siguientes opciones de configuración, acepte los valores predeterminados del resto y, a continuación, haga clic en Add Stack (Añadir pila).

    • Nombre — BerksTest

    • Clave SSH predeterminada: un par de claves de Amazon EC2

    Si necesita crear un par de claves de Amazon EC2, consulte Pares de claves de Amazon EC2. Tenga en cuenta que el par de claves debe pertenecer a la misma región de AWS que la instancia. El ejemplo utiliza la región predeterminada Oeste de EE. UU. (Oregón).

  3. Haga clic en Add a layer (Añadir una capa) y añada una capa personalizada a la pila con las siguientes opciones de configuración.

    • Nombre — BerksTest

    • Nombre abreviado: berkstest

    Podría utilizar cualquier tipo de capa en este ejemplo. Sin embargo, el ejemplo no necesita ninguno de los paquetes que instalan el resto de capas, por lo que una capa personalizada es el enfoque más sencillo.

  4. Añada una instancia ininterrumpida a la BerksTest capa con los ajustes predeterminados, pero no la inicie todavía.

Con AWS OpsWorks Stacks, los libros de cocina deben estar en un repositorio remoto con una estructura de directorios estándar. Luego, proporcionas la información de descarga a AWS OpsWorks Stacks, que descarga automáticamente el repositorio en cada una de las instancias de la pila al iniciarse. Para simplificar, el repositorio de este ejemplo es un archivo público de Amazon S3, pero AWS OpsWorks Stacks también admite archivos HTTP, repositorios de Git y repositorios de Subversion. Para obtener más información, consulte Repositorios de libros de recetas.

El contenido entregado a los buckets de Amazon S3 puede contener contenido del cliente. Para obtener más información sobre la eliminación de información confidencial, consulte ¿Cómo puedo vaciar un bucket de S3? o ¿Cómo elimino un bucket de S3?.

Para crear el repositorio de libros de recetas
  1. En el directorio opsworks_cookbooks, cree un directorio llamado berkstest_cookbooks. Si lo prefiere, como a continuación lo va a cargar en un repositorio, puede crear este directorio donde crea conveniente.

  2. Añada un archivo llamado Berksfile a berkstest_cookbooks con el siguiente contenido.

    source "https://supermarket.chef.io" cookbook 'getting-started'

    Este archivo define la dependencia del libro de recetas getting-started e indica a Berkshelf que lo descargue del sitio de libros de recetas de la comunidad.

  3. Añada un directorio createfile a berkstest_cookbooks que contenga lo siguiente.

    • Un archivo metadata.rb con el siguiente contenido.

      name "createfile" version "0.1.0"
    • Un directorio files/default que contenga un archivo example_data.json con el siguiente contenido.

      { "my_name" : "myname", "your_name" : "yourname", "a_number" : 42, "a_boolean" : true }

      El nombre del archivo y el contenido son arbitrarios. La receta se limita a copiar el archivo en la ubicación especificada.

    • Un directorio recipes que contenga un archivo default.rb con el siguiente código de receta.

      directory "/srv/www/shared" do mode 0755 owner 'root' group 'root' recursive true action :create end cookbook_file "/srv/www/shared/example_data.json" do source "example_data.json" mode 0644 action :create_if_missing end

      Esta receta crea /srv/www/shared y copia example_data.json en ese directorio del directorio files del libro de recetas.

  4. Cree un archivo .zip de berkstest_cookbooks, cárguelo en un bucket de Amazon S3, publíquelo y anote la URL del archivo.

Ahora puede instalar los libros de recetas y ejecutar la receta.

Para instalar los libros de recetas y ejecutar las recetas
  1. Edite la pila para habilitar los libros de recetas personalizados y especifique las siguientes opciones de configuración.

    • Tipo de repositorio: Archivo HTTP

    • URL de repositorio: la URL del archivo del libro de recetas que anotó previamente.

    • Administrar Berkshelf:

    Las dos primeras configuraciones proporcionan a AWS OpsWorks Stacks la información que necesita para descargar el repositorio de libros de cocina en tus instancias. La última habilita la compatibilidad con Berkshelf, que descarga el libro de recetas getting-started en la instancia. Acepte los valores predeterminados del resto de opciones y haga clic en Save (Guardar) para actualizar la configuración de la pila.

  2. Edita la BerksTest capa para añadir las siguientes recetas al evento del ciclo de vida de configuración de la capa.

    • getting-started::default

    • createfile::default

  3. Inicie la instancia. El evento de configuración se produce cuando la instancia termina de arrancar. AWS OpsWorks Luego, Stacks instala el repositorio de libros de cocina, usa Berkshelf para descargar el libro de cocina de introducción y ejecuta la configuración de la capa e implementa recetas, incluidas y. getting-started::default createfile::default

  4. Cuando la instancia esté online, utilice SSH para iniciar sesión. Debería ver lo siguiente:

    • /srv/www/shared debería contener example_data.json.

    • /root debería contener chef-getting-started.txt.

      AWS OpsWorks Stacks ejecuta recipes como usuario root, por lo que, al empezar, se instala el archivo en el directorio y no en el directorio principal. /root