Paso 2.5: Implementar una aplicación - 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.

Paso 2.5: Implementar una aplicación

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.

La instalación de IIS crea un directorio C:\inetpub\wwwroot para el código de la aplicación y los archivos relacionados. El siguiente paso consiste en instalar una aplicación en dicho directorio. En este ejemplo, instalará una página de inicio HTML estática, default.html, en C:\inetpub\wwwroot. Puede ampliar fácilmente el sistema general para administrar situaciones más complejas, por ejemplo, las aplicaciones ASP.NET.

Puede incluir los archivos de la aplicación en el libro de recetas para que install.rb los copie en C:\inetpub\wwwroot. Para ver ejemplos prácticos, consulte Ejemplo 6: Creación de archivos. Sin embargo, este sistema no es ni muy flexible ni eficaz, y suele ser mejor separar el desarrollo del libro de recetas del desarrollo de las aplicaciones.

La solución idónea es disponer de una receta de implementación independiente que recupere el código de aplicación y los archivos relacionados de un repositorio (el repositorio que prefiera, no solo el repositorio del libro de recetas) y lo instale en cada instancia de servidor de IIS. Este sistema separa el desarrollo del libro de recetas del desarrollo de aplicaciones y, cuando se necesita actualizar la aplicación, permite ejecutar de nuevo la receta de implementación sin necesidad de actualizar los libros.

En este tema se muestra cómo implementar una receta sencilla que implementa default.htm en el servidor de IIS. Puede ampliar fácilmente este ejemplo para aplicaciones más complejas.

Crear la aplicación y almacenarla en un repositorio

Puede utilizar el repositorio que prefiera para las aplicaciones. Para simplificar, en este ejemplo se almacena default.htm en un bucket de S3 público.

Para crear la aplicación
  1. Cree un directorio denominado iis-application en una ubicación cómoda dentro de la estación de trabajo.

  2. Añada un archivo default.htm a iis-application con el contenido siguiente.

    <!DOCTYPE html> <html> <head> <title>IIS Example</title> </head> <body> <h1>Hello World!</h1> </body> </html>
  3. Cree un bucket de S3, cargue el archivo default.htm en el bucket y registre la URL para usarla después. Para simplificar, publique el archivo.

    nota

    Esta es una aplicación muy sencilla, pero puede ampliar sus principios básicos para gestionar aplicaciones de producción.

    • Con aplicaciones más complejas con muchos archivos, es más sencillo crear un archivo.zip de iis-application y cargarlo en el bucket de S3.

      Después, puede descargar el archivo .zip y extraer su contenido en el directorio adecuado. No es necesario descargar varios archivos, crear una estructura de directorios, etcétera.

    • Con una aplicación de producción, probablemente le interese mantener los archivos como privados. Para ver un ejemplo de cómo hacer que una receta descargue archivos de un bucket de S3 privado, consulte Uso del SDK para Ruby en una instancia AWS OpsWorks de Stacks Windows.

    • Puede almacenar la aplicación en cualquier repositorio adecuado.

      Normalmente, la aplicación se descarga utilizando la API pública de un repositorio. En este ejemplo se utiliza la API de Amazon S3. Si, por ejemplo, guardas tu aplicación GitHub, puedes usar la GitHub API.

Implementar una receta que implemente la aplicación

Añada una receta llamada deploy.rb al directorio iis-cookbook recipes, con el contenido siguiente.

chef_gem "aws-sdk-s3" do compile_time false action :install end ruby_block "download-object" do block do require 'aws-sdk-s3' #1 # Aws.config[:ssl_ca_bundle] = 'C:\ProgramData\Git\bin\curl-ca-bundle.crt' Aws.use_bundled_cert! #2 query = Chef::Search::Query.new app = query.search(:aws_opsworks_app, "type:other").first s3region = app[0][:environment][:S3REGION] s3bucket = app[0][:environment][:BUCKET] s3filename = app[0][:environment][:FILENAME] #3 s3_client = Aws::S3::Client.new(region: s3region) s3_client.get_object(bucket: s3bucket, key: s3filename, response_target: 'C:\inetpub\wwwroot\default.htm') end action :run end

En este ejemplo se utiliza SDK for Ruby v2 para descargar el archivo. Sin embargo, AWS OpsWorks Stacks no instala este SDK en las instancias de Windows, por lo que la receta comienza con chef_gemResource, que se encarga de esa tarea.

nota

El recurso chef_gem instala gemas en la versión Ruby dedicada de Chef, que es la versión que usan las recetas. Si desea instalar una gema en una versión Ruby para todo el sistema, utilice el recurso gem_package.

La mayor parte de la receta es un recurso ruby_block que ejecuta un bloque de código Ruby que utiliza SDK para Ruby para descargar default.htm. El código de ruby_block se puede dividir en las siguientes secciones, que corresponden a los comentarios numerados en el ejemplo de código.

1: Especificar un paquete de certificados

Amazon S3 utiliza SSL, por lo que necesita un certificado adecuado para descargar los objetos de un bucket de S3. El SDK para Ruby v2 no incluye un paquete de certificados, por lo que debes proporcionar uno y configurar el SDK para que Ruby lo use. AWS OpsWorks Stacks no instala un paquete de certificados directamente, pero sí instala Git, que incluye un paquete de certificados (curl-ca-bundle.crt). Para mayor comodidad, en este ejemplo se configura SDK para Ruby para usar el paquete de certificados de Git para SSL. También puede instalar su propio paquete y configurar el SDK en consecuencia.

2: Recuperar los datos del repositorio

Para descargar un objeto de Amazon S3, necesita la región de AWS, el nombre del bucket y el nombre de clave. Como se describe más adelante, en este ejemplo se proporciona esta información asociando un conjunto de variables de entorno con la aplicación. Cuando implementas una aplicación, AWS OpsWorks Stacks agrega un conjunto de atributos al objeto de nodo de la instancia. Estos atributos son básicamente una tabla hash que contiene la configuración de las aplicaciones, incluidas las variables de entorno. Los atributos de aplicación para esta aplicación tendrán un aspecto parecido al siguiente, en formato JSON.

{ "app_id": "8f71a9b5-de7f-451c-8505-3f35086e5bb3", "app_source": { "password": null, "revision": null, "ssh_key": null, "type": "other", "url": null, "user": null }, "attributes": { "auto_bundle_on_deploy": true, "aws_flow_ruby_settings": {}, "document_root": null, "rails_env": null }, "data_sources": [{"type": "None"}], "domains": ["iis_example_app"], "enable_ssl": false, "environment": { "S3REGION": "us-west-2", "BUCKET": "windows-example-app", "FILENAME": "default.htm" }, "name": "IIS-Example-App", "shortname": "iis_example_app", "ssl_configuration": { "certificate": null, "private_key": null, "chain": null }, "type": "other", "deploy": true }

Las variables de entorno de la aplicación se almacenan en el atributo [:environment]. Para recuperarlas, utilice una consulta de búsqueda de Chef que recupere la tabla hash de la aplicación, que se encuentra en el nodo aws_opsworks_app. Esta aplicación se definirá como de tipo other para que se busquen aplicaciones de ese tipo. La receta aprovecha el hecho de que en esta instancia solo haya una aplicación, ya que la tabla hash que nos interesa es justo app[0]. Para mayor comodidad, la receta asigna después la región, el bucket y los nombres de archivo a variables.

Para obtener más información sobre el uso de la búsqueda de Chef, consulte Obtención de valores de atributo con la búsqueda de Chef.

3: Descargar el archivo

La tercera parte de la receta crea un objeto cliente de S3 y utiliza su método get_object para descargar default.htm en el directorio C:\inetpub\wwwroot de la instancia.

nota

Una receta es una aplicación de Ruby, por tanto, el código Ruby no tiene que estar necesariamente en un ruby_block. No obstante, el código del cuerpo de la receta se ejecuta en primer lugar, seguido en orden por los recursos. En este ejemplo, si pone el código de descarga en el cuerpo de la receta, dará error, porque el recurso chef_gem aún no habrá instalado . El código del recurso ruby_block se ejecuta cuando se ejecuta el recurso, después de que el recurso chef_gem haya instalado SDK para Ruby.

Actualizar los libros de recetas de la instancia

AWS OpsWorks Stacks instala automáticamente libros de cocina personalizados en las instancias nuevas. Pero está trabajando con una instancia existente, por lo que debe actualizar el libro de recetas manualmente.

Para actualizar los libros de recetas de la instancia
  1. Cree un archivo de almacenamiento .zip de iis-cookbook y cárguelo en el bucket de S3.

    Este archivo sobrescribe el libro de recetas existente, pero la URL sigue siendo la misma, por lo que no es necesario actualizar la configuración de la pila.

  2. Si la instancia no está online, reiníciela.

  3. Una vez que la instancia está online, elija Stack (Pila) en el panel de navegación y, a continuación, elija Run Command (Ejecutar comando).

  4. Para Command (Comando), elija Update Custom Cookbooks (Actualizar libros de recetas personalizados). Este comando instala en la instancia el libro de recetas actualizado.

  5. Elija Update Custom Cookbooks (Actualizar libros de recetas personalizados). El comando podría tardar varios minutos en finalizar.

Añadir la receta a la capa de IIS personalizada

Al igual que con install.rb, la mejor forma de administrar la implementación es asignar deploy.rb al evento del ciclo de vida adecuado. Por lo general, las recetas de implementación se asignan al evento de implementación (Deploy) y se denominan colectivamente recetas de implementación. Al asignar una receta al evento de implementación no se activa el evento. En lugar de esto:

  • En el caso de las instancias nuevas, AWS OpsWorks Stacks ejecuta automáticamente las recetas de implementación una vez finalizadas las de configuración, por lo que las nuevas instancias tienen automáticamente la versión actual de la aplicación.

  • Con las instancias online, utilice un comando deploy para instalar manualmente las aplicaciones nuevas o las actualizadas.

    Este comando activa un evento de implementación en las instancias de la pila que ejecuta las recetas de implementación.

Para asignar deploy.rb al evento de implementación de la capa
  1. Elija Layers (Capas) en el panel de navegación y, a continuación, elija Recipes (recetas) bajo Layer IISExample (Capa IISExample).

  2. En Custom Chef Recipes (Recetas de Chef personalizadas), añada iis-cookbook::deploy al cuadro de recetas Deploy (Implementar) y elija + para añadir la receta a la capa.

  3. Seleccione Save (Guardar) para guardar la nueva configuración. Las recetas de implementación personalizadas incluirán ahora iis-cookbook::deploy.

Añadir una aplicación

La última tarea consiste en añadir una aplicación a la pila para que represente tu aplicación en el entorno de AWS OpsWorks Stacks. Las aplicaciones incluyen metadatos, como el nombre visible de la aplicación y los datos necesarios para descargarla desde su repositorio.

Para añadir la aplicación a la pila
  1. Elija Apps (Aplicaciones) en el panel de navegación y, a continuación, elija Add an app (Añadir una aplicación).

  2. Configure la aplicación con las siguientes opciones.

    • Nombre: IIIS-Example-App

    • Tipo de repositorio: otro

    • Environment Variables: añada las tres variables de entorno siguientes:

      • S3REGION: la región del bucket (en este caso, us-west-1).

      • BUCKET: el nombre del bucket, por ejemplo windows-example-app.

      • FILENAME: el nombre del archivo: default.htm.

  3. Acepte los valores predeterminados para el resto de la configuración y, a continuación, elija Add App (Añadir aplicación) para añadir la aplicación a la pila.

nota

En este ejemplo se utilizan variables de entorno para proporcionar los datos de descarga. Un enfoque alternativo consiste en utilizar un tipo de repositorio de S3 Archive y proporcionar la URL del archivo. AWS OpsWorks Stacks añade la información, junto con los datos opcionales, como tus credenciales de AWS, al app_source atributo de la aplicación. La receta de implementación debe recuperar la URL de los atributos de la aplicación y analizarla para extraer la región, el nombre del bucket y el nombre del archivo.

Implementar y abrir la aplicación

AWS OpsWorks Stacks implementa aplicaciones automáticamente en instancias nuevas, pero no en instancias en línea. Dado que la instancia ya se está ejecutando, debe implementar la aplicación manualmente.

Para implementar la aplicación
  1. Elija Apps (Aplicaciones) en el panel de navegación y, a continuación, elija deploy (implementar) en la columna Actions (Acciones) de la aplicación.

  2. Command (Comando) debe establecerse en Deploy (Implementar). Elija Deploy (Implementar) en la parte inferior derecha de la página Deploy App (Implementar aplicación). El comando podría tardar varios minutos en finalizar.

    Una vez finalizada la implementación, vuelva a la página Apps (Aplicaciones). El indicador Status (Estado) muestra successful (correcto) en verde y junto al nombre de la aplicación habrá una marca de verificación verde que indica que la implementación se ha realizado correctamente.

nota

Las aplicaciones de Windows son siempre del tipo Other (Otro). Por tanto, al implementarse la aplicación, ocurre lo siguiente:

nota

Para obtener más información sobre cómo solucionar implementaciones o aplicaciones fallidas, consulte Depuración de recetas.

La aplicación ya está instalada. Puede abrirla eligiendo Instances (Instancias) en el panel Navigation (Navegación) y, después, la dirección IP pública de la instancia. Esto envía una solicitud HTTP a la instancia, y debería ver algo parecido a lo siguiente en el navegador.