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.
Simulación de los atributos de configuración e implementación de pila en Vagrant
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
nota
Este tema se aplica únicamente a las instancias de Linux. Test Kitchen aún no es compatible con Windows, por lo que ejecutarás todos los ejemplos de Windows en las instancias de AWS OpsWorks Stacks.
AWS OpsWorks Stacks añade los atributos de configuración e implementación de la pila al objeto de nodo de cada instancia de tu pila para cada evento del ciclo de vida. Estos atributos proporcionan información sobre la configuración de la pila, incluida la configuración de cada capa y de sus instancias online, la configuración de todas las aplicaciones implementadas, etc. Como estos atributos se encuentran en el objeto de nodo, se puede acceder a ellos mediante cualquier receta; la mayoría de las recetas de las instancias de AWS OpsWorks Stacks utilizan uno o más de estos atributos.
AWS OpsWorks Stacks no administra una instancia que se ejecuta en una caja de Vagrant, por lo que su objeto de nodo no incluye ningún atributo de configuración e implementación de la pila de forma predeterminada. Sin embargo, puede añadir un conjunto de atributos adecuados al entorno de Test Kitchen. Luego, Test Kitchen agrega los atributos al objeto de nodo de la instancia, y tus recetas pueden acceder a los atributos de forma muy similar a como lo harían en una AWS OpsWorks instancia de Stacks.
Este tema describe cómo obtener una copia de los atributos de configuración e implementación de una pila adecuada, cómo instalarlos en una instancia y cómo obtener acceso a ellos.
nota
Si utiliza Test Kitchen para ejecutar pruebas en las recetas, fauxhai
Para configurar el libro de recetas
-
Cree un subdirectorio de
opsworks_cookbooks
llamadoprintjson
y ábralo. -
Inicialice y configure Test Kitchen tal y como se describe en Ejemplo 1: Instalación de paquetes.
-
Añada dos subdirectorios a
printjson
:recipes
yenvironments
.
Podría simular los atributos de configuración e implementación de pila añadiendo un archivo de atributos al libro de recetas con las definiciones adecuadas, pero se prefiere utilizar el entorno de Test Kitchen. Existen dos enfoques básicos:
-
Añadir definiciones de atributo a
.kitchen.yml
.Este enfoque es más útil si solo existen unos pocos atributos. Para obtener más información, consulte kitchen.yml
. -
Definir los atributos en un archivo de entorno y hacer referencia al archivo en
.kitchen.yml
.Este enfoque suele ser preferible en el caso de los atributos de configuración e implementación de pila, ya que el archivo de entorno ya se encuentra en formato JSON. Puedes obtener una copia de los atributos en formato JSON desde una instancia de AWS OpsWorks Stacks adecuada y simplemente pegarla. Todos los ejemplos utilizan un archivo de entorno.
La forma más sencilla de crear atributos de configuración e implementación de una pila para el libro de recetas es crear una pila correctamente configurada y, a continuación, copiar los atributos resultantes de una instancia en formato JSON. Para que archivo de entorno de Test Kitchen siga siendo administrable, puede editar el JSON de modo que solo contenga los atributos que las recetas necesitan. Los ejemplos que aparecen en este capítulo se basan en la pila de Introducción a las pilas de Linux en Chef 11, que es una pila del servidor de aplicaciones PHP sencilla con un balanceador de carga, servidores de aplicaciones PHP y un servidor de base de datos MySQL.
Para crear un JSON de configuración e implementación de pila
-
Crea MyStack como se describe enIntroducción a las pilas de Linux en Chef 11, incluida la implementación de SimplePHPApp. Si lo prefiere, puede omitir la segunda instancia del servidor de aplicaciones PHP contemplada en Paso 4: Escala MyStack; los ejemplos no usan estos atributos.
-
Si aún no lo ha hecho, inicie la
php-app1
instancia y, a continuación, inicie sesión con SSH. -
En la ventana del terminal, ejecute el siguiente comando de la CLI del agente:
sudo opsworks-agent-cli get_json
Este comando copia, en formato JSON, los atributos de configuración e implementación más recientes de la pila de la instancia en la ventana del terminal.
-
Copie el JSON en un archivo
.json
y guárdelo en una ubicación apropiada de la estación de trabajo. Los detalles dependen del cliente SSH. Por ejemplo, si utiliza PuTTY en Windows, puede ejecutar el comandoCopy All to Clipboard
, que copia todo el texto de la ventana del terminal en el Portapapeles de Windows. A continuación, puede pegar el contenido en un archivo.json
y editarlo para eliminar el texto extraño. -
Edite MyStack JSON según sea necesario. Los atributos de configuración e implementación de pila son numerosos y los libros de recetas suelen utilizar solo un pequeño subconjunto de ellos. Para que el archivo de entorno siga siendo administrable, puede editar el JSON de modo que conserve la estructura original, pero que solo contenga los atributos que los libros de recetas realmente utilizan.
En este ejemplo, se utiliza una versión muy editada del MyStack JSON que incluye solo dos
['opsworks']['stack']
atributos,['id]
y['name']
. Cree una versión editada del MyStack JSON que tenga un aspecto similar al siguiente:{ "opsworks": { "stack": { "name": "MyStack", "id": "42dfd151-6766-4f1c-9940-ba79e5220b58", }, }, }
Para guardar este JSON en el objeto de nodo de la instancia, debe añadirlo a un entorno de Test Kitchen.
Para añadir los atributos de configuración e implementación de pila al entorno de Test Kitchen
-
Cree un archivo de entorno llamado
test.json
con el siguiente contenido y guárdelo en la carpetaenvironments
del libro de recetas.{ "default_attributes": { "opsworks" : { "stack" : { "name" : "MyStack", "id" : "42dfd151-6766-4f1c-9940-ba79e5220b58" } } }, "chef_type" : "environment", "json_class" : "Chef::Environment" }
El archivo de entorno tiene los siguientes elementos:
-
default_attributes
: los atributos predeterminados en formato JSON.Estos atributos se añaden al objeto de nodo con el tipo de atributo
default
, que es el que utilizan todos los atributos del JSON de configuración e implementación de pila. Este ejemplo utiliza la versión modificada del JSON de configuración e implementación de pila que hemos visto anteriormente. -
chef_type
: defina este elemento enenvironment
. -
json_class
: defina este elemento enChef::Environment
.
-
-
Edite
.kitchen.yml
para definir el entorno de Test Kitchen tal y como se indica a continuación.--- driver: name: vagrant provisioner: name: chef_solo environments_path: ./environments platforms: - name: ubuntu-12.04 suites: - name: printjson provisioner: solo_rb: environment: test run_list: - recipe[printjson::default] attributes:
Puede definir el entorno mediante la adición de los siguientes elementos al
.kitchen.yml
predeterminado creado porkitchen init
.- provisioner
-
Añada los siguientes elementos.
-
name
: defina este elemento enchef_solo
.Para replicar mejor el entorno de AWS OpsWorks Stacks, puedes usar el modo local del cliente Chef
en lugar de Chef solo. El modo local es una opción del cliente de Chef que utiliza una versión reducida del servidor de Chef (Chef Zero) que se ejecuta de forma local en la instancia en lugar de hacerlo en un servidor remoto. Permite a las recetas utilizar las características del servidor de Chef, como la búsqueda o los contenedores de datos, sin necesidad de conectarse a un servidor remoto. -
environments_path
: el subdirectorio del libro de recetas que contiene el archivo de entorno (./environments
en este ejemplo).
-
- suites:provisioner
-
Añada un elemento
solo_rb
con un elementoenvironment
establecido en el nombre del archivo de entorno menos la extensión .json. Este ejemplo estableceenvironment
entest
.
-
Cree un archivo de receta llamado
default.rb
con el siguiente contenido y guárdelo en el directoriorecipes
del libro de recetas.log "Stack name: #{node['opsworks']['stack']['name']}" log "Stack id: #{node['opsworks']['stack']['id']}"
Esta receta simplemente registra los dos valores de configuración e implementación de pila que añadió al entorno. Aunque la receta se ejecuta localmente en Virtual Box, puedes hacer referencia a esos atributos con la misma sintaxis de nodos que utilizarías si la receta se ejecutara en una instancia de AWS OpsWorks Stacks.
-
Ejecute
kitchen converge
. Debería ver algo como lo siguiente en el registro de salida.... Converging 2 resources Recipe: printjson::default * log[Stack name: MyStack] action write[2014-07-01T23:14:09+00:00] INFO: Processing log[Stack name: MyStack] action write (printjson::default line 1) [2014-07-01T23:14:09+00:00] INFO: Stack name: MyStack * log[Stack id: 42dfd151-6766-4f1c-9940-ba79e5220b58] action write[2014-07-01T23:14:09+00:00] INFO: Processing log[Stack id: 42dfd151-6766-4f1c-9940-ba79e5220b58] action write (printjson::default line 2) [2014-07-01T23:14:09+00:00] INFO: Stack id: 42dfd151-6766-4f1c-9940-ba79e5220b58 ...