Paso 3: Crear e implementar un libro de recetas personalizado - 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.

Paso 3: Crear e implementar un libro de recetas personalizado

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.

En su versión actual, la pila no está todavía funcional del todo; debe habilitar la aplicación para obtener obtener acceso al servidor de Redis. El sistema más flexible es poner un archivo YAML con la información de acceso en la subcarpeta config de la aplicación. La aplicación podrá entonces obtener la información del archivo. Con este método puede cambiar la información de conexión sin volver a escribir y volver a implementar la aplicación. Para este ejemplo, el archivo debe tener un nombre redis.yml y contener el nombre de host y el puerto del ElastiCache clúster, de la siguiente manera:

host: cache-cluster-hostname port: cache-cluster-port

Puedes copiar este archivo manualmente a tus servidores, pero lo mejor es implementar una receta de Chef para generar el archivo y hacer que AWS OpsWorks Stacks ejecute la receta en todos los servidores. Las recetas de Chef son aplicaciones de Ruby especializadas que AWS OpsWorks Stacks utiliza para realizar tareas en determinadas instancias, como instalar paquetes o crear archivos de configuración. Las recetas se empaquetan dentro de un libro de recetas, el cual puede contener varias recetas y archivos relacionados, como plantillas de archivos de configuración. El libro de cocina se coloca en un repositorio, por ejemplo GitHub, y debe tener una estructura de directorios estándar. Si todavía no ha personalizado el repositorio de libros de recetas, vaya a Repositorios de libros de recetas para saber cómo configurar uno.

Para este ejemplo, añada un libro de recetas llamado redis-config a su repositorio de libros de recetas con el siguiente contenido:

my_cookbook_repository redis-config recipes generate.rb templates default redis.yml.erb

La carpeta recipes contiene una receta llamada generate.rb, la cual genera el archivo de configuración de la aplicación a partir de redis.yml.erb, tal y como se indica a continuación:

node[:deploy].each do |app_name, deploy_config| # determine root folder of new app deployment app_root = "#{deploy_config[:deploy_to]}/current" # use template 'redis.yml.erb' to generate 'config/redis.yml' template "#{app_root}/config/redis.yml" do source "redis.yml.erb" cookbook "redis-config" # set mode, group and owner of generated file mode "0660" group deploy_config[:group] owner deploy_config[:user] # define variable “@redis” to be used in the ERB template variables( :redis => deploy_config[:redis] || {} ) # only generate a file if there is Redis configuration not_if do deploy_config[:redis].blank? end end end

La receta depende de los datos del objeto JSON de configuración y despliegue de la pila de AWS OpsWorks Stacks, que se instala en cada instancia y contiene información detallada sobre la pila y cualquier aplicación implementada. El nodo deploy del objeto tiene la siguiente estructura:

{ ... "deploy": { "app1": { "application" : "short_name", ... } "app2": { ... } ... } }

El nodo de implementación contiene un conjunto de objetos JSON integrados, uno por cada aplicación implementada, cuyo nombre es el nombre abreviado de la aplicación. Cada objeto de aplicación contiene un conjunto de atributos que definen la configuración de la aplicación, como, por ejemplo, la raíz de documentos y el tipo de aplicación. Para obtener una lista de los atributos de implementación, consulte Atributos deploy. Las recetas pueden utilizar la sintaxis de atributo de Chef para representar la configuración de las pilas y los valores JSON de implementación. Por ejemplo,[:deploy][:app1][:application] representa el nombre abreviado de la aplicación app1.

Para cada aplicación en [:deploy], la receta ejecuta el bloque de código asociado, donde deploy_config representa el atributo de aplicación. La receta primero establece app_root en el directorio raíz de la aplicación, [:deploy][:app_name][:deploy_to]/current. A continuación, utiliza un recurso de plantilla de Chef para generar un archivo de configuración a partir de redis.yml.erb y colocarlo en app_root/config.

Los archivos de configuración suelen crearse a partir de plantillas, donde la mayoría de opciones, si no todas, se definen mediante atributos de Chef. Los atributos le permiten cambiar las opciones de configuración a través de un formato JSON personalizado, tal y como se describe más adelante, en lugar de reescribir el archivo de plantilla. La plantilla redis.yml.erb contiene lo siguiente:

host: <%= @redis[:host] %> port: <%= @redis[:port] || 6379 %>

Los elementos <%... %> son marcadores que representan un valor de atributo.

  • <%= @redis[:host] %> representa el valor de redis[:host], que es el nombre del host del clúster de caché.

  • <%= @redis[:port] || 6379 %> representa el valor de redis[:port] o, en caso de que ese atributo no esté definido, el valor del puerto predeterminado, 6379.

El recurso template funciona de la siguiente manera:

  • source y cookbook especifican los nombres de la plantilla y del libro de recetas, respectivamente.

  • mode, group y owner otorgan al archivo de configuración los mismos derechos de acceso que los de la aplicación.

  • La sección variables establece la variable @redis utilizada en la plantilla en el valor del atributo [:redis] de la aplicación.

    Los valores del atributo [:redis] se establecen mediante JSON personalizado, tal y como se describe más adelante; no es uno de los atributos estándar de aplicación.

  • La directiva not_if garantiza que la receta no genere un archivo de configuración si ya existe uno.

Después de diseñar el libro de recetas, debe implementarlo en la caché de libros de recetas de cada instancia. Esta operación no ejecuta la receta; simplemente instala el nuevo libro de recetas en las instancias de la pila. Las recetas se ejecutan normalmente asignándolas a un evento de ciclo de vida de la capa, tal y como se describe más adelante.

Para implementar su libro de recetas personalizado
  1. En la página AWS OpsWorks Stacks Stack, haz clic en Stack Settings y, luego, en Editar.

  2. En la sección Configuration Management (Administración de configuración), establezca Use custom Chef cookbooks (Usar libros de recetas de Chef personalizados) en Yes (Sí), introduzca la información del repositorio de libros de recetas y haga clic en Save (Guardar) para actualizar la configuración de la pila.

  3. En la página Stack (Pila), haga clic en Run Command (Ejecutar comando), seleccione el comando de pila Update Custom Cookbooks (Actualizar libros de recetas personalizados) y haga clic en Update Custom Cookbooks (Actualizar libros de recetas personalizados) para instalar el nuevo libro de recetas en las cachés de libro de recetas de las instancias.

Si modifica su libro de recetas, simplemente ejecute Update Custom Cookbooks (Actualizar libros de recetas personalizados) de nuevo para instalar la versión actualizada. Si necesita más información sobre este procedimiento, consulte Instalación de libros de recetas personalizados.