

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 Node.js con DynamoDB en Elastic Beanstalk
<a name="nodejs-dynamodb-tutorial"></a>

Este tutorial y su aplicación de ejemplo, [nodejs-example-dynamo.zip](samples/nodejs-example-dynamo.zip), explican el proceso de implementación de una aplicación de Node.js que utiliza el AWS SDK de Node.js para JavaScript interactuar con el servicio Amazon DynamoDB. Creará una tabla de DynamoDB que esté en una base de datos desacoplada o externa del entorno. AWS Elastic Beanstalk También configurará la aplicación para que utilice una base de datos desacoplada. En un entorno de producción, se recomienda utilizar una base de datos que esté desacoplada del entorno de Elastic Beanstalk para que sea independiente del ciclo de vida del entorno. Esta práctica también permite realizar [implementaciones azul/verde](using-features.CNAMESwap.md).

La aplicación de muestra ilustra lo siguiente:
+ Una tabla de DynamoDB que almacena los datos de texto proporcionados por el usuario.
+ Los [archivos de configuración](ebextensions.md) para crear la tabla.
+ Un tema de Amazon Simple Notification Service.
+  Uso de un [archivo package.json](nodejs-platform-dependencies.md#nodejs-platform-packagejson) para instalar paquetes durante la implementación.

**Topics**
+ [Requisitos previos](#nodejs-dynamodb-tutorial-prereqs)
+ [Cree un entorno de Elastic Beanstalk](#nodejs-dynamodb-tutorial-launch)
+ [Añadir permisos a las instancias del entorno](#nodejs-dynamodb-tutorial-role)
+ [Implementar la aplicación de muestra](#nodejs-dynamodb-tutorial-deploy)
+ [Creación de una tabla de DynamoDB](#nodejs-dynamodb-tutorial-database)
+ [Actualización de los archivos de configuración de la aplicación](#nodejs-dynamodb-tutorial-update)
+ [Configuración de su entorno para alta disponibilidad](#nodejs-dynamodb-tutorial-configure)
+ [Limpieza](#nodejs-dynamodb-tutorial-cleanup)
+ [Siguientes pasos](#nodejs-dynamodb-tutorial-nextsteps)

## Requisitos previos
<a name="nodejs-dynamodb-tutorial-prereqs"></a>

Este tutorial tiene siguientes los requisitos previos:
+ Los tiempos de ejecución de Node.js
+ El software de administración de paquetes de Node.js predeterminado, npm
+ El generador de línea de comandos Express
+ La interfaz de línea de comando de Elastic Beanstalk (CLI de EB)

Para obtener más detalles acerca de la instalación de los primeros tres componentes y la configuración de su entorno de desarrollo local, consulte [Configuración del entorno de desarrollo de Node.js para Elastic Beanstalk](nodejs-devenv.md). Para este tutorial, no necesita instalar el AWS SDK para Node.js, que también se menciona en el tema al que se hace referencia.

Para obtener detalles sobre la instalación y configuración de la CLI de EB, consulte [Instalación de la CLI de EB con el script de configuración (recomendado)](eb-cli3.md#eb-cli3-install) y [Configuración de la CLI de EB](eb-cli3-configuration.md).

## Cree un entorno de Elastic Beanstalk
<a name="nodejs-dynamodb-tutorial-launch"></a>

**Su directorio de aplicaciones**  
Este tutorial usa un directorio llamado `nodejs-example-dynamo` para el paquete de origen de la aplicación. Cree el directorio `nodejs-example-dynamo` para este tutorial.

```
~$ mkdir nodejs-example-dynamo
```

**nota**  
Cada tutorial de este capítulo usa su propio directorio para el paquete de origen de la aplicación. El nombre del directorio coincide con el nombre de la aplicación de muestra utilizada en el tutorial.

Cambie su directorio de trabajo actual a `nodejs-example-dynamo`.

```
~$ cd nodejs-example-dynamo
```

Ahora configuremos un entorno de Elastic Beanstalk que ejecute la plataforma Node.js y la aplicación de muestra. Se usará la interfaz de línea de comandos de Elastic Beanstalk (CLI de EB)

**Para configurar un repositorio en la CLI de EB para la aplicación y crear un entorno de Elastic Beanstalk que ejecute la plataforma Node.js**

1. Cree un repositorio con el comando **[**eb init**](eb3-init.md)**.

   ```
   ~/nodejs-example-dynamo$ eb init --platform node.js --region <region>
   ```

   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.

1. Cree un entorno que ejecute una aplicación de muestra con el comando **[**eb create**](eb3-create.md)**.

   ```
   ~/nodejs-example-dynamo$ eb create --sample nodejs-example-dynamo
   ```

   Este comando crea un entorno con equilibrador de carga utilizando la configuración predeterminada de la plataforma de Node.js y los siguientes recursos:
   + **EC2 instancia**: una máquina virtual de Amazon Elastic Compute Cloud (Amazon EC2) configurada para ejecutar aplicaciones web en la plataforma que elijas.

     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.
   + **Grupo de seguridad de instancias**: un grupo EC2 de seguridad de Amazon configurado para permitir el tráfico entrante en el puerto 80. Este recurso permite que el tráfico HTTP del balanceador de cargas llegue a la EC2 instancia que ejecuta tu aplicación web. De forma predeterminada, el tráfico no está permitido en otros puertos.
   + **Balanceador de carga**: equilibrador 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.
   + **Grupo de seguridad del balanceador de carga**: un grupo EC2 de seguridad de Amazon configurado para permitir el tráfico entrante en el puerto 80. Este recurso permite que el tráfico HTTP procedente de Internet llegue al equilibrador de carga. De forma predeterminada, el tráfico no está permitido en otros puertos.
   + **Grupo de escalado automático**: grupo de escalado automático configurado para reemplazar una instancia si termina o deja de estar disponible.
   + **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.
   + ** CloudWatch Alarmas de Amazon**: dos CloudWatch alarmas que monitorean la carga de las instancias de su entorno y que se activan si la carga es demasiado alta o demasiado baja. Cuando se activa una alarma, en respuesta, el grupo de escalado automático aumenta o reduce los recursos.
   + **CloudFormation pila**: Elastic CloudFormation Beanstalk se utiliza para lanzar los recursos de su entorno y propagar los cambios de configuración. Los recursos se definen en una plantilla que puede verse en la [consola de CloudFormation](https://console.aws.amazon.com/cloudformation).
   + **Nombre de dominio***: un nombre de dominio que se dirige a su aplicación web en el formulario. *subdomain* *region*.elasticbeanstalk.com*.
**Seguridad de dominios**  
Para aumentar la seguridad de las aplicaciones de Elastic Beanstalk, el dominio *elasticbeanstalk.com* está registrado en la [lista de sufijos públicos (PSL)](https://publicsuffix.org/).  
Para mayor seguridad, se recomienda que utilice cookies con un prefijo `__Host-` en caso de que necesite configurar cookies confidenciales en el nombre de dominio predeterminado de sus aplicaciones de Elastic Beanstalk. Esta práctica le ayuda a proteger su dominio de los intentos de falsificación de solicitudes entre sitios (CSRF). Para más información, consulte la página [Set-Cookie](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#cookie_prefixes) en la red de desarrolladores de Mozilla.

1. Cuando se complete la creación del entorno, utilice el comando [**eb open**](eb3-open.md) para abrir la URL del entorno en el navegador predeterminado.

   ```
   ~/nodejs-example-dynamo$ eb open
   ```

Ahora ha creado un entorno de Elastic Beanstalk para Node.js con una aplicación de muestra. Puede actualizarlo con su propia aplicación. Luego, actualizamos la aplicación de muestra para que use el marco de Express.

## Añadir permisos a las instancias del entorno
<a name="nodejs-dynamodb-tutorial-role"></a>

La aplicación se ejecuta en una o más EC2 instancias detrás de un balanceador de carga y atiende las solicitudes HTTP de Internet. Cuando recibe una solicitud que requiere el uso de AWS servicios, la aplicación utiliza los permisos de la instancia en la que se ejecuta para acceder a esos servicios.

La aplicación de ejemplo usa permisos de instancia para escribir datos en una tabla de DynamoDB y enviar notificaciones a un tema de Amazon SNS con el SDK de Node.js. JavaScript Añada las siguientes políticas administradas al [perfil de instancia](concepts-roles-instance.md) predeterminado para conceder a las EC2 instancias de su entorno permiso de acceso a DynamoDB y Amazon SNS:
+ **AmazonDynamoDBFullAcceso**
+ **Amazon SNSFull Access**

**Para agregar políticas al perfil de instancia predeterminado**

1. Abra la [página Roles](https://console.aws.amazon.com/iam/home#roles) en la consola de IAM.

1. Elige **aws-elasticbeanstalk-ec2 funciones**.

1. En la pestaña **Permissions (Permisos)**, elija **Attach policies (Adjuntar políticas)**.

1. Seleccione la política administrada que se aplicará a los demás servicios que utilice la aplicación. Para este tutorial, seleccione `AmazonSNSFullAccess` y `AmazonDynamoDBFullAccess`.

1. Elija **Asociar política**.

Para obtener más información acerca de cómo administrar perfiles de instancia, consulte [Administración de perfiles de instancia de Elastic Beanstalk](iam-instanceprofile.md).

## Implementar la aplicación de muestra
<a name="nodejs-dynamodb-tutorial-deploy"></a>

Ahora su entorno está listo para implementar y ejecutar la aplicación de ejemplo de este tutorial: [nodejs-example-dynamo.zip.](samples/nodejs-example-dynamo.zip)

**Para implementar y ejecutar la aplicación de muestra del tutorial**

1. Cambie el directorio de trabajo actual a `nodejs-example-dynamo` de directorio de la aplicación.

   ```
   ~$ cd nodejs-example-dynamo
   ```

1. Descargue y extraiga el contenido del paquete de código fuente de la aplicación de ejemplo ([nodejs-example-dynamo.zip](samples/nodejs-example-dynamo.zip)) en el directorio de la aplicación. `nodejs-example-dynamo`

1. Implemente la aplicación de muestra en su entorno Elastic Beanstalk con el comando [**eb deploy**](eb3-deploy.md).

   ```
   ~/nodejs-example-dynamo$ eb deploy
   ```
**nota**  
De forma predeterminada, el comando `eb deploy` crea un archivo ZIP de la carpeta del proyecto. Puede configurar la CLI de EB para implementar un artefacto de su proceso de compilación en lugar de crear un archivo ZIP de la carpeta del proyecto. Para obtener más información, consulte [Implementar un artefacto en lugar de la carpeta del proyecto](eb-cli3-configuration.md#eb-cli3-artifact).

1. Cuando se complete la creación del entorno, utilice el comando [**eb open**](eb3-open.md) para abrir la URL del entorno en el navegador predeterminado.

   ```
   ~/nodejs-example-dynamo$ eb open
   ```

El sitio recopila la información de contacto del usuario y utiliza una tabla de DynamoDB para almacenar los datos. Para agregar una entrada, elija **Sign up today (Regístrese hoy mismo)**, introduzca un nombre y dirección de correo electrónico y, a continuación, elija **Sign Up\$1 (Regístrese)** La aplicación web escribe el contenido del formulario en la tabla y activa una notificación por correo electrónico de Amazon SNS.

![\[Startup landing page with teaser message and sign-up button for upcoming product launch.\]](http://docs.aws.amazon.com/es_es/elasticbeanstalk/latest/dg/images/nodejs-dynamodb-tutorial-app.png)


De momento, el tema de Amazon SNS está configurado con un marcador de posición para el correo electrónico de las notificaciones. Actualización deá la configuración en breve, pero entretanto puede verificar la tabla de DynamoDB y el tema de Amazon SNS en la Consola de administración de AWS.

**Para ver la tabla**

1. Abra la [página Tables](https://console.aws.amazon.com/dynamodb/home?#tables:) en la consola de DynamoDB.

1. Busque la tabla que creó la aplicación. El nombre comienza por **awseb y contiene**. **StartupSignupsTable**

1. Seleccione la tabla, elija **Items (Elementos)** y, a continuación, elija **Start search (Iniciar búsqueda)** para ver todos los elementos de la tabla.

La tabla contiene una entrada para cada dirección de correo electrónico enviada en el sitio de inscripción. Además de escribir en la tabla, la aplicación envía un mensaje a un tema de Amazon SNS que tiene dos suscripciones: una para las notificaciones por correo electrónico que se le envían a usted y otra para una cola de Amazon Simple Queue Service que una aplicación de trabajo puede leer para procesar las solicitudes y enviar mensajes de correo electrónico a los clientes interesados.

**Para ver el tema**

1. Abra la página [Topics (Temas)](https://console.aws.amazon.com/sns/v2/home?#/topics) en la consola de Amazon SNS.

1. Busque el tema que creó la aplicación. El nombre comienza por **awseb** y contiene. **NewSignupTopic**

1. Seleccione el tema para ver sus suscripciones.

La aplicación (`[app.js](https://github.com/awslabs/eb-node-express-sample/blob/master/app.js)`) define dos rutas. La ruta raíz (`/`) devuelve una página web renderizada a partir de una plantilla integrada JavaScript (EJS) con un formulario que el usuario rellena para registrar su nombre y dirección de correo electrónico. Al enviar el formulario se envía una solicitud POST con los datos del formulario a la ruta `/signup`, que escribe una entrada en la tabla de DynamoDB y publica un mensaje en el tema de Amazon SNS para enviar una notificación al propietario de la inscripción.

La aplicación de muestra incluye [archivos de configuración](ebextensions.md) que crean la tabla de DynamoDB, el tema de Amazon SNS y la cola de Amazon SQS usados por la aplicación. Esto le permite crear un nuevo entorno y probar la funcionalidad de forma inmediata, pero tiene el inconveniente de que la tabla de DynamoDB está asociada al entorno. Para un entorno de producción, debería crear la tabla de DynamoDB fuera de su entorno para evitar perderla cuando termine el entorno o actualice su configuración.

## Creación de una tabla de DynamoDB
<a name="nodejs-dynamodb-tutorial-database"></a>

Para utilizar una tabla de DynamoDB externa con una aplicación que se ejecuta en Elastic Beanstalk, primero cree una tabla en DynamoDB. Cuando crea una tabla fuera de Elastic Beanstalk, es completamente independiente de Elastic Beanstalk y de sus entornos de Elastic Beanstalk, y Elastic Beanstalk no la finalizará.

Cree una tabla con la siguiente configuración:
+ **Table name (Nombre de la tabla)** – **nodejs-tutorial**
+ **Primary key (Clave principal)** – **email**
+ Tipo de clave principal: **String (Cadena)**

**Para crear una tabla de DynamoDB**

1. Abra la [página Tables](https://console.aws.amazon.com/dynamodb/home?#tables:) en la consola de administración de DynamoDB.

1. Seleccione **Create table (Creación de tabla)**.

1. Escriba un **Table name (Nombre de tabla)** y una **Primary key (Clave principal)**.

1. Elija el tipo de clave principal.

1. Seleccione **Creación de**.

## Actualización de los archivos de configuración de la aplicación
<a name="nodejs-dynamodb-tutorial-update"></a>

Actualice los [archivos de configuración](ebextensions.md) del origen de la aplicación para que utilicen la tabla **nodejs-tutorial** en lugar de crear una nueva.

**Para actualizar la aplicación de muestra para su uso en producción**

1. Cambie el directorio de trabajo actual a `nodejs-example-dynamo` de directorio de la aplicación.

   ```
   ~$ cd nodejs-example-dynamo
   ```

1. Abra `.ebextensions/options.config` y cambie los valores de las siguientes opciones:
   + **NewSignupEmail**— Su dirección de correo electrónico.
   + **STARTUP\$1SIGNUP\$1TABLE**: **nodejs-tutorial**

     
**Example .ebextensions/options.config**  

   ```
   option_settings:
     aws:elasticbeanstalk:customoption:
       NewSignupEmail: you@example.com
     aws:elasticbeanstalk:application:environment:
       THEME: "flatly"
       AWS_REGION: '`{"Ref" : "AWS::Region"}`'
       STARTUP_SIGNUP_TABLE: nodejs-tutorial
       NEW_SIGNUP_TOPIC: '`{"Ref" : "NewSignupTopic"}`'
     aws:elasticbeanstalk:container:nodejs:
       ProxyServer: nginx
     aws:elasticbeanstalk:container:nodejs:staticfiles:
       /static: /static
     aws:autoscaling:asg:
       Cooldown: "120"
     aws:autoscaling:trigger:
       Unit: "Percent"
       Period: "1"
       BreachDuration: "2"
       UpperThreshold: "75"
       LowerThreshold: "30"
       MeasureName: "CPUUtilization"
   ```

   Esto se aplica a las siguientes configuraciones para la aplicación:
   + La dirección de correo electrónico que el tema de Amazon SNS utiliza para las notificaciones está configurado en su dirección o en la que introduzca en el archivo `options.config`.
   + Se utilizará la tabla **nodejs-tutorial** en lugar de la creada por `.ebextensions/create-dynamodb-table.config`.

1. Remove `.ebextensions/create-dynamodb-table.config`.

   ```
   ~/nodejs-tutorial$ rm .ebextensions/create-dynamodb-table.config
   ```

   La próxima vez que implemente la aplicación, se eliminará la tabla creada por este archivo de configuración.

1. Implemente la aplicación actualizada en su entorno Elastic Beanstalk con el comando [**eb deploy**](eb3-deploy.md).

   ```
   ~/nodejs-example-dynamo$ eb deploy
   ```

1. Cuando se complete la creación del entorno, utilice el comando [**eb open**](eb3-open.md) para abrir la URL del entorno en el navegador predeterminado.

   ```
   ~/nodejs-example-dynamo$ eb open
   ```

Cuando lo implemente, Elastic Beanstalk actualizará la configuración del tema de Amazon SNS y eliminará la tabla de DynamoDB que se creó cuando implementó la primera versión de la aplicación.

Ahora, cuando termine el entorno, no se eliminará la tabla **nodejs-tutorial**. Esto le permite realizar implementaciones blue/green, modificar los archivos de configuración o retirar su sitio web sin arriesgarse a perder datos.

Abra su sitio en un navegador y verifique que el formulario funciona según lo previsto. Cree un par de entradas y, a continuación, consulte la consola de DynamoDB para verificar la tabla.

**Para ver la tabla**

1. Abra la [página Tables](https://console.aws.amazon.com/dynamodb/home?#tables:) en la consola de DynamoDB.

1. Busque la tabla **nodejs-tutorial**.

1. Seleccione la tabla, elija **Items (Elementos)** y, a continuación, elija **Start search (Iniciar búsqueda)** para ver todos los elementos de la tabla.

También puede ver que Elastic Beanstalk eliminó la tabla que creó anteriormente.

## Configuración de su entorno para alta disponibilidad
<a name="nodejs-dynamodb-tutorial-configure"></a>

Por último, configure el grupo de escalado automático de su entorno con un número mínimo de instancias mayor. Ejecute al menos dos instancias en todo momento para evitar que los servidores web de su entorno se conviertan en un único punto de error y para poder implementar cambios sin que el sitio se quede fuera de servicio.

**Si desea configurar el grupo de escalado automático del entorno para disponer de una alta disponibilidad**

1. Abra la consola de [Elastic Beanstalk](https://console.aws.amazon.com/elasticbeanstalk) y, **en** la lista Regiones, seleccione su. Región de AWS

1. En el panel de navegación, elija **Environments** (Entornos) y, a continuación, elija el nombre del entorno en la lista.

1. En el panel de navegación, elija **Configuration (Configuración)**.

1. En la categoría de configuración **Capacity (Capacidad)**, elija **Edit (Edición de)**.

1. En la sección **escalado automático group (grupo de escalado automático)** defina **Min instances (Instancias mínimas)** en **2**.

1. Para guardar los cambios, elija **Aplicar** en la parte inferior de la página.

## Limpieza
<a name="nodejs-dynamodb-tutorial-cleanup"></a>

Cuando finalice su trabajo con el código de demostración, puede terminar el entorno. [Elastic Beanstalk elimina todos los recursos AWS relacionados, [como las instancias de EC2 Amazon](using-features.managing.ec2.md), las [instancias de bases de datos, los balanceadores de carga,](using-features.managing.db.md)[los grupos de seguridad y las](using-features.managing.elb.md) alarmas.](using-features.alarms.md#using-features.alarms.title) 

Al eliminar recursos no se elimina la aplicación de Elastic Beanstalk, por lo que puede crear nuevos entornos para su aplicación en cualquier momento.

**Cómo terminar su entorno de Elastic Beanstalk desde la consola**

1. Abra la consola de [Elastic Beanstalk](https://console.aws.amazon.com/elasticbeanstalk) y, **en** la lista Regiones, seleccione su. Región de AWS

1. En el panel de navegación, elija **Environments** (Entornos) y, a continuación, elija el nombre del entorno en la lista.

1. Elija **Actions** (Acciones) y, a continuación, **Terminate Environment** (Terminar el entorno).

1. Utilice el cuadro de diálogo en pantalla para confirmar la terminación del entorno.

También puede eliminar las tablas de DynamoDB externas que haya creado.

**Para eliminar una tabla de DynamoDB**

1. Abra la [página Tables](https://console.aws.amazon.com/dynamodb/home?#tables:) en la consola de DynamoDB.

1. Seleccione una tabla.

1. Seleccione **Actions (Acciones)** y **Delete table (Eliminar tabla)**.

1. Elija **Eliminar**.

## Siguientes pasos
<a name="nodejs-dynamodb-tutorial-nextsteps"></a>

La aplicación de ejemplo utiliza archivos de configuración para configurar los ajustes del software y crear AWS recursos como parte de su entorno. Para obtener más información sobre los archivos de configuración y cómo se utilizan, consulte [Personalización avanzada de entornos con archivos de configuración (`.ebextensions`)](ebextensions.md).

La aplicación de muestra de este tutorial utiliza la plataforma web Express para Node.js. Para obtener más información sobre Express, consulte la documentación oficial en [expressjs.com](https://expressjs.com).

Por último, si pretende utilizar la aplicación en un entorno de producción, [configure un nombre de dominio personalizado](customdomains.md) para el entorno y [habilite HTTPS](configuring-https.md) para las conexiones seguras.