Una breve digresión: libros de cocina, recetas y atributos de Stacks AWS OpsWorks - 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.

Una breve digresión: libros de cocina, recetas y atributos de Stacks AWS OpsWorks

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.

Ahora tiene servidores de aplicaciones y de bases de datos, pero no están totalmente preparados para usarlos. Aún tienes que configurar la base de datos y los ajustes de conexión de la aplicación. AWS OpsWorks Stacks no gestiona estas tareas automáticamente, pero sí admite libros de cocina, recetas y atributos dinámicos de Chef. Puedes implementar un par de recetas, una para configurar la base de datos y otra para configurar los ajustes de conexión de la aplicación, y hacer que AWS OpsWorks Stacks las ejecute por ti.

El libro de recetas phpapp, que contiene las recetas necesarias, ya está implementado y listo para su uso; puede pasar a Paso 3.3: Agregue los libros de cocina personalizados a MyStack si lo prefiere. Si desea profundizar en estos aspectos, en esta sección se proporciona información de referencia sobre los libros de recetas y las recetas, así como se describe cómo funcionan. Para ver el libro de recetas, vaya al libro de recetas phpapp.

Recetas y atributos

Una receta de Chef es básicamente una aplicación Ruby especializada que realiza tareas en una instancia, como instalar paquetes, crear archivos de configuración, ejecutar comandos de shell, etcétera. Los grupos de recetas relacionadas se organizan en libros de recetas, que también contienen archivos de apoyo, como son las plantillas para crear archivos de configuración.

AWS OpsWorks Stacks tiene un conjunto de libros de cocina que admiten las capas integradas. También puede crear libros de recetas personalizados con sus propias recetas para llevar a cabo tareas personalizadas en las instancias. En este tema se ofrece una breve introducción a las recetas y se muestra cómo utilizarlas para configurar la base de datos, así como la conexión de la aplicación. Para obtener más información acerca de los libros de recetas y las recetas, consulte Cookbooks and Recipes o Personalización AWS OpsWorks de Stacks.

Las recetas suelen depender de los atributos de Chef para los datos de entrada:

  • Algunos de estos atributos los define Chef y proporcionan información básica sobre la instancia, como, por ejemplo, el sistema operativo.

  • AWS OpsWorks Stacks define un conjunto de atributos que contienen información sobre la pila (por ejemplo, las configuraciones de las capas) y sobre las aplicaciones implementadas (como el repositorio de aplicaciones).

    Puede añadir atributos personalizados a este conjunto asignando JSON personalizado a la pila o a la implementación.

  • En los libros de recetas también se pueden definir atributos específicos del libro.

    Los atributos del libro de recetas phpapp se definen en attributes/default.rb.

Para obtener una lista completa de los atributos de Stacks, consulta y. AWS OpsWorks Atributos de configuración e implementación de pila: Linux Atributos integrados de los libros de recetas Para obtener más información, consulte Anulación de atributos.

Los atributos se organizan en una estructura jerárquica que se puede representar como un objeto JSON.

Estos datos se incorporan en la aplicación con la sintaxis de nodos de Chef, así:

[:deploy][:simplephpapp][:database][:username]

El nodo deploy tiene un único nodo de aplicación, simplephpapp, que contiene información sobre la base de datos, el repositorio Git, etcétera. El ejemplo representa el valor del nombre de usuario de la base de datos, que se resuelve como root.

Configurar la base de datos

Las recetas de configuración integradas de la capa MySQL crean una base de datos automáticamente para la aplicación que lleva el nombre abreviado de la aplicación. En este ejemplo ya tiene una base de datos llamada simplephpapp. No obstante, debe terminar la configuración creando una tabla para que la aplicación almacene los datos. Puedes crear la tabla manualmente, pero lo mejor es implementar una receta personalizada para gestionar la tarea y dejar que AWS OpsWorks Stacks la ejecute por ti. En esta sección se describe cómo se implementa la receta dbsetup.rb. El procedimiento para que AWS OpsWorks Stacks ejecute la receta se describe más adelante.

Para ver la receta en el repositorio, vaya a dbsetup.rb. En el siguiente ejemplo se muestra el código de dbsetup.rb.

execute es un recurso de Chef que ejecuta un comando especificado. En este caso, se trata de un comando MySQL que crea una tabla. La directiva not_if garantiza que el comando no se ejecute si la tabla especificada ya existe. Para obtener más información acerca de los recursos de Chef, consulte la página sobre recursos y proveedores.

La receta inserta los valores de atributo en la cadena de comandos utilizando la sintaxis de nodo que se ha comentado anteriormente. Por ejemplo, lo siguiente inserta el nombre de usuario de la base de datos.

#{deploy[:database][:username]}

Vamos a descifrar este código un tanto críptico:

  • En cada iteración, deploy está establecido en el nodo actual de la aplicación, por lo que se resuelve como [:deploy][:app_name]. En este ejemplo, se resuelve como [:deploy][:simplephpapp].

  • Utilizando los valores de los atributos de implementación mostrados anteriormente, el nodo completo se resuelve como root.

  • Encapsule el nodo entre # {} para insertarlo en una cadena.

El resto de los nodos se resuelven, en su mayoría, de forma similar. La excepción es #{node[:phpapp][:dbtable]}, que lo define el archivo de atributos del libro de recetas personalizado y se resuelve como el nombre de la tabla, urler. Por consiguiente, el comando que se ejecuta en la instancia de MySQL es:

"/usr/bin/mysql -uroot -pvjud1hw5v8 simplephpapp -e'CREATE TABLE urler( id INT UNSIGNED NOT NULL AUTO_INCREMENT, author VARCHAR(63) NOT NULL, message TEXT, PRIMARY KEY (id))' "

Este comando crea una tabla llamada urler, con campos de ID, autor y mensaje, y donde se utilizan las credenciales y el nombre de la base de datos obtenidos de los atributos de implementación.

Conectar la aplicación con la base de datos

La segunda parte del rompecabezas es la aplicación, que necesita información de conexión, por ejemplo, la contraseña de la base de datos, para obtener acceso a la tabla. SimplePHPApp tiene un único archivo de trabajo, app.php; todo lo que index.php hace es cargar app.php.

app.php incluye db-connect.php, que gestiona la conexión con la base de datos, pero ese archivo no está en el repositorio. No puede crear db-connect.php con antelación, ya que define la base de datos en función de la instancia concreta. En lugar de esto, la receta appsetup.rb genera db-connect.php utilizando los datos de conexión de los atributos de implementación.

Para ver la receta en el repositorio, vaya a appsetup.rb. En el siguiente ejemplo se muestra el código de appsetup.rb.

Al igual que dbsetup.rb, appsetup.rb itera el procedimiento en las aplicaciones del nodo deploy (de nuevo, solo simplephpapp). Ejecuta un bloque de código con un recurso script y un recurso template.

El recurso script instala Composer, un administrador de dependencias para aplicaciones PHP. A continuación, ejecuta el comando install de Composer para instalar las dependencias de la aplicación de muestra en el directorio raíz de la aplicación.

El recurso template genera db-connect.php y lo pone en /srv/www/simplephpapp/current. Tenga en cuenta lo siguiente:

  • La receta utiliza una declaración condicional para especificar el propietario del archivo, que depende del sistema operativo de la instancia.

  • La directiva only_if indica a Chef que genere la plantilla únicamente si el directorio especificado ya existe.

Un recurso template opera en una plantilla que tiene básicamente el mismo contenido y estructura de archivos que el archivo asociado, pero incluye marcadores de posición para varios valores de datos. El parámetro source especifica la plantilla, db-connect.php.erb, que está en el directorio templates/default del libro de recetas phpapp y contiene lo siguiente:

Cuando Chef procesa la plantilla, sustituye los marcadores de posición <%= => por el valor de las variables correspondientes en el recurso de plantilla, que a su vez, se extraen de los atributos de implementación. De este modo, el archivo generado es: