

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.

# AL2 en Amazon EC2
<a name="ec2"></a>

**nota**  
 AL2 ya no es la versión actual de Amazon Linux. AL2023 es la sucesora de AL2. Para obtener más información, consulte [Comparación AL2 AL2023 y](https://docs.aws.amazon.com/linux/al2023/ug/compare-with-al2.html) la lista de [cambios de Package AL2023 en](https://docs.aws.amazon.com/linux/al2023/release-notes/compare-packages.html) la [Guía del AL2023 usuario](https://docs.aws.amazon.com/linux/al2023/ug/). 

 

**Topics**
+ [Lance una instancia de Amazon EC2 con AMI AL2](#launch-ec2-instance)
+ [Encuentre la AL2 AMI más reciente mediante Systems Manager](#find-latest-al2-using-systems-manager)
+ [Conéctese a una instancia de Amazon EC2](#connect-to-amazon-linux-limits-ec2)
+ [AL2 Modo de arranque AMI](#default-boot-mode-al2)
+ [Repositorio de paquetes](#package-repository)
+ [Uso de cloud-init en AL2](amazon-linux-cloud-init.md)
+ [Configura las instancias AL2](configure-ec2-instance.md)
+ [Kernels proporcionados por el usuario](UserProvidedKernels.md)
+ [AL2 Notificaciones de publicación de AMI](linux-ami-notifications.md)
+ [Configure la conexión de AL2 escritorio MATE](amazon-linux-ami-mate.md)
+ [AL2 Tutoriales](al2-tutorials.md)

## Lance una instancia de Amazon EC2 con AMI AL2
<a name="launch-ec2-instance"></a>

Puede lanzar una instancia de Amazon EC2 con la AMI AL2 . Para obtener más información, consulte el [paso 1: lanzar una instancia](https://docs.aws.amazon.com//AWSEC2/latest/UserGuide/EC2_GetStarted.html#ec2-launch-instance).

## Encuentre la AL2 AMI más reciente mediante Systems Manager
<a name="find-latest-al2-using-systems-manager"></a>

Amazon EC2 proporciona parámetros AWS Systems Manager públicos para el AMIs mantenimiento público AWS que puede utilizar al lanzar instancias. Por ejemplo, el parámetro proporcionado por EC2 `/aws/service/ami-amazon-linux-latest/amzn2-ami-kernel-default-hvm-x86_64-gp2` está disponible en todas las regiones y siempre apunta a la versión más reciente de la AL2 AMI en una región determinada.

Para encontrar la AL2023 AMI más reciente utilizada AWS Systems Manager, consulte [Comenzar con AL2023](https://docs.aws.amazon.com/linux/al2023/ug/get-started.html).

Los parámetros públicos de AMI de Amazon EC2 están disponibles en la siguiente ruta:

`/aws/service/ami-amazon-linux-latest`

Puede ver una lista de todos los Amazon Linux AMIs de la AWS región actual ejecutando el siguiente AWS CLI comando.

```
aws ssm get-parameters-by-path --path /aws/service/ami-amazon-linux-latest --query "Parameters[].Name"
```

**Para iniciar una instancia con un parámetro público**  
En el siguiente ejemplo, se utiliza el parámetro public proporcionado por EC2 para lanzar una `m5.xlarge` instancia con la AMI AL2 más reciente.

Para especificar el parámetro en el comando, utilice la siguiente sintaxis: `resolve:ssm:public-parameter`, donde `resolve:ssm` es el prefijo estándar y `public-parameter` es la ruta y el nombre del parámetro público.

En el ejemplo, los parámetros `--count` y `--security-group` no están incluidos. En el caso de `--count`, el valor predeterminado es 1. Si tiene una VPC predeterminada y un grupo de seguridad predeterminado, estos serán los que se utilicen.

```
aws ec2 run-instances 
    --image-id resolve:ssm:/aws/service/ami-amazon-linux-latest/amzn2-ami-kernel-default-hvm-x86_64-gp2 
    --instance-type m5.xlarge 
    --key-name MyKeyPair
```

Para obtener más información, consulte [Uso de parámetros públicos](https://docs.aws.amazon.com/systems-manager/latest/userguide/parameter-store-public-parameters.html) en la Guía del *AWS Systems Manager usuario*.

**Descripción de los nombres de las AMI de Amazon Linux 2**  
Los nombres de las AMI de Amazon Linux 2 utilizan el siguiente esquema de nomenclatura:

`amzn2-ami-[minimal-][kernel-{5.10,default,4.14}]-hvm-{x86_64,aarch64}-{ebs,gp2}`
+ ** AMIs Minimal** incluye un conjunto reducido de paquetes preinstalados para reducir el tamaño de la imagen.
+ La **versión del núcleo** determina la versión del núcleo que está preinstalada en la AMI correspondiente:
  + `kernel-5.10`selecciona la versión 5.10 del núcleo de Linux. *Esta es la versión de núcleo recomendada para AL2.*
  + `kernel-default`selecciona el núcleo predeterminado recomendado para AL2. Es un alias para kernel-5.10.
  + `kernel-4.14`selecciona la versión 4.14 del kernel de Linux. *Esto solo se proporciona por motivos de compatibilidad con versiones anteriores de AMI. No utilice esta versión para el lanzamiento de nuevas instancias. Es de esperar que esta AMI deje de ser compatible.*
  + Existe un conjunto especial de nombres de AMI sin referencia a un núcleo específico. AMIs Se trata de un alias para el kernel-4.14. *Solo AMIs se proporcionan por motivos de compatibilidad con versiones anteriores de AMI. No utilice este nombre de AMI para el lanzamiento de nuevas instancias. Espere que se actualice AMIs el núcleo correspondiente.*
+ **x86\$164/aarch64** determina la plataforma de CPU en la que se ejecutará la AMI. Seleccione x86\$164 para las instancias EC2 basadas en Intel y AMD. Seleccione aarch64 para las instancias EC2 Graviton.
+ **ebs/gp2** determina el tipo de volumen de EBS utilizado para servir a la AMI correspondiente. Consulte los tipos de volumen [de EBS](https://docs.aws.amazon.com/ebs/latest/userguide/ebs-volume-types.html) como referencia. *Seleccione siempre gp2.*

## Conéctese a una instancia de Amazon EC2
<a name="connect-to-amazon-linux-limits-ec2"></a>

Existen varias formas de conectarse a su instancia de Amazon Linux, incluidas SSH y EC2 Instance Connect. AWS Systems Manager Session Manager Para obtener más información, consulte [Conexión con la instancia de Linux](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/connect-to-linux-instance.html) en la *Guía del usuario de Amazon EC2*.

**Usuarios de SSH y **sudo****  
Amazon Linux no permite el shell `root` seguro remoto (SSH) de forma predeterminada. Además, la autenticación con contraseña está deshabilitada para evitar ataques de fuerza bruta. Para habilitar los inicios de sesión SSH para una instancia de Amazon Linux, debe proporcionar el par de claves para la instancia en la inicialización. También debe establecer el grupo de seguridad que se utiliza para iniciar la instancia y permitir el acceso SSH. De forma predeterminada, la única cuenta que puede iniciar sesión de forma remota mediante SSH es. `ec2-user` Esta cuenta también tiene **sudo** privilegios. Si habilita el inicio de `root` sesión remoto, tenga en cuenta que es menos seguro que confiar en pares de claves y en un usuario secundario.

## AL2 Modo de arranque AMI
<a name="default-boot-mode-al2"></a>

AL2 AMIs no tienen un conjunto de parámetros del modo de arranque. Las instancias desde AL2 AMIs las que se inician siguen el valor del modo de arranque predeterminado del tipo de instancia. Para obtener más información, consulte [Modos de arranque](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ami-boot.html) en la Guía del *usuario de Amazon EC2*.

## Repositorio de paquetes
<a name="package-repository"></a>

Esta información se aplica a AL2. Para obtener más información AL2023, consulte [Administrar paquetes y actualizaciones del sistema operativo AL2023 en](https://docs.aws.amazon.com/linux/al2023/ug/managing-repos-os-updates.html) la *Guía del usuario de Amazon Linux 2023*. 

AL2 y AL1 están diseñados para usarse con repositorios de paquetes en línea alojados en cada región de Amazon EC2. AWS Los repositorios se encuentran disponibles en todas las regiones y se obtiene acceso a ellos mediante herramientas de actualización **yum**. Al alojar repositorios en cada región se pueden implementar actualizaciones rápidamente y sin cargos por transferencia de datos.

**importante**  
La última versión de expiró AL1 el 31 de diciembre de 2023 y no recibirá actualizaciones de seguridad ni correcciones de errores a partir del 1 de enero de 2024. Para obtener más información, consulte [AMI de Amazon Linux end-of-life](https://aws.amazon.com//blogs/aws/update-on-amazon-linux-ami-end-of-life/).

Si no necesita conservar los datos o las personalizaciones de sus instancias, puede lanzar nuevas instancias con la AL2 AMI actual. Si necesita conservar los datos o las personalizaciones de sus instancias, puede mantenerlas a través de los repositorios de paquetes de Amazon Linux. Estos repositorios contienen todos los paquetes actualizados. Puede optar por aplicar estas actualizaciones a sus instancias en ejecución. Las versiones anteriores de la AMI y los paquetes de actualización siguen estando disponibles para su uso, incluso a medida que se publican nuevas versiones.

**nota**  
Para actualizar e instalar paquetes sin acceso a Internet en una instancia de Amazon EC2, consulte [¿Cómo puedo actualizar yum o instalar paquetes sin acceso a Internet en mis instancias de Amazon EC2 en](https://repost.aws/knowledge-center/ec2-al1-al2-update-yum-without-internet) ejecución, o? AL1 AL2 AL2023

Utilice el siguiente comando para instalar los paquetes:

```
[ec2-user ~]$ sudo yum install package
```

Si descubre que Amazon Linux no contiene la aplicación que necesita, puede instalar la aplicación directamente en la instancia de Amazon Linux. Amazon Linux usa RPMs y yum para la administración de paquetes, y esa es probablemente la forma más directa de instalar nuevas aplicaciones. Debe verificar primero si se encuentra disponible una aplicación en nuestro repositorio de Amazon Linux central, porque en él se encuentran disponibles muchas aplicaciones. Desde allí, puede añadir estas aplicaciones a su instancia de Amazon Linux.

Para cargar las aplicaciones en una instancia de Amazon Linux en ejecución, utilice **scp** o **sftp** y, a continuación, configure la aplicación iniciando sesión en la instancia. Las aplicaciones también se pueden cargar durante la inicialización de la instancia con la acción **PACKAGE\$1SETUP** del paquete cloud-init integrado. Para obtener más información, consulte [Uso de cloud-init en AL2](amazon-linux-cloud-init.md). 

### Actualizaciones de seguridad
<a name="security-updates"></a>

Las actualizaciones de seguridad se proporcionan mediante los repositorios de paquetes. Tanto las actualizaciones de seguridad como las alertas de seguridad de AMI actualizadas se publican en el [Amazon Linux Security Center](https://alas.aws.amazon.com). Para obtener más información sobre las políticas de seguridad de AWS o para informar de un problema de seguridad, consulte [Seguridad en la nube de AWS](https://aws.amazon.com/security/).

AL1 y AL2 están configurados para descargar e instalar actualizaciones de seguridad críticas o importantes en el momento del lanzamiento. Las actualizaciones del núcleo no se incluyen en esta configuración.

En AL2023, esta configuración ha cambiado en comparación con AL1 y AL2. Para obtener más información sobre las actualizaciones de seguridad AL2023, consulte [Actualizaciones y funciones de seguridad](https://docs.aws.amazon.com/linux/al2023/ug/security-features.html) en la *Guía del usuario de Amazon Linux 2023*.

Le recomendamos que realice las actualizaciones necesarias para su caso de uso después de la inicialización. Por ejemplo, es posible que desee aplicar todas las actualizaciones (no solo las de seguridad) en el momento del lanzamiento o evaluar cada actualización y aplicar solo las que sean aplicables a su sistema. Esto se controla utilizando el siguiente parámetro de cloud-init: `repo_upgrade`. El siguiente fragmento de código de la configuración de cloud-init muestra cómo puede cambiar los ajustes en el texto de datos de usuario que se pasa para la inicialización de la instancia:

```
#cloud-config
repo_upgrade: security
```

 Los valores posibles para `repo_upgrade` son los siguientes: 

`critical`  
Aplique las actualizaciones de seguridad críticas pendientes.

`important`  
Aplique las actualizaciones de seguridad críticas e importantes pendientes.

`medium`  
Aplique las actualizaciones de seguridad críticas, importantes y de media seguridad pendientes.

`low`  
Aplique todas las actualizaciones de seguridad pendientes, incluidas las actualizaciones de seguridad de baja gravedad.

`security`  
Aplicar actualizaciones pendientes críticas o importantes que Amazon marca como actualizaciones de seguridad.

`bugfix`  
Aplicar actualizaciones que Amazon marca como correcciones de errores. Las correcciones de errores son un conjunto más grande de actualizaciones que incluyen actualizaciones de seguridad y correcciones para otros errores menores.

`all`  
Aplicar todas las actualizaciones disponibles aplicables, independientemente de su clasificación.

`none`  
No aplicar ninguna actualización a la instancia al arrancar.

**Nota**  
Amazon Linux no marca ninguna actualización como`bugfix`. Para aplicar actualizaciones no relacionadas con la seguridad de Amazon Linux, utilice`repo_upgrade: all`.

El ajuste predeterminado de `repo_upgrade` es de seguridad. Es decir, si no especifica un valor distinto en los datos de usuario, de forma predeterminada Amazon Linux realiza las actualizaciones de seguridad durante la inicialización para cualquier paquete instalado en ese momento. Amazon Linux también notifica cualquier actualización de los paquetes instalados mediante la indicación del número de actualizaciones disponibles cuando se inicia sesión a través del archivo `/etc/motd`. Para instalar estas actualizaciones, debe ejecutar **sudo yum upgrade** en la instancia. 

### Configuración del repositorio
<a name="repository-config"></a>

Para AL1 y AL2, AMIs son una instantánea de los paquetes disponibles en el momento en que se creó la AMI, con la excepción de las actualizaciones de seguridad. Todos los paquetes que no estén en la AMI original, pero que estén instalados en tiempo de ejecución, serán de la última versión disponible. Para obtener los paquetes más recientes disponibles AL2, ejecute**yum update -y**.

**Consejo para la solución de problemas**  
Si se produce un error `cannot allocate memory` al ejecutar **yum update** en tipos de nanoinstancias, como `t3.nano`, es posible que deba asignar espacio de intercambio para habilitar la actualización.

Para AL2023, la configuración del repositorio ha cambiado en comparación con AL1 y AL2. Para obtener más información sobre el AL2023 repositorio, consulte [Administrar paquetes y actualizaciones del sistema operativo](https://docs.aws.amazon.com/linux/al2023/ug/managing-repos-os-updates.html).

Las versiones anteriores AL2023 se configuraron para ofrecer un flujo continuo de actualizaciones para pasar de una versión secundaria de Amazon Linux a la siguiente versión, también *denominadas versiones sucesivas*. Como práctica recomendada, le recomendamos que actualice la AMI a la última AMI disponible en lugar de lanzar la antigua AMIs y aplicar las actualizaciones.

No se admiten actualizaciones locales entre las principales versiones de Amazon Linux, como de AL1 a AL2 o de AL2 a AL2023. Para obtener más información, consulte [Disponibilidad de Amazon Linux](what-is-amazon-linux.md#amazon-linux-availability).

# Uso de cloud-init en AL2
<a name="amazon-linux-cloud-init"></a>

El paquete cloud-init es una aplicación de código abierto creada por Canonical que se utiliza para arrancar imágenes de Linux en un entorno de informática en la nube, como Amazon EC2. Amazon Linux contiene una versión personalizada de cloud-init. Esto te permite especificar las acciones que se deben realizar en la instancia en el momento del arranque. Puede transferir las acciones deseadas a cloud-init mediante los campos de datos de usuario al iniciar una instancia. Esto significa que puedes usar lo común AMIs para muchos casos de uso y configurarlos dinámicamente al inicio. Amazon Linux también utiliza cloud-init para realizar la configuración inicial de la cuenta ec2-user.

 Para obtener más información, consulte la [documentación de cloud-init](http://cloudinit.readthedocs.org/en/latest/). 

Amazon Linux utiliza las acciones de cloud-init que se encuentran en `/etc/cloud/cloud.cfg.d` y en `/etc/cloud/cloud.cfg`. Puede crear sus propios archivos de acción de cloud-init en `/etc/cloud/cloud.cfg.d`. cloud-init lee todos los archivos de este directorio. Se leen en orden léxico y los archivos posteriores sobrescriben los valores en los archivos anteriores.

El paquete cloud-init realiza estas y otras tareas de configuración habituales en las instancias al arrancar:
+ Ajustar la configuración regional predeterminada.
+ Ajustar el nombre de host.
+ Analizar y administrar los datos de usuario.
+ Generar claves de SSH privadas de host.
+ Añadir las claves SSH públicas del usuario a `.ssh/authorized_keys` para facilitar el inicio de sesión y la administración.
+ Preparar los repositorios para la administración de paquetes.
+ Controlar acciones de paquetes definidas en los datos de usuario.
+ Ejecute los scripts de usuario que se encuentran en los datos de usuario.
+ Montar volúmenes de almacén de instancias si es preciso.
  + De forma predeterminada, el volumen de almacén de instancia `ephemeral0` se monta en `/media/ephemeral0` si está presente y contiene un sistema de archivos válido; de lo contrario, no se monta.
  + De forma predeterminada, cualquier volumen de intercambio asociado a la instancia se monta (solo para los tipos de instancias `m1.small` y `c1.medium`).
  + Puede anular el montaje del volumen de almacén de instancias predeterminado con la siguiente directiva de cloud-init:

    ```
    #cloud-config
    mounts:
    - [ ephemeral0 ]
    ```

    Para obtener más control sobre los montajes, consulte [Mounts](http://cloudinit.readthedocs.io/en/latest/topics/modules.html#mounts) en la documentación de cloud-init.
  + Los volúmenes de almacén de instancias que admiten TRIM no están formateados cuando se inicia una instancia, por lo que debe dividirlos y formatearlos antes de poder montarlos. Para obtener más información, consulte [TRIMCompatibilidad con el volumen de almacenes de instancias](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ssd-instance-store.html#InstanceStoreTrimSupport). Puede utilizar el módulo `disk_setup` para dividir y formatear los volúmenes de almacén de instancias en el arranque. Para obtener más información, consulte [Disk Setup](http://cloudinit.readthedocs.io/en/latest/topics/modules.html#disk-setup) en la documentación de cloud-init.

## Formatos de datos de usuario compatibles
<a name="supported-user-data-formats"></a>

El paquete cloud-init admite el manejo de datos de usuario en una variedad de formatos:
+ Gzip
  + Si los datos del usuario están comprimidos con gzip, cloud-init los descomprime y los gestiona de forma adecuada.
+ Multiparte MIME
  + Al utilizar un archivo multiparte MIME, puede especificar más de un tipo de datos. Por ejemplo, puedes especificar un script de datos de usuario y un tipo de configuración de nube. cloud-init puede administrar cada parte del archivo multiparte si se encuentra en uno de los formatos admitidos.
+ Descodificación Base64
  +  Si los datos de usuario están codificados en base64, cloud-init determina si puede entender los datos decodificados como uno de los tipos admitidos. Si comprende los datos descodificados, los administra del modo adecuado. De lo contrario, devuelve los datos base64 intactos.
+ Script de datos de usuario
  + Comienza con `#!` o `Content-Type: text/x-shellscript`.
  + `/etc/init.d/cloud-init-user-scripts` ejecuta el script durante el primer ciclo de arranque. Esto se produce en la fase posterior del proceso de arranque (una vez que se han realizado las acciones de configuración iniciales).
+ Archivo include
  + Comienza con `#include` o `Content-Type: text/x-include-url`.
  + Este contenido es un archivo include. El archivo contiene una lista de, uno por línea. URLs Cada uno de ellos URLs se lee y su contenido pasa por el mismo conjunto de reglas. El contenido leído desde la URL puede estar comprimido con gzip o ser texto MIME-multi-part sin formato.
+ Datos de configuración en la nube
  + Comienza con `#cloud-config` o `Content-Type: text/cloud-config`.
  + Este contenido son datos de configuración de la nube.
+ Upstart job (no es compatible con) AL2
  + Comienza con `#upstart-job` o `Content-Type: text/upstart-job`.
  + Este contenido se almacena en un archivo en `/etc/init` y upstart lo consume como lo hace con otros trabajos de upstart.
+ Libro de apuntes en la nube
  + Comienza con `#cloud-boothook` o `Content-Type: text/cloud-boothook`.
  + Este contenido son datos de boothook. Se almacena en un archivo en `/var/lib/cloud` y, a continuación, se ejecuta de inmediato.
  +  Este es el primer *hook* disponible. No se ofrece ningún mecanismo para ejecutarlo solo una vez. El boothook debe ocuparse de sí mismo. Se proporciona con el ID de instancia en la variable de entorno `INSTANCE_ID`. Usa esta variable para proporcionar un once-per-instance conjunto de datos de boothook.

# Configura las instancias AL2
<a name="configure-ec2-instance"></a>

Una vez que haya lanzado la AL2 instancia e iniciado sesión correctamente, podrá realizar cambios en ella. Hay muchas formas diferentes de configurar una instancia para satisfacer las necesidades de una aplicación específica. A continuación se muestran algunas tareas comunes que le ayudan a comenzar.

**Topics**
+ [Casos de uso de configuración comunes](#instance-configuration-scenarios)
+ [Administre el software de su instancia AL2](managing-software.md)
+ [Control del estado del procesador para su instancia de Amazon EC2 AL2](processor_state_control.md)
+ [Programador de E/S para AL2](io-scheduler.md)
+ [Cambia el nombre de host de la instancia AL2](set-hostname.md)
+ [Configura un DNS dinámico en tu instancia AL2](dynamic-dns.md)
+ [Configure la interfaz de red mediante ec2-net-utils para AL2](ec2-net-utils.md)

## Casos de uso de configuración comunes
<a name="instance-configuration-scenarios"></a>

La distribución base de Amazon Linux contiene paquetes de software y utilidades que son necesarios para las operaciones de servidor básicas. Sin embargo, hay muchos más paquetes de software disponibles en varios repositorios de software e incluso más paquetes disponibles para compilar a partir de código fuente. Para obtener más información sobre la instalación y compilación de software desde estas ubicaciones, consulte [Administre el software de su instancia AL2](managing-software.md).

Las instancias de Amazon Linux vienen preconfiguradas con `ec2-user`, pero tal vez quiera agregar otros usuarios sin privilegios de superusuario. Para obtener más información sobre cómo añadir y eliminar usuarios, consulte [Administrar usuarios en su Linux instancia](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/managing-users.html) en la Guía del *usuario de Amazon EC2*.

Si cuenta con una red propia y un nombre de dominio registrado en ella, puede cambiar el nombre del host de una instancia para que se identifique como parte de dicho dominio. También puede cambiar el símbolo del sistema para mostrar un nombre más significativo sin cambiar la configuración del nombre de host. Para obtener más información, consulte [Cambia el nombre de host de la instancia AL2](set-hostname.md). Puede configurar una instancia para usar un proveedor de servicio DNS dinámico. Para obtener más información, consulte [Configura un DNS dinámico en tu instancia AL2](dynamic-dns.md).

Cuando se inicia una instancia en Amazon EC2, tiene la opción de pasar los datos de usuario a la instancia que se pueden utilizar para realizar tareas de configuración comunes e incluso ejecutar scripts una vez iniciada la instancia. Puede transferir dos tipos de datos de usuario a Amazon EC2: scripts de shell y directivas cloud-init. Para obtener más información, consulte [Ejecutar comandos en la Linux instancia en el momento del lanzamiento](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html) en la Guía del *usuario de Amazon EC2*.

# Administre el software de su instancia AL2
<a name="managing-software"></a>

La distribución base de Amazon Linux contiene paquetes de software y utilidades que son necesarios para las operaciones de servidor básicas.

Esta información se aplica a AL2. Para obtener más información AL2023, consulte [Administrar paquetes y actualizaciones del sistema operativo AL2023 en](https://docs.aws.amazon.com/linux/al2023/ug/managing-repos-os-updates.html) la *Guía del usuario de Amazon Linux 2023*.

Es importante mantener el software actualizado. Muchos paquetes de una distribución Linux se actualizan con frecuencia para corregir errores, agregar características y protección frente a vulnerabilidades de seguridad. Para obtener más información, consulte [Actualiza el software de la instancia en tu AL2 instancia](install-updates.md).

De forma predeterminada, AL2 las instancias se lanzan con los siguientes repositorios habilitados:
+ `amzn2-core`
+ `amzn2extra-docker`

Si bien hay muchos paquetes disponibles en estos repositorios que se actualizan mediante AWS, es posible que desees instalar un paquete que esté contenido en otro repositorio. Para obtener más información, consulte [Agrega repositorios a una instancia AL2](add-repositories.md). Para obtener ayuda para buscar e instalar los paquetes en repositorios habilitados, consulte [Busque e instale paquetes de software en una AL2 instancia](find-install-software.md).

No todo el software está disponible en paquetes de software almacenados en repositorios; algún software debe compilarse en una instancia a partir del código fuente. Para obtener más información, consulte [Prepárese para compilar el software en una AL2 instancia](compile-software.md).

AL2 las instancias administran su software mediante el administrador de paquetes yum. El administrador de paquetes yum puede instalar, quitar y actualizar el software, así como administrar todas las dependencias de cada paquete.

**Topics**
+ [Actualiza el software de la instancia en tu AL2 instancia](install-updates.md)
+ [Agrega repositorios a una instancia AL2](add-repositories.md)
+ [Busque e instale paquetes de software en una AL2 instancia](find-install-software.md)
+ [Prepárese para compilar el software en una AL2 instancia](compile-software.md)

# Actualiza el software de la instancia en tu AL2 instancia
<a name="install-updates"></a>

Es importante mantener el software actualizado. Los paquetes de una distribución Linux se actualizan con frecuencia para corregir errores, agregar características y protección frente a vulnerabilidades de seguridad. Cuando inicia y se conecta por primera vez a una instancia de Amazon Linux, es posible que vea un mensaje que le pide que actualice los paquetes de software por cuestiones de seguridad. En esta sección se muestra cómo actualizar todo el sistema o solo un paquete.

Esta información se aplica a AL2. Para obtener más información AL2023, consulte [Administrar paquetes y actualizaciones del sistema operativo AL2023 en](https://docs.aws.amazon.com/linux/al2023/ug/managing-repos-os-updates.html) la *Guía del usuario de Amazon Linux 2023*.

Para obtener información sobre los cambios y actualizaciones AL2, consulte las [notas AL2 de la versión](https://docs.aws.amazon.com/AL2/latest/relnotes/relnotes-al2.html).

Para obtener información sobre los cambios y actualizaciones de AL2023, consulte las [notas AL2023 de la versión](https://docs.aws.amazon.com/linux/al2023/release-notes/relnotes.html).

**importante**  
Si lanzó una instancia EC2 que utiliza una AMI de Amazon Linux 2 en una subred IPv6 exclusiva, debe conectarse a la instancia y ejecutarla. `sudo amazon-linux-https disable` Esto permite que la AL2 instancia se conecte al yum repositorio de S3 IPv6 mediante el servicio de parches http.

**Para actualizar todos los paquetes de una AL2 instancia**

1. (Opcional) Comience una sesión de **screen** en la ventana de shell Es posible que, en ocasiones, experimente una interrupción de red que desconecte la conexión SSH con la instancia. Si sucede durante una actualización de software prolongada, puede dejar la instancia en un estado recuperable, si bien confuso. Una sesión **screen** permite continuar ejecutando la actualización, aunque la conexión se interrumpa, y reconectarse a la sesión posteriormente sin problemas.

   1. Ejecute el comando **screen** para comenzar la sesión.

      ```
      [ec2-user ~]$ screen
      ```

   1. Si la sesión se desconecta, vuelva a iniciar sesión en la instancia y enumere las pantallas disponibles.

      ```
      [ec2-user ~]$ screen -ls
      There is a screen on:
      	17793.pts-0.ip-12-34-56-78	(Detached)
      1 Socket in /var/run/screen/S-ec2-user.
      ```

   1. Vuelva a conectarse a la pantalla usando el comando **screen -r** y el ID de proceso del comando anterior.

      ```
      [ec2-user ~]$ screen -r 17793
      ```

   1. Cuando haya terminado de utilizar **screen**, use el comando **exit** para cerrar la sesión.

      ```
      [ec2-user ~]$ exit
      [screen is terminating]
      ```

1. Ejecute el comando **yum update**. Opcionalmente, puede agregar la marca `--security` para aplicar las actualizaciones de seguridad únicamente.

   ```
   [ec2-user ~]$ sudo yum update
   ```

1. Revise los paquetes de la lista, escriba **y** y presione “Enter” (Ingresar) para aceptar las actualizaciones. La actualización de todos los paquetes de un sistema puede demorar varios minutos. La salida de **yum** muestra el estado de la actualización mientras se ejecuta.

1. (Opcional) [Reinicie la instancia](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-reboot.html) para asegurarse de que está utilizando los paquetes y bibliotecas más recientes de la actualización; las actualizaciones del núcleo no se cargan hasta que se reinicie. Las actualizaciones de cualquier biblioteca `glibc` deben ir seguidas de un nuevo arranque. Para actualizar los paquetes que controlan servicios, puede ser suficiente con reiniciar los servicios y elegir las actualizaciones. Sin embargo, con un nuevo arranque del sistema, se asegurará de que se aplican todas las actualizaciones anteriores de los paquetes y las bibliotecas.

**Para actualizar un solo paquete de una AL2 instancia**

Siga este procedimiento para actualizar un único paquete (y sus dependencias) y no el sistema completo.

1. Ejecute el comando **yum update** con el nombre del paquete que desea actualizar.

   ```
   [ec2-user ~]$ sudo yum update openssl
   ```

1. Revise la información de los paquetes de la lista, escriba **y** y pulse “Enter” (Ingresar) para aceptar la actualización o las actualizaciones. En ocasiones se enumerará más de un paquete si hay dependencias que deban resolverse. La salida de **yum** muestra el estado de la actualización mientras se ejecuta.

1. (Opcional) [Reinicie la instancia](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-reboot.html) para asegurarse de que está utilizando los paquetes y bibliotecas más recientes de la actualización; las actualizaciones del núcleo no se cargan hasta que se reinicie. Las actualizaciones de cualquier biblioteca `glibc` deben ir seguidas de un nuevo arranque. Para actualizar los paquetes que controlan servicios, puede ser suficiente con reiniciar los servicios y elegir las actualizaciones. Sin embargo, con un nuevo arranque del sistema, se asegurará de que se aplican todas las actualizaciones anteriores de los paquetes y las bibliotecas.

# Agrega repositorios a una instancia AL2
<a name="add-repositories"></a>

Esta información se aplica a. AL2 Para obtener información al respecto AL2023, consulte [Actualizaciones deterministas mediante repositorios versionados en AL2023 la Guía](https://docs.aws.amazon.com/linux/al2023/ug/deterministic-upgrades.html) del usuario de *Amazon Linux 2023.*

De forma predeterminada, AL2 las instancias se lanzan con los siguientes repositorios habilitados:
+ `amzn2-core`
+ `amzn2extra-docker`

Aunque hay muchos paquetes disponibles en estos repositorios que actualiza Amazon Web Services, es posible que desee instalar un paquete que se encuentra en otro repositorio.

Para instalar un paquete desde un repositorio diferente con **yum**, necesita agregar la información del repositorio al archivo `/etc/yum.conf` o a su propio archivo `repository.repo` en el directorio `/etc/yum.repos.d`. Puede hacerlo manualmente, pero la mayoría de los repositorios yum proporcionan un archivo `repository.repo` propio en la URL de repositorio.

**Para determinar los repositorios yum que ya están instalados**  
Enumere los repositorios yum instalados con el comando siguiente:

```
[ec2-user ~]$ yum repolist all
```

El resultado enumera los repositorios instalados e informa sobre el estado de cada uno. Los repositorios habilitados muestran el número de paquetes que contienen.

**Para agregar un repositorio yum a /etc/yum.repos.d**

1. Busque la ubicación del archivo `.repo`. Esta variará en función del repositorio que esté añadiendo. En este ejemplo, el archivo `.repo` se encuentra en `https://www.example.com/repository.repo`.

1. Añada el repositorio con el comando **yum-config-manager**.

   ```
   [ec2-user ~]$ sudo yum-config-manager --add-repo https://www.example.com/repository.repo
   Loaded plugins: priorities, update-motd, upgrade-helper
   adding repo from: https://www.example.com/repository.repo
   grabbing file https://www.example.com/repository.repo to /etc/yum.repos.d/repository.repo
   repository.repo                                      | 4.0 kB     00:00
   repo saved to /etc/yum.repos.d/repository.repo
   ```

Después de instalar un repositorio, debe habilitarlo como se describe en el procedimiento siguiente.

**Para habilitar un repositorio yum en /etc/yum.repos.d**  
Utilice el comando **yum-config-manager** con la marca `--enable repository`. El comando siguiente habilita el repositorio Extra Packages for Enterprise Linux (EPEL) desde el proyecto Fedora. De manera predeterminada, este repositorio se encuentra en `/etc/yum.repos.d` en las instancias de Amazon Linux AMI, pero no está habilitado.

```
[ec2-user ~]$ sudo yum-config-manager --enable epel
```

Para obtener más información y descargar la última versión de este paquete, consulta [https://fedoraproject. org/wiki/EPEL](https://fedoraproject.org/wiki/EPEL).

# Busque e instale paquetes de software en una AL2 instancia
<a name="find-install-software"></a>

Puede utilizar una herramienta de administración de paquetes para buscar e instalar los paquetes de software. En Amazon Linux 2, la herramienta de administración de paquetes de software predeterminada esYUM. En AL2023, la herramienta de administración de paquetes de software predeterminada esDNF. Para obtener más información, consulte la [herramienta de administración de paquetes](https://docs.aws.amazon.com/linux/al2023/ug/package-management.html) en la *Guía del usuario de Amazon Linux 2023*.

## Busque paquetes de software en una AL2 instancia
<a name="find-software"></a>

Puede utilizar el comando **yum search** para buscar las descripciones de los paquetes que están disponibles en los repositorios configurados. Esto es de especial ayuda si desconoce el nombre exacto del paquete que quiere instalar. Simplemente anexe la búsqueda por palabras clave al comando; para búsquedas de varias palabras, incluya la consulta de búsqueda entre comillas.

```
[ec2-user ~]$ yum search "find"
```

A continuación, se muestra un ejemplo del resultado.

```
Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
============================== N/S matched: find ===============================
findutils.x86_64 : The GNU versions of find utilities (find and xargs)
gedit-plugin-findinfiles.x86_64 : gedit findinfiles plugin
ocaml-findlib-devel.x86_64 : Development files for ocaml-findlib
perl-File-Find-Rule.noarch : Perl module implementing an alternative interface to File::Find
robotfindskitten.x86_64 : A game/zen simulation. You are robot. Your job is to find kitten.
mlocate.x86_64 : An utility for finding files by name
ocaml-findlib.x86_64 : Objective CAML package manager and build helper
perl-Devel-Cycle.noarch : Find memory cycles in objects
perl-Devel-EnforceEncapsulation.noarch : Find access violations to blessed objects
perl-File-Find-Rule-Perl.noarch : Common rules for searching for Perl things
perl-File-HomeDir.noarch : Find your home and other directories on any platform
perl-IPC-Cmd.noarch : Finding and running system commands made easy
perl-Perl-MinimumVersion.noarch : Find a minimum required version of perl for Perl code
texlive-xesearch.noarch : A string finder for XeTeX
valgrind.x86_64 : Tool for finding memory management bugs in programs
valgrind.i686 : Tool for finding memory management bugs in programs
```

Las consultas de búsqueda de varias palabras solo devuelven los resultados que coinciden exactamente con la consulta. Si no ve el paquete esperado, reduzca la búsqueda a un palabra clave y después revise los resultados. También puede probar con sinónimos de las palabras clave para ampliar la búsqueda.

Para obtener más información sobre los paquetes de AL2, consulta lo siguiente:
+ [AL2 Biblioteca de extras](al2-extras.md)
+ [Repositorio de paquetes](ec2.md#package-repository)

## Instala paquetes de software en una AL2 instancia
<a name="install-software"></a>

En AL2, la herramienta de administración de paquetes yum busca diferentes paquetes de software en todos los repositorios habilitados y gestiona cualquier dependencia del proceso de instalación del software. Para obtener información sobre la instalación de paquetes de software en AL2023, consulte [Administrar paquetes y actualizaciones del sistema operativo](https://docs.aws.amazon.com/linux/al2023/ug/managing-repos-os-updates.html) en la *Guía del usuario de Amazon Linux 2023*.

**Para instalar un paquete de un repositorio**  
Utilice el **yum install *package*** comando y *package* sustitúyalo por el nombre del software que desee instalar. Por ejemplo, para instalar el navegador web basado en texto **links**, escriba el comando siguiente.

```
[ec2-user ~]$ sudo yum install links
```

**Para instalar los archivos de paquete RPM que ha descargado**  
También puede usar **yum install** para instalar los archivos del paquete RPM que ha descargado de Internet. Para ello, simplemente anexe el nombre de la ruta a un archivo RPM al comando de instalación en lugar de anexarlo al nombre de paquete del repositorio.

```
[ec2-user ~]$ sudo yum install my-package.rpm
```

**Para ver una lista de los paquetes instalados**  
Para ver una lista de los paquetes instalados en su instancia, utilice el siguiente comando.

```
[ec2-user ~]$ yum list installed
```

# Prepárese para compilar el software en una AL2 instancia
<a name="compile-software"></a>

Hay software de código abierto disponible en Internet que no está compilado previamente y que se puede descargar desde un repositorio de paquetes. Quizá al final descubra un paquete de software que tendrá que compilar usted mismo, a partir del código fuente. Para que su sistema pueda compilar software en AL2 Amazon Linux, debe instalar varias herramientas de desarrollo, como **make****gcc**, y**autoconf**.

Dado que la compilación de software no es una tarea que requiera cada instancia Amazon EC2, estas herramientas no se instalan de forma predeterminada, sino que están disponibles en un grupo de paquetes denominado “Development Tools” que se añade fácilmente a una instancia con el comando **yum groupinstall**.

```
[ec2-user ~]$ sudo yum groupinstall "Development Tools"
```

Los paquetes de código fuente del software suelen estar disponibles para su descarga (desde sitios web como [https://github.com/](https://github.com/)y [http://sourceforge.net/](https://sourceforge.net/)) en forma de un archivo comprimido, denominado tarball. Estos archivos tarballs tendrán normalmente la extensión de archivo `.tar.gz`. Puede descomprimirlos empleando el comando **tar**.

```
[ec2-user ~]$ tar -xzf software.tar.gz
```

Una vez descomprimido y desarchivado el paquete de código fuente, debe buscar un archivo `README` o `INSTALL` en el directorio de código fuente que puede proporcionarle más instrucciones sobre la compilación e instalación del código fuente. 

**Para recuperar el código fuente de los paquetes de Amazon Linux**  
Amazon Web Services proporciona el código fuente para los paquetes mantenidos. Puede descargar el código fuente de cualquier paquete instalado con el comando **yumdownloader --source**.

Ejecute el **yumdownloader --source *package*** comando para descargar el código fuente de*package*. Por ejemplo, para descargar el código fuente del paquete `htop`, escriba el comando siguiente.

```
[ec2-user ~]$ yumdownloader --source htop

Loaded plugins: priorities, update-motd, upgrade-helper
Enabling amzn-updates-source repository
Enabling amzn-main-source repository
amzn-main-source                                                                                              | 1.9 kB  00:00:00     
amzn-updates-source                                                                                           | 1.9 kB  00:00:00     
(1/2): amzn-updates-source/latest/primary_db                                                                  |  52 kB  00:00:00     
(2/2): amzn-main-source/latest/primary_db                                                                     | 734 kB  00:00:00     
htop-1.0.1-2.3.amzn1.src.rpm
```

El archivo RPM de origen se encuentra en el directorio desde el que ha ejecutado el comando.

# Control del estado del procesador para su instancia de Amazon EC2 AL2
<a name="processor_state_control"></a>

Los estados C controlan los niveles de suspensión en los que puede entrar el núcleo cuando está inactivo. Los estados C se enumeran comenzando por C0 (el estado menos profundo, cuando el núcleo está totalmente activo y ejecutando instrucciones) y hasta C6 (el estado de inactividad más profundo en el que el núcleo está desactivado).

Los estados P controlan el rendimiento deseado (en frecuencia de CPU) desde un núcleo. Los estados P se enumeran comenzando por P0 (el ajuste de rendimiento más alto con el que el núcleo puede utilizar la tecnología Intel Turbo Boost Technology para aumentar la frecuencia si es posible) y van de P1 (el estado P que solicita la frecuencia básica máxima) hasta P15 (la frecuencia más baja posible).

Es posible que desee cambiar los ajustes del estado C o P para aumentar la uniformidad del rendimiento del procesador, reducir la latencia o ajustar la instancia para una carga de trabajo concreta. Los ajustes de estado C y P predeterminados ofrecen un rendimiento máximo, que es óptimo para la mayoría de cargas de trabajo. Sin embargo, si la aplicación puede beneficiarse de una latencia reducida a costa de frecuencias superiores de núcleo doble o único, o de un rendimiento uniforme a frecuencias más bajas en lugar de frecuencias por ráfagas Turbo Boost, plantéese experimentar con los ajustes de estado C o P disponibles para estas instancias.

*Para obtener información sobre los tipos de instancias de Amazon EC2 que permiten al sistema operativo controlar los estados C y P del procesador, consulte Control del [estado del procesador para su instancia de Amazon EC2 en la Guía del usuario de Amazon EC2](https://docs.aws.amazon.com//AWSEC2/latest/UserGuide/processor_state_control.html).*

Las siguientes secciones describen las distintas configuraciones de estado del procesador y cómo monitorizar los efectos de la configuración. Estos procedimientos se escribieron para Amazon Linux y se aplican a él; sin embargo, es posible que también funcionen para otras distribuciones de Linux con una versión 3.9 o posterior del kernel de Linux.

**nota**  
En los ejemplos de esta página se utiliza lo siguiente:  
La utilidad **turbostat** para mostrar la frecuencia del procesador y la información del estado C. La utilidad **turbostat** está disponible en Amazon Linux de forma predeterminada.
El comando **stress** para simular una carga de trabajo. Para instalar **stress**, habilite primero el repositorio EPEL mediante la ejecución de **sudo amazon-linux-extras install epel** y, a continuación, **sudo yum install -y stress**.
Si la salida no muestra la información del estado C, incluya la opción **--debug** en el comando (**sudo turbostat --debug stress *<options>***).

**Topics**
+ [Máximo rendimiento con frecuencia máxima de Turbo Boost](#turbo-perf)
+ [Alto rendimiento y baja latencia con limitación de estados C más profundos](#c-states)
+ [Rendimiento básico con el mínimo de variabilidad](#baseline-perf)

## Máximo rendimiento con frecuencia máxima de Turbo Boost
<a name="turbo-perf"></a>

Esta es la configuración predeterminada de control de estados del procesador para Amazon Linux AMI y se recomienda para la mayoría de cargas de trabajo. Esta configuración ofrece el rendimiento más alto con la menor variabilidad. Al permitir que los núcleos inactivos entren en estados de suspensión más profundos, se obtiene el margen térmico necesario para que los procesos de núcleo único o doble alcancen su máximo potencial de Turbo Boost.

El siguiente ejemplo muestra una instancia `c4.8xlarge` con dos núcleos funcionando activamente y llegando a su frecuencia máxima de procesador Turbo Boost.

```
[ec2-user ~]$ sudo turbostat stress -c 2 -t 10
stress: info: [30680] dispatching hogs: 2 cpu, 0 io, 0 vm, 0 hdd
stress: info: [30680] successful run completed in 10s
pk cor CPU    %c0  GHz  TSC SMI    %c1    %c3    %c6    %c7   %pc2   %pc3   %pc6   %pc7  Pkg_W RAM_W PKG_% RAM_%
             5.54 3.44 2.90   0   9.18   0.00  85.28   0.00   0.00   0.00   0.00   0.00  94.04 32.70 54.18  0.00
 0   0   0   0.12 3.26 2.90   0   3.61   0.00  96.27   0.00   0.00   0.00   0.00   0.00  48.12 18.88 26.02  0.00
 0   0  18   0.12 3.26 2.90   0   3.61
 0   1   1   0.12 3.26 2.90   0   4.11   0.00  95.77   0.00
 0   1  19   0.13 3.27 2.90   0   4.11
 0   2   2   0.13 3.28 2.90   0   4.45   0.00  95.42   0.00
 0   2  20   0.11 3.27 2.90   0   4.47
 0   3   3   0.05 3.42 2.90   0  99.91   0.00   0.05   0.00
 0   3  21  97.84 3.45 2.90   0   2.11
...
 1   1  10   0.06 3.33 2.90   0  99.88   0.01   0.06   0.00
 1   1  28  97.61 3.44 2.90   0   2.32
...
10.002556 sec
```

En este ejemplo, las versiones CPUs 21 y 28 funcionan a su frecuencia máxima de Turbo Boost porque los demás núcleos han entrado en estado de `C6` reposo para ahorrar energía y proporcionar potencia y espacio térmico a los núcleos de trabajo. Las versiones CPUs 3 y 10 (cada una de las cuales comparte un núcleo de procesador con las versiones CPUs 21 y 28) están en ese `C1` estado esperando instrucciones.

En el siguiente ejemplo, los 18 núcleos están trabajando activamente, por lo que no hay margen para el Turbo Boost máximo, pero todos funcionan a la velocidad de 3.2 «Turbo Boost para todos los núcleos» GHz.

```
[ec2-user ~]$ sudo turbostat stress -c 36 -t 10
stress: info: [30685] dispatching hogs: 36 cpu, 0 io, 0 vm, 0 hdd
stress: info: [30685] successful run completed in 10s
pk cor CPU    %c0  GHz  TSC SMI    %c1    %c3    %c6    %c7   %pc2   %pc3   %pc6   %pc7  Pkg_W RAM_W PKG_% RAM_%
            99.27 3.20 2.90   0   0.26   0.00   0.47   0.00   0.00   0.00   0.00   0.00 228.59 31.33 199.26  0.00
 0   0   0  99.08 3.20 2.90   0   0.27   0.01   0.64   0.00   0.00   0.00   0.00   0.00 114.69 18.55 99.32  0.00
 0   0  18  98.74 3.20 2.90   0   0.62
 0   1   1  99.14 3.20 2.90   0   0.09   0.00   0.76   0.00
 0   1  19  98.75 3.20 2.90   0   0.49
 0   2   2  99.07 3.20 2.90   0   0.10   0.02   0.81   0.00
 0   2  20  98.73 3.20 2.90   0   0.44
 0   3   3  99.02 3.20 2.90   0   0.24   0.00   0.74   0.00
 0   3  21  99.13 3.20 2.90   0   0.13
 0   4   4  99.26 3.20 2.90   0   0.09   0.00   0.65   0.00
 0   4  22  98.68 3.20 2.90   0   0.67
 0   5   5  99.19 3.20 2.90   0   0.08   0.00   0.73   0.00
 0   5  23  98.58 3.20 2.90   0   0.69
 0   6   6  99.01 3.20 2.90   0   0.11   0.00   0.89   0.00
 0   6  24  98.72 3.20 2.90   0   0.39
...
```

## Alto rendimiento y baja latencia con limitación de estados C más profundos
<a name="c-states"></a>

Los estados C controlan los niveles de suspensión en los que puede entrar un núcleo cuando está inactivo. Puede que desee controlar los estados C para ajustar el sistema en cuanto a latencia, en lugar del rendimiento. Hacer que los núcleos pasen al estado de suspensión lleva tiempo y aunque un núcleo en suspensión ofrece más margen para que otro núcleo arranque a una frecuencia superior, el núcleo en suspensión tarda un tiempo en activarse y en funcionar. Por ejemplo, si un núcleo al que se asigna que gestione un paquete de red interrumpe su suspensión, puede haber un retraso en el servicio que produzca una interrupción. Puede configurar el sistema para que no utilice estados C más profundos, con lo que se reduce la latencia de reacción del procesador, aunque también se reduce el margen disponible para que otros núcleos alcancen la frecuencia Turbo Boost.

Un caso habitual en el que se deshabilitan los estados de suspensión más profundos es una aplicación de base de datos Redis que almacena la base de datos en la memoria del sistema para ofrecer la máxima rapidez al responder a una consulta.

**Para limitar los estados de sueño más profundos, active AL2**

1. Abra el archivo `/etc/default/grub` con el editor que prefiera.

   ```
   [ec2-user ~]$ sudo vim /etc/default/grub
   ```

1. Edite la línea `GRUB_CMDLINE_LINUX_DEFAULT` y agregue las opciones `intel_idle.max_cstate=1` y `processor.max_cstate=1` para configurar `C1` como el estado C más profundo para núcleos inactivos.

   ```
   GRUB_CMDLINE_LINUX_DEFAULT="console=tty0 console=ttyS0,115200n8 net.ifnames=0 biosdevname=0 nvme_core.io_timeout=4294967295 intel_idle.max_cstate=1 processor.max_cstate=1"
   GRUB_TIMEOUT=0
   ```

   La opción `intel_idle.max_cstate=1` configura el límite del estado C para las instancias basadas en Intel, y la opción `processor.max_cstate=1` configura el límite del estado C para las instancias basadas en AMD. Es seguro agregar ambas opciones a la configuración. Eso permite establecer el comportamiento deseado en Intel y AMD con una sola configuración.

1. Guarde el archivo y salga del editor.

1.  Ejecute el siguiente comando para volver a compilar la configuración de arranque.

   ```
   [ec2-user ~]$ sudo grub2-mkconfig -o /boot/grub2/grub.cfg
   ```

1. Vuelva a arrancar la instancia para habilitar la nueva opción de kernel.

   ```
   [ec2-user ~]$ sudo reboot
   ```

**Para limitar estados de suspensión más profundos en la Amazon Linux AMI**

1. Abra el archivo `/boot/grub/grub.conf` con el editor que prefiera.

   ```
   [ec2-user ~]$ sudo vim /boot/grub/grub.conf
   ```

1. Edite la línea `kernel` de la primera entrada y agregue las opciones `intel_idle.max_cstate=1` y `processor.max_cstate=1` para establecer `C1` como el estado C más profundo para núcleos inactivos.

   ```
   # created by imagebuilder
   default=0
   timeout=1
   hiddenmenu
   
   title Amazon Linux 2014.09 (3.14.26-24.46.amzn1.x86_64)
   root (hd0,0)
   kernel /boot/vmlinuz-3.14.26-24.46.amzn1.x86_64 root=LABEL=/ console=ttyS0 intel_idle.max_cstate=1  processor.max_cstate=1
   initrd /boot/initramfs-3.14.26-24.46.amzn1.x86_64.img
   ```

   La opción `intel_idle.max_cstate=1` configura el límite del estado C para las instancias basadas en Intel, y la opción `processor.max_cstate=1` configura el límite del estado C para las instancias basadas en AMD. Es seguro agregar ambas opciones a la configuración. Eso permite establecer el comportamiento deseado en Intel y AMD con una sola configuración.

1. Guarde el archivo y salga del editor.

1. Vuelva a arrancar la instancia para habilitar la nueva opción de kernel.

   ```
   [ec2-user ~]$ sudo reboot
   ```

El siguiente ejemplo muestra una instancia `c4.8xlarge` con dos núcleos funcionando activamente en la frecuencia de núcleo “todos los núcleos Turbo Boost”.

```
[ec2-user ~]$ sudo turbostat stress -c 2 -t 10
stress: info: [5322] dispatching hogs: 2 cpu, 0 io, 0 vm, 0 hdd
stress: info: [5322] successful run completed in 10s
pk cor CPU    %c0  GHz  TSC SMI    %c1    %c3    %c6    %c7   %pc2   %pc3   %pc6   %pc7  Pkg_W RAM_W PKG_% RAM_%
             5.56 3.20 2.90   0  94.44   0.00   0.00   0.00   0.00   0.00   0.00   0.00 131.90 31.11 199.47  0.00
 0   0   0   0.03 2.08 2.90   0  99.97   0.00   0.00   0.00   0.00   0.00   0.00   0.00  67.23 17.11 99.76  0.00
 0   0  18   0.01 1.93 2.90   0  99.99
 0   1   1   0.02 1.96 2.90   0  99.98   0.00   0.00   0.00
 0   1  19  99.70 3.20 2.90   0   0.30
...
 1   1  10   0.02 1.97 2.90   0  99.98   0.00   0.00   0.00
 1   1  28  99.67 3.20 2.90   0   0.33
 1   2  11   0.04 2.63 2.90   0  99.96   0.00   0.00   0.00
 1   2  29   0.02 2.11 2.90   0  99.98
...
```

En este ejemplo, los núcleos de las CPUs versiones 19 y 28 funcionan a 3.2 GHz y los demás núcleos se encuentran en el `C1` estado C, esperando instrucciones. Aunque los núcleos en funcionamiento no están llegando a su frecuencia máxima Turbo Boost, los núcleos inactivos serán mucho más rápidos a la hora de responder a nuevas solicitudes que si estuvieran en el estado C `C6` más profundo.

## Rendimiento básico con el mínimo de variabilidad
<a name="baseline-perf"></a>

Puede reducir la variabilidad de la frecuencia del procesador con los estados P. Los estados P controlan el rendimiento deseado (en frecuencia de CPU) desde un núcleo. La mayoría de cargas de trabajo presentan un mejor rendimiento en P0, que solicita Turbo Boost. Pero puede ajustar el sistema para obtener un rendimiento uniforme en lugar de un rendimiento por ráfagas, lo que puede ocurrir cuando se habilitan frecuencias Turbo Boost. 

Las cargas de trabajo Intel Advanced Vector Extensions (AVX o AVX AVX2) pueden funcionar bien a frecuencias más bajas, y las instrucciones AVX pueden consumir más energía. Al ejecutar el procesador a una frecuencia más baja deshabilitando Turbo Boost, se puede reducir la cantidad de potencia usada y mantener una velocidad más uniforme. Para obtener más información acerca de la optimización de la configuración de instancias y la carga de trabajo de AVX, consulte el [sitio web de Intel](https://www.intel.com/content/www/us/en/developer/articles/technical/the-intel-advanced-vector-extensions-512-feature-on-intel-xeon-scalable.html?wapkw=advanced%20vector%20extensions).

Los controladores inactivos de CPU controlan el estado P. Las generaciones de CPU más recientes requieren controladores inactivos de CPU actualizados que se corresponden con el nivel de kernel de la siguiente manera:
+ Versiones 6.1 y superiores del kernel de Linux: es compatible con Intel Granite Rapids (por ejemplo, R8i)
+ Versiones 5.10 y superiores del kernel de Linux: compatible con AMD Milan (por ejemplo, M6a)
+ Versiones 5.6 y superiores del kernel de Linux: compatible con Intel Icelake (por ejemplo, M6i)

Para detectar si el kernel de un sistema en ejecución reconoce la CPU, ejecute el siguiente comando.

```
if [ -d /sys/devices/system/cpu/cpu0/cpuidle ]; then echo "C-state control enabled"; else echo "Kernel cpuidle driver does not recognize this CPU generation"; fi
```

Si el resultado de este comando indica falta de compatibilidad, se recomienda actualizar el kernel.

Esta sección describe cómo limitar estados de suspensión más profundos y deshabilitar Turbo Boost (solicitando el estado P `P1`) para obtener baja latencia y la mínima variabilidad en la velocidad del procesador para estos tipos de cargas de trabajo.

**Para limitar los estados de sueño más profundos y desactivar Turbo Boost AL2**

1. Abra el archivo `/etc/default/grub` con el editor que prefiera.

   ```
   [ec2-user ~]$ sudo vim /etc/default/grub
   ```

1. Edite la línea `GRUB_CMDLINE_LINUX_DEFAULT` y agregue las opciones `intel_idle.max_cstate=1` y `processor.max_cstate=1` para configurar `C1` como el estado C más profundo para núcleos inactivos.

   ```
   GRUB_CMDLINE_LINUX_DEFAULT="console=tty0 console=ttyS0,115200n8 net.ifnames=0 biosdevname=0 nvme_core.io_timeout=4294967295 intel_idle.max_cstate=1 processor.max_cstate=1"
   GRUB_TIMEOUT=0
   ```

   La opción `intel_idle.max_cstate=1` configura el límite del estado C para las instancias basadas en Intel, y la opción `processor.max_cstate=1` configura el límite del estado C para las instancias basadas en AMD. Es seguro agregar ambas opciones a la configuración. Eso permite establecer el comportamiento deseado en Intel y AMD con una sola configuración.

1. Guarde el archivo y salga del editor.

1.  Ejecute el siguiente comando para volver a compilar la configuración de arranque.

   ```
   [ec2-user ~]$ grub2-mkconfig -o /boot/grub2/grub.cfg
   ```

1. Vuelva a arrancar la instancia para habilitar la nueva opción de kernel.

   ```
   [ec2-user ~]$ sudo reboot
   ```

1. Cuando necesite la baja variabilidad de velocidad del procesador que ofrece el estado P `P1`, ejecute el siguiente comando para deshabilitar Turbo Boost.

   ```
   [ec2-user ~]$ sudo sh -c "echo 1 > /sys/devices/system/cpu/intel_pstate/no_turbo"
   ```

1. Cuando finalice la carga de trabajo, puede volver a habilitar Turbo Boost con el siguiente comando.

   ```
   [ec2-user ~]$ sudo sh -c "echo 0 > /sys/devices/system/cpu/intel_pstate/no_turbo"
   ```

**Para limitar los estados de suspensión más profundos y deshabilitar Turbo Boost en la Amazon Linux AMI**

1. Abra el archivo `/boot/grub/grub.conf` con el editor que prefiera.

   ```
   [ec2-user ~]$ sudo vim /boot/grub/grub.conf
   ```

1. Edite la línea `kernel` de la primera entrada y agregue las opciones `intel_idle.max_cstate=1` y `processor.max_cstate=1` para establecer `C1` como el estado C más profundo para núcleos inactivos.

   ```
   # created by imagebuilder
   default=0
   timeout=1
   hiddenmenu
   
   title Amazon Linux 2014.09 (3.14.26-24.46.amzn1.x86_64)
   root (hd0,0)
   kernel /boot/vmlinuz-3.14.26-24.46.amzn1.x86_64 root=LABEL=/ console=ttyS0 intel_idle.max_cstate=1 processor.max_cstate=1
   initrd /boot/initramfs-3.14.26-24.46.amzn1.x86_64.img
   ```

   La opción `intel_idle.max_cstate=1` configura el límite del estado C para las instancias basadas en Intel, y la opción `processor.max_cstate=1` configura el límite del estado C para las instancias basadas en AMD. Es seguro agregar ambas opciones a la configuración. Eso permite establecer el comportamiento deseado en Intel y AMD con una sola configuración.

1. Guarde el archivo y salga del editor.

1. Vuelva a arrancar la instancia para habilitar la nueva opción de kernel.

   ```
   [ec2-user ~]$ sudo reboot
   ```

1. Cuando necesite la baja variabilidad de velocidad del procesador que ofrece el estado P `P1`, ejecute el siguiente comando para deshabilitar Turbo Boost.

   ```
   [ec2-user ~]$ sudo sh -c "echo 1 > /sys/devices/system/cpu/intel_pstate/no_turbo"
   ```

1. Cuando finalice la carga de trabajo, puede volver a habilitar Turbo Boost con el siguiente comando.

   ```
   [ec2-user ~]$ sudo sh -c "echo 0 > /sys/devices/system/cpu/intel_pstate/no_turbo"
   ```

El siguiente ejemplo muestra una `c4.8xlarge` instancia con dos V realizando un trabajo CPUs activo a la frecuencia central de referencia, sin Turbo Boost.

```
[ec2-user ~]$ sudo turbostat stress -c 2 -t 10
stress: info: [5389] dispatching hogs: 2 cpu, 0 io, 0 vm, 0 hdd
stress: info: [5389] successful run completed in 10s
pk cor CPU    %c0  GHz  TSC SMI    %c1    %c3    %c6    %c7   %pc2   %pc3   %pc6   %pc7  Pkg_W RAM_W PKG_% RAM_%
             5.59 2.90 2.90   0  94.41   0.00   0.00   0.00   0.00   0.00   0.00   0.00 128.48 33.54 200.00  0.00
 0   0   0   0.04 2.90 2.90   0  99.96   0.00   0.00   0.00   0.00   0.00   0.00   0.00  65.33 19.02 100.00  0.00
 0   0  18   0.04 2.90 2.90   0  99.96
 0   1   1   0.05 2.90 2.90   0  99.95   0.00   0.00   0.00
 0   1  19   0.04 2.90 2.90   0  99.96
 0   2   2   0.04 2.90 2.90   0  99.96   0.00   0.00   0.00
 0   2  20   0.04 2.90 2.90   0  99.96
 0   3   3   0.05 2.90 2.90   0  99.95   0.00   0.00   0.00
 0   3  21  99.95 2.90 2.90   0   0.05
...
 1   1  28  99.92 2.90 2.90   0   0.08
 1   2  11   0.06 2.90 2.90   0  99.94   0.00   0.00   0.00
 1   2  29   0.05 2.90 2.90   0  99.95
```

Los núcleos de las CPUs versiones 21 y 28 funcionan activamente a la velocidad base del procesador de 2,9 GHz, y todos los núcleos inactivos también funcionan a la velocidad básica en el `C1` estado C, listos para aceptar instrucciones.

# Programador de E/S para AL2
<a name="io-scheduler"></a>

El I/O scheduler is a part of the Linux operating system that sorts and merges I/O solicita y determina el orden en el que se procesan.

I/O schedulers are particularly beneficial for devices such as magnetic hard drives, where seek time can be expensive and where it is optimal to merge co-located requests. I/OLos programadores tienen menos efecto en los dispositivos de estado sólido y los entornos virtualizados. Esto se debe a que para los dispositivos de estado sólido, el acceso secuencial y aleatorio no difiere, y para los entornos virtualizados, el host proporciona su propia capa de programación.

En este tema se describe el I/O programador de Amazon Linux. Para obtener más información sobre el programador de E/S utilizado por otras distribuciones de Linux, consulte su documentación respectiva.

**Topics**
+ [Programadores admitidos](#supported-schedulers)
+ [Programador predeterminado](#default-schedulers)
+ [Cambiar el programador](#change-scheduler)

## Programadores admitidos
<a name="supported-schedulers"></a>

Amazon Linux admite los siguientes I/O programadores:
+ `deadline`— El I/O programador de *fechas límite* clasifica I/O las solicitudes y las gestiona en el orden más eficiente. Garantiza una hora de inicio para cada I/O request. It also gives I/O solicitud que haya estado pendiente durante demasiado tiempo y tiene mayor prioridad.
+ `cfq`— El I/O programador *Completely Fair Queueing* (CFQ) intenta asignar las I/O resources between processes. It sorts and inserts I/O solicitudes de manera justa en colas por proceso.
+ `noop`— Las I/O scheduler inserts all I/O solicitudes de *No Operation* (noop) forman una cola FIFO y, a continuación, las fusiona en una sola solicitud. Este programador no ordena ninguna solicitud.

## Programador predeterminado
<a name="default-schedulers"></a>

No Operation (noop) es el I/O programador predeterminado de Amazon Linux. Este programador se utiliza por las razones siguientes:
+ Muchos tipos de instancia utilizan dispositivos virtualizados en los que el host subyacente realiza la programación de la instancia.
+ Los dispositivos de estado sólido se utilizan en muchos tipos de instancias en los que las ventajas de un I/O programador tienen menos efecto.
+ Es el I/O programador menos invasivo y se puede personalizar si es necesario.

## Cambiar el programador
<a name="change-scheduler"></a>

Cambiar el I/O programador puede aumentar o disminuir el rendimiento en función de si el programador hace que se completen más o menos I/O solicitudes en un tiempo determinado. Esto depende en gran medida de la carga de trabajo, de la generación del tipo de instancia que se está utilizando y del tipo de dispositivo al que se accede. Si cambia el programador de E/S que está utilizando, le recomendamos que utilice una herramienta, como **iotop**, para medir el I/O rendimiento y determinar si el cambio es beneficioso para su caso de uso.

Puede ver el I/O planificador de un dispositivo mediante el siguiente comando, que se utiliza `nvme0n1` como ejemplo. Reemplace `nvme0n1` en el siguiente comando con el dispositivo que aparece en `/sys/block` en la instancia.

```
$  cat /sys/block/nvme0n1/queue/scheduler
```

Para configurar el I/O planificador del dispositivo, utilice el siguiente comando. 

```
$  echo cfq|deadline|noop > /sys/block/nvme0n1/queue/scheduler
```

Por ejemplo, para configurar el I/O planificador de un *xvda* dispositivo de `noop` a`cfq`, usa el siguiente comando. 

```
$  echo cfq > /sys/block/xvda/queue/scheduler
```

# Cambia el nombre de host de la instancia AL2
<a name="set-hostname"></a>

Al iniciar una instancia en una VPC privada, Amazon EC2 le asigna un nombre de anfitrión del sistema operativo invitado. El tipo de nombre de host que Amazon EC2 asigna depende de la configuración de la subred. Para obtener más información sobre los nombres de host de EC2, consulte los tipos de nombres de host de las [instancias de Amazon EC2 en la Guía del usuario](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-naming.html) de Amazon *EC2*.

Un nombre DNS privado típico de Amazon EC2 para una instancia EC2 configurada para utilizar una nomenclatura basada en IP con una IPv4 dirección tiene el siguiente aspecto:`ip-12-34-56-78.us-west-2.compute.internal`, donde el nombre consta del dominio interno, el servicio (en este caso,`compute`), la región y una forma de la dirección privada. IPv4 Parte de este nombre de host se muestra en el símbolo de shell cuando inicia sesión en la instancia (por ejemplo, `ip-12-34-56-78`). Cada vez que detiene y reinicia la instancia de Amazon EC2 (a menos que utilice una dirección IP elástica), la IPv4 dirección pública cambia, al igual que el nombre de DNS público, el nombre de host del sistema y el intérprete de comandos.

**importante**  
Esta información se aplica a Amazon Linux. Para obtener información acerca de otras distribuciones, consulte la documentación específica.

## Cambiar el nombre de host del sistema
<a name="set-hostname-system"></a>

Si tiene un nombre DNS público registrado para la dirección IP de la instancia (como `webserver.mydomain.com`), puede establecer el nombre de host del sistema de manera que la instancia se identifique como una parte de ese dominio. Esto también cambia la línea de comandos del shell para que muestre la primera parte de este nombre en lugar del nombre de host proporcionado por AWS (por ejemplo,). `ip-12-34-56-78` Si no tiene un nombre DNS público registrado, puede cambiar el nombre del host pero el proceso varía un poco.

Para que la actualización del nombre de host persista, debe verificar que la configuración `preserve_hostname` cloud-init esté establecida en `true`. Puede ejecutar el siguiente comando para editar o agregar esta configuración:

```
sudo vi /etc/cloud/cloud.cfg
```

Si la configuración `preserve_hostname` no aparece en la lista, agregue la siguiente línea de texto al final del archivo: 

```
preserve_hostname: true
```

**Para cambiar el nombre de host del sistema por un nombre DNS público**

Siga este procedimiento si ya tiene un nombre DNS público registrado.

1. 
   + Para AL2: utilice el **hostnamectl** comando para configurar el nombre de host de forma que refleje el nombre de dominio completo (por ejemplo,). **webserver.mydomain.com**

     ```
     [ec2-user ~]$ sudo hostnamectl set-hostname webserver.mydomain.com
     ```
   + Para Amazon Linux AMI: en la instancia, abra el archivo de configuración `/etc/sysconfig/network` en el editor de texto de su elección y cambie la entrada `HOSTNAME` para que refleje el nombre de dominio completo (como **webserver.mydomain.com**).

     ```
     HOSTNAME=webserver.mydomain.com
     ```

1. Reinicie la instancia para actualizar el nuevo nombre de host.

   ```
   [ec2-user ~]$ sudo reboot
   ```

   También puede reiniciarla utilizando la consola de Amazon EC2 (en la página **Instances** (instancia[s]), seleccione la instancia y elija **Instance state (Estado de la instancia)** y **Reboot instance [Reiniciar instancia]**).

1. Inicie sesión en la instancia y compruebe que el nombre de host se ha actualizado. El símbolo debería mostrar ahora el nuevo nombre de host (hasta el primer “.”) y el comando **hostname** debería mostrar el nombre de dominio completo.

   ```
   [ec2-user@webserver ~]$ hostname
   webserver.mydomain.com
   ```

**Para cambiar el nombre de host del sistema sin un nombre DNS público**

1. 
   + Para AL2: utilice el **hostnamectl** comando para configurar el nombre de host de forma que refleje el nombre de host del sistema deseado (por ejemplo). **webserver**

     ```
     [ec2-user ~]$ sudo hostnamectl set-hostname webserver.localdomain
     ```
   + Para Amazon Linux AMI: en la instancia, abra el archivo de configuración `/etc/sysconfig/network` en el editor de texto que prefiera y cambie la entrada `HOSTNAME` para que refleje el nombre de host del sistema deseado (como **webserver**).

     ```
     HOSTNAME=webserver.localdomain
     ```

1. Abra el archivo de configuración `/etc/hosts` en el editor de texto que prefiera y cambie la entrada que comienza por **127.0.0.1** para que coincida con el ejemplo siguiente, cambiando el nombre de host por el suyo.

   ```
   127.0.0.1 webserver.localdomain webserver localhost4 localhost4.localdomain4
   ```

1. Reinicie la instancia para actualizar el nuevo nombre de host.

   ```
   [ec2-user ~]$ sudo reboot
   ```

   También puede reiniciarla utilizando la consola de Amazon EC2 (en la página **Instances** (instancia[s]), seleccione la instancia y elija **Instance state (Estado de la instancia)** y **Reboot instance [Reiniciar instancia]**).

1. Inicie sesión en la instancia y compruebe que el nombre de host se ha actualizado. El símbolo debería mostrar ahora el nuevo nombre de host (hasta el primer “.”) y el comando **hostname** debería mostrar el nombre de dominio completo.

   ```
   [ec2-user@webserver ~]$ hostname
   webserver.localdomain
   ```

También puede implementar más soluciones de programación, como especificar los datos del usuario para configurar la instancia. Si la instancia forma parte de un grupo de escalado automático, puede usar enlaces de ciclo de vida para definir los datos del usuario. Para obtener más información, consulte [Ejecutar comandos en la instancia de Linux durante la inicialización](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html) y [Lifecycle hook for instance launch](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-autoscaling-lifecyclehook.html#aws-resource-autoscaling-lifecyclehook--examples--Lifecycle_hook_for_instance_launch) (Enlace de ciclo de vida para la inicialización de una instancia) en la *Guía del usuario de AWS CloudFormation *.

## Cambiar el símbolo de shell sin que afecte al nombre de host
<a name="set-hostname-shell"></a>

Si no desea modificar el nombre de servidor de la instancia, pero le gustaría que se mostrara un nombre de sistema más útil (por ejemplo**webserver**) que el nombre privado que proporciona AWS (por ejemplo,`ip-12-34-56-78`), puede editar los archivos de configuración del intérprete de comandos para que muestren el apodo del sistema en lugar del nombre del servidor.

**Para cambiar el símbolo del shell por una alias de host**

1. Cree un archivo en `/etc/profile.d` que establezca la variable de entorno llamada `NICKNAME` en el valor que desea para el símbolo del shell. Por ejemplo, para establecer el alias del sistema en **webserver**, ejecute el comando siguiente.

   ```
   [ec2-user ~]$ sudo sh -c 'echo "export NICKNAME=webserver" > /etc/profile.d/prompt.sh'
   ```

1. Abra el archivo `/etc/bashrc` (Red Hat) o `/etc/bash.bashrc` (Debian/Ubuntu) en el editor de texto que prefiera (por ejemplo, **vim** o **nano**). Debe utilizar **sudo** con el comando del editor porque `/etc/bashrc` y `/etc/bash.bashrc` son propiedad de `root`.

1. Modifique el archivo y cambie la variable del símbolo del shell (`PS1`) para que muestre el alias en lugar del nombre de host. Busque la línea siguiente que establece el símbolo del shell en `/etc/bashrc` o `/etc/bash.bashrc` (abajo se muestran algunas de las líneas que lo rodean como contexto; busque la línea que comienza por `[ "$PS1"`):

   ```
     # Turn on checkwinsize
     shopt -s checkwinsize
     [ "$PS1" = "\\s-\\v\\\$ " ] && PS1="[\u@\h \W]\\$ "
     # You might want to have e.g. tty in prompt (e.g. more virtual machines)
     # and console windows
   ```

   Cambie `\h` (el símbolo de `hostname`) de esa línea por el valor de la variable `NICKNAME`.

   ```
     # Turn on checkwinsize
     shopt -s checkwinsize
     [ "$PS1" = "\\s-\\v\\\$ " ] && PS1="[\u@$NICKNAME \W]\\$ "
     # You might want to have e.g. tty in prompt (e.g. more virtual machines)
     # and console windows
   ```

1. (Opcional) Para establecer el título de las ventanas del shell en el nuevo alias, complete los pasos siguientes.

   1. Cree un archivo denominado `/etc/sysconfig/bash-prompt-xterm`.

      ```
      [ec2-user ~]$ sudo touch /etc/sysconfig/bash-prompt-xterm
      ```

   1. Haga el archivo ejecutable con el siguiente comando.

      ```
      [ec2-user ~]$ sudo chmod +x /etc/sysconfig/bash-prompt-xterm
      ```

   1. Abra el archivo `/etc/sysconfig/bash-prompt-xterm` en el editor de textos que prefiera (como **vim** o **nano**). Debe utilizar **sudo** con el comando del editor porque el propietario de `/etc/sysconfig/bash-prompt-xterm` es `root`.

   1. Añada la línea siguiente al archivo.

      ```
      echo -ne "\033]0;${USER}@${NICKNAME}:${PWD/#$HOME/~}\007"
      ```

1. Cierre sesión y vuelva a iniciarla para actualizar el nuevo valor del alias.

## Cambiar el nombre de host en otras distribuciones de Linux
<a name="set-hostname-other-linux"></a>

Los procedimientos de esta página son para usar con Amazon Linux únicamente. Para obtener más información acerca de otras distribuciones de Linux, consulte su documentación específica y los artículos siguientes:
+ [¿Cómo puedo asignar un nombre de host estático a una instancia privada de Amazon EC2 que ejecuta RHEL 7 o Centos 7??](https://aws.amazon.com/premiumsupport/knowledge-center/linux-static-hostname-rhel7-centos7/)

# Configura un DNS dinámico en tu instancia AL2
<a name="dynamic-dns"></a>

Cuando inicia una instancia de EC2, se le asigna una dirección IP pública y un nombre de sistema de nombres de dominio (DNS) público que puede utilizar para acceder a ella desde Internet. Dado que hay muchos hosts en el dominio de Amazon Web Services, estos nombres públicos deben ser bastante largos para que cada uno siga siendo único. Un nombre DNS público típico de Amazon EC2 tiene el siguiente aspecto:`ec2-12-34-56-78.us-west-2.compute.amazonaws.com`, donde el nombre consta del dominio de Amazon Web Services, el servicio (en este caso,`compute`) Región de AWS, la y una forma de la dirección IP pública.

Los servicios DNS dinámicos proporcionan nombres de host DNS personalizados dentro del área del dominio que son fáciles de recordar y también más relevantes para el caso de uso del host. Algunos de estos servicios también son gratuitos. Puede usar un proveedor DNS dinámico con Amazon EC2 y configurar la instancia para actualizar la dirección IP asociada con un nombre DNS público cada vez que se inicia la instancia. Hay muchos proveedores entre los que elegir pero los detalles específicos de elegir un proveedor y registrar un nombre quedan fuera del alcance de esta guía.<a name="procedure-dynamic-dns"></a>

**Para usar DNS dinámico con Amazon EC2**

1. Inscríbase en un proveedor de servicio DNS dinámico y registre un nombre DNS público con el servicio. Este procedimiento usa el servicio gratuito de [noip.com/free](https://www.noip.com/free) como ejemplo.

1. Configure el cliente de actualización de DNS dinámico. Una vez que tiene un proveedor de servicios DNS dinámico y un nombre DNS público registrado con el servicio, apunte el nombre DNS a la dirección IP de la instancia. Muchos proveedores (incluido [noip.com](https://noip.com)) permiten hacer esto manualmente en la página de la cuenta en el sitio web, pero muchos otros también admiten clientes de actualización de software. Si en la instancia de EC2 se está ejecutando un cliente de actualización, el registro DNS dinámico se actualiza cada vez que cambia la dirección IP, por ejemplo, como sucede después de un cierre y reinicio. En este ejemplo, se instala el cliente noip2, que funciona con el servicio que proporciona [noip.com](https://noip.com).

   1. Habilite el repositorio Extra Packages for Enterprise Linux (EPEL) para acceder al `noip2` cliente.
**nota**  
AL2 las instancias tienen instaladas de forma predeterminada las claves GPG y la información del repositorio de EPEL. [Para obtener más información y descargar la última versión de este paquete, consulta https://fedoraproject. org/wiki/EPEL](https://fedoraproject.org/wiki/EPEL).

      ```
      [ec2-user ~]$ sudo amazon-linux-extras install epel -y
      ```

   1. Instale el paquete `noip`.

      ```
      [ec2-user ~]$ sudo yum install -y noip
      ```

   1. Cree el archivo de configuración. Escriba la información de inicio de sesión y contraseña cuando se le pida y responda a las preguntas posteriores para configurar el cliente.

      ```
      [ec2-user ~]$ sudo noip2 -C
      ```

1. Habilite el servicio noip.

   ```
   [ec2-user ~]$ sudo systemctl enable noip.service
   ```

1. Inicie el servicio noip.

   ```
   [ec2-user ~]$ sudo systemctl start noip.service
   ```

   Este comando inicia el cliente, que lee el archivo de configuración (`/etc/no-ip2.conf`) que ha creado previamente y actualiza la dirección IP del nombre DNS público que elija.

1. Verifique que el cliente de actualización ha establecido la dirección IP correcta para el nombre DNS dinámico. Deje que pasen unos minutos para que se actualicen los registros DNS y después intente conectar la instancia usando SSH con el nombre DNS público que ha configurado en este procedimiento.

# Configure la interfaz de red mediante ec2-net-utils para AL2
<a name="ec2-net-utils"></a>

Amazon Linux 2 AMIs puede contener scripts adicionales instalados por AWS, conocidos como ec2-net-utils. Estos scripts automatizan opcionalmente la configuración de las interfaces de red. Estos scripts están disponibles únicamente para. AL2 

**nota**  
Para Amazon Linux 2023, el `amazon-ec2-net-utils` paquete genera configuraciones específicas de interfaz en el directorio. `/run/systemd/network` Para obtener más información, consulte [Servicio de red](https://docs.aws.amazon.com/linux/al2023/ug/networking-service.html) en la *Guía del usuario de Amazon Linux 2023 de *.

Use el siguiente comando para instalar el paquete AL2 si aún no está instalado, o actualícelo si ya está instalado y hay actualizaciones adicionales disponibles:

```
$ yum install ec2-net-utils
```

Los componentes siguientes forman parte de ec2-net-utils:

Reglas udev (`/etc/udev/rules.d`)  
Identifica las interfaces de red cuando se han conectado, desconectado o vuelto a conectar a una instancia en ejecución, y se asegura de que se ejecuta el script de conexión en caliente (`53-ec2-network-interfaces.rules`). Asigna la dirección MAC a un nombre de dispositivo (`75-persistent-net-generator.rules`, que genera `70-persistent-net.rules`).

script de conexión en caliente  
Genera un archivo de configuración de interfaz adecuado para usarlo con DHCP (`/etc/sysconfig/network-scripts/ifcfg-eth`*N*). También genera un archivo de configuración de ruta (`/etc/sysconfig/network-scripts/route-eth`*N*).

script DHCP  
Siempre que la interfaz de red recibe una nueva concesión DHCP, este script consulta los metadatos de la instancia en busca de direcciones IP elásticas. Para cada dirección IP elástica, agrega una regla a la base de datos de la política de direccionamiento que asegura que el tráfico saliente de dicha dirección utiliza la interfaz de red correcta. También agrega cada dirección IP privada a la interfaz de red como dirección secundaria.

**ec2ifup** eth*N* (`/usr/sbin/`)  
Amplía la funcionalidad de **ifup** estándar. Después de que el script vuelve a escribir los archivos de configuración `ifcfg-eth`*N* y `route-eth`*N*, ejecuta **ifup**.

**ec2ifdown** eth*N* (`/usr/sbin/`)  
Amplía la funcionalidad de **ifdown** estándar. Después de que este script elimina todas las reglas de la interfaz de red de la base de datos de la política de direccionamiento, ejecuta **ifdown**.

**ec2ifscan** (`/usr/sbin/`)  
Comprueba las interfaces de red que no se han configurado y las configura.  
Este script no está disponible en la versión inicial de ec2-net-utils.

Para enumerar los archivos de configuración generados por ec2-net-utils, use el comando siguiente:

```
$ ls -l /etc/sysconfig/network-scripts/*-eth?
```

Para desactivar la automatización, puede agregar `EC2SYNC=no` al archivo `ifcfg-eth`*N* correspondiente. Por ejemplo, use el comando siguiente para deshabilitar la automatización de la interfaz eth1:

```
$ sed -i -e 's/^EC2SYNC=yes/EC2SYNC=no/' /etc/sysconfig/network-scripts/ifcfg-eth1
```

Para deshabilitar la automatización completamente, puede quitar el paquete con el comando siguiente:

```
$ yum remove ec2-net-utils
```

# Kernels proporcionados por el usuario
<a name="UserProvidedKernels"></a>

Si necesita un kernel personalizado para las instancias Amazon EC2, puede comenzar con una AMI que se aproxime a lo que desea, compilar el kernel personalizado en la instancia y actualizar el cargador de arranque para que se dirija hacia el nuevo kernel. Este proceso varía en función del tipo de virtualización que utiliza la AMI. Para obtener más información, consulte los [tipos de virtualización de las AMI de Linux](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/virtualization_types.html) en la *Guía del usuario de Amazon EC2*.

**Topics**
+ [HVM AMIs (GRUB)](#HVM_instances)
+ [Paravirtual AMIs (PV-GRUB)](#Paravirtual_instances)

## HVM AMIs (GRUB)
<a name="HVM_instances"></a>

Los volúmenes de instancias HVM se tratan como discos físicos. El proceso de arranque es similar al de un sistema operativo bare metal con un disco particionado y un cargador de arranque que le permite trabajar con todas las distribuciones Linux admitidas actualmente. El gestor de arranque más común es GRUB o. GRUB2

De forma predeterminada, GRUB no envía su resultado a la consola de la instancia porque esto provoca un retraso adicional durante el arranque. Para obtener más información, consulte [Salida de la consola de instancias](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/troubleshoot-unreachable-instance.html#instance-console-console-output) en la *Guía del usuario de Amazon EC2*. Si instala un kernel personalizado, debería considerar habilitar la salida de GRUB.

No es necesario especificar un kernel alternativo, pero le recomendamos que tenga una alternativa al probar un nuevo kernel. Así, en caso de que el nuevo kernel falle, GRUB puede recurrir a otro kernel. Disponer de un kernel alternativo permite que la instancia arranque incluso si no se encuentra el nuevo kernel.

El GRUB heredado que utiliza `/boot/grub/menu.lst` Amazon Linux. GRUB2 para AL2 usos`/etc/default/grub`. Para obtener más información sobre cómo actualizar el kernel predeterminado en el cargador de arranque, consulte la documentación de su distribución Linux.

## Paravirtual AMIs (PV-GRUB)
<a name="Paravirtual_instances"></a>

AMIs los que utilizan la virtualización paravirtual (PV) utilizan un sistema denominado *PV-GRUB* durante el proceso de arranque. PV-GRUB es un cargador de arranque paravirtual que ejecuta una versión parcheada de GNU GRUB 0.97. Al iniciar una instancia, PV-GRUB inicia el proceso de arranque y, a continuación, la cadena carga el kernel que especifica el archivo `menu.lst` de su imagen.

PV-GRUB comprende `grub.conf` estándar o comandos `menu.lst`, lo que le permite trabajar con todas las distribuciones Linux admitidas actualmente. Las distribuciones anteriores, como Ubuntu 10.04 LTS, Oracle Enterprise Linux o CentOS 5.x, requieren un paquete de kernel “ec2” o “xen” especial, mientras que las más recientes incluyen los controladores necesarios en el paquete del kernel predeterminado.

Las AMI paravirtuales más modernas utilizan una AKI PV-GRUB de forma predeterminada (incluidas todas las AMI paravirtuales de Linux disponibles en el menú Quick Start del Launch Wizard de Amazon EC2), por lo que no es necesario que realice ningún paso adicional para utilizar un kernel distinto en la instancia, siempre que el kernel que desea utilizar sea compatible con su distribución. La mejor manera de ejecutar un kernel personalizado en la instancia es comenzar con una AMI que se aproxime a lo que desea y, a continuación, compilar el kernel personalizado en la instancia y modificar el archivo `menu.lst` para que arranque con ese kernel.

Puede verificar que la imagen del kernel de una AMI es una AKI PV-GRUB. Ejecute el comando siguiente [describe-images](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html) (lo que sustituye el ID de imagen del kernel) y compruebe si el campo `Name` comienza con `pv-grub`:

```
aws ec2 describe-images --filters Name=image-id,Values=aki-880531cd
```

**Topics**
+ [Restricciones de PV-GRUB](#pv-grub-limitations)
+ [Configuring GRUB](#configuringGRUB)
+ [Imagen del núcleo de Amazon PV-GRUB IDs](#AmazonKernelImageIDs)
+ [Actualizar PV-GRUB](#UpdatingPV-GRUB)

### Restricciones de PV-GRUB
<a name="pv-grub-limitations"></a>

PV-GRUB tiene las siguientes restricciones:
+ No se puede utilizar la versión de PV-GRUB de 64 bits para iniciar un kernel de 32 bits o viceversa.
+ No se puede especificar una imagen de disco RAM de Amazon (ARI) al utilizar una AKI PV-GRUB.
+ AWS ha probado y comprobado que PV-GRUB funciona con los siguientes formatos de sistema de archivos: EXT2,,, JFS EXT3 EXT4, XFS y ReiserFS. Otros formatos de sistema de archivos podrían no ser compatibles.
+ PV-GRUB puede arrancar kernels comprimidos utilizando los formatos de compresión gzip, bzip2, lzo y xz.
+ Los clústeres AMIs no admiten ni necesitan PV-GRUB porque utilizan la virtualización completa de hardware (HVM). Si bien las instancias paravirtuales utilizan PV-GRUB para arrancar, los volúmenes de instancias HVM se tratan como discos físicos y el proceso de arranque es similar al de un sistema operativo bare metal con un disco particionado y un cargador de arranque. 
+ Las versiones 1.03 y anteriores de PV-GRUB no admiten partición GPT; solo admiten partición MBR.
+ Si tiene previsto utilizar un administrador de volúmenes lógicos (LVM) con volúmenes de Amazon Elastic Block Store (Amazon EBS), necesita una partición de arranque independiente fuera del LVM. Entonces podrá crear volúmenes lógicos con el LVM.

### Configure GRUB para paravirtual AMIs
<a name="configuringGRUB"></a>

Para arrancar PV-GRUB, la imagen deben contener un archivo GRUB `menu.lst`; la ubicación más habitual de este archivo es `/boot/grub/menu.lst`.

A continuación se muestra un ejemplo de un `menu.lst` archivo de configuración para arrancar una AMI con una AKI PV-GRUB. En este ejemplo, existen dos entradas de kernel para elegir: Amazon Linux 2018.03 (el kernel original para esta AMI) y Vanilla Linux 4.16.4 (una versión más reciente del kernel Vanilla de Linux de [https://www.kernel.org/](https://www.kernel.org/)). La entrada Vanilla se ha copiado de la entrada original para esta AMI y las rutas `kernel` e `initrd` se han actualizado con las nuevas ubicaciones. El parámetro `default 0` dirige el cargador de arranque hacia la primera entrada que ve (en este caso, la entrada Vanilla) y el parámetro `fallback 1` dirige el cargador de arranque hacia la siguiente entrada si hay un problema al arrancar la primera.

```
default 0
fallback 1
timeout 0
hiddenmenu

title Vanilla Linux 4.16.4
root (hd0)
kernel /boot/vmlinuz-4.16.4 root=LABEL=/ console=hvc0
initrd /boot/initrd.img-4.16.4

title Amazon Linux 2018.03 (4.14.26-46.32.amzn1.x86_64)
root (hd0)
kernel /boot/vmlinuz-4.14.26-46.32.amzn1.x86_64 root=LABEL=/ console=hvc0
initrd /boot/initramfs-4.14.26-46.32.amzn1.x86_64.img
```

No es necesario especificar un kernel alternativo en el archivo `menu.lst` pero le recomendamos que tenga uno al probar un nuevo kernel. Así, en caso de que el nuevo kernel falle, PV-GRUB puede recurrir a otro kernel. Disponer de un kernel alternativo permite que la instancia arranque incluso si no se encuentra el nuevo kernel. 

PV-GRUB busca `menu.lst` en las siguientes ubicaciones, utilizando el primero que encuentra:
+  `(hd0)/boot/grub` 
+  `(hd0,0)/boot/grub` 
+  `(hd0,0)/grub` 
+  `(hd0,1)/boot/grub` 
+  `(hd0,1)/grub` 
+  `(hd0,2)/boot/grub` 
+  `(hd0,2)/grub` 
+  `(hd0,3)/boot/grub` 
+  `(hd0,3)/grub` 

Tenga en cuenta que PV-GRUB 1.03 y anteriores solo comprueban una de las dos primeras ubicaciones de esta lista.

### Imagen del núcleo de Amazon PV-GRUB IDs
<a name="AmazonKernelImageIDs"></a>

Las AKI PV-GRUB están disponibles en todas las regiones de Amazon EC2, excepto en Asia-Pacífico (Osaka). Las hay AKIs para tipos de arquitectura de 32 y 64 bits. La mayoría de los modernos AMIs utilizan una AKI de PV-GRUB de forma predeterminada.

Le recomendamos que utilice siempre la versión más actual de la AKI PV-GRUB, ya que no todas las versiones son compatibles con todos los tipos de instancia. Utilice el siguiente comando [describe-images](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html) para obtener una lista del PV-GRUB de la región actual: AKIs 

```
aws ec2 describe-images --owners amazon --filters Name=name,Values=pv-grub-*.gz
```

PV-GRUB es la única AKI disponible en la región `ap-southeast-2`. Debe verificar que cualquier AMI que desee copiar en esta región utilice una versión de PV-GRUB que esté disponible en esta región.

Las siguientes son las AKI actuales de cada región. IDs Registre una nueva AMIs con una AKI hd0.

**nota**  
Seguimos proporcionando los hd00 AKIs para garantizar la compatibilidad con versiones anteriores en las regiones en las que estaban disponibles anteriormente.


**ap-northeast-1, Asia Pacific (Tokyo)**  

| ID de imagen | Nombre de la imagen | 
| --- | --- | 
|  aki-f975a998  |  pv-grub-hd0\$11.05-i386.gz  | 
|  aki-7077ab11  |  pv-grub-hd0\$11.05-x86\$164.gz  | 


**ap-southeast-1, Asia Pacific (Singapore) Region**  

| ID de imagen | Nombre de la imagen | 
| --- | --- | 
|  aki-17a40074  |  pv-grub-hd0\$11.05-i386.gz  | 
|  aki-73a50110  |  pv-grub-hd0\$11.05-x86\$164.gz  | 


**ap-southeast-2, Asia Pacific (Sydney)**  

| ID de imagen | Nombre de la imagen | 
| --- | --- | 
|  aki-ba5665d9  |  pv-grub-hd0\$11.05-i386.gz  | 
|  aki-66506305  |  pv-grub-hd0\$11.05-x86\$164.gz  | 


**eu-central-1, Europe (Frankfurt)**  

| ID de imagen | Nombre de la imagen | 
| --- | --- | 
|  aki-1419e57b  |  pv-grub-hd0\$11.05-i386.gz  | 
|  aki-931fe3fc  |  pv-grub-hd0\$11.05-x86\$164.gz  | 


**eu-west-1, Europe (Ireland)**  

| ID de imagen | Nombre de la imagen | 
| --- | --- | 
|  aki-1c9fd86f  |  pv-grub-hd0\$11.05-i386.gz  | 
|  aki-dc9ed9af  |  pv-grub-hd0\$11.05-x86\$164.gz  | 


**sa-east-1, South America (São Paulo)**  

| ID de imagen | Nombre de la imagen | 
| --- | --- | 
|  aki-7cd34110  |  pv-grub-hd0\$11.05-i386.gz  | 
|  aki-912fbcfd  |  pv-grub-hd0\$11.05-x86\$164.gz  | 


**us-east-1, US East (N. Virginia)**  

| ID de imagen | Nombre de la imagen | 
| --- | --- | 
|  aki-04206613  |  pv-grub-hd0\$11.05-i386.gz  | 
|  aki-5c21674b  |  pv-grub-hd0\$11.05-x86\$164.gz  | 


**us-gov-west-1, AWS GovCloud (US-West)**  

| ID de imagen | Nombre de la imagen | 
| --- | --- | 
|  aki-5ee9573f  |  pv-grub-hd0\$11.05-i386.gz  | 
|  aki-9ee55bff  |  pv-grub-hd0\$11.05-x86\$164.gz  | 


**us-west-1, US West (N. California)**  

| ID de imagen | Nombre de la imagen | 
| --- | --- | 
|  aki-43cf8123  |  pv-grub-hd0\$11.05-i386.gz  | 
|  aki-59cc8239  |  pv-grub-hd0\$11.05-x86\$164.gz  | 


**us-west-2, US West (Oregon)**  

| ID de imagen | Nombre de la imagen | 
| --- | --- | 
|  aki-7a69931a  |  pv-grub-hd0\$11.05-i386.gz  | 
|  aki-70cb0e10  |  pv-grub-hd0\$11.05-x86\$164.gz  | 

### Actualizar PV-GRUB
<a name="UpdatingPV-GRUB"></a>

Le recomendamos que utilice siempre la versión más actual de la AKI PV-GRUB, ya que no todas las versiones son compatibles con todos los tipos de instancia. Asimismo, las versiones anteriores de PV-GRUB no están disponibles en todas las regiones, por lo que si copia una AMI que utilice una versión anterior en una región que no admite dicha versión, no podrá arrancar instancias iniciadas desde dicha AMI hasta que actualice la imagen del kernel. Utilice los siguientes procedimientos para verificar la versión de PV-GRUB de la instancia y actualizarla si fuera necesario.

**Para verificar la versión de PV-GRUB**

1. Localice el ID del kernel de la instancia.

   ```
   aws ec2 describe-instance-attribute --instance-id instance_id --attribute kernel --region region
   
   {
       "InstanceId": "instance_id", 
       "KernelId": "aki-70cb0e10"
   }
   ```

   El ID del kernel de esta instancia es `aki-70cb0e10`.

1. Revise la información de la versión de dicho ID del kernel.

   ```
   aws ec2 describe-images --image-ids aki-70cb0e10 --region region
   
   {
       "Images": [
           {
               "VirtualizationType": "paravirtual", 
               "Name": "pv-grub-hd0_1.05-x86_64.gz", 
               ...
               "Description": "PV-GRUB release 1.05, 64-bit"
           }
       ]
   }
   ```

   La imagen de este kernel es PV-GRUB 1.05. Si la versión de su PV-GRUB no es la más reciente (tal y como se muestra en [Imagen del núcleo de Amazon PV-GRUB IDs](#AmazonKernelImageIDs)), debe actualizarla utilizando el siguiente procedimiento.

**Para actualizar la versión de PV-GRUB**

Si la instancia utiliza una versión anterior de PV-GRUB, debe actualizarla a la versión más reciente.

1. Identifique la versión más reciente de la AKI PV-GRUB para su región y la arquitectura de su procesador en [Imagen del núcleo de Amazon PV-GRUB IDs](#AmazonKernelImageIDs).

1. Detenga la instancia. La instancia debe pararse para modificar la imagen del kernel utilizada.

   ```
   aws ec2 stop-instances --instance-ids instance_id --region region
   ```

1. Modifique la imagen del kernel utilizada en la instancia.

   ```
   aws ec2 modify-instance-attribute --instance-id instance_id --kernel kernel_id --region region
   ```

1. Reinicie la instancia.

   ```
   aws ec2 start-instances --instance-ids instance_id --region region 
   ```

# AL2 Notificaciones de publicación de AMI
<a name="linux-ami-notifications"></a>

Para recibir una notificación cuando AMIs se publique un nuevo Amazon Linux, puede suscribirse mediante Amazon SNS.

Para obtener información sobre cómo suscribirse a las notificaciones AL2023, consulte [Recibir notificaciones sobre nuevas actualizaciones](https://docs.aws.amazon.com/linux/al2023/ug/receive-update-notification.html) en la *Guía del usuario de Amazon Linux 2023*.

**nota**  
El soporte estándar AL1 finalizó el 31 de diciembre de 2020. La fase AL1 de soporte de mantenimiento finalizó el 31 de diciembre de 2023. Para obtener más información sobre la AL1 EOL y el soporte de mantenimiento, consulte la entrada del blog [Update on Amazon Linux AMI end-of-life](https://aws.amazon.com/blogs/aws/update-on-amazon-linux-ami-end-of-life/).

**Para suscribirse a las notificaciones de Amazon Linux**

1. [Abra la consola Amazon SNS en https://console.aws.amazon.com/sns/ la versión 3/home.](https://console.aws.amazon.com/sns/v3/home)

1. En la barra de navegación, cambie la región a **EE. UU. Este (Norte de Virginia)**, si es necesario. Debe seleccionar la región donde la notificación de SNS a la que se va a suscribir se ha creado.

1. En el panel de navegación, elija **Subscriptions**, **Create subscription**.

1. En el cuadro de diálogo **Crear suscripción**, haga lo siguiente:

   1. [AL2] En **Topic ARN (ARN del tema)**, copie y pegue el siguiente nombre de recurso de Amazon (ARN): **arn:aws:sns:us-east-1:137112412989:amazon-linux-2-ami-updates**.

   1. [Amazon Linux] En **ARN del tema**, copie y pegue el siguiente nombre de recurso de Amazon (ARN): **arn:aws:sns:us-east-1:137112412989:amazon-linux-ami-updates**.

   1. En **Protocol (Protocolo)**, elija **Email (Correo electrónico)**.

   1. En **Punto de conexión**, escriba una dirección de correo electrónico que pueda utilizar para recibir notificaciones.

   1. Seleccione **Crear subscripción**.

1. Recibirá un correo electrónico de confirmación con el asunto «AWS Notificación: confirmación de suscripción». Abra el correo electrónico y elija **Confirmar suscripción** para completar la suscripción.

Siempre que AMIs se publiquen, enviamos notificaciones a los suscriptores del tema correspondiente. Para dejar de recibir estas notificaciones, siga el procedimiento que indicamos a continuación para cancelar su suscripción.

**Para cancelar la suscripción a las notificaciones de Amazon Linux**

1. [Abra la consola Amazon SNS en https://console.aws.amazon.com/sns/ la versión 3/home.](https://console.aws.amazon.com/sns/v3/home)

1. En la barra de navegación, cambie la región a **EE. UU. Este (Norte de Virginia)**, si es necesario. Debe usar la región donde se creó la notificación de SNS.

1. En el panel de navegación, elija **Suscripciones**, seleccione la suscripción y luego elija **Acciones**, **Eliminar suscripciones**.

1. Cuando se le pida confirmación, seleccione **Delete (Eliminar)**.

**Formato de los mensajes de SNS de la AMI Amazon Linux**  
El esquema para el mensaje SNS es el siguiente. 

```
{
    "description": "Validates output from AMI Release SNS message",
    "type": "object",
    "properties": {
        "v1": {
            "type": "object",
            "properties": {
                "ReleaseVersion": {
                    "description": "Major release (ex. 2018.03)",
                    "type": "string"
                },
                "ImageVersion": {
                    "description": "Full release (ex. 2018.03.0.20180412)",
                    "type": "string"
                },
                "ReleaseNotes": {
                    "description": "Human-readable string with extra information",
                    "type": "string"
                },
                "Regions": {
                    "type": "object",
                    "description": "Each key will be a region name (ex. us-east-1)",
                    "additionalProperties": {
                        "type": "array",
                        "items": {
                            "type": "object",
                            "properties": {
                                "Name": {
                                    "description": "AMI Name (ex. amzn-ami-hvm-2018.03.0.20180412-x86_64-gp2)",
                                    "type": "string"
                                },
                                "ImageId": {
                                    "description": "AMI Name (ex.ami-467ca739)",
                                    "type": "string"
                                }
                            },
                            "required": [
                                "Name",
                                "ImageId"
                            ]
                        }
                    }
                }
            },
            "required": [
                "ReleaseVersion",
                "ImageVersion",
                "ReleaseNotes",
                "Regions"
            ]
        }
    },
    "required": [
        "v1"
    ]
}
```

# Configure la conexión de AL2 escritorio MATE
<a name="amazon-linux-ami-mate"></a>

El [entorno de escritorio MATE](https://mate-desktop.org/) viene preinstalado y preconfigurado AMIs con la siguiente descripción:

"`.NET Core x.x, Mono x.xx, PowerShell x.x, and MATE DE pre-installed to run your .NET applications on Amazon Linux 2 with Long Term Support (LTS).`"

El entorno proporciona una interfaz gráfica de usuario intuitiva para administrar instancias de AL2 con un uso mínimo de la línea de comandos. La interfaz utiliza representaciones gráficas, como iconos, ventanas, barras de herramientas, carpetas, fondos de pantalla y widgets de escritorio. Las herramientas integradas basadas en GUI están disponibles para realizar tareas comunes. Por ejemplo, existen herramientas para agregar y quitar software, aplicar actualizaciones, organizar archivos, iniciar programas y supervisar el estado del sistema.

**importante**  
`xrdp` es el software de escritorio remoto incluido en la AMI. De forma predeterminada, `xrdp` utiliza un certificado TLS autofirmado para cifrar sesiones de escritorio remoto. AWS Ni los responsables del `xrdp` mantenimiento recomiendan el uso de certificados autofirmados en la producción. En su lugar, obtenga un certificado de una entidad emisora de certificados (CA) adecuada e instálelo en sus instancias. Para obtener más información sobre la configuración de TLS [, consulte la ](https://github.com/neutrinolabs/xrdp/wiki/TLS-security-layer)capa de seguridad de TLS en la wiki de `xrdp`.

**nota**  
Si prefiere utilizar un servicio de computación en red virtual (VNC) en lugar de xrdp, consulte el artículo [Cómo instalar una GUI en mi instancia Amazon EC2](https://repost.aws/knowledge-center/ec2-linux-2-install-gui) que ejecuta Knowledge Center. AL2 AWS 

## Requisito previo
<a name="al2-mate-configure-prerequisite"></a>

Para ejecutar los comandos que se muestran en este tema, debe instalar el AWS Command Line Interface (AWS CLI) o AWS Tools for Windows PowerShell y configurar su AWS perfil.

**Opciones**

1. Instale el AWS CLI : para obtener más información, consulte [Instalación AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-set-up.html) y [conceptos básicos de configuración](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html) en la *Guía del AWS Command Line Interface usuario*.

1. Instalación de las herramientas para Windows PowerShell : para obtener más información, consulte [Instalación de las](https://docs.aws.amazon.com/powershell/latest/userguide/pstools-getting-set-up.html) credenciales AWS Tools for Windows PowerShell y [las credenciales compartidas](https://docs.aws.amazon.com/powershell/latest/userguide/shared-credentials-in-aws-powershell.html) en la *Guía del Herramientas de AWS para PowerShell usuario*.

**sugerencia**  
Como alternativa a realizar una instalación completa del AWS CLI, puede utilizar [AWS CloudShell](https://docs.aws.amazon.com/cloudshell/latest/userguide/welcome.html)un shell preautenticado y basado en un navegador que se inicie directamente desde el. Consola de administración de AWS Comprueba si es [compatible Regiones de AWS](https://docs.aws.amazon.com/cloudshell/latest/userguide/supported-aws-regions.html) para asegurarte de que está disponible en la región en la que trabajas.

## Configurar la conexión de RDP
<a name="al2-mate-configure-connection"></a>

Siga estos pasos para configurar una conexión de Protocolo de Escritorio Remoto (RDP) desde el equipo local a una instancia AL2 que ejecuta el entorno de escritorio MATE.

1. Para obtener el ID de la AMI AL2 que incluye MATE en el nombre de la AMI, puede utilizar el comando [describe-images](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ec2/describe-images.html) de la herramienta de línea de comandos local. Si no ha instalado las herramientas de línea de comandos, puede realizar la siguiente consulta directamente desde una sesión. AWS CloudShell Para obtener información sobre cómo iniciar una sesión de shell desde CloudShell, consulte [Primeros pasos con AWS CloudShell](https://docs.aws.amazon.com/cloudshell/latest/userguide/getting-started.html). En la consola de Amazon EC2, puede encontrar la AMI que incluye MATE iniciando una instancia y luego ingresando `MATE` en la barra de búsqueda de AMI. El AL2 cuadro de inicio rápido con MATE preinstalado aparecerá en los resultados de la búsqueda.

   ```
   aws ec2 describe-images --filters "Name=name,Values=amzn2*MATE*" --query "Images[*].[ImageId,Name,Description]"
   [
       [
           "ami-0123example0abc12",
           "amzn2-x86_64-MATEDE_DOTNET-2020.12.04",
           ".NET Core 5.0, Mono 6.12, PowerShell 7.1, and MATE DE pre-installed to run your .NET applications on Amazon Linux 2 with Long Term Support (LTS)."
       ],
       [
           "ami-0456example0def34",
           "amzn2-x86_64-MATEDE_DOTNET-2020.04.14",
           "Amazon Linux 2 with .Net Core, PowerShell, Mono, and MATE Desktop Environment"
       ]
   ]
   ```

   Elija la AMI que sea adecuada para su uso.

1. Inicie una instancia de EC2 con la AMI del paso anterior. Configure el grupo de seguridad para permitir el tráfico TCP entrante al puerto 3389. Para obtener más información acerca de la configuración de los grupos de seguridad, consulte [Grupos de seguridad de su VPC](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html). Esta configuración le permite utilizar un cliente RDP para conectarse a la instancia.

1. Conéctese a la instancia mediante [SSH](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/connect-linux-inst-ssh.html).

1. Actualice el software y el kernel de la instancia.

   ```
   [ec2-user ~]$ sudo yum update
   ```

   Después de que la actualización se complete, reinicie la instancia para asegurarse de que está usando los paquetes y las bibliotecas más recientes de la actualización; las actualizaciones del kernel no se cargan hasta que se lleva a cabo otro reinicio.

   ```
   [ec2-user ~]$ sudo reboot
   ```

1. Vuelva a conectarse a la instancia y ejecute el siguiente comando en la instancia de Linux para establecer la contraseña para `ec2-user`.

   ```
   [ec2-user ~]$ sudo passwd ec2-user
   ```

1. Instale el certificado y la clave.

   Si ya tiene un certificado y una clave, cópielos en el directorio `/etc/xrdp/` de la siguiente manera:
   + Certificado: `/etc/xrdp/cert.pem`
   + Clave: `/etc/xrdp/key.pem`

   Si no tiene un certificado ni una clave, utilice el siguiente comando para generarlos en el directorio `/etc/xrdp`.

   ```
   $ sudo openssl req -x509 -sha384 -newkey rsa:3072 -nodes -keyout /etc/xrdp/key.pem -out /etc/xrdp/cert.pem -days 365
   ```
**nota**  
Este comando genera un certificado válido durante 365 días.

1. Abra un cliente RDP en el equipo desde el que se conectará a la instancia (por ejemplo, Conexión a escritorio remoto en un ordenador con Microsoft Windows). Escriba `ec2-user` como nombre de usuario e introduzca la contraseña que estableció en el paso anterior.

**Deshabilitar `xrdp` en la instancia Amazon EC2**  
Puede deshabilitar `xrdp` en cualquier momento al ejecutar uno de los siguientes comandos en la instancia de Linux. Los siguientes comandos no afectan la capacidad de usar MATE con un servidor X11.

```
[ec2-user ~]$ sudo systemctl disable xrdp
```

```
[ec2-user ~]$ sudo systemctl stop xrdp
```

**Habilitar `xrdp` en la instancia Amazon EC2**  
Para volver a habilitarlo y `xrdp` poder conectarse a la AL2 instancia que ejecuta el entorno de escritorio MATE, ejecute uno de los siguientes comandos en la instancia de Linux.

```
[ec2-user ~]$ sudo systemctl enable xrdp
```

```
[ec2-user ~]$ sudo systemctl start xrdp
```

# AL2 Tutoriales
<a name="al2-tutorials"></a>

 Los siguientes tutoriales le muestran cómo realizar tareas comunes con instancias de Amazon EC2 en ejecución. AL2 Para obtener tutoriales en video, consulte [Vídeos y laboratorios instructivos de AWS](https://www.aws.training/). 

Para AL2023 obtener instrucciones, consulte [los tutoriales](https://docs.aws.amazon.com/linux/al2023/ug/tutorials-al2023.html) de la *Guía del usuario de Amazon Linux 2023*.

**Topics**
+ [Tutorial: Instale un servidor LAMP en AL2](ec2-lamp-amazon-linux-2.md)
+ [Tutorial: Configurar SSL/TLS en AL2](SSL-on-amazon-linux-2.md)
+ [Tutorial: aloje un WordPress blog en AL2](hosting-wordpress.md)

# Tutorial: Instale un servidor LAMP en AL2
<a name="ec2-lamp-amazon-linux-2"></a>

Los siguientes procedimientos le ayudan a instalar un servidor web Apache compatible con PHP y [MariaDB](https://mariadb.org/about/) (una bifurcación de MySQL desarrollada por la comunidad) AL2 en su instancia (a veces denominada servidor web LAMP o pila LAMP). Puede utilizar este servidor para alojar un sitio web estático o implementar una aplicación PHP dinámica que lea y escriba información en una base de datos.

**importante**  
Si está intentando configurar un servidor web LAMP en una distribución diferente, como Ubuntu o Red Hat Enterprise Linux, este tutorial no funcionará. Para ello AL2023, consulte [Instalar un servidor LAMP en](https://docs.aws.amazon.com//linux/al2023/ug/ec2-lamp-amazon-linux-2023.html). AL2023 Para Ubuntu, consulte la siguiente documentación de la comunidad de Ubuntu: [ApacheMySQLPHP](https://help.ubuntu.com/community/ApacheMySQLPHP). Para otras distribuciones, consulte su documentación específica.

**Opción: completar este tutorial con la automatización**  
Para completar este tutorial utilizando la AWS Systems Manager automatización en lugar de las siguientes tareas, ejecute el [AWS documento Docs-Install - ALAMPServer](https://console.aws.amazon.com/systems-manager/automation/execute/AWSDocs-InstallALAMPServer-AL2) Automation. AL2

**Topics**
+ [Paso 1: Preparar el servidor LAMP](#prepare-lamp-server)
+ [Paso 2: Probar el servidor LAMP](#test-lamp-server)
+ [Paso 3: Proteger el servidor de base de datos](#secure-mariadb-lamp-server)
+ [Paso 4: Instalación (opcional) phpMyAdmin](#install-phpmyadmin-lamp-server)
+ [Solución de problemas](#lamp-troubleshooting)
+ [Temas relacionados](#lamp-more-info)

## Paso 1: Preparar el servidor LAMP
<a name="prepare-lamp-server"></a>

**Requisitos previos**
+ En este tutorial se supone que ya ha lanzado una nueva instancia con AL2 un nombre de DNS público al que se pueda acceder desde Internet. Para obtener más información, consulte [Lanzar una instancia](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-instance-wizard.html) en la *Guía del usuario de Amazon EC2*. También debe haber configurado el grupo de seguridad para que permita las conexiones SSH (puerto 22), HTTP (puerto 80) y HTTPS (puerto 443). Para obtener más información sobre estos requisitos previos, consulte [las reglas de los grupos de seguridad](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-group-rules.html) en la Guía del *usuario de Amazon EC2*.
+ El siguiente procedimiento instala la última versión de PHP disponible AL2 actualmente. `php8.2` Si tiene previsto usar otras aplicaciones de PHP diferentes a las que se indican en este tutorial, debe comprobar su compatibilidad con `php8.2`.<a name="install_apache-2"></a>

**Para preparar el servidor LAMP**

1. [Conéctese a la instancia](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/connect-to-linux-instance.html).

1. Para asegurarse de que todos los paquetes de software están actualizados, realice una actualización rápida del software en la instancia. Este proceso puede durar unos minutos, pero es importante realizarlo para asegurarse de que tiene las actualizaciones de seguridad y las correcciones de errores más recientes.

   La opción `-y` instala las actualizaciones sin necesidad de confirmación. Si le gustaría examinar las actualizaciones antes de la instalación, puede omitir esta opción.

   ```
   [ec2-user ~]$ sudo yum update -y
   ```

1. Instale los repositorios de Amazon Linux Extras `mariadb10.5` para obtener la versión más recientes del paquete MariaDB.

   ```
   [ec2-user ~]$ sudo amazon-linux-extras install mariadb10.5
   ```

   Si recibe el error que indica `sudo: amazon-linux-extras: command not found`, entonces la instancia no se lanzó con una AMI; de Amazon Linux 2 (quizás está utilizando la Amazon Linux AMI en su lugar). Puede ver la versión de Amazon Linux usando el comando siguiente:

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

1. Instale los repositorios de `php8.2` Amazon Linux Extras para obtener la última versión del PHP paquete. AL2

   ```
   [ec2-user ~]$ sudo amazon-linux-extras install php8.2
   ```

1. Ahora que la instancia está actualizada, puede instalar el servidor web Apache, MariaDB y los paquetes de software PHP. Utilice el comando yum install para instalar varios paquetes de software y todas las dependencias relacionadas al mismo tiempo.

   ```
   [ec2-user ~]$ sudo yum install -y httpd
   ```

   Puede ver las versiones actuales de estos paquetes mediante el comando siguiente:

   ```
   yum info package_name
   ```

1. Inicie el servidor web Apache.

   ```
   [ec2-user ~]$ sudo systemctl start httpd
   ```

1.  Utilice el comando **systemctl** para configurar el servidor web Apache de forma que se inicie cada vez que arranque el sistema. 

   ```
   [ec2-user ~]$ sudo systemctl enable httpd
   ```

   Puede verificar que **httpd** está activo ejecutando el siguiente comando:

   ```
   [ec2-user ~]$ sudo systemctl is-enabled httpd
   ```

1. Si aún no lo ha hecho, añada una regla de seguridad para permitir las conexiones HTTP entrantes (puerto 80) con la instancia. De forma predeterminada, se configuró un grupo de ***N*seguridad launch-wizard** para la instancia durante la inicialización. Este grupo contiene una sola regla para permitir las conexiones SSH. 

   1. Abra la consola de Amazon EC2 en [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/).

   1. Elija **Instances (Instancias)** y seleccione la instancia.

   1. En la pestaña **Security (Seguridad)**, consulte las reglas de entrada. Debería ver la siguiente regla:

      ```
      Port range   Protocol     Source
      22           tcp          0.0.0.0/0
      ```
**aviso**  
El uso `0.0.0.0/0` permite que todas las IPv4 direcciones accedan a la instancia mediante SSH. Esto 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 se autoriza el acceso a la instancia a una dirección IP o a un rango de direcciones IP específicas.

   1. Elija el vínculo para el grupo de seguridad. Con los procedimientos que se describen en [Añadir reglas a un grupo de seguridad](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/working-with-security-groups.html#adding-security-group-rule), añada una nueva regla de seguridad entrante con los siguientes valores:
      + **Tipo**: HTTP
      + **Protocolo**: TCP
      + **Rango de puertos**: 80
      + **Origen**: personalizado

1. Pruebe el servidor web. En un navegador web, escriba la dirección DNS pública (o la dirección IP pública) de la instancia. Si no hay ningún contenido en `/var/www/html`, debería aparecer la página de prueba de Apache. Puede obtener el DNS público de la instancia con la consola de Amazon EC2 (compruebe la columna **Public DNS (DNS pública)**; si está oculta, elija el icono con forma de engranaje, **Show/Hide Columns (Mostrar/ocultar columnas)** y elija **Public DNS (DNS pública)**).

   Compruebe que el grupo de seguridad de la instancia contenga una regla para permitir el tráfico HTTP en el puerto 80. Para obtener más información, consulte [Agregar reglas al grupo de seguridad](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/working-with-security-groups.html#adding-security-group-rule).
**importante**  
Si no utiliza Amazon Linux, es posible que también tenga que configurar el firewall en su instancia para permitir estas conexiones. Para obtener más información acerca de cómo configurar el firewall, consulte la documentación de su distribución específica.  
![\[La prueba del servidor muestra la página de prueba de Apache.\]](http://docs.aws.amazon.com/es_es/linux/al2/ug/images/apache_test_page_al2_2.4.png)

Apache **httpd** sirve archivos que se guardan en un directorio denominado raíz de documentos de Apache. La raíz de documentos de Apache de Amazon Linux es `/var/www/html`, que es propiedad del directorio raíz de manera predeterminada.

Para permitir que la cuenta `ec2-user` manipule archivos de este directorio, debe modificar la propiedad y los permisos del directorio. 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.<a name="setting-file-permissions-2"></a>

**Para establecer permisos de archivo**

1. Añada el usuario (en este caso, el usuario `ec2-user`) al grupo `apache`.

   ```
   [ec2-user ~]$ sudo usermod -a -G apache ec2-user
   ```

1. Cierre sesión, luego vuelva a iniciarla para elegir el nuevo grupo y, a continuación, verifique si pertenece a este.

   1. Cierre sesión (utilice el comando **exit** o cierre la ventana del terminal):

      ```
      [ec2-user ~]$ exit
      ```

   1. Para verificar si pertenece al grupo `apache`, vuelva a conectarse a la instancia y, entonces, ejecute el siguiente comando:

      ```
      [ec2-user ~]$ groups
      ec2-user adm wheel apache systemd-journal
      ```

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

   ```
   [ec2-user ~]$ sudo chown -R ec2-user:apache /var/www
   ```

1. Para agregar permisos de escritura de grupo y establecer el ID de grupo en futuros subdirectorios, cambie los permisos del directorio `/var/www` y sus subdirectorios.

   ```
   [ec2-user ~]$ sudo chmod 2775 /var/www && find /var/www -type d -exec sudo chmod 2775 {} \;
   ```

1. Para agregar permisos de escritura de grupo, cambie recursivamente los permisos de archivo de `/var/www` y sus subdirectorios:

   ```
   [ec2-user ~]$ find /var/www -type f -exec sudo chmod 0664 {} \;
   ```

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

**Para proteger el servidor web (opcional)**  
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 mediante un navegador web, lo URLs que visita, el contenido de las páginas web que recibe y el contenido (incluidas las contraseñas) de cualquier formulario HTML que envíe son visibles para los intrusos en cualquier punto de la red. La práctica recomendada para proteger el servidor web es instalar soporte para HTTPS (HTTP seguro), que protege los datos con cifrado SSL/TLS.

Para obtener información sobre la habilitación de HTTPS en su servidor, consulte [Tutorial: Configurar SSL/TLS en AL2](SSL-on-amazon-linux-2.md).

## Paso 2: Probar el servidor LAMP
<a name="test-lamp-server"></a>

Si el servidor está instalado y en funcionamiento, y tiene establecidos correctamente los permisos de archivos, la cuenta `ec2-user` debería poder crear un archivo PHP en el directorio `/var/www/html`, que está disponible en Internet.

**Para probar el servidor LAMP**

1. Cree un archivo PHP en la raíz de documentos de Apache.

   ```
   [ec2-user ~]$ echo "<?php phpinfo(); ?>" > /var/www/html/phpinfo.php
   ```

   Si recibe el error "Permiso denegado" al intentar ejecutar este comando, intente cerrar sesión e iniciarla de nuevo para actualizar los permisos de grupo correctos que ha configurado en [Para establecer permisos de archivo](#setting-file-permissions-2).

1. En un navegador web, escriba la URL del archivo que acaba de crear. Esta URL es la dirección DNS pública de la instancia seguida de una barra diagonal y el nombre del archivo. Por ejemplo:

   ```
   http://my.public.dns.amazonaws.com/phpinfo.php
   ```

   Debería ver la página de información PHP.:  
![\[La prueba del servidor LAMP muestra la página de información de PHP.\]](http://docs.aws.amazon.com/es_es/linux/al2/ug/images/phpinfo7.2.10.png)

   Si no ve esta página, compruebe que el archivo `/var/www/html/phpinfo.php` se ha creado correctamente en el paso anterior. También puede verificar que todos los paquetes necesarios se han instalado con el comando siguiente:

   ```
   [ec2-user ~]$ sudo yum list installed httpd mariadb-server php-mysqlnd
   ```

   Si alguno de los paquetes requeridos no aparece en la salida, instálelo con el comando **sudo yum install *package***. Además, verifique que los extras `php7.2` y `lamp-mariadb10.2-php7.2` estén habilitados en la salida del comando **amazon-linux-extras**.

1. Elimine el archivo `phpinfo.php`. Aunque esta información puede resultar útil, no se debe difundir por Internet por motivos de seguridad.

   ```
   [ec2-user ~]$ rm /var/www/html/phpinfo.php
   ```

Ahora ya tiene un servidor web LAMP totalmente funcional. Si añade contenido a la raíz del documento de Apache en `/var/www/html`, debería poder ver ese contenido en la dirección DNS pública de su instancia. 

## Paso 3: Proteger el servidor de base de datos
<a name="secure-mariadb-lamp-server"></a>

La instalación predeterminada del servidor MariaDB posee varias características que son perfectas para las pruebas y el desarrollo, pero que se deben deshabilitar o eliminar para los servidores de producción. El comando **mysql\$1secure\$1installation** le guía a través del proceso de configuración de una contraseña raíz y de eliminación de las características que no son seguras de la instalación. Aunque no tenga pensado utilizar el servidor MariaDB, recomendamos realizar este procedimiento.<a name="securing-maria-db"></a>

**Para proteger el servidor MariaDB**

1. Inicie el servidor MariaDB.

   ```
   [ec2-user ~]$ sudo systemctl start mariadb
   ```

1. Ejecute **mysql\$1secure\$1installation**.

   ```
   [ec2-user ~]$ sudo mysql_secure_installation
   ```

   1. Cuando se le solicite, escriba una contraseña para la cuenta raíz.

      1. Escriba la contraseña raíz actual. De manera predeterminada, la cuenta raíz no tiene configurada ninguna contraseña. Pulse Intro.

      1. Escriba **Y** para configurar una contraseña y escriba una contraseña segura dos veces. Para obtener más información sobre cómo crear una contraseña segura, consulte. [https://identitysafe.norton.com/password-generator/](https://identitysafe.norton.com/password-generator/) Procure guardar esta contraseña en un lugar seguro.

         La configuración de una contraseña raíz para MariaDB es solo la medida más básica para proteger la base de datos. Cuando se crea o se instala una aplicación basada en base de datos, normalmente se crea un usuario del servicio de la base de datos para esa aplicación y se evita usar la cuenta raíz para cualquier cosa que no sea la administración de la base de datos. 

   1. Escriba **Y** para eliminar las cuentas de usuarios anónimos.

   1. Escriba **Y** para deshabilitar el inicio de sesión raíz remoto.

   1. Escriba **Y** para eliminar la base de datos de prueba.

   1. Escriba **Y** para volver a cargar las tablas de privilegios y guardar los cambios.

1. (Opcional) Si no tiene pensado utilizar el servidor MariaDB de inmediato, deténgalo. Puede reiniciarlo cuando lo necesite.

   ```
   [ec2-user ~]$ sudo systemctl stop mariadb
   ```

1. (Opcional) Si desea que el servidor MariaDB se inicie cada vez que arranque el sistema, escriba el siguiente comando.

   ```
   [ec2-user ~]$ sudo systemctl enable mariadb
   ```

## Paso 4: Instalación (opcional) phpMyAdmin
<a name="install-phpmyadmin-lamp-server"></a>

[phpMyAdmin](https://www.phpmyadmin.net/)es una herramienta de administración de bases de datos basada en la web que puede utilizar para ver y editar las bases de datos MySQL de su instancia EC2. Siga estos pasos para instalar y configurar `phpMyAdmin` en la instancia de Amazon Linux.

**importante**  
No recomendamos utilizarla `phpMyAdmin` para acceder a un servidor LAMP a menos que esté habilitado SSL/TLS en Apache; de lo contrario, la contraseña de administrador de la base de datos y otros datos se transmitirán de forma insegura a través de Internet. Para ver las recomendaciones de seguridad de los desarrolladores, consulte [Proteger la phpMyAdmin instalación](https://docs.phpmyadmin.net/en/latest/setup.html#securing-your-phpmyadmin-installation). Para obtener información general sobre asegurar un servidor web en una instancia de EC2, consulte [Tutorial: Configurar SSL/TLS en AL2](SSL-on-amazon-linux-2.md).

**Para instalar phpMyAdmin**

1. Instale las dependencias requeridas.

   ```
   [ec2-user ~]$ sudo yum install php-mbstring php-xml -y
   ```

1. Reinicie Apache.

   ```
   [ec2-user ~]$ sudo systemctl restart httpd
   ```

1. Reinicie `php-fpm`.

   ```
   [ec2-user ~]$ sudo systemctl restart php-fpm
   ```

1. Navegue a la raíz de documentos de Apache: `/var/www/html`.

   ```
   [ec2-user ~]$ cd /var/www/html
   ```

1. Seleccione un paquete fuente para la phpMyAdmin versión más reciente en [https://www.phpmyadmin.net/downloads](https://www.phpmyadmin.net/downloads). Para descargar el archivo directamente a la instancia, copie el link y péguelo en un comando **wget** como el de este ejemplo:

   ```
   [ec2-user html]$ wget https://www.phpmyadmin.net/downloads/phpMyAdmin-latest-all-languages.tar.gz
   ```

1. Cree la carpeta `phpMyAdmin` y extraiga aquí el paquete con el comando siguiente:

   ```
   [ec2-user html]$ mkdir phpMyAdmin && tar -xvzf phpMyAdmin-latest-all-languages.tar.gz -C phpMyAdmin --strip-components 1
   ```

1. Elimine el *phpMyAdmin-latest-all-languages.tar.gz* archivo tar.

   ```
   [ec2-user html]$ rm phpMyAdmin-latest-all-languages.tar.gz
   ```

1.  (Opcional) Si el servidor MySQL no está en ejecución, inícielo ahora.

   ```
   [ec2-user ~]$ sudo systemctl start mariadb
   ```

1. En un navegador web, escriba la URL de la phpMyAdmin instalación. Esta URL es la dirección DNS pública (o la dirección IP pública) de la instancia, seguida de una barra inclinada y el nombre del directorio de instalación. Por ejemplo:

   ```
   http://my.public.dns.amazonaws.com/phpMyAdmin
   ```

   Debería ver la página de phpMyAdmin inicio de sesión:  
![\[El resultado de escribir la URL de la phpMyAdmin instalación es la pantalla de inicio de phpMyAdmin sesión.\]](http://docs.aws.amazon.com/es_es/linux/al2/ug/images/phpmyadmin_login.png)

1. Inicie sesión en la phpMyAdmin instalación con el nombre `root` de usuario y la contraseña root de MySQL que creó anteriormente.

   Antes de poner en servicio la instalación, debe configurarla. Le sugerimos que comience con la creación manual del archivo de configuración de la siguiente manera:

   1. Para comenzar con un archivo de configuración mínimo, utilice su editor de texto favorito para crear un archivo nuevo y luego, copie el contenido de `config.sample.inc.php` en él.

   1. Guarde el archivo como `config.inc.php` en el phpMyAdmin directorio que lo contiene`index.php`.

   1. Consulte las instrucciones posteriores a la creación del archivo en la sección [Uso del script de configuración](https://docs.phpmyadmin.net/en/latest/setup.html#using-the-setup-script) de las instrucciones de phpMyAdmin instalación para cualquier configuración adicional.

    Para obtener información sobre su uso phpMyAdmin, consulte la [Guía del phpMyAdmin usuario](http://docs.phpmyadmin.net/en/latest/user.html).

## Solución de problemas
<a name="lamp-troubleshooting"></a>

En esta sección, se ofrecen sugerencias para resolver los problemas comunes que puede encontrarse al configurar un servidor LAMP nuevo. 

### No puedo conectarme a mi servidor mediante un navegador web.
<a name="is_apache_on"></a>

Realice las siguientes verificaciones para ver si el servidor web Apache funciona y se puede obtener acceso a él.
+ **¿El servidor web funciona?**

  Puede verificar que **httpd** está activo ejecutando el siguiente comando:

  ```
  [ec2-user ~]$ sudo systemctl is-enabled httpd
  ```

  Si el proceso **httpd** no se está ejecutando, repita los pasos que se describen en [Para preparar el servidor LAMP](#install_apache-2).
+ **¿El firewall está configurado correctamente?**

  Compruebe que el grupo de seguridad de la instancia contenga una regla para permitir el tráfico HTTP en el puerto 80. Para obtener más información, consulte [Agregar reglas al grupo de seguridad](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/working-with-security-groups.html#adding-security-group-rule).

### No puedo conectarme a mi servidor mediante HTTPS.
<a name="is-https-enabled"></a>

Realice las siguientes verificaciones para verificar si su servidor web Apache está configurado para admitir HTTPS.
+ **¿El servidor web está configurado correctamente?**

  Después de instalar Apache, el servidor se configura para el tráfico HTTP. Para admitir HTTPS, habilite TLS en el servidor e instale un certificado SSL. Para obtener información, consulte [Tutorial: Configurar SSL/TLS en AL2](SSL-on-amazon-linux-2.md).
+ **¿El firewall está configurado correctamente?**

  Verifique que el grupo de seguridad de la instancia contiene una regla para permitir el tráfico HTTPS en el puerto 443. Para obtener más información, consulte [Agregar reglas a un grupo de seguridad](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/working-with-security-groups.html#adding-security-group-rule).

## Temas relacionados
<a name="lamp-more-info"></a>

Para obtener más información sobre la transferencia de archivos a la instancia o la instalación de un WordPress blog en el servidor web, consulte la siguiente documentación:
+ [Transfiera archivos a su instancia de Linux mediante WinSCP](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/putty.html#Transfer_WinSCP).
+ [Transfiera archivos a instancias de Linux mediante un SCP cliente](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/connect-linux-inst-ssh.html#linux-file-transfer-scp).
+ [Tutorial: aloje un WordPress blog en AL2](hosting-wordpress.md)

Para obtener más información acerca de los comandos y el software que se utilizan en este tutorial, visite las siguientes páginas web:
+ Servidor web Apache: [http://httpd.apache.org/](http://httpd.apache.org/)
+ Servidor de bases de datos MariaDB: [https://mariadb.org/](https://mariadb.org/)
+ Lenguaje de programación PHP: [http://php.net/](http://php.net/)
+ El `chmod` comando: [https://en.wikipedia. org/wiki/Chmod](https://en.wikipedia.org/wiki/Chmod)
+ El `chown` comando: [https://en.wikipedia. org/wiki/Chown](https://en.wikipedia.org/wiki/Chown)

Para obtener más información acerca del registro de un nombre de dominio para el servidor web o la transferencia de un nombre de dominio existente a este host, consulte el tema [Creación y migración de dominios y subdominios a Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/creating-migrating.html) en la *Guía para desarrolladores de Amazon Route 53*.

# Tutorial: Configurar SSL/TLS en AL2
<a name="SSL-on-amazon-linux-2"></a>

 Layer/Transport Secure Sockets Layer Security (SSL/TLS) creates an encrypted channel between a web server and web client that protects data in transit from being eavesdropped on. This tutorial explains how to add support manually for SSL/TLSen una instancia EC2 con AL2 un servidor web Apache). En este tutorial, se presupone que no está utilizando un balanceador de carga. Si utiliza Elastic Load Balancing, puede elegir configurar la descarga SSL en el balanceador de carga, mediante un certificado de [AWS Certificate Manager](https://aws.amazon.com/certificate-manager/) en su lugar.

Por motivos históricos, el cifrado web se suele denominar simplemente SSL. Aunque los navegadores web siguen admitiendo SSL, el protocolo que lo sustituye, TLS, es menos vulnerable a los ataques. AL2 deshabilita el soporte del lado del servidos para todas las versiones de SSL de forma predeterminada. [Organismos de estándares de seguridad](https://www.ssl.com/article/deprecating-early-tls/) consideran que TLS 1.0 no es seguro. TLS 1.0 y TLS 1.1 han quedado formalmente [obsoletos](https://datatracker.ietf.org/doc/rfc8996/) en marzo de 2021. Este tutorial contiene asesoramiento basado exclusivamente en la habilitación de TLS 1.2. TLS 1.3 se finalizó en 2018 y estará disponible AL2 siempre que se admita y habilite la biblioteca TLS subyacente (OpenSSL en este tutorial). [Los clientes deben ser compatibles con TLS 1.2 o una versión posterior antes del 28 de junio de 2023](https://aws.amazon.com/blogs/security/tls-1-2-required-for-aws-endpoints/). Para obtener más información sobre el estándar de cifrado actualizado, consulte [RFC 7568](https://tools.ietf.org/html/rfc7568) y [RFC 8446](https://tools.ietf.org/html/rfc8446).

Este tutorial se refiere a un cifrado web moderno tan simple como TLS.

**importante**  
Estos procedimientos están diseñados para usarse con AL2. También se supone que comienza con una instancia Amazon EC2 nueva. Si está intentando configurar una instancia EC2 que ejecute una distribución diferente o una instancia que ejecute una versión anterior de, es posible que algunos de AL2 los procedimientos de este tutorial no funcionen. Para Ubuntu, consulte la siguiente documentación de la comunidad: [OpenSSL on Ubuntu](https://help.ubuntu.com/community/OpenSSL) (OpenSSL en Ubuntu). Para Red Hat Enterprise Linux, consulte lo siguiente: [Configuración del servidor web HTTP Apache](https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html/deploying_different_types_of_servers/setting-apache-http-server_deploying-different-types-of-servers). Para otras distribuciones, consulte su documentación específica.

**nota**  
Como alternativa, puede usar AWS Certificate Manager (ACM) para los enclaves de AWS Nitro, que es una aplicación de enclave que le permite usar SSL/TLS certificados públicos y privados con sus aplicaciones web y servidores que se ejecutan en instancias de Amazon EC2 con Nitro Enclaves. AWS Nitro Enclaves es una capacidad de Amazon EC2 que permite la creación de entornos informáticos aislados para proteger y procesar de forma segura datos altamente confidenciales, SSL/TLS como certificados y claves privadas.  
ACM para Nitro Enclaves funciona con **nginx** ejecutándose en su instancia de Amazon EC2 Linux para crear claves privadas, distribuir certificados y claves privadas y para administrar las renovaciones de certificados.  
Para utilizar ACM para Nitro Enclaves, debe utilizar una instancia Linux habilitada para enclave.  
Para obtener más información, consulte [¿Qué es AWS](https://docs.aws.amazon.com/enclaves/latest/user/nitro-enclave.html) Nitro Enclaves? y [AWS Certificate Manager para ver Nitro Enclaves](https://docs.aws.amazon.com/enclaves/latest/user/nitro-enclave-refapp.html) en la Guía del usuario de *AWS Nitro* Enclaves.

**Topics**
+ [Requisitos previos](#ssl_prereq)
+ [Paso 1: Habilitar TLS en el servidor](#ssl_enable)
+ [Paso 2: Obtener un certificado firmado por una CA](#ssl_certificate)
+ [Paso 3: Probar y reforzar la configuración de seguridad](#ssl_test)
+ [Solución de problemas](#troubleshooting)

## Requisitos previos
<a name="ssl_prereq"></a>

Siga estos pasos antes de comenzar este tutorial:
+ Lance una AL2 instancia respaldada por Amazon EBS. Para obtener más información, consulte [Lanzar una instancia](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-instance-wizard.html) en la *Guía del usuario de Amazon EC2*.
+ Configure los grupos de seguridad para que la instancia acepte conexiones en los siguientes puertos TCP: 
  + SSH (puerto 22)
  + HTTP (puerto 80)
  + HTTPS (puerto 443)

  Para obtener más información, consulte [Reglas del grupo de seguridad](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-group-rules.html) en la *Guía del usuario de Amazon EC2*.
+ Instale el servidor web Apache. Para step-by-step obtener instrucciones, consulte el [tutorial: Instalación de un servidor web LAMP en AL2](ec2-lamp-amazon-linux-2.md). Solo es necesario el paquete httpd y sus dependencias; por lo que puede omitir las instrucciones relacionadas con PHP y MariaDB.
+ Para identificar y autenticar sitios web, la infraestructura de clave pública (PKI) de TLS se basa en el sistema de nombres de dominio (DNS). Si tiene pensado utilizar la instancia de EC2 para alojar un sitio web público, tiene que registrar un nombre de dominio para el servidor web o transferir un nombre de dominio existente al host de Amazon EC2. Para hacer esto, hay disponibles numerosos servicios de registro de dominios y alojamiento de DNS de terceros o bien puede utilizar [Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/Welcome.html). 

## Paso 1: Habilitar TLS en el servidor
<a name="ssl_enable"></a>

**Opción: completar este tutorial con la automatización**  
Para completar este tutorial utilizando la AWS Systems Manager automatización en lugar de las siguientes tareas, ejecute el [documento de automatización](https://console.aws.amazon.com/systems-manager/documents/AWSDocs-Configure-SSL-TLS-AL2/).

Este procedimiento le guiará por el proceso de configurar el TLS AL2 con un certificado digital autofirmado. 

**nota**  
Se puede utilizar un certificado autofirmado para las pruebas, pero no para la producción. Si expone a Internet su certificado autofirmado, los visitantes del sitio recibirán advertencias de seguridad. 

**Para habilitar TLS en un servidor**

1. [Conéctese a su instancia](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/connect-to-linux-instance.html) y confirme que Apache se está ejecutando.

   ```
   [ec2-user ~]$ sudo systemctl is-enabled httpd
   ```

   Si el valor devuelto no es "enabled", inicie Apache y configúrelo para que se inicie cada vez que arranque el sistema.

   ```
   [ec2-user ~]$ sudo systemctl start httpd && sudo systemctl enable httpd
   ```

1. Para asegurarse de que todos los paquetes de software están actualizados, realice una actualización rápida del software en la instancia. Este proceso puede durar unos minutos, pero es importante realizarlo para asegurarse de que tiene las actualizaciones de seguridad y las correcciones de errores más recientes.
**nota**  
La opción `-y` instala las actualizaciones sin necesidad de confirmación. Si le gustaría examinar las actualizaciones antes de la instalación, puede omitir esta opción.

   ```
   [ec2-user ~]$ sudo yum update -y
   ```

1. Ahora que la instancia está actualizada y admite TLS instalando el módulo de Apache `mod_ssl`.

   ```
   [ec2-user ~]$ sudo yum install -y mod_ssl
   ```

   La instancia tiene ahora los archivos siguientes que utiliza para configurar el servidor seguro y crear un certificado para pruebas:
   +  `/etc/httpd/conf.d/ssl.conf` 

     El archivo de configuración para mod\$1ssl. Contiene *directivas* que le indican a Apache donde encontrar claves de cifrado y certificados, las versiones de protocolo TLS que se permiten y los cifrados que se aceptan. 
   + `/etc/pki/tls/certs/make-dummy-cert`

     Un script para generar un certificado X.509 autofirmado y una clave privada para su host de servidor. Este certificado es útil para probar si Apache está configurado correctamente para utilizar TLS. Dado que no ofrece ninguna prueba de identidad, no se debería utilizar en producción. Si se utiliza en la producción, dispara advertencias en los navegadores web.

1. Ejecute el script para generar un certificado ficticio autofirmado y una clave para pruebas.

   ```
   [ec2-user ~]$ cd /etc/pki/tls/certs
   sudo ./make-dummy-cert localhost.crt
   ```

   Esto genera un nuevo archivo `localhost.crt` en el directorio `/etc/pki/tls/certs/`. El nombre de archivo especificado coincide con el valor predeterminado que se ha asignado en la directiva **SSLCertificateFile** en `/etc/httpd/conf.d/ssl.conf`. 

   Este archivo contiene un certificado autofirmado y la clave privada del certificado. Apache requiere que el certificado y la clave estén en formato PEM que consta de caracteres ASCII codificados en Base64 contenidos entre las líneas "BEGIN" y "END", como en el siguiente ejemplo abreviado.

   ```
   -----BEGIN PRIVATE KEY-----
   MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQD2KKx/8Zk94m1q
   3gQMZF9ZN66Ls19+3tHAgQ5Fpo9KJDhzLjOOCI8u1PTcGmAah5kEitCEc0wzmNeo
   BCl0wYR6G0rGaKtK9Dn7CuIjvubtUysVyQoMVPQ97ldeakHWeRMiEJFXg6kZZ0vr
   GvwnKoMh3DlK44D9dX7IDua2PlYx5+eroA+1Lqf32ZSaAO0bBIMIYTHigwbHMZoT
   ...
   56tE7THvH7vOEf4/iUOsIrEzaMaJ0mqkmY1A70qQGQKBgBF3H1qNRNHuyMcPODFs
   27hDzPDinrquSEvoZIggkDMlh2irTiipJ/GhkvTpoQlv0fK/VXw8vSgeaBuhwJvS
   LXU9HvYq0U6O4FgD3nAyB9hI0BE13r1HjUvbjT7moH+RhnNz6eqqdscCS09VtRAo
   4QQvAqOa8UheYeoXLdWcHaLP
   -----END PRIVATE KEY-----                    
   
   -----BEGIN CERTIFICATE-----
   MIIEazCCA1OgAwIBAgICWxQwDQYJKoZIhvcNAQELBQAwgbExCzAJBgNVBAYTAi0t
   MRIwEAYDVQQIDAlTb21lU3RhdGUxETAPBgNVBAcMCFNvbWVDaXR5MRkwFwYDVQQK
   DBBTb21lT3JnYW5pemF0aW9uMR8wHQYDVQQLDBZTb21lT3JnYW5pemF0aW9uYWxV
   bml0MRkwFwYDVQQDDBBpcC0xNzItMzEtMjAtMjM2MSQwIgYJKoZIhvcNAQkBFhVy
   ...
   z5rRUE/XzxRLBZOoWZpNWTXJkQ3uFYH6s/sBwtHpKKZMzOvDedREjNKAvk4ws6F0
   CuIjvubtUysVyQoMVPQ97ldeakHWeRMiEJFXg6kZZ0vrGvwnKoMh3DlK44D9dlU3
   WanXWehT6FiSZvB4sTEXXJN2jdw8g+sHGnZ8zCOsclknYhHrCVD2vnBlZJKSZvak
   3ZazhBxtQSukFMOnWPP2a0DMMFGYUHOd0BQE8sBJxg==
   -----END CERTIFICATE-----
   ```

   Los nombres y las extensiones de los archivos se utilizan simplemente por comodidad y no afectan al funcionamiento. Por ejemplo, puede llamar a un certificado `cert.crt`, `cert.pem`, o cualquier otro nombre de archivo, siempre que la directiva relacionada en el archivo `ssl.conf` utilice el mismo nombre.
**nota**  
Cuando sustituya los archivos TLS predeterminados por sus propios archivos personalizados, asegúrese de que estén en formato PEM. 

1. Abra el archivo `/etc/httpd/conf.d/ssl.conf` con el editor de texto que prefiera (como **vim** o **nano**) como usuario raíz y convierta en comentario la siguiente línea, porque el certificado ficticio autofirmado también contiene la clave. Si no convierte en comentario esta línea antes de completar el siguiente paso, se producirá un error al iniciar el servicio de Apache

   ```
   SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
   ```

1. Reinicie Apache.

   ```
   [ec2-user ~]$ sudo systemctl restart httpd
   ```
**nota**  
Asegúrese de que el puerto 443 de TCP sea accesible en la instancia de EC2, tal y como se ha explicado anteriormente.

1. Ahora el servidor web de Apache debería admitir HTTPS (HTTP seguro) en el puerto 443. Pruébelo escribiendo la dirección IP o el nombre completo de dominio de la instancia de EC2 en la barra URL del navegador con el prefijo **https://**.

   Dado que se va a conectar a un sitio con un certificado de host autofirmado que no es de confianza, es posible que el navegador envíe una serie de advertencias de seguridad. Omita las advertencias y vaya al sitio. 

   Si se abre la página de prueba de Apache predeterminada, eso significa que ha configurado correctamente TLS en el servidor. Ahora todos los datos que pasan entre el navegador y el servidor se cifran.
**nota**  
Para evitar que los visitantes del sitio reciban pantallas de advertencia, tiene que obtener un certificado de confianza firmado por una CA que no solo cifre, sino que también le autentique públicamente como propietario del sitio. 

## Paso 2: Obtener un certificado firmado por una CA
<a name="ssl_certificate"></a>

Puede utilizar el siguiente proceso para obtener un certificado firmado por una CA:
+ Genere una solicitud de firma de certificado (CSR) de una clave privada
+ Envie el CSR a una autoridad de certificación (CA)
+ Obtenga un certificado de host firmado
+ Configure Apache para utilizar el certificado

Un certificado de host TLS X.509 autofirmado es idéntico, desde el punto de vista criptográfico, a un certificado firmado por una CA. La diferencia es social, no matemática. Una CA promete, como mínimo, validar la propiedad de un dominio antes de emitir un certificado para el solicitante. Cada navegador web contiene una lista de las personas en las que el proveedor del navegador CAs confía para ello. Un certificado X.509 consta principalmente de una clave pública, que se corresponde con la clave del servidor privado, y una firma de la CA que está vinculada criptográficamente a la clave pública. Cuando un navegador se conecta a un servidor web a través de HTTPS, el servidor presenta un certificado para que el navegador lo compare con su lista de usuarios de confianza CAs. Si el signatario está en la lista o se puede obtener acceso a él a través de una *cadena de confianza *compuesta por otros signatarios de confianza, el navegador negocia un canal de datos cifrados rápido con el servidor y carga la página. 

Generalmente, los certificados cuestan dinero por el trabajo que supone la validación de las solicitudes, por lo que vale la pena comparar precios. Algunos CAs ofrecen certificados de nivel básico de forma gratuita. El más notable de ellos CAs es el proyecto [Let's Encrypt](https://letsencrypt.org/), que también apoya la automatización del proceso de creación y renovación de certificados. Para obtener más información acerca del uso del certificado Let's Encrypt, consulte [Obtenga Certbot](https://eff-certbot.readthedocs.io/en/stable/install.html).

Si planea ofrecer servicios de calidad comercial, [AWS Certificate Manager](https://docs.aws.amazon.com/acm/latest/userguide/acm-overview.html) es una buena opción.

La clave es hacer que el certificado del host esté subyacente. Desde 2019, grupos del [gobierno](http://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-57pt1r4.pdf) y el [sector](https://cabforum.org/wp-content/uploads/CA-Browser-Forum-BR-1.6.5.pdf) recomiendan utilizar un tamaño mínimo de clave (módulo) de 2048 bits para claves RSA destinadas a proteger documentos hasta 2030. El tamaño de módulo predeterminado generado por OpenSSL es de 2048 bits, lo que es adecuado para su uso AL2 en un certificado firmado por una CA. En el siguiente procedimiento, se proporcionó un paso opcional para aquellos que deseasen una clave personalizada, por ejemplo, una con un módulo mayor o que utilice un algoritmo de cifrado diferente.

**importante**  
Estas instrucciones para adquirir un certificado de host firmado por una CA no funcionan a menos que posea un dominio DNS alojado y registrado.

**Para obtener un certificado firmado por una CA**

1.  [Conéctese](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/connect-to-linux-instance.html) a su instancia y navegue hasta/etc/pki/tls/private/. Este es el directorio donde almacena la clave privada del servidor para TLS. Si prefiere utilizar una clave de host existente para generar el CSR, vaya al paso 3.

1. (Opcional) Genere una nueva clave privada. Estas son algunas ejemplos de configuraciones clave. Cualquiera de las claves resultantes funciona con el servidor web, pero son diferentes en el grado y el tipo de seguridad que implementan.
   + **Ejemplo 1:** cree una clave de host RSA predeterminada. El archivo resultante, **custom.key**, es una clave privada RSA de 2048 bits.

     ```
     [ec2-user ~]$ sudo openssl genrsa -out custom.key
     ```
   + **Ejemplo 2:** cree una clave RSA más segura con un módulo mayor. El archivo resultante, **custom.key**, es una clave privada RSA de 4096 bits.

     ```
     [ec2-user ~]$ sudo openssl genrsa -out custom.key 4096
     ```
   + **Ejemplo 3:** cree una clave RSA cifrada de 4096 bits con protección con contraseña. El archivo resultante, **custom.key**, es una clave privada RSA de 4096 bits cifrada con AES-128.
**importante**  
El cifrado de la clave ofrece mayor seguridad, pero dado que una clave cifrada necesita una contraseña, los servicios que dependen de él no se pueden iniciar automáticamente. Cada vez que utilice esta clave, tiene que proporcionar la contraseña (en el ejemplo anterior "abcde12345") en una conexión SSH.

     ```
     [ec2-user ~]$ sudo openssl genrsa -aes128 -passout pass:abcde12345 -out custom.key 4096
     ```
   + **Ejemplo 4:** cree una clave con un cifrado que no sea RSA. La criptogarfía RSA puede ser relativamente lenta debido al tamaño de sus claves públicas, que se basan en el producto de dos números primos grandes. Sin embargo, es posible crear claves para TLS que utilicen cifrados que no sean RSA. Las claves que están basadas en el cálculo matemático de curvas elípticas son más pequeñas y más rápidas desde el punto de vista informático a la hora de proporcionar un nivel de seguridad equivalente.

     ```
     [ec2-user ~]$ sudo openssl ecparam -name prime256v1 -out custom.key -genkey
     ```

     El resultado es una clave privada de curva elíptica de 256 bits que utiliza prime256v1, una "curva con nombre" que admite OpenSSL. Su seguridad criptográfica es ligeramente mayor que la de una clave RSA de 2048 bits, [de acuerdo con NIST](http://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-57pt1r4.pdf).
**nota**  
No todas CAs ofrecen el mismo nivel de compatibilidad con las elliptic-curve-based claves que con las claves RSA.

   Asegúrese de que la nueva clave privada tenga una propiedad y unos permisos muy restrictivos (owner=root, group=root, solo para el propietario). read/write Los comandos serán como se muestra en el siguiente ejemplo.

   ```
   [ec2-user ~]$ sudo chown root:root custom.key
   [ec2-user ~]$ sudo chmod 600 custom.key
   [ec2-user ~]$ ls -al custom.key
   ```

   Los comandos anteriores devuelven el siguiente resultado.

   ```
   -rw------- root root custom.key
   ```

    Una vez que haya creado y configurado una clave satisfactoria, puede crear una CSR. 

1. Para crear una CSR, utilice su clave preferida. El siguiente ejemplo utiliza **custom.key**.

   ```
   [ec2-user ~]$ sudo openssl req -new -key custom.key -out csr.pem
   ```

   OpenSSL abre un cuadro de diálogo y le pide la información que se muestra en la siguiente tabla. Todos los campos, excepto **Common Name (Nombre común)**, son opcionales para un certificado de host de dominio validado básico.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/linux/al2/ug/SSL-on-amazon-linux-2.html)

   Por último, OpenSSL le solicita una contraseña de comprobación opcional. Esta contraseña solo se aplica a la CSR y a las transacciones entre usted y la CA, así que siga las recomendaciones de la CA a este respecto y el otro campo opcional, es decir, el nombre de empresa opcional. La contraseña de comprobación de CSR no afecta al funcionamiento del servidor.

   El archivo resultante, **csr.pem** contiene la clave pública, la firma digital de la clave pública y los metadatos que ha especificado.

1. Envíe la CSR a una CA. Este proceso suele consistir en abrir el archivo CSR en un editor de texto y copiar el contenido en un formulario web. En este momento, es posible que se le pida que proporcione uno o más nombres alternativos de sujeto (SANs) para incluirlos en el certificado. Si el nombre común es **www.example.com**, **example.com** sería un buen SAN y viceversa. Un visitante de su sitio que introdujese cualquiera de estos nombres no recibiría ningún error de conexión. Si su formulario web de CA lo permite, incluya el nombre común en la lista de SANs. Algunos lo CAs incluyen automáticamente.

   Una vez aprobada su solicitud, recibe un nuevo certificado de host firmado por la CA. Es posible que también tenga que descargar un archivo de *certificado intermedio* que contiene los certificados adicionales necesarios para completar la cadena de confianza de la CA. 
**nota**  
La CA puede enviarle archivos en diversos formatos destinados a diversos fines. Para este tutorial, solo debe utilizar un archivo de certificado en formato PEM, que normalmente (aunque no siempre) está marcado con la extensión de archivo `.pem` o `.crt`. Si no tiene claro qué archivo debe utilizar, abra los archivos con un editor de texto y busque el que contiene uno o varios bloques que comienzan con la siguiente línea.  

   ```
   - - - - -BEGIN CERTIFICATE - - - - - 
   ```
El archivo debería terminar también con la siguiente línea.  

   ```
   - - - -END CERTIFICATE - - - - -
   ```
También puede probar el archivo en la línea de comandos, tal y como se muestra a continuación.  

   ```
   [ec2-user certs]$ openssl x509 -in certificate.crt -text
   ```
Verifique que estas líneas aparecen en el archivo. No utilice archivos que terminen con `.p7b`, `.p7c` o extensiones de archivos similares.

1. Coloque el nuevo certificado firmado por la CA y cualquier certificado intermedio en el directorio `/etc/pki/tls/certs`.
**nota**  
Hay varias formas de cargar el nuevo certificado en la instancia de EC2, pero la más sencilla e informativa consiste en abrir un editor de texto (por ejemplo, vi, nano o notepad) en el equipo local y en la instancia y, a continuación, copiar y pegar el contenido del archivo de uno al otro. Para realizar estas operaciones en la instancia de EC2, necesita permisos de raíz [sudo]. De esta forma, puede ver inmediatamente si hay algún problema con los permisos o las rutas. Procure, no obstante, no añadir más líneas al copiar el contenido o cambiarlo de ninguna forma. 

   Desde el `/etc/pki/tls/certs` directorio, compruebe que la configuración de propiedad, grupo y permisos del archivo coincide con los AL2 valores predeterminados altamente restrictivos (owner=root, group=root, solo para propietario). read/write En el siguiente ejemplo, se muestran los comandos que se utilizarán. 

   ```
   [ec2-user certs]$ sudo chown root:root custom.crt
   [ec2-user certs]$ sudo chmod 600 custom.crt
   [ec2-user certs]$ ls -al custom.crt
   ```

   Estos comandos deberían devolver el siguiente resultado. 

   ```
   -rw------- root root custom.crt
   ```

   Los permisos del archivo de certificado intermedio son menos estrictos (propietario=raíz, grupo=raíz, propietario puede escribir, grupo puede leer, mundo puede leer). En el siguiente ejemplo, se muestran los comandos que se utilizarán. 

   ```
   [ec2-user certs]$ sudo chown root:root intermediate.crt
   [ec2-user certs]$ sudo chmod 644 intermediate.crt
   [ec2-user certs]$ ls -al intermediate.crt
   ```

   Estos comandos deberían devolver el siguiente resultado.

   ```
   -rw-r--r-- root root intermediate.crt
   ```

1. Coloque la clave privada que utilizó para crear la CSR en el directorio `/etc/pki/tls/private/`. 
**nota**  
Hay varias formas de cargar la clave personalizada en la instancia de EC2, pero la más sencilla e informativa consiste en abrir un editor de texto (por ejemplo, vi, nano o notepad) en el equipo local y en la instancia y, a continuación, copiar y pegar el contenido del archivo de uno al otro. Para realizar estas operaciones en la instancia de EC2, necesita permisos de raíz [sudo]. De esta forma, puede ver inmediatamente si hay algún problema con los permisos o las rutas. Procure, no obstante, no añadir más líneas al copiar el contenido o cambiarlo de ninguna forma.

   Desde el `/etc/pki/tls/private` directorio, utilice los siguientes comandos para comprobar que la configuración de propiedad, grupo y permisos del archivo coincide con los AL2 valores predeterminados altamente restrictivos (owner=root, group=root, solo para propietario). read/write 

   ```
   [ec2-user private]$ sudo chown root:root custom.key
   [ec2-user private]$ sudo chmod 600 custom.key
   [ec2-user private]$ ls -al custom.key
   ```

   Estos comandos deberían devolver el siguiente resultado.

   ```
   -rw------- root root custom.key
   ```

1. Edite `/etc/httpd/conf.d/ssl.conf` para reflejar el nuevo certificado y los archivos de claves.

   1. Proporcione la ruta y el nombre de archivo del certificado de host firmado por la CA en la directiva `SSLCertificateFile` de Apache:

      ```
      SSLCertificateFile /etc/pki/tls/certs/custom.crt
      ```

   1. Si ha recibido un archivo de certificado intermedio (`intermediate.crt` en este ejemplo), proporcione su ruta y nombre de archivo utilizando la directiva `SSLCACertificateFile` de Apache:

      ```
      SSLCACertificateFile /etc/pki/tls/certs/intermediate.crt
      ```
**nota**  
Algunos CAs combinan el certificado del host y los certificados intermedios en un solo archivo, lo que hace innecesaria la directiva. `SSLCACertificateFile` Consulte las instrucciones que le ha proporcionado su CA.

   1. Proporcione la ruta y el nombre de archivo de la clave privada (`custom.key` en este ejemplo) en la directiva `SSLCertificateKeyFile` de Apache:

      ```
      SSLCertificateKeyFile /etc/pki/tls/private/custom.key
      ```

1. Guarde `/etc/httpd/conf.d/ssl.conf` y reinicie Apache.

   ```
   [ec2-user ~]$ sudo systemctl restart httpd
   ```

1. Pruebe el servidor introduciendo su nombre de dominio en una barra de direcciones URL del navegador con el prefijo `https://`. El navegador debería cargar la página de prueba sobre HTTPS sin generar errores.

## Paso 3: Probar y reforzar la configuración de seguridad
<a name="ssl_test"></a>

Cuando su TLS esté en funcionamiento y expuesto al público, debería probar su seguridad. Esta operación es muy sencilla con servicios online como [Qualys SSL Labs](https://www.ssllabs.com/ssltest/analyze.html), que realiza un análisis gratuito y exhaustivo de su configuración de seguridad. En función de los resultados, puede decidir si debe reforzar la configuración de seguridad predeterminada controlando los protocolos que acepta, qué cifrados prefiere y cuáles deben excluirse. Para obtener más información, consulte [cómo Qualys formula sus puntuaciones](https://github.com/ssllabs/research/wiki/SSL-Server-Rating-Guide).

**importante**  
Las pruebas reales son cruciales para la seguridad del servidor. Cualquier pequeño error de configuración puede provocar graves infracciones de seguridad y la pérdida de datos. Dado que las prácticas de seguridad recomendadas cambian continuamente en respuesta a las investigaciones y a las continuas amenazas, es esencial realizar auditorías de seguridad periódicas para mantener una buena administración del servidor. 

En el sitio de [Qualys SSL Labs](https://www.ssllabs.com/ssltest/analyze.html), introduzca el nombre de dominio completo de su servidor, con el formato **www.example.com**. Dos minutos después recibirá una puntuación (de A a F) de su sitio y un desglose detallado de los descubrimientos. En la siguiente tabla se resume el informe de un dominio con una configuración idéntica a la configuración predeterminada de Apache y con un certificado Certbot predeterminado. AL2 


|  |  | 
| --- |--- |
| Calificación global | B | 
| Certificate | 100% | 
| Compatibilidad del protocolo | 95% | 
| Intercambio de clave | 70 % | 
| Seguridad del cifrado | 90% | 

Aunque la información general muestra que la configuración es correcta, el informe detallado indica algunos posibles problemas, indicados aquí en orden de gravedad:

✗ **Algunos RC4 navegadores antiguos admiten el uso del cifrado**. Un sistema de cifrado es el núcleo matemático de un algoritmo de cifrado. RC4[Se sabe que, un sistema de cifrado rápido que se utiliza para cifrar los flujos de datos de TLS, tiene varias debilidades graves.](http://www.imperva.com/docs/hii_attacking_ssl_when_using_rc4.pdf) A menos que tenga muy buenas razones para admitir navegadores heredados, debería deshabilitar esta opción.

✗ **Se admiten las versiones antiguas de TLS.** La configuración admite TLS 1.0 (ya obsoleto) y TLS 1.1 (en vías de ser declarado obsoleto). Desde 2018 solo se ha recomendado TLS 1.2.

✗ **La confidencialidad directa no se admite por completo.** La [confidencialidad directa](https://en.wikipedia.org/wiki/Forward_secrecy) es una característica de los algoritmos que cifra mediante claves de sesión temporales (efímeras) que se obtienen de la clave privada. En la práctica, esto significa que los atacantes no pueden descifrar los datos HTTPS aunque posean una clave privada a largo plazo del servidor web.

**Para corregir y preparar para el futuro la configuración de TLS**

1. Abra el archivo de configuración `/etc/httpd/conf.d/ssl.conf` en un editor de texto y comente la línea siguiente introduciendo "\$1" al principio de la línea.

   ```
   #SSLProtocol all -SSLv3
   ```

1. Añada la siguiente directiva:

   ```
   #SSLProtocol all -SSLv3
   SSLProtocol -SSLv2 -SSLv3 -TLSv1 -TLSv1.1 +TLSv1.2
   ```

   Esta directiva deshabilita explícitamente las versiones 2 y 3 de SSL, además de las versiones 1.0 y 1.1 de TLS. Ahora, el servidor se niega a aceptar conexiones cifradas con clientes que no utilicen versiones compatibles de TLS 1.2. El texto de la directiva transmite con más claridad a un lector humano las acciones que se han configurado que haga el servidor.
**nota**  
Al deshabilitar las versiones 1.0 y 1.1 de TLS de esta manera, bloquea un pequeño porcentaje de navegadores web desactualizados y evita que obtengan acceso a su sitio.

**Para modificar la lista de cifrados permitidos**

1. En el archivo de configuración `/etc/httpd/conf.d/ssl.conf`, encuentre la sección con la directiva **SSLCipherSuite** y comente la línea existente al introducir “\$1· al principio de la línea.

   ```
   #SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5
   ```

1. Especifique conjuntos de cifrado explícitos y un orden de cifrado que dé prioridad a la confidencialidad directa y evite los cifrados inseguros. La directiva `SSLCipherSuite` que se utiliza aquí se basa en el resultado del [Mozilla SSL Configuration Generator](https://mozilla.github.io/server-side-tls/ssl-config-generator/), que personaliza una configuración de TLS al software específico que se ejecuta en su servidor. En primer lugar, determine sus versiones de Apache y OpenSSL utilizando la salida de los comandos siguientes.

   ```
   [ec2-user ~]$ yum list installed | grep httpd
   
   [ec2-user ~]$ yum list installed | grep openssl
   ```

   Por ejemplo, si la información devuelta es Apache 2.4.34 y OpenSSL 1.0.2, lo introducimos en el generador. Después elegimos el modelo de compatibilidad «moderno», esto crea una directiva `SSLCipherSuite` que aplica seguridad de forma agresiva pero sigue funcionando para la mayoría de navegadores. Si el navegador no admite la configuración moderna, puede actualizar el software o elegir la configuración «intermedia» en su lugar.

   ```
   SSLCipherSuite ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:
   ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:
   ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256
   ```

   Los cifrados con la calificación más alta tienen *ECDHE* en su nombre, una abreviatura de *Elliptic Curve Diffie-Hellman Ephemeral*. El término *ephemeral* indica confidencialidad directa. Como subproducto, estos cifrados no son compatibles. RC4

   Le recomendamos utilizar una lista de cifrados explícita en lugar de utilizar valores predeterminados o directivas escuetas cuyo contenido no es visible.

   Copie la directiva generada e `/etc/httpd/conf.d/ssl.conf`.
**nota**  
Aunque aquí se muestran en varias líneas para que la lectura sea más sencilla, la directiva debe estar en una sola línea cuando se copia a `/etc/httpd/conf.d/ssl.conf` con un solo símbolo de dos puntos (sin espacios) entre los nombres de los cifrados.

1. Por último, cancele el comentario de la siguiente línea eliminando el "\$1" al principio de la línea.

   ```
   #SSLHonorCipherOrder on
   ```

   Esta directiva obliga al servidor a preferir cifrados con una calificación alta, incluidos (en este caso) los que admiten la confidencialidad directa. Con esta directiva activada, el servidor intenta establecer una conexión muy segura antes de recurrir a los cifrados permitidos con menor seguridad.

Después de completar ambos procedimientos, guarde los cambios en `/etc/httpd/conf.d/ssl.conf` y reinicie Apache.

Si vuelves a probar el dominio en los [laboratorios SSL de Qualys](https://www.ssllabs.com/ssltest/analyze.html), verás que la RC4 vulnerabilidad y otras advertencias han desaparecido y el resumen es similar al siguiente.


|  |  | 
| --- |--- |
| Calificación global | A | 
| Certificate | 100% | 
| Compatibilidad del protocolo | 100% | 
| Intercambio de clave | 90% | 
| Seguridad del cifrado | 90% | 

En cada actualización de OpenSSL, se introducen nuevos cifrados y se elimina la compatibilidad con los antiguos. Conserve su AL2 instancia EC2 up-to-date, esté atento a los anuncios de seguridad de [OpenSSL](https://www.openssl.org/) y manténgase alerta a los informes de nuevos ataques de seguridad en la prensa técnica.

## Solución de problemas
<a name="troubleshooting"></a>
+ **Mi servidor web Apache no se inicia a menos que especifique una contraseña**

  Es el comportamiento esperado si ha instalado una clave de servidor privado cifrada y protegida mediante contraseña.

  Puede eliminar el cifrado y el requisito de contraseña de la clave. Supongamos que tiene una clave RSA cifrada privada que se denomina `custom.key` en el directorio predeterminado y que su contraseña es **abcde12345**. Ejecute los siguientes comandos en la instancia de EC2 para generar una versión no cifrada de la clave.

  ```
  [ec2-user ~]$ cd /etc/pki/tls/private/
  [ec2-user private]$ sudo cp custom.key custom.key.bak
  [ec2-user private]$ sudo openssl rsa -in custom.key -passin pass:abcde12345 -out custom.key.nocrypt 
  [ec2-user private]$ sudo mv custom.key.nocrypt custom.key
  [ec2-user private]$ sudo chown root:root custom.key
  [ec2-user private]$ sudo chmod 600 custom.key
  [ec2-user private]$ sudo systemctl restart httpd
  ```

  Ahora, Apache debería iniciarse sin solicitarle una contraseña.
+  **Recibo errores cuando ejecuto sudo yum install -y mod\$1ssl.**

  Al instalar los paquetes necesarios para SSL, puede que aparezcan errores similares a los siguientes:

  ```
  Error: httpd24-tools conflicts with httpd-tools-2.2.34-1.16.amzn1.x86_64
  Error: httpd24 conflicts with httpd-2.2.34-1.16.amzn1.x86_64
  ```

  Esto normalmente significa que la instancia EC2 no se está ejecutando. AL2 Este tutorial solo admite instancias recién creadas a partir de una AMI de AL2 oficial.

# Tutorial: aloje un WordPress blog en AL2
<a name="hosting-wordpress"></a>

Los siguientes procedimientos le ayudarán a instalar, configurar y proteger un WordPress blog en su instancia AL2. Este tutorial es una buena introducción al uso de Amazon EC2, ya que tiene el control total sobre el servidor web que aloja su WordPress blog, lo que no es habitual en un servicio de alojamiento tradicional.

Es responsable de actualizar los paquetes de software y de mantener los parches de seguridad del servidor. Para una WordPress instalación más automatizada que no requiera una interacción directa con la configuración del servidor web, el CloudFormation servicio proporciona una WordPress plantilla que también puede ayudarle a empezar rápidamente. Para obtener más información, consulte [Introducción](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/GettingStarted.Walkthrough.html) en la *Guía del usuario de AWS CloudFormation *. *Si necesita una solución de alta disponibilidad con una base de datos disociada, consulte [Implementación de un WordPress sitio web de alta disponibilidad](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/php-hawordpress-tutorial.html) en la AWS Elastic Beanstalk Guía para desarrolladores.*

**importante**  
Estos procedimientos están diseñados para usarse con. AL2 Para obtener más información acerca de otras distribuciones, consulte la documentación específica. Muchos de los pasos de este tutorial no funcionan en instancias de Ubuntu. Para obtener ayuda WordPress sobre la instalación en una instancia de Ubuntu, consulte [WordPress](https://help.ubuntu.com/community/WordPress)la documentación de Ubuntu. También se puede utilizar [CodeDeploy](https://docs.aws.amazon.com/codedeploy/latest/userguide/tutorials-wordpress-launch-instance.html)para realizar esta tarea en sistemas Amazon Linux, macOS o Unix.

**Topics**
+ [Requisitos previos](#hosting-wordpress-prereqs)
+ [Instale WordPress](#install-wordpress)
+ [Siguientes pasos](#wordpress-next-steps)
+ [Ayuda Ha cambiado el nombre DNS público y ahora el blog se ha roto](#wordpress-troubleshooting)

## Requisitos previos
<a name="hosting-wordpress-prereqs"></a>

En este tutorial se asume que has lanzado una AL2 instancia con un servidor web funcional con soporte para PHP y bases de datos (MySQL o MariaDB) siguiendo todos los pasos que se indican. [Tutorial: Instale un servidor LAMP en AL2](ec2-lamp-amazon-linux-2.md) En este tutorial también se incluyen pasos para configurar un grupo de seguridad que permita el tráfico `HTTP` y `HTTPS`, así como varios pasos para asegurar que los permisos de archivo están correctamente establecidos en el servidor web. Para obtener más información sobre la adición de reglas a su grupo de seguridad, consulte [Agregar reglas a un grupo de seguridad](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/working-with-security-groups.html#adding-security-group-rule).

Le recomendamos encarecidamente que asocie una dirección IP elástica (EIP) a la instancia que utilice para alojar un blog. WordPress Esto impide que la dirección DNS pública de la instancia cambie e interrumpa la instalación. Si posee un nombre de dominio y quiere usarlo para el blog, puede actualizar el registro DNS del nombre de dominio para que apunte a la dirección EIP (para obtener ayuda al respecto, póngase en contacto con el registrador de nombres de dominio). Puede tener una dirección EIP asociada con una instancia en ejecución sin costo alguno. Para obtener más información, consulte [Direcciones IP elásticas](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html) en la *Guía del usuario de Amazon EC2*.

Si todavía no tiene un nombre de dominio para el blog, puede registrar uno con Route 53 y asociarlo con la dirección EIP de la instancia. Para obtener más información, consulte [Registrar nombres de dominio mediante Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/registrar.html) en la *Guía para desarrolladores de Amazon Route 53*.

## Instale WordPress
<a name="install-wordpress"></a>

**Opción: completar este tutorial con la automatización**  
Para completar este tutorial utilizando la AWS Systems Manager automatización en lugar de las siguientes tareas, ejecute el [documento de automatización](https://console.aws.amazon.com/systems-manager/documents/AWSDocs-HostingAWordPressBlog/).

Conéctese a la instancia y descargue el paquete WordPress de instalación.

**Para descargar y descomprimir el paquete de WordPress instalación**

1. Descargue el paquete de WordPress instalación más reciente con el **wget** comando. El comando siguiente debería descargar siempre la última versión.

   ```
   [ec2-user ~]$ wget https://wordpress.org/latest.tar.gz
   ```

1. Descomprima y desarchive el paquete de instalación. La carpeta de instalación se descomprime en una carpeta llamada `wordpress`.

   ```
   [ec2-user ~]$ tar -xzf latest.tar.gz
   ```<a name="create_user_and_database"></a>

**Para crear una base de datos, un usuario y una base de datos para WordPress la instalación**

 WordPress La instalación debe almacenar información, como las entradas de blog y los comentarios de los usuarios, en una base de datos. Este procedimiento ayuda a crear una base de datos para el blog y un usuario que esté autorizado a leer y guardar información en ella. 

1. Inicie el servidor de base de datos.
   + 

     ```
     [ec2-user ~]$ sudo systemctl start mariadb
     ```

1. Inicie sesión en el servidor de base de datos como el usuario `root`. Escriba la contraseña `root` de la base de datos cuando se lo pidan. Esta contraseña puede ser diferente de la contraseña `root` del sistema o incluso podría estar en blanco si no se ha protegido el servidor de bases de datos.

   Si todavía no ha protegido el servidor de base de datos, es importante que lo haga. Para obtener más información, consulte [Para proteger el servidor MariaDB](ec2-lamp-amazon-linux-2.md#securing-maria-db) (AL2).

   ```
   [ec2-user ~]$ mysql -u root -p
   ```

1. <a name="create_database_user"></a>Cree un usuario y una contraseña para la base de datos MySQL. WordPressLa instalación utiliza estos valores para comunicarse con la base de datos MySQL. 

   Asegúrese de que crea una contraseña fuerte para el usuario. No utilice la comilla simple ( ' ) en la contraseña porque interrumpirá el comando anterior. No utilice ninguna contraseña existente y asegúrese de que la guarda en un lugar seguro.

   Escriba el comando siguiente sustituyendo un nombre de usuario y contraseña únicos.

   ```
   CREATE USER 'wordpress-user'@'localhost' IDENTIFIED BY 'your_strong_password';
   ```

1. <a name="create_database"></a>Cree la base de datos. Póngale un nombre descriptivo y significativo, por ejemplo `wordpress-db`.
**nota**  
Los signos de puntuación que rodean el nombre de la base de datos en el comando siguiente son acentos graves. La tecla (```) se ubica por lo general sobre la tecla `Tab` en un teclado estándar. Los acentos graves no siempre son obligatorios pero permiten usar caracteres no válidos, por ejemplo, guiones, en los nombres de las bases de datos.

   ```
   CREATE DATABASE `wordpress-db`;
   ```

1. Otorgue todos los privilegios de su base de datos al WordPress usuario que creó anteriormente.

   ```
   GRANT ALL PRIVILEGES ON `wordpress-db`.* TO "wordpress-user"@"localhost";
   ```

1. Vacíe los privilegios de base de datos para recoger todos los cambios.

   ```
   FLUSH PRIVILEGES;
   ```

1. Salga del cliente de `mysql`.

   ```
   exit
   ```

**Para crear y modificar el archivo wp-config.php**

La carpeta WordPress de instalación contiene un ejemplo de archivo de configuración llamado`wp-config-sample.php`. En este procedimiento, va a copiar este archivo y a modificarlo para ajustarlo a su configuración específica.

1. Copie el archivo `wp-config-sample.php` en un archivo llamado `wp-config.php`. Esto crea un archivo de configuración nuevo y mantiene el archivo original de muestra intacto como copia de seguridad.

   ```
   [ec2-user ~]$ cp wordpress/wp-config-sample.php wordpress/wp-config.php
   ```

1. Modifique el archivo `wp-config.php` con el editor de texto favorito (por ejemplo **nano** o **vim**) y escriba los valores de la instalación. Si no tiene un editor favorito, `nano` es más adecuado para principiantes.

   ```
   [ec2-user ~]$ nano wordpress/wp-config.php
   ```

   1. Busque la línea que define `DB_NAME` y cambie `database_name_here` por el nombre de la base de datos que ha creado en [Step 4](#create_database) de [Para crear una base de datos, un usuario y una base de datos para WordPress la instalación](#create_user_and_database).

      ```
      define('DB_NAME', 'wordpress-db');
      ```

   1. Busque la línea que define `DB_USER` y cambie `username_here` por el usuario de la base de datos que ha creado en [Step 3](#create_database_user) de [Para crear una base de datos, un usuario y una base de datos para WordPress la instalación](#create_user_and_database).

      ```
      define('DB_USER', 'wordpress-user');
      ```

   1. Busque la línea que define `DB_PASSWORD` y cambie `password_here` por la contraseña fuerte que ha creado en [Step 3](#create_database_user) de [Para crear una base de datos, un usuario y una base de datos para WordPress la instalación](#create_user_and_database).

      ```
      define('DB_PASSWORD', 'your_strong_password');
      ```

   1. Busque la sección denominada `Authentication Unique Keys and Salts`. Estos `SALT` valores `KEY` y otros proporcionan una capa de cifrado a las cookies del navegador que WordPress los usuarios almacenan en sus máquinas locales. Básicamente, agregar valores largos aleatorios hace que el sitio sea más seguro. Visite [https://api.wordpress. org/secret-key/1.1/salt](https://api.wordpress.org/secret-key/1.1/salt/)/para generar aleatoriamente un conjunto de valores clave que puede copiar y pegar en el `wp-config.php` archivo. Para pegar texto en un terminal PuTTY, coloque el cursor en el punto que quiere pegar el texto y haga clic con el botón derecho del ratón dentro del terminal PuTTY.

      Para obtener más información sobre las claves de seguridad, visita [https://wordpress. org/support/article/editing-wp-config-php/\$1security -keys](https://wordpress.org/support/article/editing-wp-config-php/#security-keys).
**nota**  
Los valores siguientes tienen una finalidad de ejemplo únicamente; no los use en la instalación.

      ```
      define('AUTH_KEY',         ' #U$$+[RXN8:b^-L 0(WU_+ c+WFkI~c]o]-bHw+)/Aj[wTwSiZ<Qb[mghEXcRh-');
      define('SECURE_AUTH_KEY',  'Zsz._P=l/|y.Lq)XjlkwS1y5NJ76E6EJ.AV0pCKZZB,*~*r ?6OP$eJT@;+(ndLg');
      define('LOGGED_IN_KEY',    'ju}qwre3V*+8f_zOWf?{LlGsQ]Ye@2Jh^,8x>)Y |;(^[Iw]Pi+LG#A4R?7N`YB3');
      define('NONCE_KEY',        'P(g62HeZxEes|LnI^i=H,[XwK9I&[2s|:?0N}VJM%?;v2v]v+;+^9eXUahg@::Cj');
      define('AUTH_SALT',        'C$DpB4Hj[JK:?{ql`sRVa:{:7yShy(9A@5wg+`JJVb1fk%_-Bx*M4(qc[Qg%JT!h');
      define('SECURE_AUTH_SALT', 'd!uRu#}+q#{f$Z?Z9uFPG.${+S{n~1M&%@~gL>U>NV<zpD-@2-Es7Q1O-bp28EKv');
      define('LOGGED_IN_SALT',   ';j{00P*owZf)kVD+FVLn-~ >.|Y%Ug4#I^*LVd9QeZ^&XmK|e(76miC+&W&+^0P/');
      define('NONCE_SALT',       '-97r*V/cgxLmp?Zy4zUU4r99QQ_rGs2LTd%P;|_e1tS)8_B/,.6[=UK<J_y9?JWG');
      ```

   1. Guarde el archivo y salga del editor de texto.

**Para instalar sus WordPress archivos en la raíz de documentos de Apache**
+ Ahora que ha descomprimido la carpeta de instalación, ha creado una base de datos y un usuario MySQL y ha personalizado el archivo de WordPress configuración, puede copiar los archivos de instalación en la raíz de documentos del servidor web para poder ejecutar el script de instalación que complete la instalación. La ubicación de estos archivos depende de si quieres que tu WordPress blog esté disponible en la raíz real del servidor web (por ejemplo`my.public.dns.amazonaws.com`) o en un subdirectorio o una carpeta situada debajo de la raíz (por ejemplo,). `my.public.dns.amazonaws.com/blog`
  + Si quieres WordPress ejecutarlo desde la raíz de tus documentos, copia el contenido del directorio de instalación de WordPress (pero no el directorio en sí) de la siguiente manera: 

    ```
    [ec2-user ~]$ cp -r wordpress/* /var/www/html/
    ```
  + Si quieres WordPress ejecutarlo en un directorio alternativo bajo la raíz del documento, primero crea ese directorio y, a continuación, copia los archivos en él. En este ejemplo, WordPress se ejecutará desde el directorio`blog`:

    ```
    [ec2-user ~]$ mkdir /var/www/html/blog
    [ec2-user ~]$ cp -r wordpress/* /var/www/html/blog/
    ```

**importante**  
Por razones de seguridad, si no pasa al siguiente procedimiento de inmediato, pare el servidor web Apache (`httpd`) ahora. Tras mover la instalación a la raíz de documentos de Apache, el script de WordPress instalación queda desprotegido y un atacante podría acceder a su blog si el servidor web Apache estuviera en funcionamiento. Para detener el servidor web Apache, escriba el comando **sudo systemctl stop httpd**. Si pasa al siguiente procedimiento, no es preciso que pare el servidor web Apache.

**Para permitir el uso WordPress de enlaces permanentes**

WordPress Los enlaces permanentes necesitan usar `.htaccess` archivos de Apache para funcionar correctamente, pero esto no está habilitado de forma predeterminada en Amazon Linux. Use este procedimiento para permitir todas las anulaciones en la raíz de documentos de Apache.

1. Abra el archivo `httpd.conf` con el editor de textos que prefiera (como **nano** o **vim**). Si no tiene un editor favorito, `nano` es más adecuado para principiantes.

   ```
   [ec2-user ~]$ sudo vim /etc/httpd/conf/httpd.conf
   ```

1. Busque la sección que comienza por `<Directory "/var/www/html">`.

   ```
   <Directory "/var/www/html">
       #
       # Possible values for the Options directive are "None", "All",
       # or any combination of:
       #   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
       #
       # Note that "MultiViews" must be named *explicitly* --- "Options All"
       # doesn't give it to you.
       #
       # The Options directive is both complicated and important.  Please see
       # http://httpd.apache.org/docs/2.4/mod/core.html#options
       # for more information.
       #
       Options Indexes FollowSymLinks
   
       #
       # AllowOverride controls what directives may be placed in .htaccess files.
       # It can be "All", "None", or any combination of the keywords:
       #   Options FileInfo AuthConfig Limit
       #
       AllowOverride None
   
       #
       # Controls who can get stuff from this server.
       #
       Require all granted
   </Directory>
   ```

1. Cambie la línea `AllowOverride None` de la sección anterior por `AllowOverride All`.
**nota**  
Hay múltiples líneas `AllowOverride` en este archivo; asegúrese de que cambia la línea de la sección `<Directory "/var/www/html">`.

   ```
   AllowOverride All
   ```

1. Guarde el archivo y salga del editor de texto.

**Para instalar la biblioteca de dibujos gráficos de PHP en AL2**  
La biblioteca GD para PHP le permite modificar imágenes. Instale esta biblioteca si tiene que recortar la imagen de encabezado para su blog. La versión phpMyAdmin que instale puede requerir una versión mínima específica de esta biblioteca (por ejemplo, la versión 7.2).

Utilice el siguiente comando para instalar la biblioteca de dibujos gráficos de PHP AL2. Por ejemplo, si instaló php7.2 desde amazon-linux-extras como parte de la instalación de la pila LAMP, este comando instalará la versión 7.2 de la biblioteca de dibujos gráficos de PHP.

```
[ec2-user ~]$ sudo yum install php-gd
```

Para verificar la versión instalada, utilice el siguiente comando:

```
[ec2-user ~]$ sudo yum list installed php-gd
```

A continuación, se muestra un ejemplo de la salida:

```
php-gd.x86_64                     7.2.30-1.amzn2             @amzn2extra-php7.2
```

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

Algunas de las funciones disponibles WordPress requieren acceso de escritura a la raíz del documento de Apache (por ejemplo, cargar contenido multimedia a través de las pantallas de administración). Si aún no lo ha hecho, aplique los siguientes permisos y pertenencias a grupos (tal y como se describe con más detalle en la[Tutorial: Instale un servidor LAMP en AL2](ec2-lamp-amazon-linux-2.md)).

1. Otorgue la propiedad de archivos de `/var/www` y su contenido al usuario `apache`.

   ```
   [ec2-user ~]$ sudo chown -R apache /var/www
   ```

1. Otorgue la propiedad de grupo de `/var/www` y su contenido al grupo `apache`.

   ```
   [ec2-user ~]$ sudo chgrp -R apache /var/www
   ```

1. Cambie los permisos del directorio `/var/www` y sus subdirectorios para agregar permisos de escritura de grupo y establecer el ID de grupo en futuros subdirectorios.

   ```
   [ec2-user ~]$ sudo chmod 2775 /var/www
   [ec2-user ~]$ find /var/www -type d -exec sudo chmod 2775 {} \;
   ```

1. Cambie de forma recursiva los permisos de archivo de `/var/www` y sus subdirectorios.

   ```
   [ec2-user ~]$ find /var/www -type f -exec sudo chmod 0644 {} \;
   ```
**nota**  
 Si pretende utilizarlos también WordPress como servidor FTP, aquí necesitará una configuración de grupo más permisiva. Para ello, revise los [pasos recomendados y la configuración WordPress de seguridad](https://wordpress.org/support/article/changing-file-permissions/). 

1. Reinicie el servidor web Apache para recoger el grupo y los permisos nuevos.
   + 

     ```
     [ec2-user ~]$ sudo systemctl restart httpd
     ```

**Ejecute el script WordPress de instalación con AL2**

Ya está listo para la instalación WordPress. Los comandos que utilice dependen del sistema operativo. Los comandos de este procedimiento se utilizan con AL2.

1. Use el comando **systemctl** para asegurarse de que se inician los servicios `httpd` y de base de datos cada vez que se arranca el sistema.

   ```
   [ec2-user ~]$ sudo systemctl enable httpd && sudo systemctl enable mariadb
   ```

1. Verifique que el servidor de base de datos se está ejecutando.

   ```
   [ec2-user ~]$ sudo systemctl status mariadb
   ```

   Si el servicio de base de datos no se está ejecutando, inícielo.

   ```
   [ec2-user ~]$ sudo systemctl start mariadb
   ```

1. Verifique que el servidor web Apache (`httpd`) se está ejecutando.

   ```
   [ec2-user ~]$ sudo systemctl status httpd
   ```

   Si el servicio `httpd` no se está ejecutando, inícielo.

   ```
   [ec2-user ~]$ sudo systemctl start httpd
   ```

1. En un navegador web, escriba la URL de su WordPress blog (la dirección DNS pública de la instancia o la dirección seguida de la `blog` carpeta). Deberías ver el script WordPress de instalación. Proporcione la información requerida para la WordPress instalación. Seleccione **Instalar WordPress** para completar la instalación. Para obtener más información, consulte el [paso 5: ejecutar el script de instalación](https://wordpress.org/support/article/how-to-install-wordpress/#step-5-run-the-install-script) en el WordPress sitio web.

## Siguientes pasos
<a name="wordpress-next-steps"></a>

Una vez que haya probado su WordPress blog, considere la posibilidad de actualizar su configuración.

**Uso de un nombre de dominio personalizado**  
Si tiene un nombre de dominio asociado con la dirección EIP de la instancia de EC2, puede configurar el blog para que use ese nombre en lugar de la dirección DNS pública de EC2. Para obtener más información, consulte [Cambiar la URL del sitio](https://wordpress.org/support/article/changing-the-site-url/) en el WordPress sitio web.

**Configuración del blog**  
Puede configurar el blog para usar distintos [temas](https://wordpress.org/themes/) y [complementos](https://wordpress.org/plugins/) y ofrecer una experiencia más personalizada a los lectores. Sin embargo, en ocasiones el proceso de instalación puede producir un efecto indeseado y provocar la pérdida del blog completo. Recomendamos encarecidamente que cree una copia de seguridad de Amazon Machine Image (AMI) de la instancia antes de instalar temas o complementos, de forma que pueda restaurar el blog si algo sale mal durante la instalación. Para obtener más información, consulte [Crear su propia AMI](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AMIs.html#creating-an-ami).

**Aumentar la capacidad**  
Si su WordPress blog se hace popular y necesita más capacidad de procesamiento o almacenamiento, tenga en cuenta los siguientes pasos:
+ Ampliar el espacio de almacenamiento de la instancia. Para obtener más información, consulte [Volúmenes elásticos de Amazon EBS](https://docs.aws.amazon.com/ebs/latest/userguide/ebs-modify-volume.html) en la *Guía del usuario de Amazon EBS*.
+ Mover la base de datos MySQL a [Amazon RDS](https://aws.amazon.com/rds) para aprovechar la capacidad de fácil escala del servicio.

**Mejore el rendimiento de la red de su tráfico de Internet**  
Si espera que su blog impulse el tráfico a partir de los usuarios ubicados en todo el mundo, considere el uso de [AWS Global Accelerator](https://aws.amazon.com/global-accelerator). Global Accelerator le ayuda a reducir la latencia al mejorar el rendimiento del tráfico de Internet entre los dispositivos cliente de sus usuarios y la WordPress aplicación en la que se ejecuta AWS. Global Accelerator utiliza la [red AWS global](https://aws.amazon.com/about-aws/global-infrastructure/global_network/) para dirigir el tráfico a un punto final de aplicación en buen estado en la AWS región más cercana al cliente.

**Obtenga más información sobre WordPress**  
Para obtener más información WordPress, consulte la documentación de ayuda del WordPress Codex en [http://codex.wordpress.org/](http://codex.wordpress.org/).

Para obtener más información sobre la solución de problemas de la instalación, consulte [Problemas comunes de instalación](https://wordpress.org/support/article/how-to-install-wordpress/#common-installation-problems).

Para obtener información sobre cómo hacer que tu WordPress blog sea más seguro, consulta [Hardening WordPress](https://wordpress.org/support/article/hardening-wordpress/).

Para obtener información sobre cómo mantener tu WordPress blog up-to-date, consulta [Actualización WordPress](https://wordpress.org/support/article/updating-wordpress/).

## Ayuda Ha cambiado el nombre DNS público y ahora el blog se ha roto
<a name="wordpress-troubleshooting"></a>

 WordPress La instalación se configura automáticamente con la dirección DNS pública de la instancia EC2. Si detiene y reinicia la instancia, la dirección DNS pública cambia (salvo que está asociada a una dirección IP elástica) y el blog no funcionará porque hace referencia a los recursos de una dirección que ya no existe (o que se ha asignado a otra instancia de EC2). Para obtener una descripción más detallada del problema y varias soluciones posibles, consulte [Cambiar la URL del sitio](https://wordpress.org/support/article/changing-the-site-url/).

Si esto le ha ocurrido a la WordPress instalación, es posible que pueda recuperar el blog siguiendo el procedimiento que se indica a continuación, que utiliza la interfaz de línea de **wp-cli** comandos para WordPress.

**Para cambiar la URL WordPress del sitio por la **wp-cli****

1. Conéctese a la instancia de EC2 con SSH. 

1. Anote la URL del sitio anterior y la URL del sitio nuevo para la instancia. Es probable que la antigua URL del sitio sea el nombre de DNS público de la instancia de EC2 cuando la instaló WordPress. La URL del sitio nuevo es el nombre DNS público actual de la instancia de EC2. Si no está seguro de la URL del sitio anterior, puede usar **curl** para buscarla con el comando siguiente.

   ```
   [ec2-user ~]$ curl localhost | grep wp-content
   ```

   Debería ver referencias al nombre DNS público anterior en el resultado, que tendrá un aspecto similar a lo siguiente (la URL del sitio anterior en rojo):

   ```
   <script type='text/javascript' src='http://ec2-52-8-139-223.us-west-1.compute.amazonaws.com/wp-content/themes/twentyfifteen/js/functions.js?ver=20150330'></script>
   ```

1. Descargue el **wp-cli** con el comando siguiente.

   ```
   [ec2-user ~]$ curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
   ```

1. Busque y sustituya la antigua URL del sitio en la WordPress instalación con el siguiente comando. Sustituya la dirección URL antigua y la nueva del sitio por la instancia de EC2 y la ruta de acceso a la WordPress instalación (normalmente, `/var/www/html` o`/var/www/html/blog`).

   ```
   [ec2-user ~]$ php wp-cli.phar search-replace 'old_site_url' 'new_site_url' --path=/path/to/wordpress/installation --skip-columns=guid
   ```

1. En un navegador web, introduzca la nueva URL del sitio de su WordPress blog para comprobar que el sitio vuelve a funcionar correctamente. Si no es así, consulte [Cambiar la URL del sitio](https://wordpress.org/support/article/changing-the-site-url/) y [Problemas comunes de instalación](https://wordpress.org/support/article/how-to-install-wordpress/#common-installation-problems) para obtener más información.