Implementación de una aplicación Express en Elastic Beanstalk - AWS Elastic Beanstalk

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.

Implementación de una aplicación Express en Elastic Beanstalk

En esta sección, se describe cómo se implementa una aplicación de ejemplo en Elastic Beanstalk a través la interfaz de línea de comando de Elastic Beanstalk (CLI de EB) y Git, y cómo se actualiza después para utilizar el marco de Express.

Requisitos previos

En este tutorial se requiere el lenguaje de Node.js, su administrador de paquetes llamado npm y el marco de la aplicación web de Express. Para obtener más detalles acerca de la instalación de estos componentes y la configuración de su entorno de desarrollo local, consulte Configuración del entorno de desarrollo de Node.js.

nota

En este tutorial, no es necesario que instale el SDK de AWS para Node.js, que también se menciona en Configuración del entorno de desarrollo de Node.js.

En el tutorial también se requiere la interfaz de línea de comandos de Elastic Beanstalk (CLI de EB). Para obtener detalles sobre la instalación y configuración de la CLI de EB, consulte Instalación de la CLI de EB y Configuración de la CLI de EB.

Inicialización de Git

La configuración de Express y Node.js del requisito previo da lugar a una estructura de proyectos de Express en la carpeta node-express. Si aún no ha generado un proyecto de Express, ejecute el siguiente comando. Para obtener más información, consulte Instalación de Express.

~/node-express$ express && npm install

Ahora vamos a configurar un repositorio de Git en esta carpeta.

Para configurar un repositorio de Git

  1. Inicialice el repositorio de Git. Si no tiene instalado Git, descárguelo del sitio de descargas de Git.

    ~/node-express$ git init
  2. Cree un archivo llamado .gitignore y agréguele los siguientes archivos y directorios. Estos archivos no se incluirán en el repositorio. Este paso no es obligatorio pero sí recomendable.

    node-express/.gitignore

    node_modules/ .gitignore .elasticbeanstalk/

Cree un entorno de Elastic Beanstalk

Configure un repositorio en la CLI de EB para la aplicación y cree un entorno de Elastic Beanstalk que ejecute la plataforma Node.js.

  1. Cree un repositorio con el comando eb init.

    ~/node-express$ eb init --platform node.js --region us-east-2 Application node-express has been created.

    Este comando crea un archivo de configuración en una carpeta llamada .elasticbeanstalk que especifica los ajustes para crear los entornos de la aplicación y crea una aplicación de Elastic Beanstalk con el nombre de la carpeta actual.

  2. Cree un entorno que ejecute una aplicación de ejemplo con el comando eb create.

    ~/node-express$ eb create --sample node-express-env

    Este comando crea un entorno con balanceador de carga utilizando la configuración predeterminada de la plataforma de Node.js y los siguientes recursos:

    • EC2 Instance (Instancia de EC2): una máquina virtual de Amazon Elastic Compute Cloud (Amazon EC2) configurada para ejecutar aplicaciones web en la plataforma que elija.

      Cada plataforma ejecuta un conjunto específico de software, archivos de configuración y scripts compatibles con una determinada versión de lenguaje, marco de trabajo y contenedor web (o una combinación de estos). La mayoría de las plataformas utilizan Apache o nginx como un proxy inverso que se sitúa delante de la aplicación web, reenvía las solicitudes a esta, administra los recursos estáticos y genera registros de acceso y errores.

    • Instance security group (Grupo de seguridad de la instancia): grupo de seguridad de Amazon EC2 configurado para permitir el tráfico entrante en el puerto 80. Este recurso permite que el tráfico HTTP procedente del balanceador de carga llegue a la instancia EC2 en la que se ejecuta la aplicación web. De forma predeterminada, el tráfico no está permitido en otros puertos.

    • Load balancer (Balanceador de carga): balanceador de carga de Elastic Load Balancing configurado para distribuir solicitudes a las instancias que se ejecutan en la aplicación. Los balanceadores de carga también permiten que las instancias no estén expuestas directamente a Internet.

    • Load balancer security group (Grupo de seguridad del balanceador de carga): grupo de seguridad de Amazon EC2 configurado para permitir el tráfico entrante en el puerto 80. Este recurso permite que el tráfico HTTP procedente de Internet llegue al balanceador de carga. De forma predeterminada, el tráfico no está permitido en otros puertos.

    • Auto Scaling group (Grupo de Auto Scaling): grupo de Auto Scaling configurado para reemplazar una instancia si termina o deja de estar disponible.

    • Amazon S3 bucket (Bucket de Amazon S3): ubicación de almacenamiento para el código fuente, los registros y otros artefactos que se crean al utilizar Elastic Beanstalk.

    • Alarmas de Amazon CloudWatch: dos alarmas de CloudWatch que supervisan la carga de las instancias del entorno y que se activan si la carga es demasiado alta o demasiado baja. Cuando se activa una alarma, en respuesta, el grupo de Auto Scaling aumenta o reduce los recursos.

    • AWS CloudFormation stack (Pila de AWS CloudFormation): Elastic Beanstalk utiliza AWS CloudFormation para lanzar los recursos en su entorno y propagar los cambios de configuración. Los recursos se definen en una plantilla que puede verse en la consola de AWS CloudFormation.

    • Domain name (Nombre de dominio): un nombre de dominio que direcciona el tráfico a la aplicación web con el formato subdominio.region.elasticbeanstalk.com.

  3. Cuando se complete la creación del entorno, utilice el comando eb open para abrir la URL del entorno en el navegador predeterminado.

    ~/node-express$ eb open

Actualizar la aplicación

Una vez que haya creado el entorno con una aplicación de ejemplo, puede actualizarlo con su propia aplicación. En este paso, actualizamos la aplicación de ejemplo para que use la plataforma Express.

Si desea actualizar la aplicación para que use Express

  1. En su equipo local, cree un directorio .ebextensions en el directorio de nivel superior del paquete de código fuente. En este ejemplo, usaremos node-express/.ebextensions.

  2. Agregue un archivo de configuración que establezca Node Command en "npm start":

    node-express/.ebextensions/nodecommand.config

    option_settings: aws:elasticbeanstalk:container:nodejs: NodeCommand: "npm start"

    Para obtener más información, consulte Personalización avanzada de entornos con archivos de configuración (.ebextensions).

  3. Almacene temporalmente los archivos:

    ~/node-express$ git add . ~/node-express$ git commit -m "First express app"
  4. Implemente los cambios:

    ~/node-express$ eb deploy
  5. Una vez que el entorno esté listo, actualice la dirección URL para verificar que ha funcionado. Debería aparecer una página web que diga Welcome to Express.

A continuación, vamos a actualizar la aplicación de Express para atender archivos estáticos y agregar una nueva página.

Para configurar archivos estáticos y agregar una nueva página a la aplicación de Express

  1. Agregue un segundo archivo de configuración con el contenido siguiente:

    node-express/.ebextensions/staticfiles.config

    option_settings: aws:elasticbeanstalk:container:nodejs:staticfiles: /public: /public

    Esta opción configura el servidor proxy que proporcione los archivos en la carpeta public de la ruta /public de la aplicación. Si los archivos se sirven de forma estática desde el proxy, se reduce la carga en la aplicación.

  2. Comente el mapeo estático en node-express/app.js. Esto no es obligatorio, pero es una buena prueba para confirmar que los mapeos estáticos están configurados correctamente.

    // app.use(express.static(path.join(__dirname, 'public')));
  3. Agregue los archivos actualizados al repositorio local y confirme los cambios.

    ~/node-express$ git add .ebextensions/ app.js ~/node-express$ git commit -m "Serve stylesheets statically with nginx."
  4. Add node-express/routes/hike.js. Escriba lo siguiente:

    exports.index = function(req, res) { res.render('hike', {title: 'My Hiking Log'}); }; exports.add_hike = function(req, res) { };
  5. Actualice node-express/app.js para incluir tres nuevas líneas.

    En primer lugar, inserte la siguiente línea para agregar un objeto require para esta ruta:

    hike = require('./routes/hike');

    El archivo debe ser similar al siguiente fragmento:

    var express = require('express'); var path = require('path'); var hike = require('./routes/hike');

    A continuación, agregue las dos líneas siguientes a node-express/app.js detrás de var app = express();.

    app.get('/hikes', hike.index); app.post('/add_hike', hike.add_hike);

    El archivo debe ser similar al siguiente fragmento:

    var app = express(); app.get('/hikes', hike.index); app.post('/add_hike', hike.add_hike);
  6. Copie node-express/views/index.jade en node-express/views/hike.jade.

    ~/node-express$ cp views/index.jade views/hike.jade
  7. Añada sus archivos al repositorio local, confirme los cambios e implemente la aplicación actualizada.

    ~/node-express$ git add . ~/node-express$ git commit -m "Add hikes route and template." ~/node-express$ eb deploy
  8. Su entorno se actualizará al cabo de unos minutos. Cuando el entorno esté listo, asegúrese de que funciona actualizando el navegador y agregando hikes al final de la URL (por ejemplo, http://node-express-env-syypntcz2q.elasticbeanstalk.com/hikes).

    Debería ver una página web con el título My Hiking Log.

Eliminar recursos

Si ha terminado de trabajar con Elastic Beanstalk, puede terminar su entorno.

Utilice el comando eb terminate para terminar el entorno y todos los recursos que contiene.

~/node-express$ eb terminate The environment "node-express-env" and all associated instances will be terminated. To confirm, type the environment name: node-express-env INFO: terminateEnvironment is starting. ...