

# Explicación: crear un servidor web y una instancia de base de datos de Amazon RDS
<a name="TUT_WebAppWithRDS"></a>

Este tutorial le ayuda a instalar un servidor web Apache con PHP y a crear una base de datos de MariaDB, MySQL o PostgreSQL. El servidor web se ejecuta en una instancia de Amazon EC2 mediante Amazon Linux 2023 y puede elegir entre una instancia de base de datos de MySQL o PostgreSQL. Tanto la instancia de Amazon EC2 como la instancia de base de datos se ejecutan en una nube virtual privada (VPC) basada en el servicio Amazon VPC. 

**importante**  
La creación de una cuenta de AWS no supone ningún costo. No obstante, al completar este tutorial, puede incurrir en costos por los recursos de AWS que utilice. Puede eliminar estos recursos después de completar el tutorial si ya no son necesarios.

**nota**  
Este tutorial funciona con Amazon Linux 2023 y podría no funcionar con otras versiones de Linux.

En la siguiente explicación, cree una instancia EC2 que utilice la VPC, subredes y el grupo de seguridad predeterminados para la Cuenta de AWS. En este tutorial, se muestra cómo crear la instancia de base de datos y configurar automáticamente la conectividad con la instancia EC2 que creó. A continuación, el tutorial muestra cómo instalar el servidor web en la instancia EC2. Conecte el servidor web a su instancia de base de datos en la VPC con el punto de conexión del escritor de instancia de base de datos.

1. [Lanzamiento de una instancia EC2 para conectarse con la instancia de base de datos](CHAP_Tutorials.WebServerDB.LaunchEC2.md)

1. [Crear una instancia de base de datos de Amazon RDS](CHAP_Tutorials.WebServerDB.CreateDBInstance.md)

1. [Instalación de un servidor web en la instancia de EC2](CHAP_Tutorials.WebServerDB.CreateWebServer.md)

El siguiente diagrama muestra la configuración cuando el tutorial se completa.

![\[Escenario de VPC única\]](http://docs.aws.amazon.com/es_es/AmazonRDS/latest/UserGuide/images/con-VPC-sec-grp.png)


**nota**  
Tras completar el tutorial, habrá una subred pública y una privada en cada zona de disponibilidad de la VPC. En este tutorial, se usa la VPC predeterminada para Cuenta de AWS que configura de forma automática la conectividad entre la instancia EC2 y la instancia de base de datos. Si prefiere configurar una nueva VPC para este escenario, complete las tareas de [Tutorial: Creación de una VPC para utilizarla con una instancia de base de datos (solo IPv4)](CHAP_Tutorials.WebServerDB.CreateVPC.md).

# Lanzamiento de una instancia EC2 para conectarse con la instancia de base de datos
<a name="CHAP_Tutorials.WebServerDB.LaunchEC2"></a>

Cree una instancia Amazon EC2 en la subred pública de la VPC.

**Para lanzar una instancia de EC2**

1. Inicie sesión en la Consola de administración de AWS y abra la consola de Amazon EC2 en [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/).

1. En la esquina superior derecha de la Consola de administración de AWS, elija la Región de AWS en la que desea crear la instancia de EC2.

1. Elija **Panel de EC2** y, a continuación, **Lanzar instancia**, como se muestra a continuación.  
![\[Panel de EC2\]](http://docs.aws.amazon.com/es_es/AmazonRDS/latest/UserGuide/images/Tutorial_WebServer_11.png)

1. Elija los siguientes ajustes en la página **Lanzar una instancia**.

   1. En **Name and tags** (Nombre y etiquetas), en **Name** (Nombre), introduzca **tutorial-ec2-instance-web-server**.

   1. En **Imágenes de aplicaciones y sistema operativo (Imagen de máquina de Amazon)**, elija **Amazon Linux** y, a continuación, **AMI de Amazon Linux 2023**. Mantenga los valores predeterminados para las demás opciones.  
![\[Página Choose an Amazon Machine Image (Elegir una Amazon Machine Image)\]](http://docs.aws.amazon.com/es_es/AmazonRDS/latest/UserGuide/images/Tutorial_WebServer_12.png)

   1. En **Instance type (Tipo de instancia)**, elija **t2.micro**.

   1. En **Key pair (login) [Par de claves (inicio)]**, elija **Key pair name (Nombre de par de claves)** para utilizar un par de claves existente. Para crear un nuevo par de claves para la instancia de Amazon EC2, que se muestra a continuación, elija **Create new key pair (Crear nuevo par de claves)** y, a continuación, utilice la ventana **Create key pair (Crear un par de claves)**.

      Para obtener más información sobre la creación de un nuevo par de claves, consulte [Crear un par de claves](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/get-set-up-for-amazon-ec2.html#create-a-key-pair) en la *Guía del usuario de Amazon EC2*.

   1. En **Network settings (Configuración de red)**, defina estos valores y mantenga los ajustes predeterminados en los otros valores:
      + En **Allow SSH traffic from (Permitir el tráfico SSH desde)**, elija el origen de las conexiones SSH a la instancia de EC2.

        Puede elegir **My IP (Mi IP)** si la dirección IP que se muestra es correcta para las conexiones SSH.

        De lo contrario, puede determinar la dirección IP que usará para conectarse a las instancias de EC2 en su VPC mediante Secure Shell (SSH). Para determinar su dirección IP pública, en una ventana o pestaña distinta del navegador, puede utilizar el servicio en [https://checkip.amazonaws.com](https://checkip.amazonaws.com). Un ejemplo de dirección IP es `203.0.113.25/32`.

        En muchos casos, puede conectarse a través de un proveedor de servicios de internet (ISP) o protegido por un firewall sin una dirección IP estática. Si es así, asegúrese de identificar el rango de direcciones IP que utilizan los equipos cliente.
**aviso**  
Si utiliza `0.0.0.0/0` para el acceso SSH, permita que todas las direcciones IP accedan a sus instancias públicas mediante SSH. Este método es aceptable para un periodo de tiempo corto en un entorno de prueba, pero no es seguro en entornos de producción. En entornos de producción, solo debe autorizar una dirección IP específica o un intervalo de direcciones para acceder a sus instancias mediante SSH.
      + Active **Allow HTTPs traffic from the internet (Permitir el tráfico HTTP desde internet)**.
      + Active **Allow HTTPs traffic from the internet (Permitir el tráfico HTTP desde internet)**.  
![\[Página Configure Instance Details (Configurar los detalles de la instancia)\]](http://docs.aws.amazon.com/es_es/AmazonRDS/latest/UserGuide/images/Tutorial_WebServer_14.png)

   1. No cambie los valores predeterminados del resto de las secciones.

   1. Revise un resumen de la configuración de su instancia en el panel **Summary** (Resumen); cuando haya terminado, elija **Launch instance**.

1. En la página **Launch Status**, que se muestra a continuación, anote el identificador de la nueva instancia de EC2, por ejemplo, `i-1234567890abcdef0`.  
![\[Identificador de instancia de EC2 en la página Launch Status.\]](http://docs.aws.amazon.com/es_es/AmazonRDS/latest/UserGuide/images/getting-started-ec2-id.png)

1. Elija el identificador de instancia de EC2 para abrir la lista de instancias de EC2 y, a continuación, seleccione su instancia de EC2.

1. En la pestaña **Detalles**, anote los siguientes valores, ya que los necesitará cuando se conecte mediante SSH:

   1. En **Resumen de la instancia**, anote el valor del **DNS IPv4 público**.  
![\[Nombre de DNS público de EC2 en la pestaña Detalles de la página Instancias.\]](http://docs.aws.amazon.com/es_es/AmazonRDS/latest/UserGuide/images/easy-create-ec2-public-dns.png)

   1. En **Detalles de la instancia**, anote el valor de **Nombre del par de claves**.  
![\[Nombre de par de claves de EC2 en la pestaña Detalles de la página Instancias.\]](http://docs.aws.amazon.com/es_es/AmazonRDS/latest/UserGuide/images/easy-create-ec2-key-pair.png)

1. Espere a que **Instance Status (Estado de la instancia)** se muestre como **Running (En ejecución)** antes de continuar.

1. Complete la [Crear una instancia de base de datos de Amazon RDS](CHAP_Tutorials.WebServerDB.CreateDBInstance.md).

# Crear una instancia de base de datos de Amazon RDS
<a name="CHAP_Tutorials.WebServerDB.CreateDBInstance"></a>

Cree una instancia de base de datos de RDS para MariaDB, RDS para MySQL o RDS para PostgreSQL que conserve los datos utilizados por una aplicación web. 

------
#### [ RDS for MariaDB ]

**Para crear una instancia de MariaDB**

1. Inicie sesión en la Consola de administración de AWS y abra la consola de Amazon RDS en [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/).

1. En la esquina superior derecha de la Consola de administración de AWS, marque la Región de AWS. Debería ser la misma que en la que creó su instancia de EC2.

1. En el panel de navegación, elija **Databases** (Bases de datos).

1. Elija **Create database (Creación de base de datos)**.

1. En la página **Crear base de datos**, elija **Creación estándar**.

1. En **Opciones del motor**, elija **MariaDB**.  
![\[Seleccionar tipo de motor\]](http://docs.aws.amazon.com/es_es/AmazonRDS/latest/UserGuide/images/tutorial-create-mariadb.png)

1. Para **Plantillas**, elija **Nivel gratuito** o **Entorno de pruebas**. El **Nivel gratuito** aparece en las cuentas de planes gratuitos. El **Entorno de pruebas** aparece para las cuentas de planes de pago.  
![\[Seleccionar plantilla\]](http://docs.aws.amazon.com/es_es/AmazonRDS/latest/UserGuide/images/tutorial-create-template.png)

1. En la sección **Availability and durability (Disponibilidad y durabilidad)**, mantenga los valores predeterminados.

1. En la sección **Settings (Configuración)**, establezca los siguientes valores:
   + **DB Instance Identifier (Identificador de instancias de bases de datos)**: **tutorial-db-instance**.
   + **Master username (Nombre de usuario maestro)**: escriba **tutorial\$1user**.
   + **Auto generate a password (Generar una contraseña de forma automática)**: deje la opción desactivada.
   + **Master password (Contraseña maestra)**: escriba una contraseña.
   + **Confirm password (Confirmar contraseña)**:– vuelva a introducir la contraseña.  
![\[Secciones de configuración\]](http://docs.aws.amazon.com/es_es/AmazonRDS/latest/UserGuide/images/Tutorial_WebServer_Settings.png)

1. En la sección **Instance configuration (Configuración de instancia)**, establezca estos valores:
   + **Clases por ráfagas (incluye clases t)**
   + **db.t3.micro**  
![\[Sección de configuración de instancias\]](http://docs.aws.amazon.com/es_es/AmazonRDS/latest/UserGuide/images/Tutorial_WebServer_DB_instance_micro.png)

1. En la sección **Storage (Almacenamiento)**, mantenga la configuración predeterminada.

1. En la sección **Connectivity (Conectividad)**, defina estos valores y mantenga los demás con sus valores predeterminados:
   + En **Compute resource (Recurso informático)**, elija **Connect to an EC2 compute resource (Conectar a un recurso informático de EC2)**.
   + En **EC2 instance (Instancia EC2)**, elija la instancia de EC2 que creó anteriormente, como **tutorial-ec2-instance-web-server**.  
![\[Problemas de conectividad\]](http://docs.aws.amazon.com/es_es/AmazonRDS/latest/UserGuide/images/Tutorial_WebServer_Connectivity.png)

1. En la sección **Autenticación de base de datos**, asegúrese de que la **Autenticación con contraseña** está seleccionada.

1. Abra la sección **Additional configuration (Configuración adicional)** e introduzca **sample** para **Initial database name (Nombre de la base de datos inicial)** Mantenga la configuración predeterminada para el resto de las opciones.

1. Para crear una instancia de MariaDB, elija **Crear base de datos**.

   Su nueva instancia de base de datos aparece en la lista **Databases (Bases de datos)** con el estado **Creating (Creándose)**.

1. Espere a que el **Status (Estado)** de su nueva instancia de base de datos se muestre como **Available (Disponible)**. A continuación, seleccione el nombre de la instancia de base de datos para mostrar sus detalles.

1. En la sección **Connectivity & security (Conectividad y seguridad)** vea el **Endpoint (Punto de enlace)** y el **Port (Puerto)** de la instancia de base de datos.  
![\[Página de detalles de la instancia de base de datos\]](http://docs.aws.amazon.com/es_es/AmazonRDS/latest/UserGuide/images/Tutorial_WebServer_Endpoint_Port.png)

   Anote el punto de enlace y el puerto de la instancia de base de datos. Utiliza esta información para conectar su servidor web a la instancia de base de datos.

1.  complet [Instalación de un servidor web en la instancia de EC2](CHAP_Tutorials.WebServerDB.CreateWebServer.md).

------
#### [ RDS for MySQL ]

**Para crear una instancia de base de datos MySQL**

1. Inicie sesión en la Consola de administración de AWS y abra la consola de Amazon RDS en [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/).

1. En la esquina superior derecha de la Consola de administración de AWS, marque la Región de AWS. Debería ser la misma que en la que creó su instancia de EC2.

1. En el panel de navegación, elija **Databases** (Bases de datos).

1. Elija **Create database (Creación de base de datos)**.

1. En la página **Crear base de datos**, elija **Creación estándar**.

1. En **Opciones del motor**, elija **MySQL**.  
![\[Seleccionar tipo de motor\]](http://docs.aws.amazon.com/es_es/AmazonRDS/latest/UserGuide/images/tutorial-create-mysql.png)

1. Para **Plantillas**, elija **Nivel gratuito** o **Entorno de pruebas**. El **Nivel gratuito** aparece en las cuentas de planes gratuitos. El **Entorno de pruebas** aparece para las cuentas de planes de pago.  
![\[Seleccionar plantilla\]](http://docs.aws.amazon.com/es_es/AmazonRDS/latest/UserGuide/images/tutorial-create-template.png)

1. En la sección **Availability and durability (Disponibilidad y durabilidad)**, mantenga los valores predeterminados.

1. En la sección **Settings (Configuración)**, establezca los siguientes valores:
   + **DB Instance Identifier (Identificador de instancias de bases de datos)**: **tutorial-db-instance**.
   + **Master username (Nombre de usuario maestro)**: escriba **tutorial\$1user**.
   + **Auto generate a password (Generar una contraseña de forma automática)**: deje la opción desactivada.
   + **Master password (Contraseña maestra)**: escriba una contraseña.
   + **Confirm password (Confirmar contraseña)**:– vuelva a introducir la contraseña.  
![\[Secciones de configuración\]](http://docs.aws.amazon.com/es_es/AmazonRDS/latest/UserGuide/images/Tutorial_WebServer_Settings.png)

1. En la sección **Instance configuration (Configuración de instancia)**, establezca estos valores:
   + **Clases por ráfagas (incluye clases t)**
   + **db.t3.micro**  
![\[Sección de configuración de instancias\]](http://docs.aws.amazon.com/es_es/AmazonRDS/latest/UserGuide/images/Tutorial_WebServer_DB_instance_micro.png)

1. En la sección **Storage (Almacenamiento)**, mantenga la configuración predeterminada.

1. En la sección **Connectivity (Conectividad)**, defina estos valores y mantenga los demás con sus valores predeterminados:
   + En **Compute resource (Recurso informático)**, elija **Connect to an EC2 compute resource (Conectar a un recurso informático de EC2)**.
   + En **EC2 instance (Instancia EC2)**, elija la instancia de EC2 que creó anteriormente, como **tutorial-ec2-instance-web-server**.  
![\[Problemas de conectividad\]](http://docs.aws.amazon.com/es_es/AmazonRDS/latest/UserGuide/images/Tutorial_WebServer_Connectivity.png)

1. En la sección **Autenticación de base de datos**, asegúrese de que la **Autenticación con contraseña** está seleccionada.

1. Abra la sección **Additional configuration (Configuración adicional)** e introduzca **sample** para **Initial database name (Nombre de la base de datos inicial)** Mantenga la configuración predeterminada para el resto de las opciones.

1. Para crear una instancia de base de datos MySQL, elija **Create database (Crear base de datos)**.

   Su nueva instancia de base de datos aparece en la lista **Databases (Bases de datos)** con el estado **Creating (Creándose)**.

1. Espere a que el **Status (Estado)** de su nueva instancia de base de datos se muestre como **Available (Disponible)**. A continuación, seleccione el nombre de la instancia de base de datos para mostrar sus detalles.

1. En la sección **Connectivity & security (Conectividad y seguridad)** vea el **Endpoint (Punto de enlace)** y el **Port (Puerto)** de la instancia de base de datos.  
![\[Página de detalles de la instancia de base de datos\]](http://docs.aws.amazon.com/es_es/AmazonRDS/latest/UserGuide/images/Tutorial_WebServer_Endpoint_Port.png)

   Anote el punto de enlace y el puerto de la instancia de base de datos. Utiliza esta información para conectar su servidor web a la instancia de base de datos.

1.  complet [Instalación de un servidor web en la instancia de EC2](CHAP_Tutorials.WebServerDB.CreateWebServer.md).

------
#### [ RDS for PostgreSQL ]

**Para crear una instancia de base de datos de PostgreSQL**

1. Inicie sesión en la Consola de administración de AWS y abra la consola de Amazon RDS en [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/).

1. En la esquina superior derecha de la Consola de administración de AWS, marque la Región de AWS. Debería ser la misma que en la que creó su instancia de EC2.

1. En el panel de navegación, elija **Databases** (Bases de datos).

1. Elija **Create database (Creación de base de datos)**.

1. En la página **Crear base de datos**, elija **Creación estándar**.

1. En **Opciones del motor**, elija **PostgreSQL**.  
![\[Seleccionar tipo de motor\]](http://docs.aws.amazon.com/es_es/AmazonRDS/latest/UserGuide/images/tutorial-create-postgres.png)

1. Para **Plantillas**, elija **Nivel gratuito** o **Entorno de pruebas**. El **Nivel gratuito** aparece en las cuentas de planes gratuitos. El **Entorno de pruebas** aparece para las cuentas de planes de pago.  
![\[Seleccionar plantilla\]](http://docs.aws.amazon.com/es_es/AmazonRDS/latest/UserGuide/images/tutorial-create-template.png)

1. En la sección **Availability and durability (Disponibilidad y durabilidad)**, mantenga los valores predeterminados.

1. En la sección **Settings (Configuración)**, establezca los siguientes valores:
   + **DB Instance Identifier (Identificador de instancias de bases de datos)**: **tutorial-db-instance**.
   + **Master username (Nombre de usuario maestro)**: escriba **tutorial\$1user**.
   + **Auto generate a password (Generar una contraseña de forma automática)**: deje la opción desactivada.
   + **Master password (Contraseña maestra)**: escriba una contraseña.
   + **Confirm password (Confirmar contraseña)**:– vuelva a introducir la contraseña.  
![\[Secciones de configuración\]](http://docs.aws.amazon.com/es_es/AmazonRDS/latest/UserGuide/images/Tutorial_WebServer_Settings.png)

1. En la sección **Instance configuration (Configuración de instancia)**, establezca estos valores:
   + **Clases por ráfagas (incluye clases t)**
   + **db.t3.micro**  
![\[Sección de configuración de instancias\]](http://docs.aws.amazon.com/es_es/AmazonRDS/latest/UserGuide/images/Tutorial_WebServer_DB_instance_micro.png)

1. En la sección **Storage (Almacenamiento)**, mantenga la configuración predeterminada.

1. En la sección **Connectivity (Conectividad)**, defina estos valores y mantenga los demás con sus valores predeterminados:
   + En **Compute resource (Recurso informático)**, elija **Connect to an EC2 compute resource (Conectar a un recurso informático de EC2)**.
   + En **EC2 instance (Instancia EC2)**, elija la instancia de EC2 que creó anteriormente, como **tutorial-ec2-instance-web-server**.  
![\[Problemas de conectividad\]](http://docs.aws.amazon.com/es_es/AmazonRDS/latest/UserGuide/images/Tutorial_WebServer_Connectivity.png)

1. En la sección **Autenticación de base de datos**, asegúrese de que la **Autenticación con contraseña** está seleccionada.

1. Abra la sección **Additional configuration (Configuración adicional)** e introduzca **sample** para **Initial database name (Nombre de la base de datos inicial)** Mantenga la configuración predeterminada para el resto de las opciones.

1. Para crear una instancia de base de datos de PostgreSQL, elija **Crear base de datos**.

   Su nueva instancia de base de datos aparece en la lista **Databases (Bases de datos)** con el estado **Creating (Creándose)**.

1. Espere a que el **Status (Estado)** de su nueva instancia de base de datos se muestre como **Available (Disponible)**. A continuación, seleccione el nombre de la instancia de base de datos para mostrar sus detalles.

1. En la sección **Connectivity & security (Conectividad y seguridad)** vea el **Endpoint (Punto de enlace)** y el **Port (Puerto)** de la instancia de base de datos.  
![\[Página de detalles de la instancia de base de datos\]](http://docs.aws.amazon.com/es_es/AmazonRDS/latest/UserGuide/images/Tutorial_WebServer_Endpoint_Port_postgres.png)

   Anote el punto de enlace y el puerto de la instancia de base de datos. Utiliza esta información para conectar su servidor web a la instancia de base de datos.

1.  complet [Instalación de un servidor web en la instancia de EC2](CHAP_Tutorials.WebServerDB.CreateWebServer.md).

------

# Instalación de un servidor web en la instancia de EC2
<a name="CHAP_Tutorials.WebServerDB.CreateWebServer"></a>

Instale un servidor web en una instancia de EC2 que creó en [Lanzamiento de una instancia EC2 para conectarse con la instancia de base de datos](CHAP_Tutorials.WebServerDB.LaunchEC2.md). El servidor web se conecta a la instancia de base de datos de Amazon RDS que creó en [Crear una instancia de base de datos de Amazon RDS](CHAP_Tutorials.WebServerDB.CreateDBInstance.md). 

## Instalación de un servidor web Apache con PHP y MariaDB
<a name="CHAP_Tutorials.WebServerDB.CreateWebServer.Apache"></a>

Conéctese a su instancia de EC2 e instale el servidor web.

**Para conectarse a la instancia de EC2 e instalar el servidor web Apache con PHP**

1. Conéctese a la instancia de EC2 que ha creado anteriormente siguiendo los pasos que se indican en [Conexión con la instancia de Linux](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AccessingInstances.html) en la *Guía del usuario de Amazon EC2*.

   Le recomendamos que se conecte a la instancia de EC2 mediante SSH. Si la utilidad de cliente SSH está instalada en Windows, Linux o Mac, puede conectarse a la instancia con el siguiente formato de comando:

   ```
   ssh -i location_of_pem_file ec2-user@ec2-instance-public-dns-name
   ```

   Por ejemplo, suponga que `ec2-database-connect-key-pair.pem` está almacenado en `/dir1` en Linux y que el DNS IPv4 público de su instancia de EC2 es `ec2-12-345-678-90.compute-1.amazonaws.com`. Su comando SSH tendría el siguiente aspecto:

   ```
   ssh -i /dir1/ec2-database-connect-key-pair.pem ec2-user@ec2-12-345-678-90.compute-1.amazonaws.com
   ```

1. Obtenga las correcciones de errores y las actualizaciones de seguridad más recientes actualizando el software en su instancia de EC2. Para ello, utilice el siguiente comando.
**nota**  
La opción `-y` instala las actualizaciones sin necesidad de confirmación. Para examinar las actualizaciones antes de la instalación, omita esta opción.

   ```
   sudo dnf update -y
   ```

1. Una vez completadas las actualizaciones, instale el servidor web Apache, PHP y el software de MariaDB o PostgreSQL con los siguientes comandos. Este comando instala varios paquetes de software y dependencias relacionadas al mismo tiempo.

------
#### [ MariaDB & MySQL ]

   ```
   sudo dnf install -y httpd php php-mysqli mariadb105
   ```

------
#### [ PostgreSQL ]

   ```
   sudo dnf install -y httpd php php-pgsql postgresql15
   ```

------

   Si recibe un error, probablemente la instancia no se ha iniciado con una AMI de Amazon Linux 2023. Es posible que esté usando la AMI Amazon Linux 2 en su lugar. Puede ver la versión de Amazon Linux usando el comando siguiente:

   ```
   cat /etc/system-release
   ```

   Para obtener más información, consulte [Actualización del software de instancia](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/install-updates.html).

1. Inicie el servidor web mediante el comando que se muestra a continuación.

   ```
   sudo systemctl start httpd
   ```

   Puede probar que el servidor web esté correctamente instalado e iniciado. Para ello, escriba el nombre público del Sistema de nombres de dominio (DNS) de su instancia de EC2 en la barra de direcciones de un navegador web, por ejemplo: `http://ec2-42-8-168-21.us-west-1.compute.amazonaws.com`. Si el servidor web se está ejecutando, se mostrará la página de prueba de Apache. 

   Si no ve la página de prueba de Apache, compruebe las reglas de entrada para el grupo de seguridad de VPC que creó en [Tutorial: Creación de una VPC para utilizarla con una instancia de base de datos (solo IPv4)](CHAP_Tutorials.WebServerDB.CreateVPC.md). Asegúrese de que las reglas de entrada incluyan una que permita el acceso HTTP (puerto 80) a la dirección IP que utiliza para conectarse al servidor web.
**nota**  
La página de prueba de Apache aparece únicamente cuando el directorio raíz de documentos está vac, `/var/www/html`. Después de añadir contenido al directorio raíz de documentos, el contenido aparece en la dirección DNS pública de la instancia de EC2. Antes de este punto, aparece en la página de prueba de Apache.

1. Configure el servidor web para que se inicie en cada arranque del sistema con el comando `systemctl`.

   ```
   sudo systemctl enable httpd
   ```

Para permitir a `ec2-user` administrar archivos en el directorio raíz predeterminado del servidor web Apache, modifique los propietarios y los permisos del directorio `/var/www`. Existen muchas formas de realizar esta tarea. En este tutorial se añade el usuario `ec2-user` al grupo `apache`, se otorga al grupo `apache` la propiedad del directorio `/var/www` y se asignan permisos de escritura al grupo.

**Para configurar los permisos de archivo para el servidor web Apache**

1. Agregue el usuario `ec2-user` al grupo `apache`.

   ```
   sudo usermod -a -G apache ec2-user
   ```

1. Cierre la sesión para actualizar los permisos e incluir el nuevo grupo `apache`.

   ```
   exit
   ```

1. Inicie sesión nuevamente y compruebe que existe el grupo `apache` mediante el comando `groups`.

   ```
   groups
   ```

   El resultado tiene un aspecto similar al siguiente:

   ```
   ec2-user adm wheel apache systemd-journal
   ```

1. Cambie la propiedad de grupo del directorio `/var/www` y su contenido al grupo `apache`.

   ```
   sudo chown -R ec2-user:apache /var/www
   ```

1. Cambie los permisos del directorio `/var/www` y sus subdirectorios para añadir permisos de escritura de grupo y establecer el ID de grupo en los subdirectorios que se creen en el futuro.

   ```
   sudo chmod 2775 /var/www
   find /var/www -type d -exec sudo chmod 2775 {} \;
   ```

1. Cambie recursivamente los permisos de los archivos del directorio `/var/www` y sus subdirectorios para añadir permisos de escritura de grupo.

   ```
   find /var/www -type f -exec sudo chmod 0664 {} \;
   ```

Ahora `ec2-user` (y cualquier miembro futuro del grupo de `apache`) puede añadir, eliminar y editar archivos en la raíz de documentos de Apache. Esto le permite añadir contenido, como un sitio web estático o una aplicación PHP. 

**nota**  
Un servidor web que ejecuta el protocolo HTTP no proporciona seguridad de transporte de los datos que envía o recibe. Cuando se conecta a un servidor HTTP utilizando un navegador web, la mayor parte de la información es visible a cualquier acceso no autorizado en la ruta de la red. Esta información incluye las URL que visita, el contenido de las páginas web que recibe y el contenido (incluidas las contraseñas) de cualquier formulario HTML.   
La práctica recomendada para proteger el servidor web es instalar soporte para HTTPS (HTTP seguro). Este protocolo protege los datos con el cifrado SSL/TLS. Para obtener más información, consulte [ Tutorial: Configurar SSL/TLS con la AMI de Amazon Linux](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/SSL-on-amazon-linux-ami.html) en la *Guía del usuario deAmazon EC2*.

## Conecte el servidor web Apache con la instancia de base de datos.
<a name="CHAP_Tutorials.WebServerDB.CreateWebServer.PHPContent"></a>

A continuación, agregue contenido al servidor web Apache que se conecta a su instancia de base de datos de Amazon RDS.

**Para agregar contenido al servidor web Apache que se conecta a su instancia de base de datos**

1. Mientras está conectado a la instancia de EC2, cambie el directorio a `/var/www` y cree un subdirectorio nuevo denominado `inc`.

   ```
   cd /var/www
   mkdir inc
   cd inc
   ```

1. Cree un archivo en el directorio `inc`, denominado `dbinfo.inc` y, a continuación, edite el archivo mediante nano (o a cualquier otro editor de su elección).

   ```
   >dbinfo.inc
   nano dbinfo.inc
   ```

1. Añada el siguiente contenido al archivo `dbinfo.inc`. Aquí, *db\$1instance\$1endpoint* es su punto de conexión de instancia de base de datos, sin el puerto, para su instancia de base de datos.
**nota**  
Recomendamos colocar la información del nombre de usuario y la contraseña en una carpeta que no forme parte de la raíz del documento del servidor web. Al hacerlo, se reduce la posibilidad de que se exponga la información de seguridad.  
Asegúrese de cambiar la `master password` a una contraseña adecuada en su aplicación.

   ```
   <?php
   
   define('DB_SERVER', 'db_instance_endpoint');
   define('DB_USERNAME', 'tutorial_user');
   define('DB_PASSWORD', 'master password');
   define('DB_DATABASE', 'sample');
   ?>
   ```

1. Guarde y cierre el archivo `dbinfo.inc`. Si utiliza nano, guarde y cierre el archivo con Ctrl\$1S y Ctrl\$1X.

1. Cambie el directorio a `/var/www/html`.

   ```
   cd /var/www/html
   ```

1. Cree un archivo en el directorio `html`, denominado `SamplePage.php` y, a continuación, edite el archivo mediante nano (o a cualquier otro editor de su elección).

   ```
   >SamplePage.php
   nano SamplePage.php
   ```

1. Añada el siguiente contenido al archivo `SamplePage.php`:

------
#### [ MariaDB & MySQL ]

   ```
   <?php include "../inc/dbinfo.inc"; ?>
   <html>
   <body>
   <h1>Sample page</h1>
   <?php
   
     /* Connect to MySQL and select the database. */
     $connection = mysqli_connect(DB_SERVER, DB_USERNAME, DB_PASSWORD);
   
     if (mysqli_connect_errno()) echo "Failed to connect to MySQL: " . mysqli_connect_error();
   
     $database = mysqli_select_db($connection, DB_DATABASE);
   
     /* Ensure that the EMPLOYEES table exists. */
     VerifyEmployeesTable($connection, DB_DATABASE);
   
     /* If input fields are populated, add a row to the EMPLOYEES table. */
     $employee_name = htmlentities($_POST['NAME']);
     $employee_address = htmlentities($_POST['ADDRESS']);
   
     if (strlen($employee_name) || strlen($employee_address)) {
       AddEmployee($connection, $employee_name, $employee_address);
     }
   ?>
   
   <!-- Input form -->
   <form action="<?PHP echo $_SERVER['SCRIPT_NAME'] ?>" method="POST">
     <table border="0">
       <tr>
         <td>NAME</td>
         <td>ADDRESS</td>
       </tr>
       <tr>
         <td>
           <input type="text" name="NAME" maxlength="45" size="30" />
         </td>
         <td>
           <input type="text" name="ADDRESS" maxlength="90" size="60" />
         </td>
         <td>
           <input type="submit" value="Add Data" />
         </td>
       </tr>
     </table>
   </form>
   
   <!-- Display table data. -->
   <table border="1" cellpadding="2" cellspacing="2">
     <tr>
       <td>ID</td>
       <td>NAME</td>
       <td>ADDRESS</td>
     </tr>
   
   <?php
   
   $result = mysqli_query($connection, "SELECT * FROM EMPLOYEES");
   
   while($query_data = mysqli_fetch_row($result)) {
     echo "<tr>";
     echo "<td>",$query_data[0], "</td>",
          "<td>",$query_data[1], "</td>",
          "<td>",$query_data[2], "</td>";
     echo "</tr>";
   }
   ?>
   
   </table>
   
   <!-- Clean up. -->
   <?php
   
     mysqli_free_result($result);
     mysqli_close($connection);
   
   ?>
   
   </body>
   </html>
   
   
   <?php
   
   /* Add an employee to the table. */
   function AddEmployee($connection, $name, $address) {
      $n = mysqli_real_escape_string($connection, $name);
      $a = mysqli_real_escape_string($connection, $address);
   
      $query = "INSERT INTO EMPLOYEES (NAME, ADDRESS) VALUES ('$n', '$a');";
   
      if(!mysqli_query($connection, $query)) echo("<p>Error adding employee data.</p>");
   }
   
   /* Check whether the table exists and, if not, create it. */
   function VerifyEmployeesTable($connection, $dbName) {
     if(!TableExists("EMPLOYEES", $connection, $dbName))
     {
        $query = "CREATE TABLE EMPLOYEES (
            ID int(11) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
            NAME VARCHAR(45),
            ADDRESS VARCHAR(90)
          )";
   
        if(!mysqli_query($connection, $query)) echo("<p>Error creating table.</p>");
     }
   }
   
   /* Check for the existence of a table. */
   function TableExists($tableName, $connection, $dbName) {
     $t = mysqli_real_escape_string($connection, $tableName);
     $d = mysqli_real_escape_string($connection, $dbName);
   
     $checktable = mysqli_query($connection,
         "SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_NAME = '$t' AND TABLE_SCHEMA = '$d'");
   
     if(mysqli_num_rows($checktable) > 0) return true;
   
     return false;
   }
   ?>
   ```

------
#### [ PostgreSQL ]

   ```
   <?php include "../inc/dbinfo.inc"; ?>
   
   <html>
   <body>
   <h1>Sample page</h1>
   <?php
   
   /* Connect to PostgreSQL and select the database. */
   $constring = "host=" . DB_SERVER . " dbname=" . DB_DATABASE . " user=" . DB_USERNAME . " password=" . DB_PASSWORD ;
   $connection = pg_connect($constring);
   
   if (!$connection){
    echo "Failed to connect to PostgreSQL";
    exit;
   }
   
   /* Ensure that the EMPLOYEES table exists. */
   VerifyEmployeesTable($connection, DB_DATABASE);
   
   /* If input fields are populated, add a row to the EMPLOYEES table. */
   $employee_name = htmlentities($_POST['NAME']);
   $employee_address = htmlentities($_POST['ADDRESS']);
   
   if (strlen($employee_name) || strlen($employee_address)) {
     AddEmployee($connection, $employee_name, $employee_address);
   }
   
   ?>
   
   <!-- Input form -->
   <form action="<?PHP echo $_SERVER['SCRIPT_NAME'] ?>" method="POST">
     <table border="0">
       <tr>
         <td>NAME</td>
         <td>ADDRESS</td>
       </tr>
       <tr>
         <td>
       <input type="text" name="NAME" maxlength="45" size="30" />
         </td>
         <td>
       <input type="text" name="ADDRESS" maxlength="90" size="60" />
         </td>
         <td>
       <input type="submit" value="Add Data" />
         </td>
       </tr>
     </table>
   </form>
   <!-- Display table data. -->
   <table border="1" cellpadding="2" cellspacing="2">
     <tr>
       <td>ID</td>
       <td>NAME</td>
       <td>ADDRESS</td>
     </tr>
   
   <?php
   
   $result = pg_query($connection, "SELECT * FROM EMPLOYEES");
   
   while($query_data = pg_fetch_row($result)) {
     echo "<tr>";
     echo "<td>",$query_data[0], "</td>",
          "<td>",$query_data[1], "</td>",
          "<td>",$query_data[2], "</td>";
     echo "</tr>";
   }
   ?>
   </table>
   
   <!-- Clean up. -->
   <?php
   
     pg_free_result($result);
     pg_close($connection);
   ?>
   </body>
   </html>
   
   
   <?php
   
   /* Add an employee to the table. */
   function AddEmployee($connection, $name, $address) {
      $n = pg_escape_string($name);
      $a = pg_escape_string($address);
      echo "Forming Query";
      $query = "INSERT INTO EMPLOYEES (NAME, ADDRESS) VALUES ('$n', '$a');";
   
      if(!pg_query($connection, $query)) echo("<p>Error adding employee data.</p>"); 
   }
   
   /* Check whether the table exists and, if not, create it. */
   function VerifyEmployeesTable($connection, $dbName) {
     if(!TableExists("EMPLOYEES", $connection, $dbName))
     {
        $query = "CREATE TABLE EMPLOYEES (
            ID serial PRIMARY KEY,
            NAME VARCHAR(45),
            ADDRESS VARCHAR(90)
          )";
   
        if(!pg_query($connection, $query)) echo("<p>Error creating table.</p>"); 
     }
   }
   /* Check for the existence of a table. */
   function TableExists($tableName, $connection, $dbName) {
     $t = strtolower(pg_escape_string($tableName)); //table name is case sensitive
     $d = pg_escape_string($dbName); //schema is 'public' instead of 'sample' db name so not using that
   
     $query = "SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_NAME = '$t';";
     $checktable = pg_query($connection, $query);
   
     if (pg_num_rows($checktable) >0) return true;
     return false;
   
   }
   ?>
   ```

------

1. Guarde y cierre el archivo `SamplePage.php`.

1. Compruebe que el servidor web se conecta correctamente a su instancia de base de datos abriendo un navegador web y navegando a `http://EC2 instance endpoint/SamplePage.php`, por ejemplo: `http://ec2-12-345-67-890.us-west-2.compute.amazonaws.com/SamplePage.php`.

Puede utilizar `SamplePage.php` para agregar datos a su instancia de base de datos. Los datos que añada se mostrarán en la página. Para verificar que los datos se insertaron en la tabla, puede instalar el cliente MySQL en la instancia de Amazon EC2. A continuación, se conectará a la instancia de base de datos y ejecutará una consulta en la tabla. 

Para obtener información acerca de la instalación del cliente MySQL y la conexión a la instancia de base de datos, consulte [Conexión a la instancia de base de datos de MySQL](USER_ConnectToInstance.md).

Para asegurarse de que su instancia de base de datos es lo más seguro posible, compruebe que los orígenes fuera de la VPC no se pueden conectar a su instancia de base de datos. 

Una vez que haya terminado de probar su servidor web y su base de datos, debe eliminar la instancia de base de datos y la instancia Amazon EC2.
+ Para eliminar una instancia de base de datos, siga las instrucciones que se indican en [Eliminación de una instancia de base de datos](USER_DeleteInstance.md). No es necesario crear una instantánea final.
+ Para finalizar una instancia Amazon EC2, siga las instrucciones de [Terminar su instancia](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/terminating-instances.html) en la *Guía del usuario de Amazon EC2*.