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

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.

nota

Este ejemplo presupone que ya ha completado el ejemplo Ejecución de una receta en una instancia de Windows. De lo contrario, debería completarlo primero. En concreto, describe cómo habilitar el acceso RDP en las instancias.

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?.

En este tema se describe cómo usar la instancia AWS SDK for Rubyde Windows de AWS OpsWorks Stacks para descargar un archivo de un bucket de S3.

Si una aplicación de Ruby necesita obtener acceso a un recurso de AWS, debe proporcionarle un conjunto de credenciales de AWS con los permisos adecuados. En cuanto a las recetas, la mejor opción para proporcionar credenciales de AWS es utilizar un rol AWS Identity and Access Management (IAM). Un rol de IAM funciona de manera muy similar a un usuario de IAM: tiene una política adjunta que otorga permisos para usar los distintos servicios. AWS Sin embargo, puede asignar un rol a una instancia Amazon Elastic Compute Cloud (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.

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 Windows, 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; consulte 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 "s3download" version "0.1.0"
  3. Cree un directorio recipes dentro de s3download.

  4. Cree un archivo default.rb con la siguiente receta y guárdelo en el directorio recipes. Sustituya windows-cookbooks por el nombre del bucket de S3 que utilizará para almacenar el archivo que se va a descargar.

    Chef::Log.info("******Downloading an object from S3******") chef_gem "aws-sdk-s3" do compile_time false action :install end ruby_block "download-object" do block do require 'aws-sdk-s3' Aws.use_bundled_cert! s3_client = Aws::S3::Client.new(region:'us-west-2') s3_client.get_object(bucket: 'windows-cookbooks', key: 'myfile.txt', response_target: '/chef/myfile.txt') end action :run end
  5. Cree un archivo de almacenamiento .zip de s3download y cárguelo en un bucket de S3. Publíquelo y anote su URL; la necesitará más adelante.

  6. Cree un archivo de texto llamado myfile.txt y cárguelo en un bucket de S3. Este es el archivo que descargará la receta, por lo que puede utilizar el bucket que prefiera.

La receta lleva a cabo las siguientes tareas.

1: Instalación de SDK para Ruby v2.

En el ejemplo se utiliza SDK para Ruby para descargar el objeto. Sin embargo, AWS OpsWorks Stacks no instala este SDK en las instancias de Windows, por lo que la primera parte de la receta utiliza un chef_gemrecurso para gestionar esa tarea. Puede utilizar este recurso para instalar las gemas que utilizará Chef, las cuales incluyen recetas.

2. Descargar el archivo.

La tercera parte de la receta utiliza un recurso ruby_block para ejecutar el código de SDK para Ruby v2 de modo que descargue myfile.txt de un bucket de S3 llamado windows-cookbooks en el directorio /chef de la instancia. Cambie windows-cookbooks el nombre del bucket que contiene myfile.txt.

nota

Una receta es una aplicación de Ruby, por lo que puede incluir el código de Ruby en el cuerpo de la receta; no necesita estar en un recurso ruby_block. Sin embargo, Chef ejecuta el código de Ruby primero en el cuerpo de la receta y, a continuación, en cada recurso, en orden. En este ejemplo, incluir el código de la descarga en el cuerpo de la receta devolverá un error porque depende del SDK para Ruby, y el recurso chef_gem que instala el SDK aún no se ha ejecutado. El código del recurso ruby_block se ejecuta cuando se ejecuta el recurso, lo que ocurre una vez que el recurso chef_gem ha instalado SDK para Ruby.

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.

Creación de una pila
  1. Abra la consola de AWS OpsWorks y elija Add Stack (Añadir pila). Especifique las siguientes opciones de configuración, acepte los valores predeterminados del resto y, a continuación, elija Add Stack (Añadir pila).

    • Nombre: S3Download

    • Región: Oeste de EE. UU. (Oregón)

      Este ejemplo funcionará en cualquier región, pero recomendamos utilizar la región Oeste de EE. UU. (Oregón) en los tutoriales.

    • Sistema operativo predeterminado: Microsoft Windows Server 2012 R2

  2. Elija Add a layer (Añadir una capa) y añada una capa personalizada a la pila con la siguiente configuración.

    • Nombre: S3Download

    • Nombre abreviado: s3download

  3. Añada una instancia de funcionamiento ininterrumpido con la configuración predeterminada a la capa S3Download 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: S3 Archive

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

    Acepte los valores predeterminados del resto de opciones y elija Save (Guardar) para actualizar la configuración de la pila.

  2. Ejecute el comando de pila Update Custom Cookbooks, que instala la última versión del libro de recetas personalizado en las instancias online 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 s3download::default. Este comando inicia una ejecución de Chef con una lista de ejecución que es s3download::default.

    nota

    Por lo general, haces que AWS OpsWorks Stacks ejecute tus recetas automáticamente asignándolas al evento del ciclo de vida correspondiente. También 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 s3download
  1. El primer paso es revisar el registro de Chef. La pila debe tener una instancia llamada s3download1. En la página Instances (Instancias), elija 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.

    ... [2015-05-01T21:11:04+00:00] INFO: Loading cookbooks [s3download@0.0.0] [2015-05-01T21:11:04+00:00] INFO: Storing updated cookbooks/s3download/recipes/default.rb in the cache. [2015-05-01T21:11:04+00:00] INFO: ******Downloading an object from S3****** [2015-05-01T21:11:04+00:00] INFO: Processing chef_gem[aws-sdk] action install (s3download::default line 3) [2015-05-01T21:11:05+00:00] INFO: Processing ruby_block[download-object] action run (s3download::default line 8) ...
  2. Utilice RDP para iniciar sesión en la instancia y revise el contenido de c:\chef.