

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 de la plataforma Elastic Beanstalk Node.js
<a name="create_deploy_nodejs.container"></a>

En este tema se describe cómo configurar, crear y ejecutar las aplicaciones Node.js en Elastic Beanstalk.

AWS Elastic Beanstalk admite varias ramas de plataforma para diferentes versiones del lenguaje de programación Node.js. Consulte [Node.js](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.nodejs) en el documento *Plataformas de AWS Elastic Beanstalk * para ver una lista completa.

Elastic Beanstalk proporciona [opciones de configuración](command-options.md) que se pueden utilizar para personalizar el software que se ejecuta en las instancias de EC2 del entorno de Elastic Beanstalk. Puede [configurar las variables de entorno](environments-cfg-softwaresettings.md#environments-cfg-softwaresettings-console) que necesita la aplicación, habilitar la rotación de registros en Amazon S3 y asignar carpetas del código fuente de la aplicación que contengan archivos estáticos a rutas proporcionadas por el servidor proxy.

En la consola de Elastic Beanstalk hay opciones de configuración disponibles para [modificar la configuración de un entorno en ejecución](environment-configuration-methods-after.md). Para evitar perder la configuración del entorno cuando lo termina, puede usar las [configuraciones guardadas](environment-configuration-savedconfig.md) para guardar la configuración y aplicarla posteriormente a otro entorno.

Para guardar la configuración en el código fuente, puede incluir [archivos de configuración](ebextensions.md). Los valores de configuración de los archivos de configuración se aplican cada vez que crea un entorno o que implementa la aplicación. También puede usar archivos de configuración para instalar paquetes, ejecutar scripts y llevar a cabo otras operaciones de personalización de instancias durante las implementaciones.

Puede [incluir un archivo `Package.json`](nodejs-platform-dependencies.md#nodejs-platform-packagejson) en el paquete de código fuente para instalar paquetes durante la implementación, para proporcionar un comando de inicio y para especificar la versión de Node.js que quiere que la aplicación utilice. Puede incluir un [archivo `npm-shrinkwrap.json`](nodejs-platform-shrinkwrap.md) para bloquear las versiones de dependencia.

La plataforma Node.js incluye un servidor proxy para distribuir recursos estáticos, reenviar el tráfico a la aplicación y comprimir las respuestas. Puede [ampliar o invalidar la configuración del proxy predeterminada](nodejs-platform-proxy.md) para escenarios avanzados.

Hay varias opciones para iniciar su aplicación. Puede agregar un [Procfile](nodejs-configuration-procfile.md) a su paquete de código fuente para especificar el comando que inicia la aplicación. Si no proporciona un `Procfile`, pero proporciona un archivo `package.json`, Elastic Beanstalk ejecuta `npm start`. Si no proporciona ninguno, Elastic Beanstalk busca los archivos `app.js` o `server.js`, en este orden, y ejecuta el script.

La configuración aplicada en la consola de Elastic Beanstalk anula la misma configuración en los archivos de configuración, si existe. Esto le permite tener la configuración predeterminada en los archivos de configuración y anularla con la configuración específica del entorno en la consola. Para obtener más información acerca de la prioridad y otros métodos para cambiar valores de configuración, consulte [Opciones de configuración](command-options.md).

Para obtener más información sobre las diversas formas en las que puede ampliar una plataforma Elastic Beanstalk basada en Linux, consulte [Ampliación de las plataformas Linux de Elastic Beanstalk](platforms-linux-extend.md).

## Configuración de su entorno de Node.js
<a name="nodejs-platform-console"></a>

Puede utilizar la configuración de la plataforma Node.js para ajustar el comportamiento de las instancias de Amazon EC2. Puede editar la configuración de la instancia de Amazon EC2 para el entorno de Elastic Beanstalk mediante la consola de Elastic Beanstalk.

Utilice la consola de Elastic Beanstalk para habilitar la rotación de registros en Amazon S3 y configurar variables que la aplicación pueda leer desde el entorno.

**Para configurar su entorno Node.js en la consola de Elastic Beanstalk**

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 **Configuración**.

1. En la categoría de configuración **Actualizaciones, supervisión y registro**, seleccione **Edición de**.

### Opciones de contenedor
<a name="nodejs-platform-console-settings"></a>

Puede especificar estas opciones específicas de la plataforma:
+ **Proxy server (Servidor proxy)**: el servidor proxy que utilizar en las instancias del entorno. Se utiliza NGINX de forma predeterminada.

### Log Options (Opciones de registro)
<a name="nodejs-platform-console-logging"></a>

La sección **Log Options (Opciones de registro)** tiene dos valores:
+ **Perfil de instancia**: especifica el perfil de instancia que tiene permiso para obtener acceso al bucket de Amazon S3 asociado a la aplicación.
+ **Enable log file rotation to Amazon S3 (Habilitar la rotación de archivos de registro para Amazon S3)**: especifica si los archivos de registro de las instancias de Amazon EC2 de la aplicación se copian en el bucket de Amazon S3 asociado a la aplicación.

### Archivos estáticos
<a name="nodejs-platform-console-staticfiles"></a>

Para mejorar el rendimiento, puede utilizar la sección **Static files** (Archivos estáticos) para configurar el servidor proxy para entregar archivos estáticos de servidor (por ejemplo, HTML o imágenes) desde un conjunto de directorios dentro de su aplicación web. Para cada directorio, se establece la ruta virtual para la asignación de directorios. Cuando el servidor proxy recibe una solicitud de un archivo en la ruta especificada, proporciona directamente el archivo en lugar de direccionar la solicitud la aplicación.

Para obtener más información sobre la configuración de archivos estáticos mediante archivos de configuración o la consola de Elastic Beanstalk, consulte [Distribución de archivos estáticos](environment-cfg-staticfiles.md).

### Propiedades del entorno
<a name="nodejs-platform-console-envprops"></a>

Utilice la sección **Environment Properties (Propiedades de entorno)** para especificar opciones de configuración del entorno en las instancias Amazon EC2 que ejecutan la aplicación. Estos ajustes se pasan como pares clave-valor a la aplicación.

Dentro del Node.js entorno en el que se ejecuta AWS Elastic Beanstalk, puede acceder a las variables de entorno ejecutando`process.env.ENV_VARIABLE`.

```
var endpoint = process.env.API_ENDPOINT
```

La plataforma Node.js establece la variable de entorno PORT en el puerto al que el servidor proxy pasa el tráfico. Para obtener más información, consulte [Configuración del servidor proxy](nodejs-platform-proxy.md).

Para obtener más información, consulte [Configuración de las variables de entorno y otras opciones de software](environments-cfg-softwaresettings.md).

### Configuración de un entorno Node.js de la AMI de Amazon Linux (anterior a Amazon Linux 2)
<a name="nodejs-platform-console.alami"></a>

Las siguientes categorías de configuración del software de la consola solo se admite en un entorno Node.js de Elastic Beanstalk que utiliza una versión de la plataforma de la AMI de Amazon Linux (anterior a Amazon Linux 2).

**Notas**  
La información de este tema solo se aplica a las ramas de plataforma basadas en la AMI de Amazon Linux (AL1). AL2023/las ramas de la AL2 plataforma son incompatibles con las versiones anteriores de la plataforma AMI (AL1) de Amazon Linux y *requieren ajustes de configuración diferentes*.
 [El 18 de julio de 2022,](https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/release-2022-07-18-linux-al1-retire.html) **Elastic Beanstalk estableció el estado de todas las ramas de plataforma basadas en la AMI AL1 de Amazon Linux () como retiradas.** Para obtener más información sobre la migración a una ramificación de la plataforma Amazon Linux 2023 actual y totalmente compatible, consulte [Migración de su aplicación de Linux de Elastic Beanstalk a Amazon Linux 2023 o Amazon Linux 2](using-features.migration-al.md).

#### Opciones de contenedor: AMI de Amazon Linux (AL1)
<a name="nodejs-platform-console-settings"></a>

En la página de configuración, especifique lo siguiente:
+ **Proxy Server** (Servidor proxy): especifica el servidor web que se utiliza para enviar las conexiones a Node.js. Se utiliza NGINX de forma predeterminada. Si selecciona **none** (ninguno), las asignaciones de archivos estáticos no se aplican y se desactiva la compresión GZIP.
+ **Versión de Node.js**: especifica la versión de Node.js. Para obtener una lista de las versiones de Node.js compatibles, consulte [https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.nodejs](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.nodejs) en la guía *AWS Elastic Beanstalk Platforms*.
+ **Compresión GZIP**: especifica si la compresión GZIP está habilitada. La compresión GZIP está habilitada de forma predeterminada.
+ **Node command** (Comando de Node): permite escribir el comando que se utiliza para iniciar la aplicación de Node.js. Una cadena vacía (la predeterminada) significa que Elastic Beanstalk usa `app.js`, `server.js` y, luego, `npm start`.

## Espacio de nombres de configuración de Node.js
<a name="nodejs-namespaces"></a>

Puede usar un [archivo de configuración](ebextensions.md) para definir opciones de configuración y realizar otras tareas de configuración en las instancias durante las implementaciones. Las opciones de configuración pueden ser [específicas de la plataforma](command-options-specific.md) o aplicarse a [todas las plataformas](command-options-general.md) del servicio de Elastic Beanstalk en su conjunto. Las opciones de configuración se organizan en *espacios de nombres*.

Puede elegir el proxy que se utilizará en las instancias para el entorno mediante el uso del espacio de nombres `aws:elasticbeanstalk:environment:proxy`. En el siguiente ejemplo se configura el entorno para utilizar el servidor proxy Apache HTTPD.

**Example .ebextensions/nodejs-settings.config**  

```
option_settings:
  aws:elasticbeanstalk:environment:proxy:
    ProxyServer: apache
```

Puede configurar el proxy para que sirva archivos estáticos mediante el espacio de nombres `aws:elasticbeanstalk:environment:proxy:staticfiles`. Para obtener más información y un ejemplo, consulte [Distribución de archivos estáticos](environment-cfg-staticfiles.md).

Elastic Beanstalk cuenta con numerosas opciones de configuración para personalizar el entorno. Además de los archivos de configuración, también puede definir opciones en la consola, configuraciones guardadas, la CLI de EB o la AWS CLI. Para obtener más información, consulte [Opciones de configuración](command-options.md).

## Plataforma Node.js de la AMI de Amazon Linux (anterior a Amazon Linux 2)
<a name="nodejs.alami"></a>

Si el entorno Node.js de Elastic Beanstalk utiliza una versión de la plataforma de la AMI de Amazon Linux (anterior a Amazon Linux 2), tenga en cuenta las configuraciones y las recomendaciones específicas de esta sección.

**Notas**  
La información de este tema solo se aplica a las ramas de plataforma basadas en la AMI de Amazon Linux (AL1). AL2023/las ramas de la AL2 plataforma son incompatibles con las versiones anteriores de la plataforma AMI (AL1) de Amazon Linux y *requieren ajustes de configuración diferentes*.
 [El 18 de julio de 2022,](https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/release-2022-07-18-linux-al1-retire.html) **Elastic Beanstalk estableció el estado de todas las ramas de plataforma basadas en la AMI AL1 de Amazon Linux () como retiradas.** Para obtener más información sobre la migración a una ramificación de la plataforma Amazon Linux 2023 actual y totalmente compatible, consulte [Migración de su aplicación de Linux de Elastic Beanstalk a Amazon Linux 2023 o Amazon Linux 2](using-features.migration-al.md).

### Node.jsopciones de configuración específicas de la plataforma: AMI de Amazon Linux () AL1
<a name="nodejs.alami.options"></a>

Elastic Beanstalk admite algunas opciones de configuración específicas de la plataforma para las versiones de la plataforma Node.js de la AMI de Amazon Linux. Puede elegir qué servidor proxy se ejecuta delante de su aplicación, la versión específica de Node.js que se debe ejecutar y el comando utilizado para ejecutar la aplicación.

Para el servidor proxy, puede utilizar un servidor proxy NGINX o Apache. Puede establecer el valor `none` en la opción `ProxyServer`. Con esta configuración, Elastic Beanstalk ejecuta la aplicación de forma independiente, sin que se relacione a ningún servidor proxy. Si el entorno ejecuta una aplicación independiente, actualice el código para escuchar al puerto al que NGINX reenvía tráfico.

```
var port = process.env.PORT || 8080;

app.listen(port, function() {
  console.log('Server running at http://127.0.0.1:%s', port);
});
```

### Node.jsversiones lingüísticas — AMI de Amazon Linux (AL1)
<a name="nodejs.alami.versions"></a>

En términos de la versión de lenguaje compatible, la plataforma Node.js de la AMI de Amazon Linux es diferente de otras plataformas administradas por Elastic Beanstalk. Esto se debe a que cada versión de la plataforma Node.js admite solo unas pocas versiones del lenguaje de Node.js. Para obtener una lista de las versiones de Node.js compatibles, consulte [https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.nodejs](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.nodejs) en la guía *AWS Elastic Beanstalk Platforms*.

Puede utilizar una opción de configuración específica de la plataforma para establecer la versión del lenguaje. Para obtener instrucciones, consulte [Configuración de su entorno de Node.js](#nodejs-platform-console). Como alternativa, utilice la consola de Elastic Beanstalk para actualizar la versión Node.js que utiliza el entorno como parte de la actualización de la versión de la plataforma.

**nota**  
Cuando la compatibilidad de la versión de Node.js que utiliza se elimine de la plataforma, deberá cambiar o eliminar la configuración de la versión antes de realizar una [actualización de la plataforma](using-features.platform.upgrade.md). Esto puede suceder cuando se identifica una vulnerabilidad de seguridad en una o varias versiones de Node.js  
Cuando esto ocurre, se produce un [NodeVersion](command-options-specific.md#command-options-nodejs)error al intentar actualizar a una nueva versión de la plataforma que no admite la configuración. Para evitar tener que crear un entorno nuevo, cambie la opción de *NodeVersion*configuración a una versión de Node.js que sea compatible tanto con la versión antigua como con la nueva, o [elimine la configuración de la opción](environment-configuration-methods-after.md) y, a continuación, actualice la plataforma.

**Para configurar la versión Node.js del entorno en la consola de Elastic Beanstalk**

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 la página de información general del entorno, en **Platform (Plataforma)**, elija **Change (Cambiar)**.

1. En el cuadro de diálogo **Update platform version** (Actualización de versiones de la plataforma), seleccione una versión de Node.js.  
![\[Confirmación de la versión de la plataforma de actualización de Elastic Beanstalk\]](http://docs.aws.amazon.com/es_es/elasticbeanstalk/latest/dg/images/platform-nodejs-update-node-version.png)

1. Seleccione **Save**.

### Node.jsespacios de nombres de configuración: AMI de Amazon Linux () AL1
<a name="nodejs.alami.namespaces"></a>

La plataforma Node.js de la AMI de Amazon Linux define opciones adicionales en los espacios de nombres `aws:elasticbeanstalk:container:nodejs:staticfiles` y `aws:elasticbeanstalk:container:nodejs`.

El siguiente archivo de configuración indica a Elastic Beanstalk que utilice`npm start` para ejecutar la aplicación. También establece el tipo de proxy en Apache y habilita la compresión. Por último, configura el proxy para que ofrezca archivos estáticos desde dos directorios fuente. Una fuente son los archivos HTML  en la ruta `html` de la raíz del sitio web del directorio fuente `statichtml`. El otro origen son los archivos de imagen en la ruta `images` de la raíz del sitio web desde el directorio de origen `staticimages`.

**Example .ebextensions/node-settings.config**  

```
option_settings:
  aws:elasticbeanstalk:container:nodejs: 
    NodeCommand: "npm start"
    ProxyServer: apache
    GzipCompression: true
  aws:elasticbeanstalk:container:nodejs:staticfiles:
    /html: statichtml
    /images: staticimages
```

Elastic Beanstalk cuenta con numerosas opciones de configuración para personalizar el entorno. Además de los archivos de configuración, también puede definir opciones en la consola, configuraciones guardadas, la CLI de EB o la AWS CLI. Para obtener más información, consulte [Opciones de configuración](command-options.md).

# Configuración de comandos de inicio personalizados con Procfile en Elastic Beanstalk
<a name="nodejs-configuration-procfile"></a>

Puede incluir un archivo llamado `Procfile` en la raíz del paquete de código fuente para especificar el comando que inicia la aplicación.

**Example Procfile**  

```
web: node index.js
```

Para obtener más información acerca del uso de `Procfile`, consulte [Buildfile y Procfile](platforms-linux-extend.build-proc.md).

**nota**  
Esta característica reemplaza la opción heredada `NodeCommand` en el espacio de nombres `aws:elasticbeanstalk:container:nodejs`.

# Configuración de las dependencias de su aplicación en Elastic Beanstalk
<a name="nodejs-platform-dependencies"></a>

La aplicación puede tener dependencias en algunos módulos Node.js, como los que se especifican en las declaraciones `require()`. Los módulos se almacenan en un directorio `node_modules`. Cuando se ejecuta la aplicación, Node.js carga los módulos de este directorio. Para obtener más información, consulte [Loading from node\$1modules folders](https://nodejs.org/api/modules.html#modules_loading_from_node_modules_folders) (Carga desde carpetas node\$1modules) en la documentación de Node.js.

Puede especificar las dependencias de módulos mediante un archivo `package.json`. Si Elastic Beanstalk detecta este archivo y no hay un directorio `node_modules`, ejecuta `npm install` como el usuario *webapp*. El comando `npm install` instala las dependencias en el directorio `node_modules`, que Elastic Beanstalk crea previamente. El comando `npm install` accede a los paquetes que figuran en el archivo `package.json` desde el registro npm público o de otras ubicaciones. Para obtener más información, consulte el sitio web [npm Docs](https://docs.npmjs.com/about-the-public-npm-registry). 

Si Elastic Beanstalk detecta el directorio `node_modules`, no ejecuta `npm install`, incluso si existe un archivo `package.json`. Elastic Beanstalk asume que los paquetes de dependencias están disponibles en el directorio `node_modules` para que Node.js pueda acceder y cargar.

En las siguientes secciones, se ofrece más información sobre cómo establecer las dependencias de los módulos de Node.js de la aplicación.

**nota**  
Si sufre algún problema de implementación cuando Elastic Beanstalk está ejecutando `npm install`, considere un enfoque alternativo. Incluya el directorio `node_modules` con los módulos de dependencias en el paquete de código fuente de la aplicación. De esta manera se pueden evitar problemas relacionados con la instalación de dependencias del registro npm público mientras se investiga el problema. Como los módulos de dependencia provienen de un directorio local, hacer esto también podría ayudar a reducir el tiempo de implementación. Para obtener más información, consulte [Inclusión de dependencias Node.js en un directorio node\$1modules](#nodejs-platform-nodemodules)

## Especificación de dependencias de Node.js con un archivo package.json
<a name="nodejs-platform-packagejson"></a>

Incluya un archivo `package.json` en la raíz del proyecto de origen para especificar paquetes de dependencias y proporcionar un comando de inicio. Cuando hay un archivo `package.json` y no hay un directorio `node_modules` en la raíz de la fuente del proyecto, Elastic Beanstalk ejecuta `npm install` como el usuario *webapp* para instalar las dependencias del registro npm público. Elastic Beanstalk también utiliza el comando `start` para iniciar la aplicación. Para obtener más información sobre el archivo `package.json`, consulte [Especificación de dependencias en un archivo `package.json`](https://docs.npmjs.com/specifying-dependencies-and-devdependencies-in-a-package-json-file) en el sitio web *npm Docs*. 

Utilice la palabra clave `scripts` para proporcionar un comando de inicio. En la actualidad, la palabra clave `scripts` se utiliza en lugar de la opción heredada `NodeCommand` en el espacio de nombres `aws:elasticbeanstalk:container:nodejs`.

**Example package.json: Express**  

```
{
    "name": "my-app",
    "version": "0.0.1",
    "private": true,
    "dependencies": {
      "ejs": "latest",
      "aws-sdk": "latest",
      "express": "latest",
      "body-parser": "latest"
    },
    "scripts": {
      "start": "node app.js"
    }
  }
```

**Modo de producción y dependencias de desarrollo**  
Para especificar sus dependencias en el archivo `package.json`, utilice los atributos *dependencies* y *devDependencies*. El atributo *dependencias* designa los paquetes que necesita la aplicación en producción. El atributo *devDependencies* designa los paquetes que solo se necesitan para el desarrollo y las pruebas locales.

Si necesita instalar los paquetes *devDependencies*, defina la propiedad del entorno NPM\$1USE\$1PRODUCTION en`false`. Con esta configuración, no utilizaremos las opciones anteriores cuando ejecutemos la instalación de npm. Esto hará que se instalen los paquetes de atributos *devDependencies*.

## Inclusión de dependencias Node.js en un directorio node\$1modules
<a name="nodejs-platform-nodemodules"></a>

Para implementar paquetes de dependencias en instancias del entorno junto con el código de la aplicación, inclúyalos en un directorio llamado `node_modules` en la raíz del origen del proyecto. Para obtener más información, consulte [Downloading and installing packages locally](https://docs.npmjs.com/downloading-and-installing-packages-locally) (Descarga e instalación de paquetes a nivel local) en el sitio web *npm Docs*. 

[Al implementar un `node_modules` directorio en una versión de AL2 Node.js plataforma AL2023/, Elastic Beanstalk asume que está proporcionando sus propios paquetes de dependencias y evita instalar las dependencias especificadas en un archivo package.json.](#nodejs-platform-packagejson) Node.jsbusca las dependencias en el directorio. `node_modules` Para obtener más información, consulte [Loading from node\$1modules Folders](https://nodejs.org/api/modules.html#modules_loading_from_node_modules_folders) (Carga desde carpetas node\$1modules) en la documentación de Node.js.

**nota**  
Si sufre algún problema de implementación cuando Elastic Beanstalk ejecuta `npm install`, considere la posibilidad de utilizar el enfoque descrito en este tema como solución alternativa mientras investiga el problema.   
 

### Consideraciones sobre Node.js en Amazon Linux 2
<a name="nodejs-al2-considerations"></a>

Lea esta sección si utiliza una rama de la plataforma *Node.js* que se ejecuta en *Amazon Linux 2*.

#### Consideraciones sobre Node.js en Amazon Linux 2
<a name="nodejs-al2-considerations-detail"></a>

**nota**  
La información de este tema se aplica a las ramas de Node.js plataforma que se ejecutan en Amazon Linux 2. El contenido aquí describe características y comportamientos AL2 específicos que difieren de AL2023.

**Variaciones de comandos**  
Las opciones de comando varían en función de la versión de npm incluida en la rama de la plataforma Amazon Linux 2 en la que se ejecute la aplicación.
+ npm v6: de forma predeterminada, Elastic Beanstalk instala dependencias en modo de producción. Usa el comando `npm install --production`. 
+ npm v7 o superior: Elastic Beanstalk omite el atributo *devDependencies*. Usa el comando `npm install --omit=dev`.

Los dos comandos enumerados anteriormente no instalan los paquetes que son atributos *devDependencies*. 

**Protocolos SSH y HTTPS para las dependencias de Git**  
A partir de la versión de la plataforma Amazon Linux 2 del 7 de marzo de 2023, puede utilizar los protocolos SSH y HTTPS para recuperar paquetes de un repositorio de Git. La ramificación de la plataforma 16 de Node.js admite los protocolos SSH y HTTPS. 14 de Node.js solo admite el protocolo HTTPS.

**Example package.json: 16 de Node.js admite HTTPS y SSH**  

```
    ...
    "dependencies": {
      "aws-sdk": "https://github.com/aws/aws-sdk-js.git",
      "aws-chime": "git+ssh://git@github.com:aws/amazon-chime-sdk-js.git"
    }
```

**Versiones y rangos de las versiones**  
Utilice la palabra clave `engines` del archivo `package.json` para especificar la versión de Node.js que desea que utilice la aplicación. También puede especificar un rango de versiones mediante la notación npm. Para obtener más información sobre la sintaxis de los rangos de versiones, consulte [Semantic Versioning using npm](https://nodejs.dev/learn/semantic-versioning-using-npm) (Control de versiones semánticas mediante npm) en el sitio web de Node.js. La palabra clave `engines` del archivo `package.json` de Node.js reemplaza la opción heredada `NodeVersion` en el espacio de nombres `aws:elasticbeanstalk:container:nodejs`.

**importante**  
La función para especificar los rangos de versiones no está disponible para las sucursales de la plataforma Node.js en AL2023 las que se estén ejecutando. Solo admitimos una versión de Node.js en una rama Node.js específica AL2023. Si el archivo `package.json` especifica un rango de versiones, lo ignoraremos y utilizaremos de forma predeterminada la versión de la ramificación de la plataforma de Node.js.

**Example `package.json`: versión de Node.js única**  

```
{
    ...
    "engines": { "node" : "14.16.0" }
  }
```

**Example `package.json`: rango de versiones de Node.js**  

```
{
    ...
    "engines": { "node" : ">=10 <11" }
  }
```

Cuando se indica un rango de versiones, Elastic Beanstalk instala la última versión de Node.js que la plataforma tiene disponible dentro del rango. En este ejemplo, el rango indica que la versión debe ser mayor o igual que la versión 10, pero inferior que la versión 11. Como resultado, Elastic Beanstalk instala la última versión 10.x.y de Node.js, que está disponible en la [plataforma compatible](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.nodejs).

Tenga en cuenta que solo puede especificar una versión de Node.js que corresponda con la ramificación de la plataforma. Por ejemplo, si utiliza la ramificación de la plataforma 16 de Node.js, puede especificar solo una versión 16.x.y de Node.js. Puede utilizar las opciones del rango de versiones admitidas por npm para aumentar la flexibilidad. Para obtener versiones válidas de Node.js para cada ramificación de la plataforma, consulte [https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.nodejs](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.nodejs) en la guía *AWS Elastic Beanstalk Platforms*.

**nota**  
Cuando la compatibilidad de la versión de Node.js que utiliza se elimine de la plataforma, deberá cambiar o eliminar la configuración de la versión de Node.js antes de realizar una [actualización de la plataforma](using-features.platform.upgrade.md). Esto puede suceder cuando se identifica una vulnerabilidad de seguridad en una o varias versiones de Node.js  
Cuando esto sucede, si se intenta actualizar a una nueva versión de la plataforma no compatible con la versión de Node.js configurada, se producirá un error. Para evitar la necesidad de crear un nuevo entorno, cambie la configuración de la versión Node.js`package.json` a una versión Node.js compatible con las versiones anterior y nueva de la plataforma. Tiene la opción de especificar un rango de versiones de Node.js que incluya una versión compatible, como se describió anteriormente en este tema. También tiene la opción de eliminar la configuración e implementar el nuevo paquete de origen.

# Bloqueo de dependencias con npm shrinkwrap en Elastic Beanstalk
<a name="nodejs-platform-shrinkwrap"></a>

La plataforma Node.js ejecuta `npm install` como el usuario *webapp* cada vez que se realiza una implementación. Las versiones de dependencias nuevas disponibles se instalan cuando usted implementa la aplicación, lo que puede ocasionar demoras durante el proceso de implementación.

Puede evitar que se actualicen las dependencias creando un archivo `npm-shrinkwrap.json` que bloquee las dependencias de la aplicación en la versión actual.

```
$ npm install
$ npm shrinkwrap
wrote npm-shrinkwrap.json
```

Incluya este archivo en su paquete de código fuente para asegurarse de que las dependencias solo se instalan una vez.

# Configuración del servidor proxy
<a name="nodejs-platform-proxy"></a>

Elastic Beanstalk puede utilizar NGINX o Apache HTTPD como proxy inverso para asignar la aplicación al equilibrador de carga de Elastic Load Balancing en el puerto 80. El valor predeterminado es NGINX. Elastic Beanstalk proporciona una configuración de proxy predeterminada que puede ampliar o invalidar completamente su propia configuración.

De forma predeterminada, Elastic Beanstalk configura el proxy para reenviar las solicitudes a la aplicación en el puerto 5000. Puede invalidar el puerto predeterminado al establecer la `PORT`[propiedad del entorno](create_deploy_nodejs.container.md#nodejs-platform-console) en el puerto en el que la aplicación principal esté a la escucha.

**nota**  
El puerto en el que su aplicación escucha no afecta al puerto en el que el servidor NGINX escucha para recibir solicitudes del equilibrador de carga.

**Configuración del servidor proxy en la versión de su plataforma**  
Todas las AL2 plataformas AL2023/admiten una función de configuración de proxy uniforme. Para obtener más información sobre la configuración del servidor proxy en las versiones de su plataforma que ejecutan AL2023/AL2, consulte[Configuración del proxy inverso](platforms-linux-extend.proxy.md). 

## Configuración del proxy en la AMI de Amazon Linux (anterior a Amazon Linux 2)
<a name="nodejs-platform-proxy.alami"></a>

Si el entorno Node.js de Elastic Beanstalk utiliza una versión de la plataforma de la AMI de Amazon Linux (anterior a Amazon Linux 2), lea la información de esta sección.

**Notas**  
La información de este tema solo se aplica a las ramas de plataforma basadas en la AMI de Amazon Linux (AL1). AL2023/las ramas de la AL2 plataforma son incompatibles con las versiones anteriores de la plataforma AMI (AL1) de Amazon Linux y *requieren ajustes de configuración diferentes*.
 [El 18 de julio de 2022,](https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/release-2022-07-18-linux-al1-retire.html) **Elastic Beanstalk estableció el estado de todas las ramas de plataforma basadas en la AMI AL1 de Amazon Linux () como retiradas.** Para obtener más información sobre la migración a una ramificación de la plataforma Amazon Linux 2023 actual y totalmente compatible, consulte [Migración de su aplicación de Linux de Elastic Beanstalk a Amazon Linux 2023 o Amazon Linux 2](using-features.migration-al.md).

### Ampliación y anulación de la configuración de proxy predeterminada: AMI de Amazon Linux () AL1
<a name="nodejs-platform-proxy.alami.extending"></a>

La plataforma Node.js utiliza un proxy inverso para transmitir las solicitudes del puerto 80 de la instancia a la aplicación que está a la escucha en el puerto 8081. Elastic Beanstalk proporciona una configuración de proxy predeterminada que puede ampliar o invalidar completamente su propia configuración.

Para ampliar la configuración predeterminada, añada archivos `.conf` a `/etc/nginx/conf.d` con un archivo de configuración. Para ver un ejemplo específico, consulte[Terminación de HTTPS en instancias EC2 que ejecutan Node.js](https-singleinstance-nodejs.md).

La plataforma Node.js establece la variable de entorno PORT en el puerto al que el servidor proxy pasa el tráfico. Lea esta variable en el código para configurar el puerto de la aplicación.

```
    var port = process.env.PORT || 3000;

    var server = app.listen(port, function () {
        console.log('Server running at http://127.0.0.1:' + port + '/');
    });
```

La configuración predeterminada de NGINX reenvía el tráfico a un servidor ascendente denominado `nodejs` en `127.0.0.1:8081`. Puede eliminar la configuración predeterminada y proporcionar la propia en un [archivo de configuración](ebextensions.md).

**Example .ebextensions/proxy.config**  
El siguiente ejemplo elimina la configuración predeterminada y agrega una configuración personalizada que reenvía el tráfico al puerto 5000, en lugar del puerto 8081.  

```
files:
  /etc/nginx/conf.d/proxy.conf:
    mode: "000644"
    owner: root
    group: root
    content: |
      upstream nodejs {
        server 127.0.0.1:5000;
        keepalive 256;
      }

      server {
        listen 8080;

        if ($time_iso8601 ~ "^(\d{4})-(\d{2})-(\d{2})T(\d{2})") {
            set $year $1;
            set $month $2;
            set $day $3;
            set $hour $4;
        }
        access_log /var/log/nginx/healthd/application.log.$year-$month-$day-$hour healthd;
        access_log  /var/log/nginx/access.log  main;

        location / {
            proxy_pass  http://nodejs;
            proxy_set_header   Connection "";
            proxy_http_version 1.1;
            proxy_set_header        Host            $host;
            proxy_set_header        X-Real-IP       $remote_addr;
            proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
        }

        gzip on;
        gzip_comp_level 4;
        gzip_types text/html text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;

        location /static {
            alias /var/app/current/static;
        }

      }

  /opt/elasticbeanstalk/hooks/configdeploy/post/99_kill_default_nginx.sh:
    mode: "000755"
    owner: root
    group: root
    content: |
      #!/bin/bash -xe
      rm -f /etc/nginx/conf.d/00_elastic_beanstalk_proxy.conf
      service nginx stop 
      service nginx start

container_commands:
  removeconfig:
    command: "rm -f /tmp/deployment/config/#etc#nginx#conf.d#00_elastic_beanstalk_proxy.conf /etc/nginx/conf.d/00_elastic_beanstalk_proxy.conf"
```
La configuración de ejemplo (`/etc/nginx/conf.d/proxy.conf`) utiliza la configuración predeterminada de `/etc/nginx/conf.d/00_elastic_beanstalk_proxy.conf` como punto de partida para incluir el bloque de servidores predeterminado con configuración de compresión y registros y un mapeo de archivos estáticos.  
El comando `removeconfig` elimina la configuración predeterminada del contenedor para asegurarse de que el servidor proxy utiliza la configuración personalizada. Elastic Beanstalk vuelve a crear la configuración predeterminada cuando se implementa cada configuración. Para tener esto en cuenta, en el siguiente ejemplo, se agrega un post-configuration-deployment hook (`/opt/elasticbeanstalk/hooks/configdeploy/post/99_kill_default_nginx.sh`). Esto elimina la configuración predeterminada y reinicia el servidor proxy.

**nota**  
La configuración predeterminada puede cambiar en las próximas versiones de la plataforma Node.js. Utilice la última versión de la configuración como punto de partida para las personalizaciones con el fin de garantizar la compatibilidad.

Si anula la configuración predeterminada, debe definir las asignaciones de archivos estáticos y la compresión GZIP. Esto se debe a que la plataforma no puede aplicar la [ configuración estándar](create_deploy_nodejs.container.md#nodejs-namespaces).