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
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.
Temas
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
-
Cree un directorio denominado
iis-application
en una ubicación cómoda dentro de la estación de trabajo. -
Añada un archivo
default.htm
aiis-application
con el contenido siguiente.<!DOCTYPE html> <html> <head> <title>IIS Example</title> </head> <body> <h1>Hello World!</h1> </body> </html>
-
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_gem
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
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 nodoaws_opsworks_app
. Esta aplicación se definirá como de tipoother
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 justoapp[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 descargardefault.htm
en el directorioC:\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
-
Cree un archivo de almacenamiento
.zip
deiis-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.
-
Si la instancia no está online, reiníciela.
-
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).
-
Para Command (Comando), elija Update Custom Cookbooks (Actualizar libros de recetas personalizados). Este comando instala en la instancia el libro de recetas actualizado.
-
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
-
Elija Layers (Capas) en el panel de navegación y, a continuación, elija Recipes (recetas) bajo Layer IISExample (Capa IISExample).
-
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. -
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
-
Elija Apps (Aplicaciones) en el panel de navegación y, a continuación, elija Add an app (Añadir una aplicación).
-
Configure la aplicación con las siguientes opciones.
-
Nombre: I
IIS-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 ejemplowindows-example-app
. -
FILENAME
: el nombre del archivo:default.htm
.
-
-
-
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
-
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.
-
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:
-
Se agregan los datos de la aplicación a los atributos de configuración e implementación de la pila, como se ha descrito anteriormente.
-
Se activa un evento de implementación en las instancias de la pila que ejecuta las recetas de implementación personalizadas.
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.
![](images/windows-iis-app.png)