Obtención directa de los valores de atributo - 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.

Obtención directa de los valores de atributo

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

Este enfoque solo funciona en pilas de Linux.

Simulación de los atributos de configuración e implementación de pila en Vagrant muestra cómo obtener los datos de configuración e implementación de pila mediante el uso de la sintaxis de nodo para hacer referencia directamente a atributos concretos. Con frecuencia este suele ser el mejor enfoque. Sin embargo, en el caso de una determinada pila, muchos atributos se definen en colecciones o listas cuyo contenido y nombres pueden variar de pila a pila y a lo largo del tiempo. Por ejemplo, el atributo deploy contiene una lista de atributos de aplicación, cuyos nombres son el nombre corto de la aplicación. Esta lista, incluidos los nombres de los atributos de aplicación, normalmente varía de pila a pila, incluso de implementación a implementación.

Suele ser más útil, a veces incluso necesario, para obtener los datos necesarios mediante la enumeración de los atributos de una lista o colección. Por ejemplo, supongamos que desea conocer las direcciones IP públicas de las instancias de la pila. Esta información se encuentra en el atributo ['opsworks']['layers'], que está establecido en una tabla hash que contiene un elemento para cada capa de la pila, cuyo nombre es el nombre corto de la capa. Cada elemento de la capa está establecido en una tabla hash que contiene los atributos de la capa, uno de los cuales es ['instances']. En cambio, el elemento está establecido en otra tabla hash, que contiene un atributo para cada una de las instancias de la capa, cuyo nombre es el nombre corto de la capa. Cada atributo de instancia también está establecido en otra tabla hash, que contiene los atributos la instancia incluido ['ip'], que representa la dirección IP pública. Si tiene problemas para visualizar esto, el siguiente procedimiento incluye un ejemplo en formato JSON.

Este ejemplo muestra cómo obtener los datos del JSON de configuración e implementación de pila de las capas de una pila.

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

  2. Inicialice y configure Test Kitchen tal y como se describe en Ejemplo 1: Instalación de paquetes.

  3. Añada dos directorios a listip: recipes y environments.

  4. Cree una versión JSON editada de los atributos de MyStack configuración e implementación que contenga los atributos relevantes. Debería parecerse a lo siguiente.

    { "opsworks": { "layers": { "php-app": { "name": "PHP App Server", "id": "efd36017-ec42-4423-b655-53e4d3710652", "instances": { "php-app1": { "ip": "192.0.2.0" } } }, "db-master": { "name": "MySQL", "id": "2d8e0b9a-0d29-43b7-8476-a9b2591a7251", "instances": { "db-master1": { "ip": "192.0.2.5" } } }, "lb": { "name": "HAProxy", "id": "d5c4dda9-2888-4b22-b1ea-6d44c7841193", "instances": { "lb1": { "ip": "192.0.2.10" } } } } } }
  5. Cree un archivo de entorno llamado test.json, pegue el JSON de ejemplo en default_attributes y guarde el archivo en la carpeta environments del libro de recetas. El archivo debería parecerse a lo siguiente (para abreviar, la mayor parte del JSON de ejemplo está representada por puntos suspensivos).

    { "default_attributes" : { "opsworks": { "layers": { ... } } }, "chef_type" : "environment", "json_class" : "Chef::Environment" }
  6. Sustituya el texto de .kitchen.yml por lo siguiente.

    --- driver: name: vagrant provisioner: name: chef_zero environments_path: ./environment platforms: - name: ubuntu-12.04 suites: - name: listip provisioner: client_rb: environment: test run_list: - recipe[listip::default] attributes:

Una vez que el libro de recetas se haya instalado, puede utilizar la siguiente receta para registrar los ID de capa.

node['opsworks']['layers'].each do |layer, layerdata| log "#{layerdata['name']} : #{layerdata['id']}" end

La receta enumera las capas de ['opsworks']['layers'] y registra sus nombres e ID.

Para ejecutar la receta de registro de ID de capa
  1. Cree un archivo llamado default.rb con la receta de ejemplo y guárdelo en el directorio recipes.

  2. Ejecute kitchen converge.

La parte relevante del documento de salida debería parecerse a lo siguiente.

Recipe: listip::default * log[PHP App Server : efd36017-ec42-4423-b655-53e4d3710652] action write[2014-07-17T22:56:19+00:00] INFO: Processing log[PHP App Server : efd36017-ec42-4423-b655-53e4d3710652] action write (listip::default line 4) [2014-07-17T22:56:19+00:00] INFO: PHP App Server : efd36017-ec42-4423-b655-53e4d3710652 * log[MySQL : 2d8e0b9a-0d29-43b7-8476-a9b2591a7251] action write[2014-07-17T22:56:19+00:00] INFO: Processing log[MySQL : 2d8e0b9a-0d29-43b7-8476-a9b2591a7251] action write (listip::default line 4) [2014-07-17T22:56:19+00:00] INFO: MySQL : 2d8e0b9a-0d29-43b7-8476-a9b2591a7251 * log[HAProxy : d5c4dda9-2888-4b22-b1ea-6d44c7841193] action write[2014-07-17T22:56:19+00:00] INFO: Processing log[HAProxy : d5c4dda9-2888-4b22-b1ea-6d44c7841193] action write (listip::default line 4) [2014-07-17T22:56:19+00:00] INFO: HAProxy : d5c4dda9-2888-4b22-b1ea-6d44c7841193

Para enumerar las direcciones IP de las instancias, necesitará un bucle anidado como el siguiente.

node['opsworks']['layers'].each do |layer, layerdata| log "#{layerdata['name']} : #{layerdata['id']}" layerdata['instances'].each do |instance, instancedata| log "Public IP: #{instancedata['ip']}" end end

El bucle interior itera sobre las instancias de la capa y registra las direcciones IP.

Para ejecutar la receta de registro de IP de instancia
  1. Sustituya el código de default.rb por la receta de ejemplo.

  2. Ejecute kitchen converge para ejecutar la receta.

La parte relevante del documento de salida debería parecerse a lo siguiente.

* log[PHP App Server : efd36017-ec42-4423-b655-53e4d3710652] action write[2014-07-17T23:09:34+00:00] INFO: Processing log[PHP App Server : efd36017-ec42-4423-b655-53e4d3710652] action write (listip::default line 2) [2014-07-17T23:09:34+00:00] INFO: PHP App Server : efd36017-ec42-4423-b655-53e4d3710652 * log[Public IP: 192.0.2.0] action write[2014-07-17T23:09:34+00:00] INFO: Processing log[Public IP: 192.0.2.0] action write (listip::default line 4) [2014-07-17T23:09:34+00:00] INFO: Public IP: 192.0.2.0 * log[MySQL : 2d8e0b9a-0d29-43b7-8476-a9b2591a7251] action write[2014-07-17T23:09:34+00:00] INFO: Processing log[MySQL : 2d8e0b9a-0d29-43b7-8476-a9b2591a7251] action write (listip::default line 2) [2014-07-17T23:09:34+00:00] INFO: MySQL : 2d8e0b9a-0d29-43b7-8476-a9b2591a7251 * log[Public IP: 192.0.2.5] action write[2014-07-17T23:09:34+00:00] INFO: Processing log[Public IP: 192.0.2.5] action write (listip::default line 4) [2014-07-17T23:09:34+00:00] INFO: Public IP: 192.0.2.5 * log[HAProxy : d5c4dda9-2888-4b22-b1ea-6d44c7841193] action write[2014-07-17T23:09:34+00:00] INFO: Processing log[HAProxy : d5c4dda9-2888-4b22-b1ea-6d44c7841193] action write (listip::default line 2) [2014-07-17T23:09:34+00:00] INFO: HAProxy : d5c4dda9-2888-4b22-b1ea-6d44c7841193 * log[Public IP: 192.0.2.10] action write[2014-07-17T23:09:34+00:00] INFO: Processing log[Public IP: 192.0.2.10] action write (listip::default line 4) [2014-07-17T23:09:34+00:00] INFO: Public IP: 192.0.2.10

Cuando haya terminado, ejecute kitchen destroy; el siguiente tema utiliza un libro de recetas nuevo.

nota

Una de las razones más comunes para enumerar una colección JSON de configuración e implementación de pila es obtener los datos de una aplicación implementada concreta, como su directorio de implementación. Para ver un ejemplo, consulte Recetas de implementación.