AWS OpsWorks Referencia de la bolsa de datos Stacks - 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.

AWS OpsWorks Referencia de la bolsa de datos Stacks

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.

AWS OpsWorks Stacks ofrece una amplia variedad de ajustes para las recetas como contenido de la bolsa de datos de Chef. Esta referencia enumera el contenido de un contenedor de datos.

Un contenedor de datos es un concepto de Chef. Se trata de una variable global que se almacena como datos JSON en una instancia; desde Chef se puede obtener acceso a estos datos. Por ejemplo, una bolsa de datos puede almacenar variables globales, como la URL de origen de una aplicación, el nombre de host de la instancia y el identificador de VPC de la pila asociada. AWS OpsWorks Stacks almacena sus bolsas de datos en las instancias de cada pila. En las instancias de Linux, AWS OpsWorks Stacks almacena las bolsas de datos en el /var/chef/runs/run-ID/data_bags directorio. En instancias de Windows, almacena bolsas de datos en el directorio drive:\chef\runs\run-id\data_bags. En ambos casos, el Run-ID es un identificador único que AWS OpsWorks Stacks asigna a cada ejecución de Chef en una instancia. Estos directorios incluyen un conjunto de contenedores de datos (subdirectorios). Cada contenedor de datos contiene cero o más elementos de contenedor de datos, que son archivos con formato JSON que contienen conjuntos de contenido de contenedores de datos.

nota

AWS OpsWorks Stacks no admite bolsas de datos cifradas. Para almacenar información confidencial de forma cifrada, como, por ejemplo, contraseñas o certificados, le recomendamos almacenarla en un bucket privado de S3. A continuación, puede crear una receta personalizada que utilice Amazon SDK para Ruby para recuperar los datos. Para ver un ejemplo, consulte Uso del SDK para Ruby.

Los contenedores de datos pueden tener los elementos siguientes:

  • Cadenas que apliquen la sintaxis de Ruby estándar y puedan utilizar comillas simples o dobles, aunque las cadenas que contengan determinados caracteres especiales deban estar entre comillas dobles. Para obtener más información, consulte el sitio de documentación de Ruby.

  • Contenido booleano, true o false, (sin comillas).

  • Números, ya sea enteros o decimales, como 4 o 2.5 (sin comillas).

  • Listas presentadas como valores separados por comas entre corchetes (sin comillas), por ejemplo [ '80', '443' ].

  • Objetos JSON, que contienen contenedores de datos, por ejemplo, "my-app": {"elastic_ip": null,...}.

Las recetas de Chef pueden obtener acceso a los contenedores de datos, los elementos de los contenedores de datos y el contenido de estos, ya sea por medio de una búsqueda Chef o directamente. A continuación se describe cómo utilizar ambos enfoques de acceso (aunque es preferible la búsqueda mediante Chef).

Para acceder a una bolsa de datos a través de la búsqueda de Chef, utilice el método de búsqueda y especifique el índice de búsqueda deseado. AWS OpsWorks Stacks proporciona los siguientes índices de búsqueda:

Una vez que sepa el nombre del índice de búsqueda, podrá obtener acceso al contenido del contenedor de datos del índice de búsqueda. Por ejemplo, el código de receta siguiente utiliza el índice de búsqueda aws_opsworks_app para obtener el contenido del primer elemento del contenedor de datos (el primer archivo JSON) del contenedor de datos aws_opsworks_app (el directorio aws_opsworks_app). A continuación, el código escribe dos mensajes en el registro de Chef, uno con el contenido del contenedor de datos del nombre abreviado de la aplicación (una cadena del archivo JSON) y otro con el contenido del contenedor de datos de la dirección URL de origen de la aplicación (otra cadena del archivo JSON):

app = search("aws_opsworks_app").first Chef::Log.info("********** The app's short name is '#{app['shortname']}' **********") Chef::Log.info("********** The app's URL is '#{app['app_source']['url']}' **********")

Donde ['shortname'] y ['app_source']['url'] especifican el contenido del contenedor de datos siguiente del archivo JSON correspondiente:

{ ... "shortname": "mylinuxdemoapp", ... "app_source": { ... "url": "https://s3.amazonaws.com/opsworks-demo-assets/opsworks-linux-demo-nodejs.tar.gz", }, ... }

Para obtener la lista del contenido del contenedor de datos que puede buscar, consulte los temas de referencia de esta sección.

También puede iterar por un conjunto de elementos de un contenedor de datos. Por ejemplo, el código de receta siguiente es parecido al ejemplo anterior; recorre cada elemento del contenedor de datos cuando este tiene más de un elemento:

search("aws_opsworks_app").each do |app| Chef::Log.info("********** The app's short name is '#{app['shortname']}' **********") Chef::Log.info("********** The app's URL is '#{app['app_source']['url']}' **********") end

Si sabe que el contenedor de datos tiene un contenido concreto, puede encontrar el elemento del contenedor de datos correspondiente con la sintaxis siguiente:

search("search_index", "key:value").first

Por ejemplo, el código de receta siguiente utiliza el índice de búsqueda aws_opsworks_app para encontrar el elemento del contenedor de datos que contiene el nombre abreviado mylinuxdemoapp. A continuación, utiliza el contenido del elemento del contenedor de datos para escribir un mensaje en el registro de Chef con el nombre abreviado y la dirección URL de origen correspondientes de la aplicación:

app = search("aws_opsworks_app", "shortname:mylinuxdemoapp").first Chef::Log.info("********** For the app with the short name '#{app['shortname']}', the app's URL is '#{app['app_source']['url']}' **********")

Únicamente en el índice de búsqueda aws_opsworks_instance puede especificar self:true para representar la instancia en la que se está ejecutando la receta. El siguiente código de receta utiliza el contenido del elemento de la bolsa de datos correspondiente para escribir un mensaje en el registro de Chef con el ID AWS OpsWorks generado por Stacks y el sistema operativo de la instancia correspondiente:

instance = search("aws_opsworks_instance", "self:true").first Chef::Log.info("********** For instance '#{instance['instance_id']}', the instance's operating system is '#{instance['os']}' **********")

En vez de utilizar la búsqueda de Chef para obtener acceso a los contenedores de datos, los elementos de los contenedores de datos y el contenido de estos, puede obtener acceso directo a ellos. Para ello, utilice los métodos data_bag y data_bag_item para obtener acceso a los contenedores de datos y los elementos de los contenedores de datos respectivamente. Por ejemplo, el código de receta siguiente hace lo mismo que los ejemplos anteriores, salvo que tiene un acceso directo a un único elemento de un contenedor de datos y después a varios elementos del contenedor de datos cuando hay más de uno:

# Syntax: data_bag_item("the data bag name", "the file name in the data bag without the file extension") app = data_bag_item("aws_opsworks_app", "mylinuxdemoapp") Chef::Log.info("********** The app's short name is '#{app['shortname']}' **********") Chef::Log.info("********** The app's URL is '#{app['app_source']['url']}' **********") data_bag("aws_opsworks_app").each do |data_bag_item| app = data_bag_item("aws_opsworks_app", data_bag_item) Chef::Log.info("********** The app's short name is '#{app['shortname']}' **********") Chef::Log.info("********** The app's URL is '#{app['app_source']['url']}' **********") end

De estos dos enfoques, le recomendamos que utilice la búsqueda de Chef. Todos los ejemplos relacionados que aparecen en esta guía muestran este enfoque.