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

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

Laravel es un marco de controlador de vista de modelos (MVC) de código abierto de PHP. Este tutorial lo guía en el proceso de generación de una aplicación de Laravel, su implementación en un entorno de AWS Elastic Beanstalk y su configuración para conectarse a una instancia de base de datos de Amazon Relational Database Service (Amazon RDS).

Prerequisites

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 Introducción a Elastic Beanstalk para lanzar su primer entorno de Elastic Beanstalk.

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 ($) 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 10, puede instalar Windows Subsystem para Linux para obtener una versión de Ubuntu y Bash integrada con Windows.

Laravel 6 requiere PHP 7.2 o posterior. También requiere las extensiones de PHP enumeradas en el tema requisitos del servidor en la documentación oficial de Laravel. Siga las instrucciones del tema Configuración del entorno de desarrollo de PHP para instalar PHP y Composer.

Para obtener información sobre soporte y mantenimiento de Laravel, consulte el tema de la política de soporte en la documentación oficial de Laravel.

Lance un entorno de Elastic Beanstalk

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

Para lanzar un entorno (consola)

  1. Abra la consola de Elastic Beanstalk con este enlace preconfigurado: console.aws.amazon.com/elasticbeanstalk/home#/newApplication?applicationName=tutorials&environmentType=LoadBalanced

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

  3. En Application code (Código de aplicación), seleccione Sample application (Aplicación de muestra).

  4. Elija Review and launch (Revisar y lanzar).

  5. Revise las opciones disponibles. Elige la opción disponible que quieras usar y, cuando estés listo, elige Create app (Crear aplicación).

El entorno tarda unos cinco minutos en crearse e incluye los recursos siguientes:

  • 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.

    importante

    El certificado de firma cruzada DST Root CA X3 de Let’s Script venció el 30 de septiembre de 2021. Debido a esto, es posible que los entornos Beanstalk que se ejecutan en los sistemas operativos Amazon Linux 2 y Amazon Linux AMI no puedan conectarse a los servidores mediante los certificados de Let's Encrypt.

    El 3 de octubre de 2021, Elastic Beanstalk lanzó nuevas versiones de plataforma para Amazon Linux AMI y Amazon Linux 2 con los certificados de entidad de certificación actualizados. Para recibir estas actualizaciones y solucionar este problema, active las Actualizaciones administradas o actualice sus plataformas manualmente. Para obtener más información, consulte las notas de la versión de la actualización de la plataforma en la Notas de la versión de AWS Elastic Beanstalk.

    También puede aplicar las soluciones alternativas manuales descritas en este Artículo del Centro de conocimientos de AWS. Dado que Elastic Beanstalk provee a la AMI GUID bloqueados, le recomendamos que utilice el comando sudo yum install en el artículo. También puede utilizar el comando sudo sed en el artículo si prefiere modificar manualmente el sistema en su lugar.

  • 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.

  • 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): nombre de dominio que direcciona el tráfico a la aplicación web con el formato subdominio.región.elasticbeanstalk.com.

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 Usar Elastic Beanstalk con Amazon S3.

Instalación de Laravel y creación de un sitio web

Composer puede instalar Laravel y crear un proyecto de trabajo con un único comando:

~$ composer create-project --prefer-dist laravel/laravel eb-laravel

Composer instala Laravel y sus dependencias, y genera un proyecto predeterminado.

Si tiene algún problema al instalar Laravel, vaya al tema de instalación en la documentación oficial: https://laravel.com/docs/6.x.

Implementar la aplicación

Cree un paquete de código fuente que contenga los archivos creados por Composer. El comando siguiente crea un paquete de código fuente denominado laravel-default.zip. Excluye los archivos de la carpeta vendor, que ocupan mucho espacio y no se requieren para implementar la aplicación en Elastic Beanstalk.

~/eb-laravel$ zip ../laravel-default.zip -r * .[^.]* -x "vendor/*"

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

Para implementar un paquete de código fuente

  1. Abra la consola de Elastic Beanstalk y, en la lista Regions (Regiones), seleccione su región de AWS.

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

    nota

    Si tiene muchos entornos, utilice la barra de búsqueda para filtrar la lista de entornos.

  3. En la página de información general del entorno, elija Upload and deploy (Cargar e implementar).

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

  5. Elija Deploy (Implementar).

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

nota

Para optimizar aun más el paquete de código fuente, inicialice un repositorio Git y use el comando git archive para crear el paquete de código fuente. El proyecto Laravel predeterminado incluye un archivo .gitignore que indica a Git que debe excluir la carpeta vendor y los demás archivos que no se requieren para la implementación.

Configuración de los ajustes de Composer

Cuando la implementación se complete, haga clic en la URL para abrir la aplicación de Laravel en el navegador:

¿Qué es esto? De forma predeterminada, Elastic Beanstalk proporciona la raíz del proyecto en la ruta raíz del sitio web. En este caso, sin embargo, la página predeterminada (index.php) está un nivel por debajo de la carpeta public. Puede comprobarlo agregando /public a la URL. Por ejemplo, http://laravel.us-east-2.elasticbeanstalk.com/public.

Para que la aplicación Laravel esté disponible en la ruta raíz, utilice la consola Elastic Beanstalk con el fin de configurar la raíz del documento del el sitio web.

Para configurar la raíz de documentos del sitio web

  1. Abra la consola de Elastic Beanstalk y, en la lista Regions (Regiones), seleccione su región de AWS.

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

    nota

    Si tiene muchos entornos, utilice la barra de búsqueda para filtrar la lista de entornos.

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

  4. En la categoría de configuración Software, elija Edit (Editar).

  5. En Document Root (Raíz del documento), introduzca /public.

  6. Seleccione Apply.

  7. Cuando la actualización se haya completado, haga clic en la URL para volver a abrir el sitio en el navegador.

Hasta el momento, todo fue bien. A continuación, debe agregar una base de datos al entorno y configurar Laravel para que se conecte a ella.

Agregar una base de datos al entorno

Inicie una instancia de base de datos de RDS en su entorno de Elastic Beanstalk. Puede utilizar bases de datos de MySQL, SQLServer o PostgreSQL con Laravel en Elastic Beanstalk. En este ejemplo, utilizaremos MySQL.

Para agregar una instancia de base de datos de RDS a su entorno Elastic Beanstalk

  1. Abra la consola de Elastic Beanstalk y, en la lista Regions (Regiones), seleccione su región de AWS.

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

    nota

    Si tiene muchos entornos, utilice la barra de búsqueda para filtrar la lista de entornos.

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

  4. En la categoría de configuración Database (Base de datos), seleccione Edit (Editar).

  5. En Engine (Motor), seleccione mysql.

  6. Escriba un nombre de usuario y contraseña maestros. Elastic Beanstalk proporcionará estos valores a la aplicación a través de propiedades de entorno.

  7. Seleccione Apply.

Se tarda alrededor de 10 minutos en crear una instancia de base de datos. Para obtener más información sobre las bases de datos acopladas a un entorno de Elastic Beanstalk, consulte Añadir una base de datos al entorno de Elastic Beanstalk.

Mientras tanto, puede actualizar el código fuente para que pueda leer la información de conexión del entorno. Elastic Beanstalk proporciona la información de la conexión a través de variables de entorno, como RDS_HOSTNAME, a las que puede obtener acceso desde la aplicación.

La configuración de base de datos de Laravel se guarda en un archivo llamado database.php en la carpeta config del proyecto de código. Busque la entrada mysql y modifique las variables host, database, username y and password de forma que lean los valores correspondientes en Elastic Beanstalk:

ejemplo ~/Eb-laravel/config/database.php

... 'connections' => [ 'sqlite' => [ 'driver' => 'sqlite', 'database' => env('DB_DATABASE', database_path('database.sqlite')), 'prefix' => '', ], 'mysql' => [ 'driver' => 'mysql', 'host' => env('RDS_HOSTNAME', '127.0.0.1'), 'port' => env('RDS_PORT', '3306'), 'database' => env('RDS_DB_NAME', 'forge'), 'username' => env('RDS_USERNAME', 'forge'), 'password' => env('RDS_PASSWORD', ''), 'unix_socket' => env('DB_SOCKET', ''), 'charset' => 'utf8mb4', 'collation' => 'utf8mb4_unicode_ci', 'prefix' => '', 'strict' => true, 'engine' => null, ], ...

Para comprobar que la conexión de la base de datos está configurada correctamente, agregue código a index.php para conectarse a la base de datos y también para la respuesta predeterminada:

ejemplo ~/Eb-laravel/public/index.php

... if(DB::connection()->getDatabaseName()) { echo "Connected to database ".DB::connection()->getDatabaseName(); } $response->send(); ...

Cuando finalice el lanzamiento de la instancia de base de datos, empaquete e implemente la aplicación actualizada en el entorno.

Para actualizar su entorno de Elastic Beanstalk

  1. Cree un nuevo paquete de código fuente:

    ~/eb-laravel$ zip ../laravel-v2-rds.zip -r * .[^.]* -x "vendor/*"
  2. Abra la consola de Elastic Beanstalk y, en la lista Regions (Regiones), seleccione su región de AWS.

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

    nota

    Si tiene muchos entornos, utilice la barra de búsqueda para filtrar la lista de entornos.

  4. Elija Upload and Deploy (Cargar e implementar).

  5. Seleccione Browse (Examinar) y cargue laravel-v2-rds.zip.

  6. Elija Deploy (Implementar).

La implementación de una nueva versión de la aplicación tarda menos de un minuto. Cuando se haya completado, actualice la página web de nuevo para comprobar que la conexión con la base de datos es correcta:

Cleanup

Cuando termine de trabajar con Elastic Beanstalk, puede terminar su entorno. Elastic Beanstalk termina todos los recursos de AWS asociados al entorno, tales como las instancias de Amazon EC2, las instancias de base de datos, los equilibradores de carga, los grupos de seguridad y las alarmas.

Para terminar su entorno de Elastic Beanstalk

  1. Abra la consola de Elastic Beanstalk y, en la lista Regions (Regiones), seleccione su región de AWS.

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

    nota

    Si tiene muchos entornos, utilice la barra de búsqueda para filtrar la lista de entornos.

  3. Elija Environment actions (Acciones de entorno) y, a continuación, Terminate environment (Terminar entorno).

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

Con Elastic Beanstalk, puede crear fácilmente un nuevo entorno para su aplicación en cualquier momento.

Además, puede terminar los recursos de base de datos creados fuera del entorno de Elastic Beanstalk. Cuando termine una instancia de base de datos de Amazon RDS, puede hacer una instantánea para restaurar los datos posteriormente en otra instancia.

Para terminar la instancia de base de datos de RDS

  1. Abra la consola de Amazon RDS.

  2. Seleccione Databases (Bases de datos).

  3. Seleccione la instancia de base de datos.

  4. Elija Actions (Acciones) y, a continuación, Delete (Eliminar).

  5. Decida si desea crear una instantánea y seleccione Delete (Eliminar).

Pasos siguientes

Para obtener más información sobre Laravel, visite el sitio web oficial de Laravel en laravel.com.

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 (CLI de EB) proporciona comandos fáciles de usar para crear, configurar e implementar aplicaciones en entornos de Elastic Beanstalk desde la línea de comandos.

En este tutorial, ha utilizado la consola de Elastic Beanstalk para configurar las opciones de Composer. Para integrar esta configuración en el código fuente de la aplicación, puede utilizar un archivo de configuración similar al siguiente.

ejemplo .ebextensions/composer.config

option_settings: aws:elasticbeanstalk:container:php:phpini: document_root: /public

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

Ejecutar una instancia de base de datos de Amazon RDS; en el entorno de Elastic Beanstalk es ideal para desarrollo y pruebas, pero supedita el ciclo de vida de la base de datos al entorno. Consulte Agregar una instancia de base de datos de Amazon RDS a un entorno de aplicaciones PHP para obtener instrucciones acerca de cómo conectarse a una base de datos que se ejecute fuera del entorno.

Por último, si pretende utilizar la aplicación en un entorno de producción, querrá configurar un nombre de dominio personalizado para el entorno y habilitar HTTPS para las conexiones seguras.