Cómo ejecutar una receta en una instancia Linux AWS OpsWorks de Stacks - 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.

Cómo ejecutar una receta en una instancia Linux AWS OpsWorks de Stacks

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.

Test Kitchen y Vagrant proporcionan una forma sencilla y eficaz de implementar libros de cocina, pero para comprobar que las recetas de un libro de cocina funcionan correctamente en producción, debes ejecutarlas en una instancia de Stacks. AWS OpsWorks Este tema describe cómo instalar un libro de recetas personalizado en una instancia de Linux en AWS OpsWorks Stacks y cómo ejecutar una receta sencilla. También da algunas sugerencias sobre cómo solucionar los errores de las recetas de forma eficaz.

Para consultar una descripción de cómo ejecutar recetas en instancias de Windows, consulte Ejecución de una receta en una instancia de Windows.

Creación y ejecución de la receta

En primer lugar, tiene que crear una pila. A continuación, se resume brevemente cómo crear una pila para este ejemplo. Para obtener más información, consulte Crear una pila nueva.

Para crear una pila de
  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: OpsTest

    • 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 — OpsTest

    • Nombre abreviado: opstest

    En la práctica, cualquier tipo de capa funcionará con las pilas de Linux, pero el ejemplo no necesita ninguno de los paquetes que instalan que estos instalan, por lo que utilizar una capa personalizada es el enfoque más sencillo.

  4. Añada una instancia de funcionamiento ininterrumpido con la configuración predeterminada a la capa e iníciela.

Mientras la instancia se inicia, proceso que suele tardar varios minutos, puede crear el libro de recetas. Este ejemplo utilizará una versión ligeramente modificada de la receta de Lógica condicional, que crea un directorio cuyo nombre depende de la plataforma.

Para configurar el libro de recetas
  1. Cree un directorio dentro de opsworks_cookbooks llamado opstest y ábralo.

  2. Cree un archivo metadata.rb con el siguiente contenido y guárdelo en opstest.

    name "opstest" version "0.1.0"
  3. Cree un directorio recipes dentro de opstest.

  4. Cree un archivo default.rb con la siguiente receta y guárdelo en el directorio recipes.

    Chef::Log.info("******Creating a data directory.******") data_dir = value_for_platform( "centos" => { "default" => "/srv/www/shared" }, "ubuntu" => { "default" => "/srv/www/data" }, "default" => "/srv/www/config" ) directory data_dir do mode 0755 owner 'root' group 'root' recursive true action :create end

    Observe que la receta registra un mensaje, pero lo hace llamando a Chef::Log.info. No estás usando Test Kitchen para este ejemplo, por lo que el log método no es muy útil. Chef::Log.infocoloca el mensaje en el registro de Chef, que podrá leer una vez finalizada la ejecución de Chef. AWS OpsWorks Stacks proporciona una forma sencilla de ver estos registros, como se describe más adelante.

    nota

    Normalmente, los registros de Chef contienen una gran cantidad de rutinas e información relativamente poco interesantes. Para que sea más fácil de identificar, el texto del mensaje aparece delimitado por asteriscos (*).

  5. Cree un archivo .zip de opsworks_cookbooks. Para instalar tu libro de cocina en una instancia de AWS OpsWorks Stacks, debes almacenarlo en un repositorio y proporcionar a AWS OpsWorks Stacks la información necesaria para descargar el libro de cocina en la instancia. Puede almacenar los libros de recetas en cualquiera de los diferentes tipos de repositorio compatibles. En este ejemplo se guarda un fichero de archivo que contiene los libros de recetas en un bucket de Amazon S3. Para obtener más información sobre los repositorios de libros de recetas, consulte Repositorios de libros de recetas.

    nota

    Para simplificar, este ejemplo solo crea un archivo de almacenamiento del directorio opsworks_cookbooks completo. Sin embargo, significa que AWS OpsWorks Stacks descargará todos los libros de cocina en opsworks_cookbooks la instancia, aunque solo utilices uno de ellos. Para instalar solo el libro de recetas de ejemplo, cree otro directorio principal y mueva opstest ahí. A continuación, cree un archivo de almacenamiento .zip del directorio principal y utilícelo en lugar de opsworks_cookbooks.zip.

    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?.

  6. Cargue el archivo en un bucket de Amazon S3, publíquelo y anote la URL del archivo.

Ahora puede instalar el libro de recetas y ejecutar la receta.

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

    • Tipo de repositorio: S3 Archive

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

    No modifique los valores predeterminados del resto de opciones y haga clic en Save (Guardar) para actualizar la configuración de la pila.

  2. Ejecute el comando de pila Update Custom Cookbooks, que instala la versión actual de los libros de recetas personalizados en las instancias de la pila. Si existiera una versión anterior de los libros de recetas, este comando la sobrescribe.

  3. Para ejecutar la receta, basta con ejecutar el comando de pila Execute Recipes (Ejecutar recetas) con Recipes to execute (Recetas que ejecutar) configurado en opstest::default. Este comando inicia una ejecución de Chef con una lista de ejecución que es opstest::default.

Una vez que la receta se haya ejecutado correctamente, podrá verificarla.

Para verificar opstest
  1. El primer paso es revisar el registro de Chef. Haga clic en show (mostrar) en la columna Log (Registro) de la instancia opstest1 para ver el registro. Desplácese hacia abajo; el mensaje aparecerá casi al final del archivo.

    ... [2014-07-31T17:01:45+00:00] INFO: Storing updated cookbooks/opsworks_cleanup/attributes/customize.rb in the cache. [2014-07-31T17:01:45+00:00] INFO: Storing updated cookbooks/opsworks_cleanup/metadata.rb in the cache. [2014-07-31T17:01:46+00:00] INFO: ******Creating a data directory.****** [2014-07-31T17:01:46+00:00] INFO: Processing template[/etc/hosts] action create (opsworks_stack_state_sync::hosts line 3) ...
  2. Utilice SSH para iniciar sesión en la instancia y ver el contenido de /srv/www/.

Si ha seguido todos los pasos, en lugar del directorio /srv/www/config que estaba esperando, verá /srv/www/shared. La siguiente ofrece algunas directrices para solucionar estos errores rápidamente.

Ejecución automática de la receta

El comando Execute Recipes (Ejecutar recetas) permite probar las recetas personalizadas de una forma sencilla, por eso se utiliza en la mayoría de estos ejemplos. Sin embargo, en la práctica, normalmente ejecutas recetas en puntos estándar del ciclo de vida de una instancia, como cuando la instancia termina de arrancar o cuando despliegas una aplicación. AWS OpsWorks Stacks simplifica la ejecución de recetas en tu instancia, ya que admite un conjunto de eventos del ciclo de vida para cada capa: configurar, implementar, anular el despliegue y cerrar. Puedes hacer que AWS OpsWorks Stacks ejecute una receta automáticamente en las instancias de una capa asignando la receta al evento del ciclo de vida correspondiente.

Por norma general, deberá crear los directorios justo cuando la instancia termine de iniciarse, lo que se corresponde con el evento Setup. A continuación se muestra cómo ejecutar la receta de ejemplo durante la instalación utilizando la misma pila que creó anteriormente en el ejemplo. Puede seguir el mismo procedimiento en los demás eventos.

Para ejecutar automáticamente una receta durante la instalación
  1. Elige Capas en el panel de navegación y, a continuación, elige el icono del lápiz situado junto al enlace Recetas de la OpsTest capa.

  2. Añada opstest::default a las recetas Setup (Configuración) de la capa, haga clic en + para añadirla a la capa y, a continuación, elija Save (Guardar) para guardar la configuración.

  3. Elija Instances (Instancias), añada otra instancia a la capa e iníciela.

    La instancia debería llamarse opstest2. Cuando termine de arrancar, AWS OpsWorks Stacks se ejecutará. opstest::default

  4. Cuando la instancia opstest2 esté online, verifique que /srv/www/shared existe.

nota

Si ha asignado recetas a los eventos Setup, Configure o Deploy, también puede ejecutarlas manualmente desencadenando el evento con un comando de pila (Setup o Configure) o un comando de implementación (Deploy). Tenga en cuenta que si hay varias recetas asignadas a un evento, estos comandos se ejecutarán en todas.

Solución y corrección de recetas

Si no obtiene los resultados esperados, o las recetas no se ejecutan correctamente, la solución suele comenzar por analizar el registro de Chef. Este registro incluye una descripción detallada de la ejecución, además de cualquier mensaje que generen las recetas, y resultan particularmente útiles si la receta solo ha devuelto un error. Cuando esto sucede, Chef registra el error e incluye un seguimiento de la pila.

Si la receta se ha ejecutado correctamente, como ocurre en este ejemplo, con frecuencia el registro de Chef no resulta de mucha ayuda. En este caso, analizar la receta en profundidad, las primeras líneas en particular, puede ayudarle a determinar el problema:

Chef::Log.info("******Creating a data directory.******") data_dir = value_for_platform( "centos" => { "default" => "/srv/www/shared" }, "ubuntu" => { "default" => "/srv/www/data" }, "default" => "/srv/www/config" ) ...

CentOS también puede sustituir a Amazon Linux cuando prueba recetas en Vagrant, pero ahora las está ejecutando en una instancia de Amazon Linux real. El valor de la plataforma de Amazon Linux es amazon, que no está incluido en la llamada value_for_platform, por lo que la receta crea /srv/www/config de forma predeterminada. Para obtener más información sobre cómo solucionar problemas, consulte Guía de depuración y solución de problemas.

Ahora que ha identificado el problema, debe actualizar la receta y verificar la corrección. Podría volver a los archivos de origen originales, actualizar default.rb, cargar un nuevo archivo a Amazon S3, etc. Sin embargo, este proceso puede ser un poco tedioso y tardar mucho tiempo. A continuación, se muestra un enfoque mucho más rápido que resulta especialmente útil en el caso de errores de receta como el del ejemplo; hablamos de editar la receta en la instancia.

Para editar una receta en una instancia
  1. Utilice SSH para iniciar sesión en la instancia y, a continuación, ejecute sudo su para elevar sus privilegios. Necesita privilegios raíz para obtener acceso a los directorios de los libros de recetas.

  2. AWS OpsWorks Stacks guarda tu libro de cocina/opt/aws/opsworks/current/site-cookbooks, así que navega hasta. /opt/aws/opsworks/current/site-cookbooks/opstest/recipes

    nota

    AWS OpsWorks Stacks también guarda una copia de tus libros de cocina. /opt/aws/opsworks/current/merged-cookbooks No edite el libro de recetas. Cuando ejecutas la receta, AWS OpsWorks Stacks copia el libro de cocina de .../site-cookbooks a.../merged-cookbooks, por lo que cualquier cambio que realices en .../merged-cookbooks él se sobrescribirá.

  3. Utilice un editor de texto en la instancia para editar default.rb y sustituir centos por amazon. Ahora, la receta debería parecerse a lo siguiente.

    Chef::Log.info("******Creating a data directory.******") data_dir = value_for_platform( "amazon" => { "default" => "/srv/www/shared" }, "ubuntu" => { "default" => "/srv/www/data" }, "default" => "/srv/www/config" ) ...

Para verificar la corrección, vuelva a ejecutar el comando de pila Execute Recipe (Ejecutar receta) para ejecutar la receta. Ahora, la instancia debería tener un directorio /srv/www/shared. Si necesita hacer más cambios en una receta, puede ejecutar Execute Recipe (Ejecutar receta) con la frecuencia que desee; no necesita detener y reiniciar la instancia cada vez que ejecute el comando. Cuando haya comprobado que la receta funciona correctamente, no olvide actualizar el código en el libro de recetas de origen.

nota

Si has asignado tu receta a un evento del ciclo de vida para que AWS OpsWorks Stacks la ejecute automáticamente, siempre puedes usar Execute Recipe para volver a ejecutar la receta. También puedes volver a ejecutar la receta tantas veces como quieras sin reiniciar la instancia. Para ello, utiliza la consola de AWS OpsWorks Stacks para activar manualmente el evento correspondiente. Pero tenga en cuenta que este enfoque ejecuta todas las recetas del evento. Esto es un recordatorio: