Ejemplo 6: Creación de archivos - 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.

Ejemplo 6: Creación de archivos

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.

Una vez que ha creado los directorios, a menudo necesita llenarlos con archivos de configuración, archivos de datos, etc. En este tema se muestran dos formas de instalar archivos en una instancia.

Instalación de un archivo a partir de un libro de recetas

La forma más sencilla de instalar un archivo en una instancia es utilizar un recurso cookbook_file que copie un archivo del libro de recetas en una ubicación especificada de la instancia para los sistemas Linux y Windows. Este ejemplo amplía la receta de Ejemplo 3: Creación de directorios para añadir un archivo de datos a /srv/www/shared después de crear el directorio. Como referencia, aquí tenemos la receta original.

directory "/srv/www/shared" do mode 0755 owner 'root' group 'root' recursive true action :create end
Para configurar el libro de recetas
  1. Dentro del directorio opsworks_cookbooks, cree un directorio llamado createfile y ábralo.

  2. Añada un archivo metadata.rb a createfile con el contenido siguiente.

    name "createfile" version "0.1.0"
  3. Inicialice y configure Test Kitchen, tal y como se describe en Ejemplo 1: Instalación de paquetes, y elimine CentOS de la lista platforms.

  4. Añada un subdirectorio recipes a createfile.

El archivo que va a instalar contiene los datos JSON siguientes.

{ "my_name" : "myname", "your_name" : "yourname", "a_number" : 42, "a_boolean" : true }
Para configurar el archivo de datos
  1. Añada un subdirectorio files a createfile y un subdirectorio default a files. Todos los archivos que instale con cookbook_file deben estar en un subdirectorio de files; por ejemplo, files/default en este ejemplo.

    nota

    Si quiere especificar archivos diferentes para sistemas diferentes, puede colocar cada archivo específico del sistema en una subcarpeta con el nombre del sistema, como, por ejemplo, files/ubuntu. El recurso cookbook_file copia el archivo específico del sistema adecuado, si existe; de no ser así, utiliza el archivo default. Para obtener más información, consulte cookbook_file.

  2. Cree un archivo llamado example_data.json con el JSON del ejemplo anterior y añádalo a files/default.

La receta siguiente copia example_data.json en una ubicación especificada.

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

Cuando el recurso del directorio crea /srv/www/shared, el recurso cookbook_file copia example_data.json en dicho directorio y también establece el usuario, el grupo y el modo del archivo.

nota

El recurso cookbook_file introduce una nueva acción: create_if_missing. También puede utilizar una acción create, pero sobrescribe un archivo ya existente. Si no quiere sobrescribir nada, utilice create_if_missing, que instala example_data.json solo si todavía no existe.

Para ejecutar la receta
  1. Ejecute kitchen destroy para comenzar por una instancia nueva.

  2. Cree un archivo default.rb que contenga la receta anterior y guárdelo en recipes.

  3. Ejecute kitchen converge y, a continuación, inicie sesión en la instancia para comprobar que /srv/www/shared contiene example_data.json.

Creación de un archivo a partir de una plantilla

El recurso cookbook_file es útil para algunos fines, pero solo instala el archivo que tenga en el libro de recetas. Un recurso template aporta mayor flexibilidad de instalación de un archivo en una instancia de Windows o Linux, ya que lo crea dinámicamente a partir de una plantilla. Después puede determinar los detalles del contenido del archivo en tiempo de ejecución y modificarlos según sea necesario. Por ejemplo, puede que quiera que un archivo de configuración tenga una determinada configuración al iniciar la instancia y más tarde, cuando añada más instancias a la pila, quiera modificar la configuración.

En este ejemplo se modifica el libro de recetas createfile para utilizar un recurso template para instalar una versión ligeramente modificada de example_data.json.

Este es el aspecto que tendrá el archivo instalado.

{ "my_name" : "myname", "your_name" : "yourname", "a_number" : 42, "a_boolean" : true, "a_string" : "some string", "platform" : "ubuntu" }

Normalmente, los recursos de la plantilla se usan junto con los archivos de atributos, por lo que el ejemplo utiliza uno para definir los valores siguientes.

default['createfile']['my_name'] = 'myname' default['createfile']['your_name'] = 'yourname' default['createfile']['install_file'] = true
Para configurar el libro de recetas
  1. Elimine el directorio createfile del libro de recetas files y su contenido.

  2. Añada un subdirectorio attributes a createfile y añada un archivo default.rb a attributes que contenga las definiciones de atributo anteriores.

Una plantilla es un archivo .erb que es básicamente una copia del archivo final, con parte del contenido representado por comodines. Cuando el recurso template crea el archivo, copia el contenido de la plantilla en el archivo especificado y sobrescribe los comodines con los valores que tiene asignados. Aquí está la plantilla para example_data.json.

{ "my_name" : "<%= node['createfile']['my_name'] %>", "your_name" : "<%= node['createfile']['your_name'] %>", "a_number" : 42, "a_boolean" : <%= @a_boolean_var %>, "a_string" : "<%= @a_string_var %>", "platform" : "<%= node['platform'] %>" }

Los valores <%=...%> son los comodines.

  • <%=node[...]%> representa un valor de atributo de nodo.

    En este ejemplo, el valor "your_name" es un comodín que representa uno de los valores de atributo del archivo de atributos del libro de recetas.

  • <%=@...%> representa el valor de una variable que está definida en el recurso template, que trataremos en breve.

Para crear el archivo de plantilla de
  1. Añada un subdirectorio templates al libro de cocina createfile y un subdirectorio default a templates.

    nota

    El directorio templates tiene un funcionamiento muy similar al del directorio files. Puede poner plantillas específicas de un sistema en un subdirectorio como ubuntu que se llama como dicho sistema. El recurso template utiliza la plantilla específica del sistema adecuado si existe; de no ser así, utiliza la plantilla default.

  2. Cree un archivo llamado example_data.json.erb y póngalo en el directorio templates/default. El nombre de la plantilla es arbitrario, pero normalmente se crea anexando .erb al nombre del archivo, incluidas las extensiones.

La siguiente receta utiliza un recurso template para crear /srv/www/shared/example_data.json.

directory "/srv/www/shared" do mode 0755 owner 'root' group 'root' recursive true action :create end template "/srv/www/shared/example_data.json" do source "example_data.json.erb" mode 0644 variables( :a_boolean_var => true, :a_string_var => "some string" ) only_if {node['createfile']['install_file']} end

El recurso template crea example_data.json a partir de una plantilla y lo instala en /srv/www/shared.

  • El nombre de la plantilla, /srv/www/shared/example_data.json, especifica el nombre y la ruta del archivo instalado.

  • El atributo source especifica la plantilla utilizada para crear el archivo.

  • El atributo mode especifica el modo de archivo instalado.

  • El recurso define dos variables, a_boolean_var y a_string_var.

    Cuando el recurso crea example_data.json, sobrescribe los comodines de las variables de la plantilla con los valores correspondientes del recurso.

  • El atributo only_if de protección indica al recurso que cree el archivo solo si ['createfile']['install_file'] está establecido en true.

Para ejecutar la receta
  1. Ejecute kitchen destroy para comenzar por una instancia nueva.

  2. Sustituya el código de recipes/default.rb por el ejemplo anterior.

  3. Ejecute kitchen converge y, a continuación, inicie sesión en la instancia para comprobar que el archivo se encuentre en /srv/www/shared y su contenido sea correcto.

Cuando haya terminado, ejecute kitchen destroy para cerrar la instancia. En la siguiente sección se utiliza un libro de recetas nuevo.