Implementación de una aplicación PHP de alta disponibilidad con una base de datos externa de Amazon RDS en Elastic Beanstalk - AWS Elastic Beanstalk

Implementación de una aplicación PHP de alta disponibilidad con una base de datos externa de Amazon RDS en Elastic Beanstalk

En este tutorial, se explica el proceso de lanzamiento de una instancia de base de datos de RDS externa en AWS Elastic Beanstalk y la configuración de un entorno de alta disponibilidad que ejecuta una aplicación PHP para conectarse a esa instancia. Si se ejecuta una instancia de base de datos externa en Elastic Beanstalk, la base de datos se desvincula del ciclo de vida del entorno. Esto le permite conectarse a la misma base de datos desde diferentes entornos, intercambiar una base de datos por otra o realizar una implementación "blue/green" sin que ello afecte a la base de datos.

En este tutorial, se utiliza una aplicación PHP de ejemplo que emplea una base de datos MySQL para guardar los datos de texto proporcionados por el usuario. La aplicación de ejemplo utiliza archivos de configuración para configurar los ajustes de PHP y crear una tabla en la base de datos para que la aplicación la utilice. También se muestra cómo utilizar un archivo Composer para instalar paquetes durante la implementación.

Requisitos previos

Antes de comenzar, descargue el paquete de código fuente de la aplicación de ejemplo de GitHub: eb-demo-php-simple-app-1.3.zip

En los procedimientos que se describen en este tutorial sobre tareas de Amazon Relational Database Service (Amazon RDS), se presupone que los recursos se lanzan en una Amazon Virtual Private Cloud (Amazon VPC) predeterminada. Todas las nuevas cuentas contienen una VPC predeterminada en cada región. Si no dispone de una VPC predeterminada, los procedimientos serán diferentes. Consulte Uso de Elastic Beanstalk con Amazon RDS para obtener instrucciones sobre la plataforma de EC2 y de una VPC personalizada.

Lanzamiento de una instancia de base de datos en Amazon RDS

Para utilizar una base de datos externa con una aplicación que se ejecute en Elastic Beanstalk, primero lance una instancia de base de datos con Amazon RDS. Cuando lanza una instancia con Amazon RDS, esta es totalmente independiente de Elastic Beanstalk y de los entornos de Elastic Beanstalk, y Elastic Beanstalk no la terminará ni la monitorizará.

Use la consola de Amazon RDS para lanzar una instancia de base de datos MySQL Multi-AZ. Si selecciona un despliegue Multi-AZ, tendrá la seguridad de que la base de datos conmutará por error y seguirá disponible en caso de que la instancia de base de datos maestra se quede fuera de servicio.

Para lanzar una instancia de base de datos de RDS en una VPC predeterminada

  1. Abra la consola de RDS.

  2. Elija Databases (Bases de datos) en el panel de navegación.

  3. Elija Create database (Crear base de datos).

  4. Elija Standard Create (Creación estándar).

    importante

    No elija la opción Easy Create (Creación sencilla). No permite configurar los ajustes necesarios para lanzar esta base de datos de RDS.

  5. En Additional configuration (Configuración adicional), escriba ebdb en Initial database name (Nombre de base de datos inicial).

  6. Revise cuidadosamente la configuración predeterminada y realice los ajustes necesarios. Preste atención a las siguientes opciones:

    • DB instance class (Clase de instancia de base de datos) – elija un tamaño de instancia que cuente con la memoria y la potencia de CPU apropiadas para su carga de trabajo.

    • Multi-AZ deployment (Implementación Multi-AZ) – Para obtener alta disponibilidad, establezca esta opción en Create an Aurora Replica/Reader node in a different AZ (Crear una réplica de Aurora/nodo de lector en otra zona de disponibilidad).

    • Master username (Nombre de usuario maestro) y Master password (Contraseña maestra) – nombre de usuario y contraseña de la base de datos. Anote de estos valores, ya que los necesitará posteriormente.

  7. Compruebe los valores predeterminados de las demás opciones y, a continuación, elija Create database (Crear base de datos).

A continuación, modifique el grupo de seguridad asociado a la instancia de base de datos para permitir el tráfico entrante en el puerto correspondiente. Este es el mismo grupo de seguridad que asociará a su entorno de Elastic Beanstalk más adelante, por lo que la regla que añada concederá permiso de entrada a otros recursos del mismo grupo de seguridad.

Para modificar las reglas de entrada del grupo de seguridad de la instancia de RDS

  1. Abra la consola de Amazon RDS.

  2. Elija Databases (Bases de datos).

  3. Elija el nombre de la instancia de base de datos para ver sus detalles.

  4. En la sección Connectivity (Conectividad), tome nota de los valores de Subnets (Subredes), Security groups (Grupos de seguridad) y Endpoint (Punto de enlace) que aparecen en esta página para usar la información más adelante.

  5. En Security (Seguridad) se muestra el grupo de seguridad asociado a la instancia de base de datos. Abra el enlace para ver el grupo de seguridad en la consola de Amazon EC2.

    
        Sección Connectivity (Conectividad) de una página de instancia de base de datos en la consola de Amazon RDS
  6. En los detalles del grupo de seguridad, elija la pestaña Inbound (Entrada).

  7. Elija Edit.

  8. Seleccione Add Rule.

  9. En Type /Tipo), elija el motor de base de datos que utiliza la aplicación.

  10. En Source (Origen), escriba sg- para ver una lista de grupos de seguridad disponibles. Elija el grupo de seguridad actual para que los recursos del grupo de seguridad reciban en el puerto de la base de datos el tráfico procedente de otros recursos del mismo grupo.

    
        Edición de las reglas entrantes de un grupo de seguridad en la consola de Amazon EC2
  11. Seleccione Save.

Se tarda alrededor de 10 minutos en crear una instancia de base de datos. Mientras tanto, cree el entorno de Elastic Beanstalk.

Creación de 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. Después lanzar el entorno, puede configurar el entorno para conectarse a la base de datos e implementar la aplicación de ejemplo que ha descargado de GitHub.

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:

  • Instancia EC2: 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.

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

  • Balanceador de carga: balanceador de carga de Elastic Load Balancing que está 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: 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.

  • Grupo de Auto Scaling: grupo de Auto Scaling que está 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.

  • Alarmas de Amazon CloudWatch: dos alarmas de CloudWatch que monitorizan 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 del entorno y propagar los cambios de configuración. Los recursos se definen en una plantilla que puede verse en la consola de AWS CloudFormation.

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

Todos estos recursos los administra Elastic Beanstalk. Cuando termina su entorno, Elastic Beanstalk termina todos los recursos que este contiene. La instancia de base de datos de RDS que lanzó se encuentra fuera de su entorno, por lo que usted es responsable de administrar su ciclo de vida.

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.

Configuración de grupos de seguridad, propiedades de entorno y escalado

Agregue el grupo de seguridad de la instancia de base de datos al entorno en ejecución. Este procedimiento hace que Elastic Beanstalk reaprovisione todas las instancias de su entorno con el grupo de seguridad adicional asociado.

Para agregar un grupo de seguridad al entorno

  • Aplique alguna de las siguientes acciones:

    • Para añadir un grupo de seguridad con la consola de Elastic Beanstalk

      1. Abra la consola de Elastic Beanstalk y, en la lista 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 Instances (Instancias), elija Edit (Editar).

      5. En EC2 security groups (Grupos de seguridad de EC2), elija el grupo de seguridad que desea asignar a las instancias, además del grupo de seguridad de instancia que crea Elastic Beanstalk.

      6. Seleccione Aplicar.

      7. Lea la advertencia y, a continuación, elija Confirm (Confirmar).

    • Para añadir un grupo de seguridad con un archivo de configuración, utilice el archivo de ejemplo securitygroup-addexisting.config.

Después, utilice las propiedades de entorno para pasar la información de la conexión al entorno. La aplicación de ejemplo utiliza un conjunto predeterminado de propiedades que coinciden con las que Elastic Beanstalk configura al aprovisionar una base de datos en su entorno.

Para configurar las propiedades de entorno de una instancia de base de datos de Amazon RDS

  1. Abra la consola de Elastic Beanstalk y, en la lista 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 la sección Propiedades del entorno, defina las variables que lee la aplicación para crear una cadena de conexión. Para conseguir compatibilidad con los entornos que tienen una instancia de base de datos de RDS, utilice los siguientes nombres y valores. Encontrará todos los valores, excepto la contraseña, en la consola de RDS.

    Nombre de la propiedad Descripción Valor de la propiedad

    RDS_HOSTNAME

    El nombre de host de la instancia de base de datos.

    En la pestaña Connectivity & security (Conectividad y seguridad) de la consola de Amazon RDS: Endpoint (Punto de enlace).

    RDS_PORT

    El puerto en que la instancia de base de datos acepta las conexiones. El valor predeterminado varía dependiendo del motor de base de datos.

    En la pestaña Connectivity & security (Conectividad y seguridad) de la consola de Amazon RDS: Port (Puerto).

    RDS_DB_NAME

    El nombre de la base de datos, ebdb

    En la pestaña Configuration (Configuración) de la consola de Amazon RDS: DB Name (Nombre de la base de datos).

    RDS_USERNAME

    El nombre de usuario que ha configurado para la base de datos.

    En la pestaña Configuration (Configuración) de la consola de Amazon RDS: Master username (Nombre de usuario maestro).

    RDS_PASSWORD

    La contraseña que ha configurado para la base de datos.

    No está disponible para referencia en la consola de Amazon RDS.

    
        Sección Environment properties configuration (Configuración de propiedades del entorno) con propiedades de RDS añadidas
  6. Seleccione Aplicar.

Por último, configure el grupo de Auto Scaling 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.

Para configurar el grupo de Auto Scaling del entorno para disponer de alta disponibilidad

  1. Abra la consola de Elastic Beanstalk y, en la lista 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 Capacity (Capacidad), elija Edit (Editar).

  5. En la sección Auto Scaling Group (Grupo de Auto Scaling), establezca Min instances (Instancias mínimas) en 2.

  6. Seleccione Aplicar.

Implemente la aplicación de muestra.

Ahora, el entorno está listo para ejecutar la aplicación de ejemplo y conectarse a Amazon RDS. Implemente la aplicación de ejemplo en el entorno.

nota

Si aún no lo ha hecho, descargue el paquete de código fuente de GitHub: eb-demo-php-simple-app-1.3.zip

Para implementar un paquete de código fuente

  1. Abra la consola de Elastic Beanstalk y, en la lista 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.

El sitio recopila los comentarios de los usuarios y utiliza una base de datos MySQL para almacenar los datos. Para agregar un comentario, elija Share Your Thought (Compatir su opinión), escriba sus impresiones y seleccione Submit Your Thought (Enviar su opinión). La aplicación web escribe el comentario en la base de datos para que cualquier instancia del entorno pueda leerlo y que no se pierda en caso de que las instancias se queden fuera de servicio.

Eliminación

Cuando ya no necesite utilizar Elastic Beanstalk, puede terminar el entorno. Elastic Beanstalk termina todos los recursos de AWS asociados con el entorno, como las instancias de Amazon EC2, las instancias de base de datos, los balanceadores de carga, los grupos de seguridad y las alarmas.

Para finalizar su entorno de Elastic Beanstalk, haga lo siguiente:

  1. Abra la consola de Elastic Beanstalk y, en la lista 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. Seleccione Acciones del 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. Elija Databases (Bases de datos).

  3. Seleccione la instancia de base de datos.

  4. Elija Acciones y, a continuación, elija Eliminar.

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

Pasos siguientes

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 sencillos para crear, configurar e implementar aplicaciones en entornos de Elastic Beanstalk desde la línea de comandos.

La aplicación de ejemplo utiliza los archivos de configuración para configurar los ajustes de PHP y crear una tabla en la base de datos si no existe todavía. También puede utilizar un archivo de configuración para configurar el grupo de seguridad de las instancias durante la creación del entorno y evitar así la laboriosa tarea de actualizar la configuración. Para obtener más información, consulte Personalización avanzada de entornos con archivos de configuración (.ebextensions).

En las tareas de desarrollo y pruebas, es posible que desee utilizar la funcionalidad de Elastic Beanstalk para agregar una instancia de base de datos administrada directamente al entorno. Para obtener instrucciones acerca de cómo configurar una base de datos dentro del entorno, consulte Añadir una base de datos al entorno de Elastic Beanstalk.

Si necesita una base de datos de alto desempeño, considere la posibilidad de usar Amazon Aurora. Amazon Aurora es un motor de base de datos compatible con MySQL que ofrece características de bases de datos comerciales a bajo costo. Para conectar la aplicación a una base de datos diferente, repita los pasos de la configuración del grupo de seguridad y actualice las propiedades de entorno relacionadas con RDS.

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.