

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 de rieles en Elastic Beanstalk
<a name="ruby-rails-tutorial"></a>

Rails es un marco de código abierto model-view-controller (MVC) para Ruby. Este tutorial explica el proceso de generar una aplicación de Rails y desplegarla en un AWS Elastic Beanstalk entorno.

**Topics**
+ [Requisitos previos](#ruby-rails-tutorial-prereqs)
+ [Conocimiento básico de Elastic Beanstalk](#ruby-rails-tutorial-prereqs-basic)
+ [Lance un entorno de Elastic Beanstalk](#ruby-rails-tutorial-launch)
+ [Instalación de Rails y generación de un sitio web](#ruby-rails-tutorial-generate)
+ [Configuración de los ajustes de Rails](#ruby-rails-tutorial-configure)
+ [Implementar la aplicación](#ruby-rails-tutorial-deploy)
+ [Limpieza](#ruby-rails-tutorial-cleanup)
+ [Siguientes pasos](#ruby-rails-tutorial-nextsteps)

## Requisitos previos
<a name="ruby-rails-tutorial-prereqs"></a>

## Conocimiento básico de Elastic Beanstalk
<a name="ruby-rails-tutorial-prereqs-basic"></a>

Este tutorial asume que tiene conocimiento de las operaciones básicas de Elastic Beanstalk y de la consola de Elastic Beanstalk. Si aún no lo ha hecho, siga las instrucciones que se indican en [Cómo empezar a utilizar Elastic Beanstalk](GettingStarted.md) para lanzar su primer entorno de Elastic Beanstalk.

### Línea de comandos
<a name="ruby-rails-tutorial-prereqs-cmdline"></a>

Para seguir los procedimientos de esta guía, necesitará un shell o un terminal de línea de comando donde pueda ejecutar los comandos. Los comandos aparecen en listas y van precedidos del símbolo del sistema (\$1) y del nombre del directorio actual, si es aplicable.

```
~/eb-project$ this is a command
this is output
```

En Linux y macOS, puede utilizar el administrador de shell y paquetes preferido. En Windows, puede [instalar Windows Subsystem para Linux](https://docs.microsoft.com/en-us/windows/wsl/install-win10) para obtener una versión de Ubuntu y Bash integrada con Windows.

### Dependencias de Rails
<a name="ruby-rails-tutorial-prereqs-railsreqs"></a>

El marco de Rails 6.1.4.1 cuenta con las siguientes dependencias. Asegúrese de que las tiene todas instaladas.
+ **Ruby 2.5.0 o posterior:** para obtener instrucciones de instalación, consulte [Configuración del entorno de desarrollo de Ruby para Elastic Beanstalk](ruby-development-environment.md).

  En este tutorial utilizamos Ruby 3.0.2 y la versión correspondiente de la plataforma de Elastic Beanstalk.
+ **Node.js**: para obtener instrucciones de instalación, consulte [Instalación de Node.js con un gestor de paquetes](https://nodejs.org/en/download/package-manager/).
+ **Yarn**: para obtener instrucciones de instalación, consulte la sección [Instalación](https://yarnpkg.com/lang/en/docs/install/) en el sitio web de *Yarn*.

## Lance un entorno de Elastic Beanstalk
<a name="ruby-rails-tutorial-launch"></a>

Utilice la consola de Elastic Beanstalk para crear un entorno de Elastic Beanstalk. Elija la plataforma **Ruby** y acepte la configuración predeterminada y el código de muestra.

**Para lanzar un entorno (consola)**

1. [Abra la consola de Elastic Beanstalk mediante este enlace preconfigurado: console.aws.amazon. com/elasticbeanstalk/home\$1/newApplication? ApplicationName=Tutorials&EnvironmentType= LoadBalanced](https://console.aws.amazon.com/elasticbeanstalk/home#/newApplication?applicationName=tutorials&environmentType=LoadBalanced)

1. En **Platform (Plataforma)**, seleccione la plataforma y la ramificación de plataforma que coincidan con el idioma utilizado por la aplicación.

1. En **Código de la aplicación**, seleccione **Aplicación de muestra**.

1. Elija **Review and launch (Revisar y lanzar)**.

1. Revise las opciones disponibles. Elija la opción disponible que quiera usar y, cuando esté listo, elija **Create app (Creación de aplicación)**.

El entorno tarda unos cinco minutos en crearse e incluye los recursos siguientes:
+ **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.

Todos estos recursos los administra Elastic Beanstalk. Cuando termina su entorno, Elastic Beanstalk termina todos los recursos que este contiene.

**nota**  
El bucket de Amazon S3 que Elastic Beanstalk crea se comparte entre los entornos y no se elimina durante la terminación del entorno. Para obtener más información, consulte [Uso de Elastic Beanstalk con Amazon S3](AWSHowTo.S3.md).

## Instalación de Rails y generación de un sitio web
<a name="ruby-rails-tutorial-generate"></a>

Instale Rails y sus dependencias con el comando `gem`.

```
~$ gem install rails
Fetching: concurrent-ruby-1.1.9.gem
Successfully installed concurrent-ruby-1.1.9
Fetching: rack-2.2.3.gem
Successfully installed rack-2.2.3
...
```

Pruebe la instalación de Rails.

```
~$ rails --version
Rails 6.1.4.1
```

Utilice `rails new` con el nombre de la aplicación para crear un nuevo proyecto de Rails.

```
~$ rails new ~/eb-rails
```

Rails crea un directorio con el nombre especificado, genera todos los archivos necesarios para ejecutar localmente un proyecto de ejemplo y, a continuación, ejecuta bundler para instalar todas las dependencias (Gems) definidas en el Gemfile del proyecto.

**nota**  
Este proceso instala la última versión de Puma para el proyecto. Esta versión puede ser diferente de la versión que Elastic Beanstalk proporciona en la versión de la plataforma Ruby de su entorno. Para ver las versiones de Puma proporcionadas por Elastic Beanstalk, consulte el [Historial de la plataforma Ruby](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platform-history-ruby.html)en la *AWS Elastic Beanstalk Guía de plataformas*. Para obtener más información acerca de la versión más reciente de Puma, consulte el sitio web de [Puma.io](http://puma.io). Si hay una discrepancia entre las dos versiones de Puma, utilice una de las opciones siguientes:  
Uso de la versión Puma instalada por el comando `rails new` anterior. En este caso, debe agregar un `Procfile` para que la plataforma utilice la versión del servidor Puma propia que usted proporcionó. Para obtener más información, consulte [Configuración del proceso de la aplicación con un Procfile en Elastic Beanstalk.](ruby-platform-procfile.md).
Actualice la versión de Puma para que sea consistente con la versión preinstalada en la versión de la plataforma Ruby de su entorno. Para hacerlo, modifique la versión de Puma en [Gemfile](ruby-platform-gemfile.md#ruby-platform-gemfile.title) ubicada en la raíz del directorio fuente del proyecto. A continuación, ejecute `bundle update`. Para obtener más información, consulte la página [de actualización de Bundle](https://bundler.io/man/bundle-update.1.html) en el sitio web de Bundler.io. 

Pruebe su instalación de Rails ejecutando el proyecto predeterminado localmente.

```
~$ cd eb-rails
~/eb-rails$ rails server
=> Booting Puma
=> Rails 6.1.4.1 application starting in development
=> Run `bin/rails server --help` for more startup options
Puma starting in single mode...
* Puma version: 5.5.2 (ruby 3.0.2-p107) ("Zawgyi")
*  Min threads: 5
*  Max threads: 5
*  Environment: development
*          PID: 77857
* Listening on http://127.0.0.1:3000
* Listening on http://[::1]:3000
Use Ctrl-C to stop
...
```

Abra `http://localhost:3000` en un navegador web para ver el proyecto predeterminado en acción.

![\[La página predeterminada de desarrollo del sitio de Rails.\]](http://docs.aws.amazon.com/es_es/elasticbeanstalk/latest/dg/images/ruby-rails-default.png)


En esta página solo es visible en el modo de desarrollo. Agregue contenido a la página de inicio de la aplicación para admitir la implementación de producción en Elastic Beanstalk. Use `rails generate` para crear un controlador, una ruta y una vista para la página de bienvenida. 

```
~/eb-rails$ rails generate controller WelcomePage welcome
      create  app/controllers/welcome_page_controller.rb
       route  get 'welcome_page/welcome'
      invoke  erb
      create    app/views/welcome_page
      create    app/views/welcome_page/welcome.html.erb
      invoke  test_unit
      create    test/controllers/welcome_page_controller_test.rb
      invoke  helper
      create    app/helpers/welcome_page_helper.rb
      invoke    test_unit
      invoke  assets
      invoke    coffee
      create      app/assets/javascripts/welcome_page.coffee
      invoke    scss
      create      app/assets/stylesheets/welcome_page.scss.
```

Con esto dispondrá de todo lo necesario para obtener acceso a la página en `/welcome_page/welcome`. Sin embargo, antes de publicar los cambios, cambie el contenido de la vista y añada una ruta para que esta página aparezca en el nivel superior del sitio. 

Utilice un editor de texto para modificar el contenido de `app/views/welcome_page/welcome.html.erb`. En este ejemplo, usará `cat` para sobrescribir el contenido del archivo existente. 

**Example app/views/welcome\$1page/welcome.html.erb**  

```
<h1>Welcome!</h1>
<p>This is the front page of my first Rails application on Elastic Beanstalk.</p>
```

 Por último, añada la siguiente ruta a `config/routes.rb`: 

**Example config/routes.rb**  

```
Rails.application.routes.draw do
  get 'welcome_page/welcome'
  root 'welcome_page#welcome'
```

Esto indica a Rails que dirija las solicitudes a la raíz del sitio web al método de bienvenida del controlador de la página de bienvenida, que presenta el contenido en la vista de bienvenida (`welcome.html.erb`).

Para que Elastic Beanstalk implemente correctamente la aplicación en la plataforma Ruby, es necesario actualizar `Gemfile.lock`. Es posible que algunas de las dependencias de `Gemfile.lock ` sean específicas de la plataforma. Por lo tanto, es necesario agregar **platform ruby** a `Gemfile.lock` de modo que todas las dependencias requeridas se instalen con la implementación.

**Example**  

```
~/eb-rails$ bundle lock --add-platform ruby
Fetching gem metadata from https://rubygems.org/............
Resolving dependencies...
Writing lockfile to /Users/janedoe/EBDPT/RubyApps/eb-rails-doc-app/Gemfile.lock
```

## Configuración de los ajustes de Rails
<a name="ruby-rails-tutorial-configure"></a>

Utilice la consola de Elastic Beanstalk para configurar Rails con propiedades de entorno. Establezca la propiedad del entorno de `SECRET_KEY_BASE` en una cadena de hasta 256 caracteres alfanuméricos.

Rails utiliza esta propiedad para crear claves. Por lo tanto, debe mantenerla en secreto y no almacenarla en el control de código fuente en texto no cifrado. En su lugar, debe incorporarla al código de Rails de su entorno mediante una propiedad de entorno.

**Cómo configurar variables de 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 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**.

1. Desplácese hacia abajo hasta **Variables de entorno de tiempo de ejecución**.

1. Seleccione **Añadir variables de entorno**.

1. En **Fuente**, seleccione **Texto sin formato**.
**nota**  
Los valores de **Secrets Manager** y **Almacén de parámetros de SSM** del menú desplegable sirven para configurar variables de entorno como secretos para almacenar información confidencial, como credenciales y claves de API. Para obtener más información, consulte [Uso de Elastic AWS Secrets Manager AWS Systems Manager Beanstalk con un almacén de parámetros](AWSHowTo.secrets.md). 

1. Introduzca los pares de **nombre de la variable de entorno** y **valor de la variable de entorno**.

1. Si necesita añadir más variables, repita desde el **Paso 6** hasta el **Paso 8**.

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

Ahora ya está listo para implementar el sitio en su entorno.

## Implementar la aplicación
<a name="ruby-rails-tutorial-deploy"></a>

Cree un [paquete de código fuente](applications-sourcebundle.md) que contenga los archivos creados por Rails. El comando siguiente crea un paquete de código fuente denominado `rails-default.zip`.

```
~/eb-rails$ zip ../rails-default.zip -r * .[^.]*
```

Cargue el paquete de origen en Elastic Beanstalk para implementar Rails en su entorno.

**Para implementar un paquete de código fuente**

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, elija **Upload and deploy (Cargar e implementar)**.

1. Utilice el cuadro de diálogo en pantalla para cargar el paquete de código fuente.

1. Elija **Deploy (Implementar)**.

1. Cuando se complete la implementación, seleccione la URL del para abrir el sitio web en una nueva pestaña.

## Limpieza
<a name="ruby-rails-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.

## Siguientes pasos
<a name="ruby-rails-tutorial-nextsteps"></a>

Para obtener más información acerca de Rails, visite [rubyonrails.org](https://rubyonrails.org/).

A medida que siga desarrollando la aplicación, es probable que desee contar con un mecanismo que le permita administrar los entornos e implementar la aplicación sin tener que crear manualmente un archivo .zip y cargarlo en la consola de Elastic Beanstalk. La interfaz de [línea de comandos de Elastic Beanstalk](eb-cli3.md) (EB CLI easy-to-use) proporciona comandos para crear, configurar e implementar aplicaciones en entornos de Elastic Beanstalk desde la línea de comandos.

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