Uso del SDK para Ruby en una instancia AWS OpsWorks de Stacks Linux - 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.

Uso del SDK para Ruby en una instancia AWS OpsWorks de Stacks Linux

importante

El AWS OpsWorks Stacks servicio llegó al final de su vida útil el 26 de mayo de 2024 y se ha inhabilitado 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 este tema se describe cómo usar el SDK para Ruby en una instancia de AWS OpsWorks Stacks Linux para descargar un archivo de un bucket de Amazon S3. AWS OpsWorks Stacks instala automáticamente el SDK para Ruby en todas las instancias de Linux. Sin embargo, al crear un objeto del cliente de servicio, debe proporcionar un conjunto de credenciales de AWS AWS::S3.new adecuado, o el equivalente para otros servicios.

El contenido entregado a los buckets de Amazon S3 puede contener contenido del cliente. Para obtener más información sobre la eliminación de información confidencial, consulte ¿Cómo puedo vaciar un bucket de S3? o ¿Cómo elimino un bucket de S3?.

Uso de SDK para Ruby en una instancia de Vagrant muestra cómo mitigar el riesgo de exponer las credenciales mediante su almacenamiento en el objeto de nodo y haciendo referencia a los atributos del código de la receta. Cuando ejecuta recetas en una instancia de Amazon EC2, existe una opción aún mejor: un rol de IAM.

Un rol de IAM funciona como un usuario de IAM. Tiene una política adjunta que le concede permisos para utilizar los diferentes servicios de AWS. Sin embargo, puede asignar un rol a una instancia de Amazon EC2 en lugar de a un individuo. Las aplicaciones que se ejecutan en esa instancia pueden adquirir los permisos concedidos por la política adjunta. Si se utiliza un rol, las credenciales nunca aparecerán en el código, ni siquiera de forma indirecta. En este tema describe cómo puede utilizar un rol de IAM para ejecutar la receta de Uso de SDK para Ruby en una instancia de Vagrant en una instancia de Amazon EC2.

Podría ejecutar esta receta con Test Kitchen mediante el controlador kitchec-ec2 tal y como se describe en Ejemplo 9: Uso de instancias de Amazon EC2. Sin embargo, instalar el SDK para Ruby en instancias de Amazon EC2 es algo complicado y no es algo de lo que debas preocuparte en el caso de Stacks. AWS OpsWorks Todas las instancias Linux de AWS OpsWorks Stacks tienen el SDK for Ruby instalado de forma predeterminada. Por lo tanto, para simplificar, en el ejemplo se usa una instancia de AWS OpsWorks Stacks.

El primer paso es configurar el rol de IAM. En este ejemplo, se adopta el enfoque más simple, que consiste en utilizar el rol de Amazon EC2 que AWS OpsWorks Stacks crea al crear tu primera pila. Su nombre es aws-opsworks-ec2-role. Sin embargo, AWS OpsWorks Stacks no asocia una política a esa función, por lo que, de forma predeterminada, no concede permisos.

Debe adjuntar la política AmazonS3ReadOnlyAccess al rol aws-opsworks-ec2-role para conceder los permisos adecuados. Para obtener más información sobre cómo adjuntar una política a un rol, consulte Agregar de permisos de identidad de IAM (consola) en la Guía del usuario de IAM.

Especifique el rol al crear o actualizar una pila. Configure una pila con una capa personalizada tal y como se describe en Ejecución de una receta en una instancia de Linux, con una adición. En la página Añadir pila, confirma que el perfil de instancia de IAM predeterminado esté establecido en 2 roles. aws-opsworks-ec AWS OpsWorks A continuación, Stacks asignará esa función a todas las instancias de la pila.

El procedimiento para instalar el libro de recetas es parecido al que utilizó Ejecución de una receta en una instancia de Linux. Lo siguiente es un breve resumen; debería consultar ese ejemplo para obtener más información.

Para configurar el libro de recetas
  1. Cree un directorio llamado s3bucket_ops y ábralo.

  2. Cree un archivo metadata.rb con el siguiente contenido y guárdelo en s3bucket_ops.

    name "s3bucket_ops" version "0.1.0"
  3. Cree un directorio recipes dentro de s3bucket_ops.

  4. Cree un archivo default.rb con la siguiente receta y guárdelo en el directorio recipes.

    Chef::Log.info("******Downloading a file from Amazon S3.******") ruby_block "download-object" do block do require 'aws-sdk' s3 = AWS::S3.new myfile = s3.buckets['cookbook_bucket'].objects['myfile.txt'] Dir.chdir("/tmp") File.open("myfile.txt", "w") do |f| f.syswrite(myfile.read) f.close end end action :run end
  5. Cree un archivo .zip de s3bucket_ops y cárguelo en un bucket de Amazon S3. Para simplificar, publique el archivo de almacenamiento y, a continuación, anote su URL; ya que la necesitará más adelante. También puede almacenar los libros de recetas en un archivo de Amazon S3 privado, o en otros tipos de repositorios. Para obtener más información, consulte Repositorios de libros de recetas.

Esta receta es similar a la que se utilizó en el ejemplo anterior, con las siguientes excepciones.

  • Como AWS OpsWorks Stacks ya ha instalado el SDK para Ruby, el chef_gem recurso se ha eliminado.

  • La receta no transmite ninguna credencial a AWS::S3.new.

    Las credenciales se asignan automáticamente a la aplicación en función del rol de la instancia.

  • La receta utiliza Chef::Log.info para añadir un mensaje al registro de Chef.

Cree una pila para este ejemplo tal y como se indica a continuación. También puede utilizar una pila de Windows existente. Actualice los libros de recetas tal y como se describe más adelante.

Para crear una pila de
  1. Abra la consola de AWS OpsWorks Stacks y haga clic en Add Stack (Añadir pila).

  2. Especifique las siguientes opciones de configuración, acepte los valores predeterminados del resto y, a continuación, haga clic en Add Stack (Añadir pila).

    • Nombre: RubySDK

    • Clave SSH predeterminada: un par de claves de Amazon EC2

    Si necesita crear un par de claves de Amazon EC2, consulte Pares de claves de Amazon EC2. Tenga en cuenta que el par de claves debe pertenecer a la misma región de AWS que la instancia. El ejemplo utiliza la región predeterminada Oeste de EE. UU. (Oregón).

  3. Haga clic en Add a layer (Añadir una capa) y añada una capa personalizada a la pila con las siguientes opciones de configuración.

    • Nombre: S3Download

    • Nombre abreviado: s3download

    En la práctica, cualquier tipo de capa funcionará con las pilas de Linux, pero el ejemplo no necesita ninguno de los paquetes que instalan que estos instalan, por lo que utilizar una capa personalizada es el enfoque más sencillo.

  4. Añada una instancia de funcionamiento ininterrumpido con la configuración predeterminada a la capa e iníciela.

Ahora puede instalar y ejecutar la receta.

Para ejecutar la receta
  1. Edite la pila para habilitar los libros de recetas personalizados y especifique las siguientes opciones de configuración.

    • Tipo de repositorio: Archivo HTTP

    • URL de repositorio: la dirección URL del archivo del libro de recetas que anotó previamente.

    No modifique los valores predeterminados del resto de opciones y haga clic en Save (Guardar) para actualizar la configuración de la pila.

  2. Ejecute el comando de pila Update Custom Cookbooks, que instala la versión actual de los libros de recetas personalizados en las instancias de la pila. Si existiera una versión anterior de los libros de recetas, este comando la sobrescribe.

  3. Para ejecutar la receta, basta con ejecutar el comando de pila Execute Recipes (Ejecutar recetas) con Recipes to execute (Recetas que ejecutar) configurado en s3bucket_ops::default. Este comando inicia una ejecución de Chef con una lista de ejecución que es s3bucket_ops::default.

    nota

    Por lo general, haces que AWS OpsWorks Stacks ejecute tus recetas automáticamente asignándolas al evento del ciclo de vida correspondiente. Puede desencadenar el evento de forma manual para ejecutar estas recetas. Puede utilizar un comando de pila para desencadenar los eventos Setup y Configure y un comando de implementación en el caso de los eventos Deploy y Undeploy.

Una vez que la receta se haya ejecutado correctamente, podrá verificarla.

Para verificar s3bucket_ops
  1. El primer paso es revisar el registro de Chef. La pila debe tener una instancia llamada opstest1. En la página Instances (Instancias), haga clic en show (mostrar) en la columna Log (Registro) de la instancia para ver el registro de Chef. Desplácese hacia abajo; encontrará el mensaje casi al final del archivo.

    ... [2014-07-31T17:01:45+00:00] INFO: Storing updated cookbooks/opsworks_cleanup/attributes/customize.rb in the cache. [2014-07-31T17:01:45+00:00] INFO: Storing updated cookbooks/opsworks_cleanup/metadata.rb in the cache. [2014-07-31T17:01:46+00:00] INFO: ******Downloading a file from Amazon S3.****** [2014-07-31T17:01:46+00:00] INFO: Processing template[/etc/hosts] action create (opsworks_stack_state_sync::hosts line 3) ...
  2. Utilice SSH para iniciar sesión en la instancia y ver el contenido de /tmp.