

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

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

**nota**  
 AL2 não é mais a versão atual do Amazon Linux. AL2023 é o sucessor de. AL2 Para obter mais informações, consulte [ AL2 Comparing AL2023 and](https://docs.aws.amazon.com/linux/al2023/ug/compare-with-al2.html) the list of [Package Changes AL2023 no](https://docs.aws.amazon.com/linux/al2023/release-notes/compare-packages.html) [Guia AL2023 do Usuário](https://docs.aws.amazon.com/linux/al2023/ug/). 

 

**Topics**
+ [Inicie a instância do Amazon EC2 com AMI AL2](#launch-ec2-instance)
+ [Encontre a AL2 AMI mais recente usando o Systems Manager](#find-latest-al2-using-systems-manager)
+ [Conecte-se a uma instância do Amazon EC2](#connect-to-amazon-linux-limits-ec2)
+ [AL2 Modo de inicialização AMI](#default-boot-mode-al2)
+ [Repositório de pacotes](#package-repository)
+ [Usando cloud-init em AL2](amazon-linux-cloud-init.md)
+ [Configurar AL2 instâncias](configure-ec2-instance.md)
+ [Kernels fornecidos pelo usuário](UserProvidedKernels.md)
+ [AL2 Notificações de lançamento da AMI](linux-ami-notifications.md)
+ [Configurar a conexão de desktop AL2 MATE](amazon-linux-ami-mate.md)
+ [AL2 Tutoriais](al2-tutorials.md)

## Inicie a instância do Amazon EC2 com AMI AL2
<a name="launch-ec2-instance"></a>

Você pode iniciar uma instância do Amazon EC2 com a AMI AL2 . Para obter mais informações, consulte [Etapa 1: executar uma instância](https://docs.aws.amazon.com//AWSEC2/latest/UserGuide/EC2_GetStarted.html#ec2-launch-instance).

## Encontre a AL2 AMI mais recente usando o Systems Manager
<a name="find-latest-al2-using-systems-manager"></a>

O Amazon EC2 fornece parâmetros AWS Systems Manager públicos AMIs mantidos pelo público AWS que você pode usar ao iniciar instâncias. Por exemplo, o parâmetro fornecido pelo EC2 `/aws/service/ami-amazon-linux-latest/amzn2-ami-kernel-default-hvm-x86_64-gp2` está disponível em todas as regiões e sempre aponta para a versão mais recente da AL2 AMI em uma determinada região.

Para encontrar a AL2023 AMI mais recente usando AWS Systems Manager, consulte [Comece com AL2023](https://docs.aws.amazon.com/linux/al2023/ug/get-started.html).

Os parâmetros públicos de AMI do Amazon EC2 estão disponíveis nos seguintes caminhos:

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

Você pode ver uma lista de todos os Amazon Linux AMIs na AWS região atual executando o AWS CLI comando a seguir.

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

**Como executar uma instância usando um parâmetro público**  
O exemplo a seguir usa o parâmetro público fornecido pelo EC2 para iniciar uma `m5.xlarge` instância usando a AMI AL2 mais recente.

Para especificar o parâmetro no comando, use a seguinte sintaxe: `resolve:ssm:public-parameter`, onde `resolve:ssm` é o prefixo padrão e `public-parameter` é o caminho e o nome do parâmetro público.

No exemplo, os parâmetros `--count` e `--security-group` não são incluídos. Para `--count`, o padrão é 1. Se você tiver uma VPC e um grupo de segurança padrão, eles serão usados.

```
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 obter mais informações, consulte [Usando parâmetros públicos](https://docs.aws.amazon.com/systems-manager/latest/userguide/parameter-store-public-parameters.html) no *Guia AWS Systems Manager do usuário*.

**Entendendo os nomes de AMI do Amazon Linux 2**  
Os nomes do Amazon Linux 2 AMI usam o seguinte esquema de nomenclatura:

`amzn2-ami-[minimal-][kernel-{5.10,default,4.14}]-hvm-{x86_64,aarch64}-{ebs,gp2}`
+ O **Minimal** AMIs vem com um conjunto minimizado de pacotes pré-instalados para reduzir o tamanho da imagem.
+ A versão do **kernel determina a versão** do kernel que está pré-instalada na respectiva AMI:
  + `kernel-5.10`seleciona a versão 5.10 do kernel Linux. *Essa é a versão recomendada do kernel para AL2.*
  + `kernel-default`seleciona o kernel padrão recomendado para. AL2 É um alias para kernel-5.10.
  + `kernel-4.14`seleciona a versão 4.14 do kernel Linux. *Isso só é fornecido para fins de compatibilidade com versões mais antigas da AMI. Não use essa versão para lançamentos de novas instâncias. Espere que essa AMI fique sem suporte.*
  + Existe um conjunto especial de nomes de AMI sem referência a um kernel específico. Esses AMIs são um alias para kernel-4.14. *Eles AMIs são fornecidos somente para fins de compatibilidade com versões mais antigas da AMI. Não use esse nome de AMI para lançamentos de novas instâncias. Espere que o kernel deles AMIs seja atualizado.*
+ **x86\$164/aarch64** determina a plataforma de CPU na qual executar a AMI. Selecione x86\$164 para instâncias EC2 baseadas em Intel e AMD. Selecione aarch64 para instâncias do EC2 Graviton.
+ **ebs/gp2** determina o tipo de volume do EBS usado para atender à respectiva AMI. Consulte [Tipos de volume do EBS](https://docs.aws.amazon.com/ebs/latest/userguide/ebs-volume-types.html) para referência. *Sempre selecione gp2.*

## Conecte-se a uma instância do Amazon EC2
<a name="connect-to-amazon-linux-limits-ec2"></a>

Há várias maneiras de se conectar à sua instância Amazon Linux, incluindo SSH e EC2 Instance Connect. AWS Systems Manager Session Manager Para ter mais informações, consulte [Conectar-se à instância do Linux usando SSH](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/connect-to-linux-instance.html) no *Manual do usuário do Amazon EC2*.

**Usuários SSH e **sudo****  
O Amazon Linux não permite o Remote `root` Secure Shell (SSH) por padrão. Além disso, a autenticação por senha está desativada para evitar ataques de força bruta. Para permitir logins SSH a uma instância Amazon Linux, forneça seu par de chaves à instância na execução. Você também deve definir o grupo de segurança usado para executar sua instância para permitir acesso SSH. Por padrão, a única conta que pode fazer login remotamente usando SSH é. `ec2-user` Essa conta também tem **sudo** privilégios. Se você habilitar o `root` login remoto, saiba que é menos seguro do que depender de pares de chaves e de um usuário secundário.

## AL2 Modo de inicialização AMI
<a name="default-boot-mode-al2"></a>

AL2 AMIs não tem um parâmetro de modo de inicialização definido. As instâncias iniciadas AL2 AMIs seguem o valor padrão do modo de inicialização do tipo de instância. Para obter mais informações, consulte [Modos de inicialização](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ami-boot.html) no Guia do *usuário do Amazon EC2*.

## Repositório de pacotes
<a name="package-repository"></a>

Essas informações se aplicam AL2 a. Para obter informações sobre isso AL2023, consulte [Gerenciar pacotes e atualizações do sistema operacional AL2023 no](https://docs.aws.amazon.com/linux/al2023/ug/managing-repos-os-updates.html) *Guia do usuário do Amazon Linux 2023*. 

O AL2 e o AL1 foram projetados para serem usados com repositórios de pacotes on-line hospedados em cada região do Amazon EC2. AWS Os repositórios estão disponíveis em todas as regiões e são acessados com ferramentas de atualização **yum**. Hospedar repositórios em cada região nos permite implantar as atualizações rapidamente e sem nenhum encargo de transferência de dados.

**Importante**  
A última versão do AL1 chegou ao EOL em 31 de dezembro de 2023 e não receberá nenhuma atualização de segurança ou correção de erros a partir de 1º de janeiro de 2024. Para obter mais informações, consulte [AMI do Amazon Linux end-of-life](https://aws.amazon.com//blogs/aws/update-on-amazon-linux-ami-end-of-life/).

Se você não precisar preservar dados ou personalizações para suas instâncias, você pode iniciar novas instâncias usando a AMI AL2 atual. Se precisar preservar dados ou personalizações para suas instâncias, você pode mantê-las por meio dos repositórios de pacotes do Amazon Linux. Esses repositórios contêm todos os pacotes atualizados. É possível escolher aplicar essas atualizações às suas instâncias em execução. As versões anteriores da AMI e dos pacotes de atualização continuam disponíveis para uso, mesmo com o lançamento de novas versões.

**nota**  
Para atualizar e instalar pacotes sem acesso à Internet em uma instância do Amazon EC2, consulte [Como posso atualizar o yum ou instalar pacotes sem acesso à Internet nas minhas instâncias do Amazon EC2](https://repost.aws/knowledge-center/ec2-al1-al2-update-yum-without-internet) em execução, ou? AL1 AL2 AL2023

Para instalar pacotes, use o comando a seguir:

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

Se você descobrir que o Amazon Linux não contém uma aplicação de que precisa, poderá instalar essa aplicação diretamente em sua instância do Amazon Linux. O Amazon Linux usa RPMs e yum para gerenciamento de pacotes, e essa é provavelmente a maneira mais direta de instalar novos aplicativos. Verifique sempre se uma aplicação está disponível em nosso repositório central do Amazon Linux, porque muitas aplicações estão disponíveis ali. A partir daí, você pode adicionar esses aplicativos à sua instância Amazon Linux.

Para fazer upload de suas aplicações em uma instância do Amazon Linux em execução, use **scp** ou **sftp** e configure a aplicação fazendo login em sua instância. As aplicações também podem ser carregadas durante a execução da instância usando a ação **PACKAGE\$1SETUP** no pacote cloud-init incorporado. Para obter mais informações, consulte [Usando cloud-init em AL2](amazon-linux-cloud-init.md). 

### Atualizações de segurança
<a name="security-updates"></a>

As atualizações de segurança são fornecidas usando os repositórios de pacotes. Tanto as atualizações de segurança quanto os alertas de segurança atualizados da AMI são publicados no [Amazon Linux Security Center](https://alas.aws.amazon.com). Para obter mais informações sobre as políticas de segurança da AWS ou para informar um problema de segurança, acesse o [Centro de segurança da Nuvem AWS](https://aws.amazon.com/security/).

AL1 e AL2 estão configurados para baixar e instalar atualizações de segurança críticas ou importantes no momento do lançamento. As atualizações do Kernel não estão incluídas nesta configuração.

Em AL2023, essa configuração foi alterada em comparação com AL1 AL2 e. Para obter mais informações sobre atualizações de segurança para AL2023, consulte [Atualizações e recursos de segurança](https://docs.aws.amazon.com/linux/al2023/ug/security-features.html) no *Guia do usuário do Amazon Linux 2023*.

Recomendamos fazer as atualizações necessárias para seu caso de uso após a execução. Por exemplo, talvez você queira aplicar todas as atualizações (não apenas as de segurança) no lançamento ou avaliar cada atualização e aplicar somente as aplicáveis ao seu sistema. Isso é controlado usando a seguinte configuração de cloud-init: `repo_upgrade`. O snippet da configuração cloud-init a seguir mostra como alterar as configurações no texto de dados do usuário que você transmite para a inicialização da instância:

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

 Os valores possíveis para `repo_upgrade` são os seguintes: 

`critical`  
Aplicar atualizações de segurança essenciais pendentes.

`important`  
Aplicar atualizações de segurança importantes e essenciais pendentes.

`medium`  
Aplicar atualizações de segurança pendentes essenciais, importantes e médias.

`low`  
Aplicar todas as atualizações de segurança pendentes, incluindo atualizações de segurança de baixa gravidade.

`security`  
Faça as atualizações essenciais ou importantes que a Amazon marca como atualizações de segurança.

`bugfix`  
Aplicar atualizações que a Amazon marca como correções de erros. As correções de erros são um conjunto maior de atualizações, que incluem atualizações de segurança e correções para vários erros menores.

`all`  
Aplicar todas as atualizações disponíveis aplicáveis, independentemente da classificação.

`none`  
Não aplicar nenhuma atualização à instância na inicialização.

**Observação**  
O Amazon Linux não marca nenhuma atualização como`bugfix`. Para aplicar atualizações não relacionadas à segurança do Amazon Linux, use`repo_upgrade: all`.

A configuração padrão para `repo_upgrade` é segurança. Ou seja, se você não especificar um valor diferente em seus dados do usuário, por padrão, o Amazon Linux executará as atualizações de segurança no lançamento para todos os pacotes instalados nesse momento. O Amazon Linux também o notifica sobre quaisquer atualizações nos pacotes instalados, listando o número de atualizações disponíveis após o login usando o arquivo `/etc/motd`. Para instalar essas atualizações, você precisa executar o comando **sudo yum upgrade** na instância. 

### Configuração de repositórios
<a name="repository-config"></a>

Para AL1 e AL2, AMIs são um instantâneo dos pacotes disponíveis no momento em que a AMI foi criada, com exceção das atualizações de segurança. Todos os pacotes que não estejam na AMI original, mas instalados em tempo de execução, serão a versão mais recente disponível. Para obter os pacotes mais recentes disponíveis para AL2, execute**yum update -y**.

**Dica de solução de problemas**  
Se você receber um erro `cannot allocate memory` ao executar **yum update** em tipos de instância nano, como `t3.nano`, talvez seja necessário alocar espaço de swap para habilitar a atualização.

Pois AL2023, a configuração do repositório foi alterada em comparação com AL1 e. AL2 Para obter mais informações sobre o AL2023 repositório, consulte [Gerenciando pacotes e atualizações do sistema operacional](https://docs.aws.amazon.com/linux/al2023/ug/managing-repos-os-updates.html).

As versões anteriores AL2023 foram configuradas para fornecer um fluxo contínuo de atualizações para passar de uma versão secundária do Amazon Linux para a próxima versão, também chamada de *lançamentos contínuos*. Como prática recomendada, recomendamos que você atualize sua AMI para a AMI mais recente disponível em vez de lançar a antiga AMIs e aplicar atualizações.

As atualizações in-loco não são suportadas entre as principais versões do Amazon Linux, como de AL1 para AL2 ou de AL2 para. AL2023 Para obter mais informações, consulte [Disponibilidade do Amazon Linux](what-is-amazon-linux.md#amazon-linux-availability).

# Usando cloud-init em AL2
<a name="amazon-linux-cloud-init"></a>

O pacote cloud-init é uma aplicação de código aberto criado pela Canonical que é usado para inicializar imagens Linux em um ambiente de computação em nuvem, como o Amazon EC2. O Amazon Linux contém uma versão personalizada do cloud-init. Isso permite que você especifique ações que devem acontecer com sua instância no momento da inicialização. É possível transmitir ações desejadas para cloud-init por meio dos campos de dados do usuário ao executar uma instância. Isso significa que você pode usar o common AMIs para muitos casos de uso e configurá-los dinamicamente na inicialização. O Amazon Linux também usa cloud-init para executar a configuração inicial da conta ec2-user.

 Para obter mais informações, consulte a [documentação de cloud-init](http://cloudinit.readthedocs.org/en/latest/). 

O Amazon Linux usa as ações de cloud-init localizadas em `/etc/cloud/cloud.cfg.d` e em `/etc/cloud/cloud.cfg`. É possível criar seus próprios arquivos de ações de cloud-init em `/etc/cloud/cloud.cfg.d`. Todos os arquivos nesse diretório são lidos por cloud-init. Eles são lidos em ordem léxica e arquivos mais recentes substituem arquivos mais antigos.

O pacote cloud-init executa essas e outras tarefas de configuração comuns para as instâncias na inicialização:
+ Definir o local padrão.
+ Definir o nome do host.
+ Analisar e lidar com os dados do usuário.
+ Gerenciar chaves SSH privadas de host.
+ Adicionar as chaves SSH públicas de um usuário ao `.ssh/authorized_keys` para facilitar login e administração.
+ Preparar os repositórios para gerenciamento de pacotes.
+ Lidar com as ações de pacotes definidas nos dados do usuário.
+ Execute scripts de usuário encontrados nos dados do usuário.
+ Montar volumes de armazenamento de instâncias, se aplicável.
  + Por padrão, o volume de armazenamento de instância `ephemeral0` será montado em `/media/ephemeral0` se estiver presente e possuir um sistema de arquivos válido; caso contrário, ele não será montado.
  + Por padrão, todos os volumes de troca associados à instância são montados (somente para os tipos de instância `m1.small` e `c1.medium`).
  + É possível substituir a montagem do volume de armazenamento de instância padrão com a seguinte diretriz de cloud-init:

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

    Para obter mais informações sobre o controle sobre montagens, consulte [Montagens](http://cloudinit.readthedocs.io/en/latest/topics/modules.html#mounts) na documentação do cloud-init.
  + Os volumes de armazenamento de instâncias que oferecem suporte a TRIM não são formatados quando uma instância é iniciada, portanto, é necessário particioná-los e formatá-los para poder montá-los. Para obter mais informações, consulte [TRIMSuporte ao volume do armazenamento de instâncias](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ssd-instance-store.html#InstanceStoreTrimSupport). É possível usar o módulo `disk_setup` para particionar e formatar seus volumes de armazenamento de instâncias na inicialização. Para obter mais informações, consulte [Configuração de discos](http://cloudinit.readthedocs.io/en/latest/topics/modules.html#disk-setup) na documentação do cloud-init.

## Formatos de dados do usuário compatíveis
<a name="supported-user-data-formats"></a>

O pacote cloud-init oferece suporte ao tratamento de dados do usuário em vários formatos:
+ Gzip
  + Se os dados do usuário estiverem compactados com gzip, o cloud-init descompactará os dados e os tratará adequadamente.
+ Multipart MIME
  + Usando um arquivo multipart MIME, é possível especificar mais do que um tipo de dados. Por exemplo, você pode especificar um script de dados do usuário e um tipo de configuração de nuvem. Cada parte do arquivo multipart poderá ser tratada pelo cloud-init se for um dos formatos com suporte.
+ Decodificação de base64
  +  Se os dados do usuário estiverem codificados em base64, o cloud-init determinará se ele pode entender os dados decodificados como um dos tipos compatíveis. Se ele entender os dados decodificados, ele decodificará os dados e os tratará adequadamente. Caso contrário, ele retornará os dados base64 intactos.
+ Script de dados do usuário
  + Começa com `#!` ou `Content-Type: text/x-shellscript`.
  + O script é executado pelo `/etc/init.d/cloud-init-user-scripts` durante o primeiro ciclo de inicialização. Isso ocorre tardiamente no processo de inicialização (depois que as ações de configuração inicial são executadas).
+ Arquivo de inclusão
  + Começa com `#include` ou `Content-Type: text/x-include-url`.
  + Esse conteúdo é um arquivo de inclusão. O arquivo contém uma lista de URLs, uma por linha. Cada um deles URLs é lido e seu conteúdo passa pelo mesmo conjunto de regras. O conteúdo lido do URL pode ser comprimido com gzip ou texto MIME-multi-part simples.
+ Dados de configuração da nuvem
  + Começa com `#cloud-config` ou `Content-Type: text/cloud-config`.
  + Esse conteúdo são dados de configuração da nuvem.
+ Trabalho inicial (não suportado no AL2)
  + Começa com `#upstart-job` ou `Content-Type: text/upstart-job`.
  + Esse conteúdo é armazenado em um arquivo em`/etc/init`, e o upstart consome o conteúdo da mesma forma que faz com outros trabalhos iniciantes.
+ Gancho de inicialização na nuvem
  + Começa com `#cloud-boothook` ou `Content-Type: text/cloud-boothook`.
  + Esse conteúdo são dados boothook. São armazenados em um arquivo em `/var/lib/cloud` e executados imediatamente.
  +  Este é o *hook* mais antigo disponível. Não é fornecido nenhum mecanismo para executá-lo somente uma vez. O boothook deve cuidar disso por conta própria. Ele é fornecido com o ID de instância na variável de ambiente `INSTANCE_ID`. Use essa variável para fornecer um once-per-instance conjunto de dados do boothook.

# Configurar AL2 instâncias
<a name="configure-ec2-instance"></a>

Depois de iniciar e fazer login com sucesso na sua AL2 instância, você pode fazer alterações nela. Há muitas maneiras diferentes de configurar uma instância para atender às necessidades de uma aplicação específica. A seguir, temos algumas tarefas comuns para ajudá-lo a começar.

**Topics**
+ [Cenários de configuração comuns](#instance-configuration-scenarios)
+ [Gerencie o software na sua AL2 instância](managing-software.md)
+ [Controle de estado do processador para sua instância do Amazon EC2 AL2](processor_state_control.md)
+ [Programador de E/S para AL2](io-scheduler.md)
+ [Altere o nome do host da sua instância AL2](set-hostname.md)
+ [Configure o DNS dinâmico na sua instância AL2](dynamic-dns.md)
+ [Configure sua interface de rede usando ec2-net-utils para AL2](ec2-net-utils.md)

## Cenários de configuração comuns
<a name="instance-configuration-scenarios"></a>

A distribuição básica do Amazon Linux contém os pacotes e utilitários de software que são necessários para operações básicas de servidor. Contudo, muito mais pacotes de software estão disponíveis em vários repositórios de software e ainda mais pacotes estão disponíveis para criação a partir do código-fonte. Para obter mais informações sobre instalação e criação de software desses locais, consulte [Gerencie o software na sua AL2 instância](managing-software.md).

As instâncias do Amazon Linux vêm pré-configuradas com um `ec2-user`, mas talvez você queira adicionar outros usuários que não têm privilégios de superusuário. Para obter mais informações sobre como adicionar e remover usuários, consulte [Gerenciar usuários em sua Linux instância](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/managing-users.html) no Guia do *usuário do Amazon EC2*.

Se você tiver sua própria rede com um nome de domínio registrado, poderá alterar o nome do host de uma instância para que ela se identifique como parte do domínio. Também é possível alterar o prompt do sistema para mostrar um nome mais significativo sem alterar as configurações de nome de host. Para obter mais informações, consulte [Altere o nome do host da sua instância AL2](set-hostname.md). É possível configurar uma instância para usar um provedor de serviço DNS dinâmico. Para obter mais informações, consulte [Configure o DNS dinâmico na sua instância AL2](dynamic-dns.md).

Ao executar uma instância no Amazon EC2, você tem a opção de passar dados de usuário para a instância que podem ser usados para realizar tarefas de configuração comuns e até mesmo executar scripts após a inicialização da instância. É possível passar dois tipos de dados de usuário para as diretivas de cloud-init do Amazon EC2: e os scripts de shell. Para obter mais informações, consulte [Executar comandos em sua Linux instância na inicialização](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html) no Guia do *usuário do Amazon EC2*.

# Gerencie o software na sua AL2 instância
<a name="managing-software"></a>

A distribuição básica do Amazon Linux contém os pacotes e utilitários de software que são necessários para operações básicas de servidor.

Essas informações se aplicam AL2 a. Para obter informações sobre isso AL2023, consulte [Gerenciar pacotes e atualizações do sistema operacional AL2023 no](https://docs.aws.amazon.com/linux/al2023/ug/managing-repos-os-updates.html) *Guia do usuário do Amazon Linux 2023*.

É importante manter o software atualizado. Muitos pacotes em uma distribuição do Linux são atualizados frequentemente para corrigir erros, adicionar recursos e proteger contra exploits de segurança. Para obter mais informações, consulte [Atualize o software da instância na sua AL2 instância](install-updates.md).

Por padrão, AL2 as instâncias são iniciadas com os seguintes repositórios habilitados:
+ `amzn2-core`
+ `amzn2extra-docker`

Embora existam muitos pacotes disponíveis nesses repositórios que são atualizados pelo AWS, talvez haja um pacote que você queira instalar que esteja contido em outro repositório. Para obter mais informações, consulte [Adicionar repositórios em uma instância AL2](add-repositories.md). Para obter ajuda para encontrar e instalar pacotes nos repositórios habilitados, consulte [Encontre e instale pacotes de software em uma AL2 instância](find-install-software.md).

Nem todo software está disponível em pacotes de software armazenados em repositórios; alguns devem ser compilados em uma instância a partir do código-fonte. Para obter mais informações, consulte [Prepare-se para compilar o software em uma instância AL2](compile-software.md).

AL2 as instâncias gerenciam seu software usando o gerenciador de pacotes yum. O gerenciador de pacotes yum pode instalar, remover e atualizar software, bem como gerenciar todas as dependências para cada pacote.

**Topics**
+ [Atualize o software da instância na sua AL2 instância](install-updates.md)
+ [Adicionar repositórios em uma instância AL2](add-repositories.md)
+ [Encontre e instale pacotes de software em uma AL2 instância](find-install-software.md)
+ [Prepare-se para compilar o software em uma instância AL2](compile-software.md)

# Atualize o software da instância na sua AL2 instância
<a name="install-updates"></a>

É importante manter o software atualizado. Os pacotes em uma distribuição do Linux são atualizados frequentemente para corrigir erros, adicionar recursos e proteger contra exploits de segurança. Quando você executar e se conectar a uma instância do Amazon Linux pela primeira vez, talvez veja uma mensagem solicitando que atualize os pacotes de software para fins de segurança. Esta seção mostra como atualizar todo um sistema ou apenas um único pacote.

Essas informações se aplicam AL2 a. Para obter informações sobre isso AL2023, consulte [Gerenciar pacotes e atualizações do sistema operacional AL2023 no](https://docs.aws.amazon.com/linux/al2023/ug/managing-repos-os-updates.html) *Guia do usuário do Amazon Linux 2023*.

Para obter informações sobre alterações e atualizações AL2, consulte as [notas AL2 de versão](https://docs.aws.amazon.com/AL2/latest/relnotes/relnotes-al2.html).

Para obter informações sobre alterações e atualizações AL2023, consulte as [notas AL2023 de versão](https://docs.aws.amazon.com/linux/al2023/release-notes/relnotes.html).

**Importante**  
Se você lançou uma instância do EC2 que usa uma AMI Amazon Linux 2 em uma IPv6 sub-rede somente, você deve se conectar à instância e executá-la. `sudo amazon-linux-https disable` Isso permite que sua AL2 instância se conecte ao yum repositório no S3 IPv6 usando o serviço de patch http.

**Para atualizar todos os pacotes em uma AL2 instância**

1. (Opcional) Inicie uma sessão de **screen** em sua janela de shell. Às vezes, pode haver uma interrupção de rede que pode desconectar a conexão de SSH com sua instância. Se isso acontecer durante uma atualização longa de software, poderá deixar a instância em um estado recuperável, embora confuso. Uma sessão de **screen** permite que você continue executando a atualização mesmo se sua conexão for interrompida, e será possível se reconectar à sessão posteriormente sem problemas.

   1. Execute o comando **screen** para iniciar a sessão.

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

   1. Se a sessão for desconectada, se conecte novamente com sua instância e liste as telas disponíveis.

      ```
      [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. Reconecte a tela usando o comando **screen -r** e o ID de processo do comando anterior.

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

   1. Quando terminar de usar **screen**, use o comando **exit** para fechar a sessão.

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

1. Execute o comando **yum update**. Opcionalmente, é possível adicionar o sinalizador `--security` para aplicar apenas atualizações de segurança.

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

1. Revise os pacotes relacionados, digite **y** e pressione Enter para aceitar as atualizações. A atualização de todos os pacotes em um sistema pode levar vários minutos. A saída **yum** mostra o status da atualização durante sua execução.

1. (Opcional) [Reinicie sua instância](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-reboot.html) para garantir que você esteja usando os pacotes e bibliotecas mais recentes da sua atualização; as atualizações do kernel não são carregadas até que uma reinicialização ocorra. Também é necessário reinicializar após atualizações de bibliotecas `glibc`. Para atualizações de pacotes que controlam serviços, pode ser suficiente reiniciar os serviços para obter as atualizações, mas a reinicialização do sistema garante que todas as atualizações de pacotes e bibliotecas anteriores sejam concluídas.

**Para atualizar um único pacote em uma AL2 instância**

Use este procedimento para atualizar um único pacote (e suas dependências) e não o sistema inteiro.

1. Execute o comando **yum update** com o nome de pacote a ser atualizado.

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

1. Revise as informações de pacotes listadas, digite **y** e pressione Enter para aceitar a atualização ou atualizações. Às vezes, haverá mais de um pacote listado se houver dependências de pacotes que devem ser resolvidas. A saída **yum** mostra o status da atualização durante sua execução.

1. (Opcional) [Reinicie sua instância](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-reboot.html) para garantir que você esteja usando os pacotes e bibliotecas mais recentes da sua atualização; as atualizações do kernel não são carregadas até que uma reinicialização ocorra. Também é necessário reinicializar após atualizações de bibliotecas `glibc`. Para atualizações de pacotes que controlam serviços, pode ser suficiente reiniciar os serviços para obter as atualizações, mas a reinicialização do sistema garante que todas as atualizações de pacotes e bibliotecas anteriores sejam concluídas.

# Adicionar repositórios em uma instância AL2
<a name="add-repositories"></a>

Essas informações se aplicam AL2 a. Para obter informações sobre isso AL2023, consulte [Atualizações determinísticas por meio de repositórios versionados no Guia AL2023 do usuário](https://docs.aws.amazon.com/linux/al2023/ug/deterministic-upgrades.html) do *Amazon* Linux 2023.

Por padrão, AL2 as instâncias são iniciadas com os seguintes repositórios habilitados:
+ `amzn2-core`
+ `amzn2extra-docker`

Embora haja muitos pacotes disponíveis nesses repositórios que são atualizados pela Amazon Web Services, pode haver um pacote que você deseje instalar e que esteja contido em outro repositório.

Para instalar um pacote de um repositório diferente com **yum**, você precisa adicionar as informações do repositório ao arquivo `/etc/yum.conf` ou ao seu próprio arquivo `repository.repo` no diretório `/etc/yum.repos.d`. É possível fazer isso manualmente, mas a maioria dos repositórios yum fornece seu próprio arquivo `repository.repo` no URL do repositório.

**Para determinar quais repositórios yum já estão instalados**  
Liste os repositórios yum instalados com o seguinte comando:

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

A saída resultante lista os repositórios instalados e relata o status de cada um. Os repositórios habilitados exibem o número de pacotes que eles contêm.

**Para adicionar um repositório yum a /etc/yum.repos.d**

1. Encontre a localização do arquivo `.repo`. Isso varia dependendo do repositório que você está adicionando. Neste exemplo, o arquivo `.repo` está em `https://www.example.com/repository.repo`.

1. Adicione um repositório com o 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
   ```

Após instalar um repositório, é necessário habilitá-lo como descrito no próximo procedimento.

**Para habilitar um repositório yum em /etc/yum.repos.d**  
Use o comando **yum-config-manager** com o sinalizador `--enable repository`. O comando a seguir habilita o repositório Extra Packages for Enterprise Linux (EPEL) do projeto Fedora. Por padrão, esse repositório está presente em `/etc/yum.repos.d` em instâncias do Amazon Linux AMI, mas não está habilitado.

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

Para obter mais informações e baixar a versão mais recente desse pacote, consulte [https://fedoraproject. org/wiki/EPEL](https://fedoraproject.org/wiki/EPEL).

# Encontre e instale pacotes de software em uma AL2 instância
<a name="find-install-software"></a>

É possível usar uma ferramenta de gerenciamento de pacotes para encontrar e instalar pacotes de software. No Amazon Linux 2, a ferramenta padrão de gerenciamento de pacotes de software éYUM. Em AL2023, a ferramenta padrão de gerenciamento de pacotes de software éDNF. Para obter mais informações, consulte a [ferramenta de gerenciamento de pacotes](https://docs.aws.amazon.com/linux/al2023/ug/package-management.html) no *Guia do usuário do Amazon Linux 2023*.

## Encontre pacotes de software em uma AL2 instância
<a name="find-software"></a>

É possível usar o comando **yum search** para pesquisar as descrições de pacotes que estão disponíveis nos repositórios configurados. Isso é especialmente útil se você não souber o nome exato do pacote que deseja instalar. Basta acrescentar uma pesquisa de palavra-chave ao comando. Para pesquisar várias palavras, coloque a consulta da pesquisa entre aspas.

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

O seguinte é um exemplo de saída.

```
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
```

Consultas de pesquisa de várias palavras entre aspas apenas retornam resultados que correspondem à consulta exata. Se você não vir o pacote esperado, simplifique a pesquisa usando uma palavra-chave e verifique os resultados. Também é possível tentar usar sinônimos da palavras-chave para ampliar a pesquisa.

Para obter mais informações sobre pacotes para AL2, consulte o seguinte:
+ [AL2 Biblioteca de extras](al2-extras.md)
+ [Repositório de pacotes](ec2.md#package-repository)

## Instalar pacotes de software em uma AL2 instância
<a name="install-software"></a>

Em AL2, a ferramenta de gerenciamento de pacotes yum pesquisa pacotes de software diferentes em todos os seus repositórios habilitados e lida com quaisquer dependências no processo de instalação do software. Para obter informações sobre a instalação de pacotes de software em AL2023, consulte [Gerenciamento de pacotes e atualizações do sistema operacional](https://docs.aws.amazon.com/linux/al2023/ug/managing-repos-os-updates.html) no *Guia do usuário do Amazon Linux 2023*.

**Para instalar um pacote a partir de um repositório**  
Use o **yum install *package*** comando, *package* substituindo pelo nome do software a ser instalado. Por exemplo, para instalar o navegador da web baseado em texto **links**, insira o seguinte comando.

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

**Para instalar arquivos de pacotes RPM que você obteve por download**  
Também é possível usar **yum install** para instalar arquivos de pacotes de RPM baixados da Internet. Para fazer isso, adicione o nome do caminho de um arquivo RPM ao comando de instalação em vez de um nome de pacote de repositório.

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

**Para listar pacotes instalados**  
Para ver uma lista de pacotes instalados na instância, use o comando a seguir.

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

# Prepare-se para compilar o software em uma instância AL2
<a name="compile-software"></a>

Há softwares de código aberto disponíveis na Internet que não foram pré-compilados e disponibilizados para download de um repositório de pacotes. É possível acabar descobrindo um pacote de software que precisa compilar por conta própria, do código-fonte. Para que seu sistema possa compilar software no AL2 Amazon Linux, você precisa instalar várias ferramentas de desenvolvimento, como **make****gcc**, e. **autoconf**

Como a compilação de software não é uma tarefa necessária para toda instância do Amazon EC2, essas ferramentas não são instaladas por padrão, mas elas estão disponíveis em um grupo de pacotes chamado "Development Tools", que é adicionado facilmente a uma instância com o comando **yum groupinstall**.

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

Os pacotes de código-fonte de software geralmente estão disponíveis para download (em sites como [https://github.com/](https://github.com/)e [http://sourceforge.net/](https://sourceforge.net/)) como um arquivo compactado, chamado tarball. Esses tarballs geralmente têm a extensão de arquivo `.tar.gz`. É possível descompactar esses arquivos com o comando **tar**.

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

Após descompactar e desarquivar o pacote do código-fonte, é necessário procurar um arquivo `README` ou `INSTALL` no diretório de código-fonte que pode fornecer instruções adicionais para compilar e instalar o código-fonte. 

**Como recuperar o código-fonte dos pacotes do Amazon Linux**  
A Amazon Web Services fornece o código-fonte para pacotes mantidos. É possível fazer download do código-fonte de todos os pacotes instalados com o comando **yumdownloader --source**.

Execute o **yumdownloader --source *package*** comando para baixar o código-fonte do*package*. Por exemplo, para fazer download do código-fonte para o pacote `htop`, insira o seguinte comando.

```
[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
```

O local do RPM de origem está no diretório em que você executou o comando.

# Controle de estado do processador para sua instância do Amazon EC2 AL2
<a name="processor_state_control"></a>

C-states controlam os níveis de desativação que um núcleo pode assumir quando está inativo. Os C-states são numerados começando com C0 (o estado mais superficial em que o núcleo está totalmente ativo e executando instruções) até C6 (o estado de ociosidade mais profundo em que um núcleo está desativado).

P-states controlam a performance desejada (na frequência da CPU) de um núcleo. Os P-states são numerados começando com P0 (a configuração de performance mais elevada em que o núcleo pode usar a Intel Turbo Boost Technology para aumentar a frequência, se possível) e vão de P1 (o P-state que solicita a frequência máxima de linha de base) até P15 (a frequência mais baixa possível).

Talvez você queira alterar as configurações de C-state ou P-state para aumentar a consistência de performance do processador, reduzir a latência ou ajustar sua instância para uma workload específica. As configurações padrão de C-state e P-state proporcionam o performance máxima, que é o ideal para a maioria das workloads. Contudo, se sua aplicação se beneficiaria de latência reduzida ao custo de frequências superiores de single ou dual core, ou de uma performance consistente em frequências menores em oposição às frequências Turbo Boost expansíveis, considere experimentar as configurações de C-state ou P-state que estão disponíveis para essas instâncias.

*Para obter informações sobre os tipos de instância do Amazon EC2 que permitem que o sistema operacional controle os estados C e P do processador, consulte Controle do [estado do processador para sua instância do Amazon EC2 no Guia do usuário do Amazon EC2](https://docs.aws.amazon.com//AWSEC2/latest/UserGuide/processor_state_control.html).*

As seções a seguir descrevem as diferentes configurações de estado do processador e como monitorar os efeitos de sua configuração. Esses procedimentos foram escritos e se aplicam ao Amazon Linux; no entanto, eles também podem funcionar para outras distribuições Linux com uma versão 3.9 ou mais recente do kernel Linux.

**nota**  
Os exemplos desta página usam o seguinte:  
O utilitário **turbostat** para exibir informações sobre a frequência do processador e do estado C. O utilitário **turbostat** está disponível no Amazon Linux por padrão.
O comando **stress** para simular um workload. Para instalar o **stress**, primeiro ative o repositório EPEL executando **sudo amazon-linux-extras install epel** e, em seguida, execute **sudo yum install -y stress**.
Se a saída não exibe informações do C-state, inclua a opção **--debug** no comando (**sudo turbostat --debug stress *<options>***).

**Topics**
+ [A mais alta performance com a frequência máxima de Turbo Boost](#turbo-perf)
+ [Alta performance e baixa latência limitando os C-states mais profundos](#c-states)
+ [Performance basal com menor variabilidade](#baseline-perf)

## A mais alta performance com a frequência máxima de Turbo Boost
<a name="turbo-perf"></a>

Essa é a configuração de controle de estado do processador padrão para o Amazon Linux AMI, e é a recomendada para a maioria das workloads. Essa configuração fornece a mais alta performance com menor variabilidade. Permitir que os núcleos inativos assumam os estados mais profundos de desativação fornece o espaço térmico para processos de single ou dual core a fim de atingir o potencial máximo de Turbo Boost.

O exemplo a seguir mostra uma instância `c4.8xlarge` com dois núcleos que executam o trabalho de forma ativa, atingindo a frequência Turbo Boost do processador.

```
[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
```

Neste exemplo, as versões CPUs 21 e 28 estão funcionando na frequência máxima do Turbo Boost porque os outros núcleos entraram no estado de `C6` espera para economizar energia e fornecer energia e espaço térmico para os núcleos de trabalho. Os CPUs v3 e 10 (cada um compartilhando um núcleo de processador com as v CPUs 21 e 28) estão no `C1` estado aguardando instruções.

No exemplo a seguir, todos os 18 núcleos estão trabalhando ativamente, portanto, não há espaço livre para o Turbo Boost máximo, mas todos estão funcionando na velocidade “Turbo Boost de todos os núcleos” de 3,2. 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
...
```

## Alta performance e baixa latência limitando os C-states mais profundos
<a name="c-states"></a>

Os C-states controlam os níveis de desativação que um núcleo pode assumir quando está inativo. É possível controlar os C-states para ajustar seu sistema em relação à latência versus performance. Desativar núcleos leva tempo e, embora um núcleo desativado forneça mais espaço para um núcleo funcionar em uma frequência mais alta, leva tempo para que esse núcleo desativado seja reativado e execute o trabalho. Por exemplo, se um núcleo que receber a tarefa de lidar com interrupções de pacotes da internet estiver desativado, poderá ocorrer um atraso em lidar com essa interrupção. É possível configurar o sistema para não usar C-states mais profundos, o que reduz a latência de reação do processador, mas que, por sua vez, também reduz o espaço disponível para outros núcleos para Turbo Boost.

Um cenário comum para desabilitar estados de desativação mais profundos é uma aplicação de banco de dados Redis, que armazena o banco de dados na memória do sistema para o tempo de resposta de consulta mais rápido possível.

**Para limitar os estados de sono mais profundos em AL2**

1. Abra o arquivo `/etc/default/grub` com o editor de preferência.

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

1. Edite a linha `GRUB_CMDLINE_LINUX_DEFAULT` e adicione as opções `intel_idle.max_cstate=1` e `processor.max_cstate=1` para definir `C1` como o estado C mais profundo para núcleos inativos.

   ```
   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
   ```

   A opção `intel_idle.max_cstate=1` configura o limite de estado C para instâncias baseadas em Intel e a opção `processor.max_cstate=1` configura o limite de estado C para instâncias baseadas em AMD. É seguro adicionar as duas opções à sua configuração. Isso permite que uma única configuração defina o comportamento desejado para Intel e AMD.

1. Salve o arquivo e saia do editor.

1.  Execute o comando a seguir para recompilar a configuração de inicialização.

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

1. Reinicialize sua instância para habilitar a nova opção de kernel.

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

**Para limitar estados de desativação mais profundos no Amazon Linux AMI**

1. Abra o arquivo `/boot/grub/grub.conf` com o editor de preferência.

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

1. Edite a linha `kernel` da primeira entrada e adicione as opções `intel_idle.max_cstate=1` e `processor.max_cstate=1` para definir `C1` como o estado C mais profundo para núcleos inativos.

   ```
   # 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
   ```

   A opção `intel_idle.max_cstate=1` configura o limite de estado C para instâncias baseadas em Intel e a opção `processor.max_cstate=1` configura o limite de estado C para instâncias baseadas em AMD. É seguro adicionar as duas opções à sua configuração. Isso permite que uma única configuração defina o comportamento desejado para Intel e AMD.

1. Salve o arquivo e saia do editor.

1. Reinicialize sua instância para habilitar a nova opção de kernel.

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

O exemplo a seguir mostra uma instância `c4.8xlarge` com dois núcleos que executam o trabalho de forma ativa na frequência "all core Turbo Boost" do núcleo.

```
[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
...
```

Neste exemplo, os núcleos para v CPUs 19 e 28 estão rodando em 3.2 GHz, e os outros núcleos estão no `C1` estado C, aguardando instruções. Embora os núcleos de trabalho não estejam atingindo a frequência máxima de Turbo Boost, os núcleos inativos responderão com muito mais rapidez a novas solicitações do que o fariam se estivessem no C-state `C6` mais profundo.

## Performance basal com menor variabilidade
<a name="baseline-perf"></a>

É possível reduzir a variabilidade da frequência do processador com P-states. Os P-states controlam a performance desejada (na frequência da CPU) de um núcleo. A maioria das workloads funcionam melhor em P0, o que exige Turbo Boost. No entanto, é possível ajustar seu sistema para obter uma performance consistente em vez de uma performance expansível que pode acontecer quando as frequências Turbo Boost são habilitadas. 

As cargas de trabalho do Intel Advanced Vector Extensions (AVX ou AVX2) podem funcionar bem em frequências mais baixas, e as instruções AVX podem usar mais energia. Executar o processador em uma frequência menor desabilitando o Turbo Boost pode reduzir a quantidade de energia usada e manter a velocidade mais consistente. Para obter mais informações sobre como otimizar suas configurações de instância e workload para AVX, consulte o [site da 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).

Drivers ociosos da CPU controlam o estado P. As gerações mais recentes de CPU requerem drivers ociosos da CPU atualizados que correspondam ao nível do kernel da seguinte forma:
+ Versões 6.1 e superiores do kernel Linux — Suporta Intel Granite Rapids (por exemplo, R8i)
+ Versões 5.10 e superiores do kernel Linux — Compatível com AMD Milan (por exemplo, M6a)
+ Versões 5.6 e superiores do kernel Linux — Suporta Intel Icelake (por exemplo, M6i)

Para detectar se o kernel de um sistema em execução reconhece a CPU, execute o seguinte 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
```

Se a saída desse comando indicar falta de suporte, recomendamos que você atualize o kernel.

Esta seção descreve como limitar estados de desativação mais profundos e desabilitar o Turbo Boost (solicitando o P-state `P1`) para fornecer baixa latência e menor variabilidade da velocidade do processador para esses tipos de fluxos de trabalho.

**Para limitar estados de sono mais profundos e desativar o Turbo Boost em AL2**

1. Abra o arquivo `/etc/default/grub` com o editor de preferência.

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

1. Edite a linha `GRUB_CMDLINE_LINUX_DEFAULT` e adicione as opções `intel_idle.max_cstate=1` e `processor.max_cstate=1` para definir `C1` como o estado C mais profundo para núcleos inativos.

   ```
   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
   ```

   A opção `intel_idle.max_cstate=1` configura o limite de estado C para instâncias baseadas em Intel e a opção `processor.max_cstate=1` configura o limite de estado C para instâncias baseadas em AMD. É seguro adicionar as duas opções à sua configuração. Isso permite que uma única configuração defina o comportamento desejado para Intel e AMD.

1. Salve o arquivo e saia do editor.

1.  Execute o comando a seguir para recompilar a configuração de inicialização.

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

1. Reinicialize sua instância para habilitar a nova opção de kernel.

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

1. Quando você precisar da baixa variabilidade da velocidade do processador que o P-state `P1` fornece, execute o seguinte comando para desabilitar o Turbo Boost.

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

1. Quando sua workload for concluída, será possível reabilitar o Turbo Boost com o seguinte comando.

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

**Para limitar estados de desativação mais profundos e desabilitar o Turbo Boost no Amazon Linux AMI**

1. Abra o arquivo `/boot/grub/grub.conf` com o editor de preferência.

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

1. Edite a linha `kernel` da primeira entrada e adicione as opções `intel_idle.max_cstate=1` e `processor.max_cstate=1` para definir `C1` como o estado C mais profundo para núcleos inativos.

   ```
   # 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
   ```

   A opção `intel_idle.max_cstate=1` configura o limite de estado C para instâncias baseadas em Intel e a opção `processor.max_cstate=1` configura o limite de estado C para instâncias baseadas em AMD. É seguro adicionar as duas opções à sua configuração. Isso permite que uma única configuração defina o comportamento desejado para Intel e AMD.

1. Salve o arquivo e saia do editor.

1. Reinicialize sua instância para habilitar a nova opção de kernel.

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

1. Quando você precisar da baixa variabilidade da velocidade do processador que o P-state `P1` fornece, execute o seguinte comando para desabilitar o Turbo Boost.

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

1. Quando sua workload for concluída, será possível reabilitar o Turbo Boost com o seguinte comando.

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

O exemplo a seguir mostra uma `c4.8xlarge` instância com dois v executando CPUs ativamente o trabalho na frequência central básica, sem 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
```

Os núcleos para v CPUs 21 e 28 estão trabalhando ativamente na velocidade básica do processador de 2,9 GHz, e todos os núcleos inativos também estão funcionando na velocidade básica no `C1` estado C, prontos para aceitar instruções.

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

As I/O scheduler is a part of the Linux operating system that sorts and merges I/O solicitações e determina a ordem na qual elas são processadas.

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/Oos programadores têm menos efeito com dispositivos de estado sólido e ambientes virtualizados. Isso ocorre porque, para dispositivos de estado sólido, o acesso sequencial e o acesso aleatório não diferem e, para ambientes virtualizados, o host fornece sua própria camada de programação.

Este tópico discute o I/O agendador Amazon Linux. Para obter mais informações sobre o programador de E/S usado por outras distribuições Linux, consulte a respectiva documentação.

**Topics**
+ [Programadores com suporte](#supported-schedulers)
+ [Programador padrão](#default-schedulers)
+ [Alterar o programador](#change-scheduler)

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

O Amazon Linux oferece suporte aos seguintes I/O agendadores:
+ `deadline`— O I/O agendador de *prazos* classifica as I/O solicitações e as trata na ordem mais eficiente. Isso garante uma hora de início para cada I/O request. It also gives I/O solicitação que está pendente há muito tempo e tem uma prioridade mais alta.
+ `cfq`— O I/O programador *Completely Fair Queueing* (CFQ) tenta I/O resources between processes. It sorts and inserts I/O alocar de forma justa as solicitações em filas por processo.
+ `noop`— As I/O scheduler inserts all I/O solicitações *No Operation* (noop) em uma fila FIFO e as mesclam em uma única solicitação. Esse programador não faz nenhuma classificação de solicitações.

## Programador padrão
<a name="default-schedulers"></a>

No Operation (noop) é o I/O agendador padrão para o Amazon Linux. Este programador é usado pelos seguintes motivos:
+ Muitos tipos de instância usam dispositivos virtualizados em que o host subjacente executa a programação para a instância.
+ Dispositivos de estado sólido são usados em muitos tipos de instâncias em que os benefícios de um I/O programador têm menos efeito.
+ É o I/O programador menos invasivo e pode ser personalizado, se necessário.

## Alterar o programador
<a name="change-scheduler"></a>

A alteração do I/O agendador pode aumentar ou diminuir o desempenho com base no fato de o agendador resultar na conclusão de mais ou menos I/O solicitações em um determinado período. Isso depende, em grande parte, da workload, da geração do tipo de instância que está sendo usado e do tipo de dispositivo que está sendo acessado. Se você alterar o programador de E/S que está sendo usado, recomendamos usar uma ferramenta, como **iotop**, para medir o I/O desempenho e determinar se a alteração é benéfica para seu caso de uso.

Você pode visualizar o I/O agendador de um dispositivo usando o comando a seguir, que usa `nvme0n1` como exemplo. Substitua `nvme0n1` no comando a seguir pelo dispositivo listado em `/sys/block` na sua instância.

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

Para definir o I/O agendador para o dispositivo, use o comando a seguir. 

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

Por exemplo, para definir o I/O agendador para um *xvda* dispositivo de `noop` até`cfq`, use o comando a seguir. 

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

# Altere o nome do host da sua instância AL2
<a name="set-hostname"></a>

Quando você inicia uma instância em uma VPC privada, o Amazon EC2 atribui um nome de host do sistema operacional convidado. O tipo de nome de host que o Amazon EC2 atribui depende das suas configurações de sub-rede. Para obter mais informações sobre nomes de host do EC2, consulte os tipos de [nome de host da instância do Amazon EC2 no Guia do usuário](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-naming.html) do Amazon *EC2*.

Um nome DNS privado típico do Amazon EC2 para uma instância do EC2 configurada para usar nomenclatura baseada em IP com um IPv4 endereço é mais ou menos assim:`ip-12-34-56-78.us-west-2.compute.internal`, onde o nome consiste no domínio interno, no serviço (nesse caso,`compute`), na região e em uma forma do endereço privado. IPv4 Parte desse nome do host é exibida no prompt do shell quando você se conecta à sua instância (por exemplo, `ip-12-34-56-78`). Cada vez que você interrompe e reinicia sua instância do Amazon EC2 (a menos que esteja usando um endereço IP elástico), o IPv4 endereço público muda, assim como seu nome DNS público, nome de host do sistema e prompt de shell.

**Importante**  
Essas informações se aplicam ao Amazon Linux. Para obter informações sobre outras distribuições, consulte a documentação específica.

## Alterar o nome do host do sistema
<a name="set-hostname-system"></a>

Se você tiver um nome DNS público registrado para o endereço IP de sua instância (como `webserver.mydomain.com`), poderá configurar o nome do host do sistema para que a instância se identifique como parte do domínio. Isso também altera o prompt do shell para que ele exiba a primeira parte desse nome em vez do nome do host fornecido por AWS (por exemplo,`ip-12-34-56-78`). Se você não tiver um nome DNS público registrado, ainda assim poderá alterar o nome do host, mas o processo é um pouco diferente.

Para que a atualização do nome do host seja mantida, verifique se a `preserve_hostname`configuração do cloud-init está definida como `true`. É possível executar o seguinte comando para editar ou adicionar essa configuração:

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

Se a configuração `preserve_hostname` não estiver listada, adicione a seguinte linha de texto ao final do arquivo: 

```
preserve_hostname: true
```

**Para alterar o nome do host do sistema para um nome DNS público**

Siga este procedimento se você já tiver um nome DNS público registrado.

1. 
   + Para AL2: Use o **hostnamectl** comando para definir seu nome de host para refletir o nome de domínio totalmente qualificado (como**webserver.mydomain.com**).

     ```
     [ec2-user ~]$ sudo hostnamectl set-hostname webserver.mydomain.com
     ```
   + Para Amazon Linux AMI: em sua instância, abra o arquivo de configuração `/etc/sysconfig/network` em seu editor de preferência e altere a entrada `HOSTNAME` para refletir o nome de domínio totalmente qualificado (como **webserver.mydomain.com**).

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

1. Reinicialize a instância para obter o novo nome do host.

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

   Como alternativa, é possível reinicializar usando o console do Amazon EC2 (na página **Instances (Instâncias)**, selecione a instância e escolha **Instance state (Estado da instância)** e **Reboot instance (Reinicializar instância)**).

1. Conecte-se à sua instância e verifique se o nome do host foi atualizado. O prompt deverá mostrar o novo nome do host (até o primeiro ".") e o comando **hostname** deve mostrar o nome de domínio totalmente qualificado.

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

**Para alterar o nome do host do sistema sem um nome DNS público**

1. 
   + Para AL2: Use o **hostnamectl** comando para definir seu nome de host para refletir o nome de host do sistema desejado (como**webserver**).

     ```
     [ec2-user ~]$ sudo hostnamectl set-hostname webserver.localdomain
     ```
   + No Amazon Linux AMI: em sua instância, abra o arquivo de configuração `/etc/sysconfig/network` em seu editor de texto de preferência e altere a entrada `HOSTNAME` para refletir o nome do host do sistema desejado (como webserver **webserver**).

     ```
     HOSTNAME=webserver.localdomain
     ```

1. Abra o arquivo `/etc/hosts` em seu editor de texto de preferência e altere a entrada começando com **127.0.0.1** para corresponder ao exemplo abaixo, substituindo seu próprio nome do host.

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

1. Reinicialize a instância para obter o novo nome do host.

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

   Como alternativa, é possível reinicializar usando o console do Amazon EC2 (na página **Instances (Instâncias)**, selecione a instância e escolha **Instance state (Estado da instância)** e **Reboot instance (Reinicializar instância)**).

1. Conecte-se à sua instância e verifique se o nome do host foi atualizado. O prompt deverá mostrar o novo nome do host (até o primeiro ".") e o comando **hostname** deve mostrar o nome de domínio totalmente qualificado.

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

Também é possível implementar soluções mais programáticas, como especificar dados do usuário para configurar sua instância. Se sua instância fizer parte de um grupo do Auto Scaling, você poderá usar ganchos do ciclo de vida para definir os dados do usuário. Para obter mais informações, consulte [Executar comandos em sua instância do Linux na inicialização](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html) e [Hook do ciclo de vida para inicialização da instância](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-autoscaling-lifecyclehook.html#aws-resource-autoscaling-lifecyclehook--examples--Lifecycle_hook_for_instance_launch) no *Guia do usuário AWS CloudFormation *.

## Alterar o prompt do shell sem afetar o nome do host
<a name="set-hostname-shell"></a>

Se você não quiser modificar o nome do host da sua instância, mas quiser que um nome de sistema mais útil (como**webserver**) seja exibido do que o nome privado fornecido por AWS (por exemplo,`ip-12-34-56-78`), edite os arquivos de configuração do prompt do shell para exibir o apelido do sistema em vez do nome do host.

**Para alterar o prompt do shell para um apelido de host**

1. Crie um arquivo em `/etc/profile.d` que defina a variável do ambiente chamada `NICKNAME` para o valor que você deseja no prompt do shell. Por exemplo, para definir o apelido do sistema como **webserver**, execute o seguinte comando.

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

1. Abra o arquivo `/etc/bashrc` (Red Hat) ou `/etc/bash.bashrc` (Debian/Ubuntu) no seu editor de texto favorito (como **vim** ou **nano**). Você precisa usar **sudo** com o comando do editor, pois `/etc/bashrc` e `/etc/bash.bashrc` são de propriedade de `root`.

1. Edite o arquivo e altere a variável do prompt do shell (`PS1`) para exibir seu apelido em vez do nome do host. Encontre a seguinte linha que define o prompt do shell em `/etc/bashrc` ou `/etc/bash.bashrc` (várias linhas adjacentes são mostradas abaixo para fornecer o contexto; procure a linha que começa com `[ "$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
   ```

   Altere o `\h` (o símbolo para `hostname`) nessa linha para o valor da variável `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 configurar o título nas janelas do shell com um novo apelido, conclua as seguintes etapas.

   1. Crie um arquivo chamado `/etc/sysconfig/bash-prompt-xterm`.

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

   1. Torne o arquivo executável usando o comando a seguir.

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

   1. Abra o arquivo `/etc/sysconfig/bash-prompt-xterm` no seu editor de texto de preferência (como **vim** ou **nano**). Você precisará usar **sudo** com o comando do editor, pois `/etc/sysconfig/bash-prompt-xterm` é de propriedade de `root`.

   1. Adicione a linha a seguir ao arquivo.

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

1. Desconecte-se e conecte-se novamente para obter o novo valor do apelido.

## Alterar o nome do host em outras distribuições do Linux
<a name="set-hostname-other-linux"></a>

Os procedimentos desta página são destinados ao uso com o Amazon Linux somente. Para obter mais informações sobre outras distribuições do Linux, consulte a documentação específica e os seguintes artigos:
+ [Como atribuo um nome do host estático a uma instância do Amazon EC2 privada executando RHEL 7 ou Centos 7?](https://aws.amazon.com/premiumsupport/knowledge-center/linux-static-hostname-rhel7-centos7/)

# Configure o DNS dinâmico na sua instância AL2
<a name="dynamic-dns"></a>

Quando você inicia uma instância do EC2, ela recebe um endereço IP público e a um Sistema de Nomes de Domínio (DNS) público que é possível usar para ter acesso a ela pela Internet. Como há muitos hosts no domínio da Amazon Web Services, esses nomes públicos devem ser longos o suficiente para que cada nome permaneça exclusivo. Um nome DNS público típico do Amazon EC2 é mais ou menos assim:`ec2-12-34-56-78.us-west-2.compute.amazonaws.com`, onde o nome consiste no domínio da Amazon Web Services, no serviço (nesse caso,`compute`) Região da AWS, no e em uma forma do endereço IP público.

Os serviços de DNS dinâmico fornecem nomes do host DNS personalizados na área de domínio que sejam fáceis de lembrar e também mais apropriados ao caso de uso do host. Alguns desses serviços também são gratuitos. Alguns desses serviços também são gratuitos. É possível usar um provedor DNS dinâmico com o Amazon EC2 e configurar a instância para atualizar o endereço IP associado a um nome DNS público sempre que uma instância for iniciada. Há muitos provedores diferentes à sua escolha, e os detalhes específicos da escolha do provedor e do registro de um nome com ele estão fora do escopo deste guia.<a name="procedure-dynamic-dns"></a>

**Para usar o DNS dinâmico com o Amazon EC2**

1. Cadastre-se com um provedor de serviços DNS dinâmico e registre um nome DNS público com o serviço. Esse procedimento usa o serviço gratuito de [noip.com/free](https://www.noip.com/free) como exemplo.

1. Configure o cliente de atualização de DNS dinâmico. Após registrar um provedor de serviços de DNS dinâmico e um nome DNS público com o serviço, aponte o nome DNS para o endereço IP de sua instância. Muitos provedores (incluindo o [noip.com](https://noip.com)) permitem que você faça isso manualmente na página da conta em seu site, mas muitos também oferecem suporte a clientes de atualização de software. Se um cliente de atualização estiver sendo executado na instância do EC2, o registro do DNS dinâmico será atualizado sempre que o endereço IP mudar, como após o encerramento e a reinicialização. Neste exemplo, você instala o cliente noip2, que funciona com o serviço proporcionado pelo [noip.com](https://noip.com).

   1. Ative o repositório Extra Packages for Enterprise Linux (EPEL) para obter acesso ao `noip2` cliente.
**nota**  
AL2 as instâncias têm as chaves GPG e as informações do repositório do EPEL instaladas por padrão. Para obter mais informações e baixar a versão mais recente desse pacote, consulte [https://fedoraproject. org/wiki/EPEL](https://fedoraproject.org/wiki/EPEL).

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

   1. Instale o pacote `noip`.

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

   1. Crie o arquivo de configuração. Insira as informações de login e senha quando solicitado e responda as perguntas subsequentes para configurar o cliente.

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

1. Habilite o serviço noip.

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

1. Inicie o serviço noip.

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

   Esse comando inicia o cliente, que lê o arquivo de configuração (`/etc/no-ip2.conf`) que você criou anteriormente e atualiza o endereço IP para o nome DNS público que você escolher.

1. Verifique se o cliente de atualização definiu o endereço IP correto para o nome DNS dinâmico. Aguarde alguns minutos para que os registros DNS sejam atualizados e tente se conectar à sua instância usando SSH com o nome DNS público que você configurou nesse procedimento.

# Configure sua interface de rede usando ec2-net-utils para AL2
<a name="ec2-net-utils"></a>

O Amazon Linux 2 AMIs pode conter scripts adicionais instalados pelo AWS, conhecidos como ec2-net-utils. Esses scripts opcionalmente automatizam a configuração das suas interfaces de rede. Esses scripts estão disponíveis AL2 somente para.

**nota**  
Para o Amazon Linux 2023, o `amazon-ec2-net-utils` pacote gera configurações específicas de interface no diretório. `/run/systemd/network` Para obter mais informações, consulte [Networking service (serviço de networking)](https://docs.aws.amazon.com/linux/al2023/ug/networking-service.html) no *Amazon Linux 2023 User Guide (Guia do usuário do Amazon Linux 2023)*.

Use o comando a seguir para instalar o pacote, AL2 se ele ainda não estiver instalado, ou atualize-o se estiver instalado e houver atualizações adicionais disponíveis:

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

Os componentes a seguir fazem parte de ec2-net-utils:

Regras udev (`/etc/udev/rules.d`)  
Identifica interfaces de rede quando são associadas, separadas ou religadas a uma instância em execução, e garante que o script de hotplug seja executado (`53-ec2-network-interfaces.rules`). Mapeia o endereço MAC para um nome de dispositivo (`75-persistent-net-generator.rules`, que gera `70-persistent-net.rules`).

Script de hotplug  
Gera um arquivo de configuração de interface apropriado para uso com DHCP (`/etc/sysconfig/network-scripts/ifcfg-eth`*N*). Gera também um arquivo de configuração de rota (`/etc/sysconfig/network-scripts/route-eth`*N*).

Script de DHCP  
Sempre que a interface de rede receber um novo lease do DHCP, esse script consultará os metadados da instância para endereços IP elásticos. Para cada endereço IP elástico, ele adiciona uma regra ao banco de dados de políticas de roteamento para garantir que o tráfego de saída desse endereço use a interface de rede correta. Ele também adiciona cada endereço IP privado à interface de rede como um endereço secundário.

**ec2ifup** eth*N* (`/usr/sbin/`)  
Estende a funcionalidade de padrão **ifup**. Depois de o script reescrever os arquivos de configuração `ifcfg-eth`*N* e `route-eth`*N*, ele executará o **ifup**.

**ec2ifdown** eth*N* (`/usr/sbin/`)  
Estende a funcionalidade de padrão **ifdown**. Depois de o script eliminar todas as regras da interface de rede do banco de dados de políticas de roteamento, ele executará o **ifdown**.

**ec2ifscan** (`/usr/sbin/`)  
Verifica se há interfaces de rede que não foram configuradas e as configura.  
Este script não está disponível na versão inicial de ec2-net-utils.

Para listar todos os arquivos de configuração gerados por ec2-net-utils, use o seguinte comando:

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

Para desabilitar a automação, é possível adicionar `EC2SYNC=no` ao arquivo `ifcfg-eth`*N* correspondente. Por exemplo, use o comando a seguir para desabilitar a automação da interface eth1:

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

Para desativar completamente a automação, pode remover o pacote usando o seguinte comando:

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

# Kernels fornecidos pelo usuário
<a name="UserProvidedKernels"></a>

Se você precisar de um kernel personalizado nas instâncias do Amazon EC2, poderá iniciar com uma AMI próxima da que você deseja, compilar o kernel personalizado na instância e atualizar o bootloader para apontar para o novo kernel. Esse processo varia de acordo com o tipo de virtualização que sua AMI usa. Para obter mais informações, consulte os [tipos de virtualização do Linux AMI](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/virtualization_types.html) no Guia do *usuário do Amazon EC2*.

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

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

Volumes de instância HVM são tratados como discos físicos reais. O processo de inicialização é semelhante ao de um sistema operacional bare metal, com um disco particionado e um bootloader, que permite a ele funcionar com todas as distribuições do Linux atualmente compatíveis. O bootloader mais comum é o GRUB ou. GRUB2

Por padrão, o GRUB não envia sua saída para o console da instância, pois cria um atraso de inicialização a mais. Para obter mais informações, consulte [Saída de console da instância](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/troubleshoot-unreachable-instance.html#instance-console-console-output) no *Guia do usuário Amazon EC2*. Se você estiver instalando um kernel personalizado, considere habilitar a saída do GRUB.

Não é necessário especificar um kernel de fallback, mas recomendamos que você tenha um fallback ao testar um novo kernel. O GRUB podem recuar para outro kernel no caso de o novo kernel falhar. Ter um kernel de fallback reserva permite que a instância seja inicializada mesmo se o novo kernel não for encontrado.

O GRUB legado usado `/boot/grub/menu.lst` pelo Amazon Linux. GRUB2 para AL2 usos`/etc/default/grub`. Para obter mais informações sobre como atualizar o kernel padrão no bootloader, consulte a documentação de sua distribuição do Linux.

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

AMIs que usam virtualização paravirtual (PV) usam um sistema chamado *PV-GRUB* durante o processo de inicialização. PV-GRUB é um bootloader paravirtual que executa uma versão corrigida do GNU GRUB 0.97. Quando você inicia uma instância, o PV-GRUB inicia o processo de inicialização da cadeia e, em seguida, carrega o kernel especificado pelo arquivo da sua imagem `menu.lst`.

O PV-GRUB entende os comandos `grub.conf` ou `menu.lst` padrão, que permite que ele trabalhe com todas as distribuições do Linux com suporte no momento. Distribuições mais antigas, como Ubuntu 10.04 LTS, Oracle Enterprise Linux ou CentOS 5.x, exigem um pacote especial de kernels "ec2" ou "xen", enquanto distribuições mais novas incluem os drivers necessários no pacote de kernel padrão.

A maioria das AMIs paravirtuais modernas usa uma AKI PV-GRUB padrão (incluindo todas as AMIs em Linux paravirtuais disponíveis no menu Início rápido do Launch Wizard do Amazon EC2), por isso não há etapas adicionais que você precisa tomar para usar um kernel diferente na sua instância, desde que o kernel desejado seja compatível com sua distribuição. A melhor maneira de executar um kernel personalizado na instância é começar com a AMI mais próxima à que você deseja, compilar o kernel personalizado na instância e modificar o arquivo `menu.lst` para ser inicializado com esse kernel.

É possível verificar se a imagem do kernel de uma AMI é uma AKI PV-GRUB. Execute o comando a seguir [describe-images](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html) (substituindo seu ID de imagem do kernel) e verifique se o campo `Name` começa com `pv-grub`:

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

**Topics**
+ [Limitações do PV-GRUB](#pv-grub-limitations)
+ [Configuring GRUB](#configuringGRUB)
+ [Imagem do kernel Amazon PV-GRUB IDs](#AmazonKernelImageIDs)
+ [Atualizar PV-GRUB](#UpdatingPV-GRUB)

### Limitações do PV-GRUB
<a name="pv-grub-limitations"></a>

O PV-GRUB tem as seguintes limitações:
+ Você não pode usar a versão de 64 bits do PV-GRUB para iniciar um kernel de 32 bits ou vice-versa.
+ Você não pode especificar uma imagem de ramdisk da Amazon (ARI) ao usar uma PV-GRUB AKI.
+ AWS testou e verificou se o PV-GRUB funciona com esses formatos de sistema de arquivos: EXT2,,, JFS EXT3 EXT4, XFS e ReiserFS. Outros formatos de sistema de arquivos podem não funcionar.
+ O PV-GRUB pode inicializar os kernels compactados usando os formatos de compressão gzip, bzip2, lzo e xz.
+ O cluster AMIs não suporta nem precisa do PV-GRUB, porque eles usam a virtualização completa de hardware (HVM). Enquanto instâncias paravirtuais usam PV-GRUB para iniciar, os volumes de instância de HVM são tratados como discos reais, e o processo de inicialização é semelhante ao processo de inicialização do sistema operacional bare metal com um disco particionado e um bootloader. 
+ O PV-GRUB versões 1.03 e anteriores não são compatíveis com particionamento de GPT; elas oferecem suporte somente a particionamento MBR.
+ Se você planeja usar um gerenciador de volumes lógicos (LVM) com os volumes do Amazon Elastic Block Store (Amazon EBS), precisa de uma partição de inicialização separada do LVM. Então, é possível criar volumes lógicos com o LVM.

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

Para inicializar PV-GRUB, deve existir um arquivo `menu.lst` do GRUB na imagem; a localização mais comum para esse arquivo é `/boot/grub/menu.lst`.

A seguir está um exemplo de um arquivo de configuração de `menu.lst` para inicializar uma AMI com uma PV-GRUB AKI. Neste exemplo, há duas entradas de kernel para escolher: do Amazon Linux 2018.03 (o kernel original desta AMI) e Vanilla Linux 4.16.4 (uma versão mais recente do kernel Vanilla Linux de [https://www.kernel.org/](https://www.kernel.org/)). A entrada de Vanilla foi copiada da entrada original para essa AMI, e os caminhos `kernel` e `initrd` foram atualizados para os novos locais. O parâmetro `default 0` aponta o bootloader para a primeira entrada que vê (nesse caso, a entrada do Vanilla), e o parâmetro `fallback 1` aponta o bootloader para a entrada seguinte se houver um problema em inicializar o primeiro.

```
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
```

Você não precisa especificar o kernel de fallback no seu arquivo `menu.lst`, mas recomendamos que você tenha um fallback ao testar um novo kernel. O PV-GRUB podem recuar para outro kernel no caso de o novo kernel falhar. Ter um kernel de fallback reserva permite que a instância inicialize mesmo se o novo kernel não for encontrado. 

O PV-GRUB verifica os seguintes locais quanto a `menu.lst` usando o primeiro que encontrar:
+  `(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` 

Observe que PV-GRUB 1.03 e anteriores só verificam um dos dois primeiros locais dessa lista.

### Imagem do kernel Amazon PV-GRUB IDs
<a name="AmazonKernelImageIDs"></a>

As AKIs do PV-GRUB estão disponíveis em todas as regiões do Amazon EC2, exceto a Ásia-Pacífico (Osaka). Existem AKIs para os tipos de arquitetura de 32 e 64 bits. A maioria dos modernos AMIs usa uma API PV-GRUB por padrão.

Recomendamos que você sempre use a versão mais recente da AKI PV-GRUB, pois nem todas as versões são compatíveis com todos os tipos de instância. Use o seguinte comando [describe-images](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html) para obter uma lista do PV-GRUB para a região atual AKIs :

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

A PV-GRUB é a única AKI disponível na região `ap-southeast-2`. É necessário verificar se alguma AMI que deseja copiar para essa região está usando uma versão de PV-GRUB disponível nessa região.

A seguir estão as AKI atuais IDs para cada região. Registre um novo AMIs usando uma AKI hd0.

**nota**  
Continuamos fornecendo hd00 AKIs para compatibilidade com versões anteriores nas regiões em que eles estavam disponíveis anteriormente.


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

| ID da imagem | Nome da imagem | 
| --- | --- | 
|  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 da imagem | Nome da imagem | 
| --- | --- | 
|  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 da imagem | Nome da imagem | 
| --- | --- | 
|  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 da imagem | Nome da imagem | 
| --- | --- | 
|  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 da imagem | Nome da imagem | 
| --- | --- | 
|  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 da imagem | Nome da imagem | 
| --- | --- | 
|  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 da imagem | Nome da imagem | 
| --- | --- | 
|  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 (Oeste dos EUA)**  

| ID da imagem | Nome da imagem | 
| --- | --- | 
|  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 da imagem | Nome da imagem | 
| --- | --- | 
|  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 da imagem | Nome da imagem | 
| --- | --- | 
|  aki-7a69931a  |  pv-grub-hd0\$11.05-i386.gz  | 
|  aki-70cb0e10  |  pv-grub-hd0\$11.05-x86\$164.gz  | 

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

Recomendamos que você sempre use a versão mais recente da AKI PV-GRUB, pois nem todas as versões são compatíveis com todos os tipos de instância. Além disso, versões mais antigas do PV-GRUB não estão disponíveis em todas as regiões. Por isso, se você copiar uma AMI usando uma versão mais antiga para uma região que não oferece suporte a essa versão, será incapaz de inicializar as instâncias executadas a partir daquela AMI até que atualize a imagem do kernel. Use os procedimentos a seguir para verificar a versão da sua instância do PV-GRUB e atualizá-la, se necessário.

**Para verificar sua versão do PV-GRUB**

1. Encontre o ID do kernel para sua instância.

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

   O ID do kernel para essa instância é `aki-70cb0e10`.

1. Veja as informações de versão do ID desse 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"
           }
       ]
   }
   ```

   Esta imagem do kernel é PV-GRUB 1.05. Se a versão do PV-GRUB não for a mais nova (conforme exibido em [Imagem do kernel Amazon PV-GRUB IDs](#AmazonKernelImageIDs)), atualize-a usando o procedimento a seguir.

**Para atualizar sua versão do PV-GRUB**

Se sua instância estiver usando uma versão mais antiga de PV-GRUB, atualize-a para a versão mais recente.

1. Identifique a AKI PV-GRUB mais recente para sua região e arquitetura de processadores de [Imagem do kernel Amazon PV-GRUB IDs](#AmazonKernelImageIDs).

1. Pare a instância. Sua instância deve ser interrompida para modificar a imagem do kernel usada.

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

1. Modifique a imagem do kernel usada para sua instância.

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

1. Reinicie sua instância.

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

# AL2 Notificações de lançamento da AMI
<a name="linux-ami-notifications"></a>

Para ser notificado quando um novo Amazon Linux AMIs for lançado, você pode se inscrever usando o Amazon SNS.

Para obter informações sobre a assinatura de notificações AL2023, consulte [Recebimento de notificações sobre novas atualizações](https://docs.aws.amazon.com/linux/al2023/ug/receive-update-notification.html) no *Guia do usuário do Amazon Linux 2023*.

**nota**  
O suporte padrão AL1 terminou em 31 de dezembro de 2020. A fase AL1 de suporte de manutenção terminou em 31 de dezembro de 2023. Para obter mais informações sobre o AL1 EOL e o suporte de manutenção, consulte a postagem do blog [Update on Amazon Linux AMI end-of-life](https://aws.amazon.com/blogs/aws/update-on-amazon-linux-ami-end-of-life/).

**Para assinar as notificações do Amazon Linux**

1. [Abra o console do Amazon SNS em https://console.aws.amazon.com/sns/ v3/home.](https://console.aws.amazon.com/sns/v3/home)

1. Na barra de navegação, altere a região para **Leste dos EUA (Norte da Virgínia)**, se necessário. É necessário selecionar esta região, já que a notificação do SNS que está assinando foi criada nesta região.

1. No painel de navegação, escolha **Assinaturas**, **Criar assinatura**.

1. Na caixa de diálogo **Create subscription**, faça o seguinte:

   1. [AL2] Para o **ARN do tópico**, copie e cole o seguinte ARN (nome de recurso da Amazon): **arn:aws:sns:us-east-1:137112412989:amazon-linux-2-ami-updates**.

   1. [Amazon Linux] Para o **ARN do tópico**, copie e cole o seguinte ARN (nome de recurso da Amazon): **arn:aws:sns:us-east-1:137112412989:amazon-linux-ami-updates**.

   1. Em **Protocol (Protocolo)**, escolha **Email**.

   1. Em **Endpoint**, insira um endereço de e-mail que possa ser usado para receber notificações.

   1. Selecione **Create subscription**.

1. Você recebe um e-mail de confirmação com o assunto "AWS Notificação - Confirmação de assinatura”. Abra o e-mail e escolha **Confirm subscription** para concluir a assinatura.

Sempre que AMIs são lançados, enviamos notificações aos assinantes do tópico correspondente. Para deixar de receber essas notificações, use o procedimento a seguir e cancele a inscrição.

**Para cancelar a assinatura de notificações do Amazon Linux**

1. [Abra o console do Amazon SNS em https://console.aws.amazon.com/sns/ v3/home.](https://console.aws.amazon.com/sns/v3/home)

1. Na barra de navegação, altere a região para **Leste dos EUA (Norte da Virgínia)**, se necessário. Use a região na qual a notificação do SNS foi criada.

1. No painel de navegação, escolha **Subscriptions (Assinaturas)**, selecione a assinatura e escolha **Actions (Ações)**, **Delete subscriptions (Excluir assinaturas)**.

1. Quando a confirmação for solicitada, escolha **Excluir**.

**Formato da mensagem da AMI do SNS para Amazon Linux**  
O esquema para a mensagem do SNS é o seguinte. 

```
{
    "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"
    ]
}
```

# Configurar a conexão de desktop AL2 MATE
<a name="amazon-linux-ami-mate"></a>

O [ambiente de desktop MATE](https://mate-desktop.org/) é pré-instalado e pré-configurado AMIs com a seguinte descrição:

"`.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).`"

O ambiente fornece uma interface gráfica de usuário intuitiva para administrar as instâncias AL2 sem usar a linha de comando. A interface usa representações gráficas, como ícones, janelas, barras de ferramentas, pastas, papéis de parede e widgets de desktop. Ferramentas integradas baseadas em GUI estão disponíveis para executar tarefas comuns. Por exemplo, existem ferramentas para adicionar e remover software, aplicar atualizações, organizar arquivos, iniciar programas e monitorar a integridade do sistema.

**Importante**  
O `xrdp` é o software de Desktop Remoto incluído na AMI. Por padrão, o `xrdp` usa um certificado TLS autoassinado para criptografar sessões de desktop remoto. AWS Nem os `xrdp` mantenedores recomendam o uso de certificados autoassinados na produção. Em vez disso, obtenha um certificado de uma autoridade de certificação (CA) apropriada e instale-o em suas instâncias. Para obter mais informações sobre a configuração de TLS, consulte [TLS security layer](https://github.com/neutrinolabs/xrdp/wiki/TLS-security-layer) (Camada de segurança do TLS) na wiki do `xrdp`.

**nota**  
Se você preferir usar um serviço de computação em rede virtual (VNC) em vez de xrdp, consulte o artigo [Como faço para instalar uma GUI na minha instância do Amazon EC2 executando o Knowledge](https://repost.aws/knowledge-center/ec2-linux-2-install-gui) Center. AL2 AWS 

## Pré-requisito
<a name="al2-mate-configure-prerequisite"></a>

Para executar os comandos mostrados neste tópico, você deve instalar o AWS Command Line Interface (AWS CLI) ou AWS Tools for Windows PowerShell e configurar seu AWS perfil.

**Opções**

1. Instalar o AWS CLI — Para obter mais informações, consulte [Noções básicas sobre [instalação AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-set-up.html) e configuração](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html) no *Guia do AWS Command Line Interface usuário*.

1. Instalar as ferramentas para Windows PowerShell — Para obter mais informações, consulte [Instalação AWS Tools for Windows PowerShell](https://docs.aws.amazon.com/powershell/latest/userguide/pstools-getting-set-up.html) e [credenciais compartilhadas](https://docs.aws.amazon.com/powershell/latest/userguide/shared-credentials-in-aws-powershell.html) no *Guia do Ferramentas da AWS para PowerShell usuário*.

**dica**  
Como alternativa à instalação completa do AWS CLI, você pode usar [AWS CloudShell](https://docs.aws.amazon.com/cloudshell/latest/userguide/welcome.html)um shell pré-autenticado baseado em navegador que é iniciado diretamente do. Console de gerenciamento da AWS Verifique se há [suporte Regiões da AWS](https://docs.aws.amazon.com/cloudshell/latest/userguide/supported-aws-regions.html) para garantir que esteja disponível na região em que você está trabalhando.

## Configure a conexão RDP
<a name="al2-mate-configure-connection"></a>

Siga estas etapas para configurar uma conexão RDP (Remote Desktop Protocol) a partir de sua máquina local para uma instância AL2 que estiver executando o ambiente de desktop MATE.

1. Para obter o ID da AMI AL2 que inclua MATE no nome da AMI, você pode usar o comando [describe-images](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ec2/describe-images.html) da sua ferramenta de linha de comando local. Se você não tiver instalado as ferramentas de linha de comando, poderá realizar a consulta a seguir diretamente de uma AWS CloudShell sessão. Para obter informações sobre como iniciar uma sessão de shell a partir de CloudShell, consulte [Introdução ao AWS CloudShell](https://docs.aws.amazon.com/cloudshell/latest/userguide/getting-started.html). No console do Amazon EC2, é possível encontrar a AMI que inclui o MATE executando uma instância e inserindo `MATE` na barra de pesquisa de AMI. O AL2 Quick Start com o MATE pré-instalado aparecerá nos resultados da pesquisa.

   ```
   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"
       ]
   ]
   ```

   Escolha a AMI apropriada para seu uso.

1. Execute uma instância do EC2 com a AMI localizada na etapa anterior. Configure o grupo de segurança para permitir o tráfego TCP de entrada para a porta 3389. Para obter mais informações sobre como configurar grupos de segurança, consulte [Grupos de segurança para a VPC](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html). Essa configuração permite que você use um cliente RDP para se conectar à instância.

1. Conecte-se à instância usando [SSH](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/connect-linux-inst-ssh.html).

1. Atualize o software e o kernel na instância.

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

   Quando a atualização for concluída, reinicialize a instância para garantir que esteja usando os pacotes e as bibliotecas mais recentes da atualização. As atualizações de kernel não serão carregadas até que uma reinicialização ocorra.

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

1. Reconecte a instância e execute o comando a seguir na instância do Linux para definir a senha do `ec2-user`.

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

1. Instale o certificado e a chave.

   Se você já tiver um certificado e uma chave, copie-os para o diretório `/etc/xrdp/` da seguinte forma:
   + Certificado — `/etc/xrdp/cert.pem`
   + Chave – `/etc/xrdp/key.pem`

   Se você não tiver um certificado e uma chave, use o seguinte comando para gerá-los no diretório `/etc/xrdp`.

   ```
   $ sudo openssl req -x509 -sha384 -newkey rsa:3072 -nodes -keyout /etc/xrdp/key.pem -out /etc/xrdp/cert.pem -days 365
   ```
**nota**  
Esse comando gera um certificado válido por 365 dias.

1. Abra um cliente RDP no computador a partir do qual você se conectará à instância (por exemplo, Conexão de Desktop Remoto em um computador com Microsoft Windows). Insira `ec2-user` como o nome de usuário e digite a senha definida na etapa anterior.

**Para desabilitar `xrdp` na instância do Amazon EC2**  
Você pode desabilitar `xrdp` a qualquer momento executando um dos seguintes comandos na instância Linux. Os seguintes comandos não afetam sua capacidade de usar o MATE usando um servidor X11.

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

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

**Para habilitar `xrdp` na instância do Amazon EC2**  
Para reativar `xrdp` para que você possa se conectar à sua AL2 instância executando o ambiente de desktop MATE, execute um dos comandos a seguir na sua instância Linux.

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

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

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

 Os tutoriais a seguir mostram como realizar tarefas comuns usando instâncias do Amazon EC2 em execução. AL2 Para acessar tutoriais em vídeo, consulte os [vídeos instrutivos e laboratórios da AWS](https://www.aws.training/). 

Para AL2023 obter instruções, consulte os [tutoriais](https://docs.aws.amazon.com/linux/al2023/ug/tutorials-al2023.html) no Guia do *usuário do Amazon Linux 2023*.

**Topics**
+ [Tutorial: Instalar um servidor LAMP em AL2](ec2-lamp-amazon-linux-2.md)
+ [Tutorial: Configurar SSL/TLS em AL2](SSL-on-amazon-linux-2.md)
+ [Tutorial: hospede um WordPress blog no AL2](hosting-wordpress.md)

# Tutorial: Instalar um servidor LAMP em AL2
<a name="ec2-lamp-amazon-linux-2"></a>

Os procedimentos a seguir ajudam você a instalar um servidor web Apache com suporte a PHP e [MariaDB](https://mariadb.org/about/) (uma bifurcação do MySQL desenvolvida pela comunidade) em AL2 sua instância (às vezes chamada de servidor web LAMP ou pilha LAMP). Você pode usar esse servidor para hospedar um site estático ou para implantar um aplicativo PHP dinâmico que lê e grava informações em um banco de dados.

**Importante**  
Se você estiver tentando configurar um servidor web LAMP em uma distribuição diferente, como Ubuntu ou Red Hat Enterprise Linux, este tutorial não funcionará. Para isso AL2023, consulte [Instalar um servidor LAMP em AL2023](https://docs.aws.amazon.com//linux/al2023/ug/ec2-lamp-amazon-linux-2023.html). Para o Ubuntu, consulte a seguinte documentação da comunidade Ubuntu: [ApacheMySQLPHP](https://help.ubuntu.com/community/ApacheMySQLPHP). Para outras distribuições, consulte a documentação específica.

**Opção: concluir este tutorial usando a automação**  
Para concluir este tutorial usando a AWS Systems Manager automação em vez das tarefas a seguir, execute o [AWS documento Docs-Install ALAMPServer - AL2](https://console.aws.amazon.com/systems-manager/automation/execute/AWSDocs-InstallALAMPServer-AL2) Automation.

**Topics**
+ [Etapa 1: Preparar o servidor LAMP](#prepare-lamp-server)
+ [Etapa 2: Testar o servidor LAMP](#test-lamp-server)
+ [Etapa 3: Proteger o servidor do banco de dados](#secure-mariadb-lamp-server)
+ [Etapa 4: Instalação (opcional) phpMyAdmin](#install-phpmyadmin-lamp-server)
+ [Solução de problemas](#lamp-troubleshooting)
+ [Tópicos relacionados](#lamp-more-info)

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

**Pré-requisitos**
+ Este tutorial pressupõe que você já tenha iniciado uma nova instância usando AL2, com um nome DNS público que pode ser acessado pela Internet. Para obter mais informações, consulte [Executar uma instância](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-instance-wizard.html) no *Guia do usuário do Amazon EC2*. Você também precisa ter configurado o security group para permitir conexões SSH (porta 22), HTTP (porta 80) e HTTPS (porta 443). Para obter mais informações sobre esses pré-requisitos, consulte [Regras de grupos de segurança](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-group-rules.html) no Guia do usuário do *Amazon* EC2.
+ O procedimento a seguir instala a versão mais recente do PHP disponível no AL2 momento`php8.2`. Se você planeja usar aplicativos PHP diferentes daqueles descritos neste tutorial, você deve verificar a compatibilidade com o `php8.2`.<a name="install_apache-2"></a>

**Para preparar o servidor LAMP**

1. [Conecte-se à sua instância](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/connect-to-linux-instance.html).

1. Para garantir que todos os pacotes de software estejam atualizados, execute uma atualização rápida de software em sua instância. Esse processo pode levar alguns minutos, mas é importante ter certeza de que você tem as atualizações de segurança e correções de bug mais recentes.

   A opção `-y` instala as atualizações sem solicitar confirmação. Para examinar as atualizações antes da instalação, você pode omitir essa opção.

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

1. Instale os repositórios Amazon Linux Extras do `mariadb10.5` para obter as versões mais recentes do pacote do MariaDB.

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

   Se receber um erro relatando `sudo: amazon-linux-extras: command not found`, isso significa que sua instância não foi executada com uma AMI do Amazon Linux 2 (talvez você esteja usando a Amazon Linux AMI). Você pode visualizar sua versão do Amazon Linux usando o comando a seguir.

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

1. Instale os repositórios `php8.2` Amazon Linux Extras para obter a versão mais recente do PHP pacote para AL2.

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

1. Agora que sua instância está atualizada, você pode instalar os pacotes de software de servidor Web Apache, MariaDB e PHP. Use o comando de instalação do yum para instalar os vários pacotes de software e todas as dependências relacionadas ao mesmo tempo

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

   Você pode visualizar as versões atuais desses pacotes usando o comando a seguir:

   ```
   yum info package_name
   ```

1. Inicie o servidor web Apache.

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

1.  Use o comando **systemctl** para configurar o servidor web Apache para iniciar em cada inicialização do sistema. 

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

   Você pode verificar se **httpd** está ativo executando o seguinte comando:

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

1. Adicione uma regra de segurança para permitir conexões HTTP de entrada (porta 80) na instância caso você ainda não tenha feito isso. Por padrão, um grupo de *N* segurança do **assistente de inicialização** foi configurado para sua instância durante a inicialização. Esse grupo contém uma única regra para permitir conexões SSH. 

   1. Abra o console do Amazon EC2 em [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/).

   1. Escolha **Instances (Instâncias)** e selecione a instância.

   1. Na guia **Security (Segurança)**, exiba as regras de entrada. Você deve ver a seguinte regra:

      ```
      Port range   Protocol     Source
      22           tcp          0.0.0.0/0
      ```
**Atenção**  
Usar `0.0.0.0/0` permite que todos os IPv4 endereços acessem sua instância usando SSH. Isso é aceitável para um período curto em um ambiente de teste, mas não é seguro em ambientes de produção. Na produção, você autorizará somente um endereço IP específico ou intervalo de endereços para acessar a instância.

   1. Escolha o link do grupo de segurança. Usando os procedimentos em [Adicionar regras a um grupo de segurança](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/working-with-security-groups.html#adding-security-group-rule), adicione uma nova regra de segurança de entrada com os seguintes valores:
      + **Tipo:** HTTP
      + **Protocolo**: TCP
      + **Port Range**: 80
      + **Source (Origem)**: personalizado

1. Teste o servidor web. Em um navegador, digite o endereço DNS público (ou o endereço IP público) de sua instância. Se não houver conteúdo em `/var/www/html`, você deverá verificar a página de teste do Apache. Você pode obter o DNS público da instância usando o console do Amazon EC2 (verifique a coluna **Public DNS (DNS público)**. Se essa coluna estiver oculta, escolha **Show/Hide Columns (Mostrar/ocultar colunas)** (o ícone em forma de engrenagem) e escolha **Public DNS (DNS público)**).

   Verifique se o grupo de segurança da instância contém uma regra para permitir o tráfego HTTP na porta 80. Para saber mais, consulte [Add rules to security group](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/working-with-security-groups.html#adding-security-group-rule).
**Importante**  
Se você não estiver usando o Amazon Linux, poderá ser necessário configurar o firewall na instância para permitir essas conexões. Para obter mais informações sobre como configurar o firewall, consulte a documentação de sua distribuição específica.  
![\[O teste do servidor mostra a página de teste do Apache.\]](http://docs.aws.amazon.com/pt_br/linux/al2/ug/images/apache_test_page_al2_2.4.png)

O **httpd** do Apache é usado para os arquivos que são mantidos em um diretório chamado raiz de documentos do Apache. O diretório raiz de documentos Apache do Amazon Linux é `/var/www/html`, que, por padrão, é de propriedade da raiz.

Para permitir que a conta do `ec2-user` manipule arquivos nesse diretório, você deve modificar a propriedade e as permissões do diretório. Existem diversas maneiras de realizar essa tarefa. Neste tutorial, você adiciona o usuário `ec2-user` ao grupo `apache` para dar ao grupo `apache` a propriedade do diretório `/var/www` e atribuir permissões de gravação ao grupo.<a name="setting-file-permissions-2"></a>

**Para definir permissões de arquivo**

1. Adicione o usuário (neste caso, o `ec2-user`) ao grupo do `apache`.

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

1. Faça logout e login novamente para selecionar o novo grupo verifique sua associação.

   1. Faça logout (use o comando **exit** ou feche a janela do terminal):

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

   1. Para verificar sua associação no grupo `apache`, reconecte-se à instância e execute o comando a seguir:

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

1. Altere a propriedade do grupo do `/var/www` e seu conteúdo para o grupo do `apache`.

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

1. Para adicionar as permissões de gravação do grupo e definir o ID do grupo nos subdiretórios futuros, altere as permissões de diretório de `/var/www` e de seus subdiretórios.

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

1. Para adicionar permissões de gravação do grupo, altere recursivamente as permissões de arquivo de `/var/www` e de seus subdiretórios:

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

Agora, `ec2-user` (e outros todos os futuros do grupo `apache`) poderão adicionar, excluir e editar arquivos na raiz do documento Apache, permitindo que você adicione conteúdo, como um site estático ou uma aplicação PHP.

**Para proteger o servidor web (opcional)**  
Um servidor web que executa o protocolo HTTP não fornece nenhuma segurança de transporte para os dados que envia ou recebe. Quando você se conecta a um servidor HTTP usando um navegador da Web, o conteúdo URLs que você visita, o conteúdo das páginas da Web que você recebe e o conteúdo (incluindo senhas) de qualquer formulário HTML que você envia são todos visíveis para espiões em qualquer lugar ao longo do caminho da rede. A melhor prática para proteger o servidor web é instalar suporte para HTTPS (HTTP seguro), que protege os dados por meio de criptografia SSL/TLS.

Para obter informações sobre como habilitar o HTTPS no servidor, consulte [Tutorial: Configurar SSL/TLS em AL2](SSL-on-amazon-linux-2.md).

## Etapa 2: Testar o servidor LAMP
<a name="test-lamp-server"></a>

Se o servidor estiver instalado e em execução, e suas permissões de arquivo estiverem definidas corretamente, a conta do `ec2-user` poderá criar um arquivo PHP no diretório `/var/www/html` disponível na Internet.

**Para testar o servidor do LAMP**

1. Crie um arquivo PHP no diretório base do Apache.

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

   Se você receber o erro ”Permissão negada" ao tentar executar esse comando, tente fazer logout e login novamente para obter as permissões corretas do grupo que você configurou em [Para definir permissões de arquivo](#setting-file-permissions-2).

1. Em um navegador da web, digite a URL do arquivo que você acabou de criar. Essa URL é o endereço DNS público da instância seguido por uma barra e o nome do arquivo. Por exemplo:

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

   Você deve ver a página de informações do PHP:  
![\[O teste do servidor LAMP mostra a página de informações do PHP.\]](http://docs.aws.amazon.com/pt_br/linux/al2/ug/images/phpinfo7.2.10.png)

   Se você não vir essa página, verifique se o arquivo `/var/www/html/phpinfo.php` foi criado corretamente na etapa anterior. Você também pode verificar se todos os pacotes necessários foram instalados com o comando a seguir.

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

   Se alguns dos pacotes necessários não estiverem listados na saída, instale-os com o comando **sudo yum install *package***. Além disso, verifique se os extras `php7.2` e `lamp-mariadb10.2-php7.2` estão habilitados na saída do comando **amazon-linux-extras**.

1. Exclua o arquivo `phpinfo.php`. Embora essas informações possam ser úteis, elas não devem ser transmitidas pela Internet por motivos de segurança.

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

Agora você deve ter um servidor web do LAMP totalmente funcional. Se adicionar conteúdo ao diretório base do Apache em `/var/www/html`, você deverá poder visualizar esse conteúdo no endereço DNS público de sua instância. 

## Etapa 3: Proteger o servidor do banco de dados
<a name="secure-mariadb-lamp-server"></a>

A instalação padrão do servidor MariaDB tem vários recursos que são bons para teste e desenvolvimento, mas devem ser desabilitados ou removidos em servidores de produção. O comando **mysql\$1secure\$1installation** orienta você durante o processo de configuração de uma senha raiz e da remoção de recursos não seguros da instalação. Mesmo que você não esteja planejando usar o servidor MariaDB é recomendável executar este procedimento.<a name="securing-maria-db"></a>

**Para proteger o servidor MariaDB**

1. Inicie o servidor MariaDB.

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

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

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

   1. Quando solicitado, digite uma senha para a conta raiz.

      1. Digite a senha raiz atual. Por padrão, a conta raiz não tem uma senha definida. Pressione Enter.

      1. Digite **Y** para definir uma senha e digite uma senha segura duas vezes. Para obter mais informações sobre como criar uma senha segura, consulte [https://identitysafe.norton.com/password-generator/](https://identitysafe.norton.com/password-generator/). Armazene essa senha em um lugar seguro.

         A configuração de uma senha raiz para o MariaDB é somente a medida mais básica para proteger seu banco de dados. Ao criar ou instalar um aplicativo controlado por banco de dados, geralmente, você cria um usuário de serviço de banco para esse aplicativo e evita usar a conta raiz para qualquer coisa que não seja a administração do banco de dados. 

   1. Digite **Y** para remover as contas de usuários anônimos.

   1. Digite **Y** para desabilitar o recurso de login remoto da raiz.

   1. Digite **Y** para remover o banco de dados de teste.

   1. Digite **Y** para recarregar as tabelas de privilégios e salvar suas alterações.

1. (Opcional) Se você não pretende usar o servidor MariaDB imediatamente, interrompa-o. Você poderá reiniciá-lo quando precisar dele novamente.

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

1. (Opcional) Se você quiser que o servidor MariaDB seja iniciado a cada inicialização, digite o comando a seguir.

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

## Etapa 4: Instalação (opcional) phpMyAdmin
<a name="install-phpmyadmin-lamp-server"></a>

[phpMyAdmin](https://www.phpmyadmin.net/)é uma ferramenta de gerenciamento de banco de dados baseada na web que você pode usar para visualizar e editar os bancos de dados MySQL na sua instância do EC2. Siga as etapas a seguir para instalar e configurar o `phpMyAdmin` em sua instância do Amazon Linux.

**Importante**  
Não recomendamos o uso `phpMyAdmin` para acessar um servidor LAMP, a menos que você tenha habilitado SSL/TLS o Apache; caso contrário, sua senha de administrador de banco de dados e outros dados serão transmitidos de forma insegura pela Internet. Para obter recomendações de segurança dos desenvolvedores, consulte [Protegendo sua phpMyAdmin instalação](https://docs.phpmyadmin.net/en/latest/setup.html#securing-your-phpmyadmin-installation). Para obter informações gerais sobre como proteger um servidor web em uma instância do EC2, consulte [Tutorial: Configurar SSL/TLS em AL2](SSL-on-amazon-linux-2.md).

**Para instalar phpMyAdmin**

1. Instale as dependências necessárias.

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

1. Reinicie o Apache.

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

1. Reinicie o `php-fpm`.

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

1. Navegue até o diretório base do Apache em `/var/www/html`.

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

1. Selecione um pacote de origem para a phpMyAdmin versão mais recente em [https://www.phpmyadmin.net/downloads](https://www.phpmyadmin.net/downloads). Para fazer download do arquivo diretamente para a instância, copie o link e cole-o em um comando **wget**, como neste exemplo:

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

1. Crie uma pasta `phpMyAdmin` e extraia o pacote dela com o comando a seguir.

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

1. Exclua o *phpMyAdmin-latest-all-languages.tar.gz* tarball.

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

1.  (Opcional) Se o servidor MySQL não estiver em execução, inicie-o agora.

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

1. Em um navegador da Web, digite a URL da sua phpMyAdmin instalação. Essa URL é o endereço DNS público (ou o endereço IP público) da instância seguido por uma barra e o nome do diretório de instalação. Por exemplo:

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

   Você deve ver a página de phpMyAdmin login:  
![\[O resultado da digitação do URL da sua phpMyAdmin instalação é a tela de phpMyAdmin login.\]](http://docs.aws.amazon.com/pt_br/linux/al2/ug/images/phpmyadmin_login.png)

1. Faça login na sua phpMyAdmin instalação com o nome de `root` usuário e a senha raiz do MySQL que você criou anteriormente.

   A instalação ainda deve ser configurada antes que você a coloque em serviço. Sugerimos que você comece criando manualmente o arquivo de configuração, da seguinte maneira:

   1. Para começar com um arquivo de configuração mínima, use seu editor de texto favorito para criar um novo arquivo e, em seguida, copie o conteúdo de `config.sample.inc.php` para ele.

   1. Salve o arquivo como `config.inc.php` no phpMyAdmin diretório que contém`index.php`.

   1. Consulte as instruções de criação pós-arquivo na seção [Usando o script](https://docs.phpmyadmin.net/en/latest/setup.html#using-the-setup-script) de phpMyAdmin instalação das instruções de instalação para qualquer configuração adicional.

    Para obter informações sobre o uso phpMyAdmin, consulte o [Guia phpMyAdmin do usuário](http://docs.phpmyadmin.net/en/latest/user.html).

## Solução de problemas
<a name="lamp-troubleshooting"></a>

Esta seção oferece sugestões para resolver problemas comuns que você pode encontrar ao configurar um novo servidor do LAMP. 

### Não consigo me conectar ao servidor usando um navegador da web
<a name="is_apache_on"></a>

Execute as seguintes verificações para ver se o servidor da web do Apache está em execução e acessível.
+ **O servidor web está em execução?**

  Você pode verificar se **httpd** está ativo executando o seguinte comando:

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

  Se o processo **httpd** não estiver em execução, repita as etapas descritas em [Para preparar o servidor LAMP](#install_apache-2).
+ **O firewall está configurado corretamente?**

  Verifique se o grupo de segurança da instância contém uma regra para permitir o tráfego HTTP na porta 80. Para saber mais, consulte [Add rules to security group](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/working-with-security-groups.html#adding-security-group-rule).

### Não consigo me conectar ao meu servidor usando HTTPS
<a name="is-https-enabled"></a>

Execute as seguintes verificações para ver se o servidor da web do Apache está configurado para dar suporte a HTTPS.
+ **O servidor Web está configurado corretamente?**

  Depois de instalar o Apache, o servidor é configurado para tráfego HTTP. Para suportar HTTPS, ative o TLS no servidor e instale um certificado SSL. Para mais informações, consulte [Tutorial: Configurar SSL/TLS em AL2](SSL-on-amazon-linux-2.md).
+ **O firewall está configurado corretamente?**

  Verifique se o grupo de segurança da instância contém uma regra para permitir o tráfego HTTPS na porta 443. Para obter mais informações, consulte [Adicionar regras a um grupo de segurança](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/working-with-security-groups.html#adding-security-group-rule).

## Tópicos relacionados
<a name="lamp-more-info"></a>

Para obter mais informações sobre como transferir arquivos para sua instância ou instalar um WordPress blog em seu servidor web, consulte a documentação a seguir:
+ [Transfira arquivos para sua instância Linux usando WinSCP](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/putty.html#Transfer_WinSCP) o.
+ [Transfira arquivos para instâncias Linux usando um SCP cliente](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/connect-linux-inst-ssh.html#linux-file-transfer-scp).
+ [Tutorial: hospede um WordPress blog no AL2](hosting-wordpress.md)

Para obter mais informações sobre os comandos e o software usados neste tutorial, consulte as seguintes páginas da web:
+ Servidor web Apache: [http://httpd.apache.org/](http://httpd.apache.org/)
+ Servidor de banco de dados MariaDB: [https://mariadb.org/](https://mariadb.org/)
+ Linguagem de programação PHP: [http://php.net/](http://php.net/)
+ O `chmod` comando: [https://en.wikipedia. org/wiki/Chmod](https://en.wikipedia.org/wiki/Chmod)
+ O `chown` comando: [https://en.wikipedia. org/wiki/Chown](https://en.wikipedia.org/wiki/Chown)

Para obter mais informações sobre como registrar um nome de domínio para o servidor web ou transferir um nome de domínio existente para este host, consulte [Como criar e migrar domínios e subdomínios para o Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/creating-migrating.html) no *Guia do desenvolvedor do Amazon Route 53*.

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

Secure Layer/Transport 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/TLSem uma instância EC2 com AL2 um servidor web Apache). Este tutorial pressupõe que você não esteja usando um balanceador de carga. Se você estiver usando Elastic Load Balancing, poderá optar por configurar o descarregamento do SSL no balanceador de carga, usando, em vez disso, um certificado do [AWS Certificate Manager](https://aws.amazon.com/certificate-manager/).

Por motivos históricos, a criptografia na Web é conhecida simplesmente como SSL. Embora navegadores da web ainda ofereçam suporte a SSL, o protocolo sucessor TLS é menos vulnerável a ataques. O AL2 desabilita o suporte do servidor para todas as versões do SSL por padrão. [Órgãos de normas de segurança](https://www.ssl.com/article/deprecating-early-tls/) consideram o TLS 1.0 não seguro. O TLS 1.0 e TLS 1.1 foram formalmente [preteridos](https://datatracker.ietf.org/doc/rfc8996/) em março de 2021. Este tutorial contém orientações baseadas exclusivamente na ativação do TLS 1.2. O TLS 1.3 foi finalizado em 2018 e está disponível AL2 desde que a biblioteca TLS subjacente (OpenSSL neste tutorial) seja suportada e habilitada. [Os clientes devem ser compatíveis com o TLS 1.2 ou posterior até 28 de junho de 2023](https://aws.amazon.com/blogs/security/tls-1-2-required-for-aws-endpoints/). Para obter mais informações sobre os padrões de criptografia atualizados, consulte [RFC 7568](https://tools.ietf.org/html/rfc7568) e [RFC 8446](https://tools.ietf.org/html/rfc8446).

Este tutorial refere-se à criptografia da Web moderna simplesmente como TLS.

**Importante**  
Esses procedimentos são destinados ao uso com AL2. Também supomos que você esteja começando com uma nova instância do Amazon EC2. Se você estiver tentando configurar uma instância do EC2 executando uma distribuição diferente ou uma instância executando uma versão antiga do AL2, alguns procedimentos deste tutorial podem não funcionar. Para o Ubuntu, consulte a seguinte documentação da comunidade: [Open SSL on Ubuntu](https://help.ubuntu.com/community/OpenSSL) (Open SSL no Ubuntu). Para o Red Hat Enterprise Linux, consulte: [Como configurar o Servidor Web Apache HTTP](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 outras distribuições, consulte a documentação específica.

**nota**  
Como alternativa, você pode usar o AWS Certificate Manager (ACM) para enclaves AWS Nitro, que é um aplicativo de enclave que permite usar SSL/TLS certificados públicos e privados com seus aplicativos e servidores web em execução em instâncias do Amazon EC2 com o Nitro Enclaves. AWS O Nitro Enclaves é um recurso do Amazon EC2 que permite a criação de ambientes computacionais isolados para proteger e processar com segurança dados altamente confidenciais, como certificados e chaves privadas. SSL/TLS   
O ACM for Nitro Enclaves funciona com **nginx** em execução em sua instância do Linux do Amazon EC2 para criar chaves privadas, distribuir certificados e chaves privadas, além de gerenciar renovações de certificados.  
Para usar o ACM for Nitro Enclaves, é necessário usar uma instância do Linux habilitada para enclave.  
Para obter mais informações, consulte [O que são AWS Nitro Enclaves](https://docs.aws.amazon.com/enclaves/latest/user/nitro-enclave.html)? e [AWS Certificate Manager para Nitro Enclaves](https://docs.aws.amazon.com/enclaves/latest/user/nitro-enclave-refapp.html) no Guia do usuário do *AWS Nitro* Enclaves.

**Topics**
+ [Pré-requisitos](#ssl_prereq)
+ [Etapa 1: habilitar o TLS no servidor](#ssl_enable)
+ [Etapa 2: obter um certificado assinado por uma CA](#ssl_certificate)
+ [Etapa 3: testar e intensificar a configuração de segurança](#ssl_test)
+ [Solução de problemas](#troubleshooting)

## Pré-requisitos
<a name="ssl_prereq"></a>

Antes de começar este tutorial, conclua as seguintes etapas:
+ Inicie uma AL2 instância com suporte do Amazon EBS. Para obter mais informações, consulte [Executar uma instância](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-instance-wizard.html) no *Guia do usuário do Amazon EC2*.
+ Configure seus grupos de segurança para permitir que sua instância aceite conexões nas seguintes portas TCP: 
  + SSH (porta 22)
  + HTTP (porta 80)
  + HTTPS (porta 443)

  Consulte mais informações em [Regras de grupo de segurança](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-group-rules.html) no *Guia do usuário do Amazon EC2*.
+ Instale o servidor Web Apache. Para step-by-step obter instruções, consulte [Tutorial: Instalar um servidor Web LAMP em AL2](ec2-lamp-amazon-linux-2.md). Somente o pacote httpd e suas dependências são necessários e, portanto, você pode ignorar as instruções que envolvem PHP e MariaDB.
+ Para identificar e autenticar sites, a infraestrutura de chave pública (PKI) do TLS depende do Sistema de Nomes de Domínio (DNS). Para usar sua instância do EC2 para hospedar um site público, você precisará registrar um nome de domínio para seu servidor da Web ou transferir um nome de domínio existente para o host do Amazon EC2. Há vários serviços de registro de domínio e de hospedagem DNS de terceiros disponíveis para isso, ou você pode usar o [Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/Welcome.html). 

## Etapa 1: habilitar o TLS no servidor
<a name="ssl_enable"></a>

**Opção: concluir este tutorial usando a automação**  
Para concluir este tutorial usando a AWS Systems Manager automação em vez das tarefas a seguir, execute o [documento de automação](https://console.aws.amazon.com/systems-manager/documents/AWSDocs-Configure-SSL-TLS-AL2/).

Esse procedimento conduz você pelo processo de configuração do TLS AL2 com um certificado digital autoassinado. 

**nota**  
Um certificado autoassinado é aceitável para testes, mas não para produção. Quando você expõe seu certificado autoassinado na Internet, os visitantes de seu site recebem avisos de segurança. 

**Para habilitar o TLS em um servidor**

1. [Conecte-se à sua instância](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/connect-to-linux-instance.html) e confirme se o Apache está em execução.

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

   Se o valor retornado não for "habilitado", inicie o Apache e configure-o para iniciar sempre que o sistema for inicializado.

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

1. Para garantir que todos os pacotes de software estejam atualizados, execute uma atualização rápida de software em sua instância. Esse processo pode levar alguns minutos, mas é importante ter certeza de que você tem as atualizações de segurança e correções de bug mais recentes.
**nota**  
A opção `-y` instala as atualizações sem solicitar confirmação. Para examinar as atualizações antes da instalação, você pode omitir essa opção.

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

1. Agora que sua instância está atualizada, adicione o suporte ao TLS instalando o módulo `mod_ssl` do Apache.

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

   Sua instância agora possui os seguintes arquivos que você usará para configurar seu servidor seguro e criar um certificado para teste:
   +  `/etc/httpd/conf.d/ssl.conf` 

     O arquivo de configuração para mod\$1ssl. Contém as *diretrizes* que informam ao Apache onde encontrar chaves de criptografia e certificados, as versões do protocolo TLS a serem permitidas e as cifras de criptografia a serem aceitas. 
   + `/etc/pki/tls/certs/make-dummy-cert`

     Um script para gerar um certificado X.509 autoassinado e uma chave privada para o seu host de servidor. Esse certificado é útil para testar se o Apache está configurado corretamente para usar o TLS. Como não oferece prova de identidade, ele não deve ser usado na produção. Caso contrário, avisos nos navegadores da Web serão exibidos.

1. Execute o script para gerar um certificado fictício autoassinado e uma chave para teste.

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

   Isso gera um novo arquivo `localhost.crt` no diretório `/etc/pki/tls/certs/`. O nome do arquivo especificado corresponde ao padrão atribuído na diretiva **SSLCertificateFile** em `/etc/httpd/conf.d/ssl.conf`. 

   Esse arquivo contém um certificado autoassinado e a chave privada do certificado. O Apache requer que o certificado e a chave estejam no formato PEM, que consiste em caracteres ASCII codificados em Base64 enquadrados pelas linhas "BEGIN" e "END", como neste exemplo.

   ```
   -----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-----
   ```

   Os nomes de arquivos e as extensões são uma conveniência e não têm efeito na função. Por exemplo, você pode chamar um certificado de `cert.crt`, `cert.pem` ou de um outro nome de arquivo qualquer, desde que a diretiva relacionada no arquivo `ssl.conf` use o mesmo nome.
**nota**  
Ao substituir os arquivos TLS padrão por seus próprios arquivos personalizados, verifique se eles estão no formato PEM. 

1. Abra o arquivo `/etc/httpd/conf.d/ssl.conf` usando seu editor de texto preferido (como o **vim** ou o **nano**) como usuário raiz e comente a seguinte linha: porque o certificado fictício autoassinado também contém a chave. Se você não assinalar o comentário desta linha antes de concluir a próxima etapa, o serviço do Apache não conseguirá ser iniciado.

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

1. Reinicie o Apache.

   ```
   [ec2-user ~]$ sudo systemctl restart httpd
   ```
**nota**  
Verifique se a porta TCP 443 está acessível em sua instância do EC2, conforme descrito anteriormente.

1. Seu servidor da Web do Apache agora deve oferecer suporte a HTTPS (HTTP seguro) por meio da porta 443. Teste-o digitando o endereço IP ou o nome do domínio totalmente qualificado de sua instância do EC2 em uma barra de URL de um navegador com o prefixo **https://**.

   Como você está se conectando a um site com um certificado de host autoassinado não confiável, o navegador poderá exibir uma série de avisos de segurança. Ignore os avisos e continue para o site. 

   Se a página de teste padrão do Apache for aberta, a configuração do TLS no servidor estará correta. Todos os dados que passam entre o navegador e o servidor agora estão criptografados.
**nota**  
Para impedir que os visitantes do site encontrem telas de avisos, você precisa obter um certificado assinado por uma CA confiável que, além de criptografar, também autentique você publicamente como o proprietário do site. 

## Etapa 2: obter um certificado assinado por uma CA
<a name="ssl_certificate"></a>

Você pode seguir este processo para obter um certificado assinado por uma CA:
+ Gere uma solicitação de assinatura de certificado (CSR) a partir de uma chave privada
+ Enviar a CSR para uma autoridade de certificação (CA)
+ Obtenha um certificado de host assinado
+ Configure o Apache para usá-lo

Um certificado de host TLS X.509 autoassinado é idêntico em termos criptológicos a um certificado assinado por uma CA. A diferença é social, não matemática. Uma CA promete validar, no mínimo, a propriedade de um domínio antes de emitir um certificado para um candidato. Cada navegador da Web contém uma lista de CAs informações confiáveis do fornecedor do navegador para fazer isso. Primariamente, um certificado X.509 consiste em uma chave pública, que corresponde à chave privada do servidor, e uma assinatura pela CA que é vinculada criptograficamente à chave pública. Quando um navegador se conecta a um servidor web via HTTPS, o servidor apresenta um certificado para o navegador verificar sua lista de confiáveis CAs. Se o assinante estiver na lista ou for acessível por meio de uma *cadeia de confiança* que consiste em outros assinantes confiáveis, o navegador negociará um canal rápido de dados criptografados com o servidor e carregará a página. 

Geralmente, os certificados são caros devido ao trabalho envolvido na validação das solicitações, portanto, vale a pena comparar os preços. Alguns CAs oferecem certificados de nível básico gratuitamente. O mais notável deles CAs é o projeto [Let's Encrypt](https://letsencrypt.org/), que também suporta a automação do processo de criação e renovação de certificados. Para obter mais informações sobre como usar um certificado Let’s Encrypt, consulte [Obtenção do Certbot](https://eff-certbot.readthedocs.io/en/stable/install.html).

Se você planeja oferecer serviços de nível comercial, o [AWS Certificate Manager](https://docs.aws.amazon.com/acm/latest/userguide/acm-overview.html) é uma boa opção.

É importante ter um certificado de host subjacente. Desde 2019, grupos [governamentais](http://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-57pt1r4.pdf) e do [setor](https://cabforum.org/wp-content/uploads/CA-Browser-Forum-BR-1.6.5.pdf) recomendam usar um tamanho de chave (módulo) mínimo de 2.048 bits para chaves de RSA para a proteção de documentos até 2030. O tamanho do módulo padrão gerado pelo OpenSSL AL2 in é de 2048 bits, o que é adequado para uso em um certificado assinado pela CA. No procedimento a seguir, uma etapa opcional é fornecida para aqueles que desejam uma chave personalizada, por exemplo, uma com módulo maior ou que usa um algoritmo diferente de criptografia.

**Importante**  
As instruções para adquirir certificados de host assinados pela CA não funcionarão, a menos que você possua um domínio DNS registrado e hospedado.

**Para obter um certificado assinado por uma CA**

1.  [Conecte-se](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/connect-to-linux-instance.html) à sua instância e navegue até/etc/pki/tls/private/. Este é o diretório onde você armazenará a chave privada do servidor para TLS. Se você preferir usar uma chave de host existente para gerar a CSR, vá para a Etapa 3.

1. (Opcional) Gerar uma nova chave privada. Estes são alguns exemplos de configurações de chave. Qualquer uma das chaves resultantes funciona com seu servidor Web, mas elas variam no grau e no tipo de segurança que elas implementam.
   + **Exemplo 1:** criar uma chave host de RSA padrão. O arquivo resultante, **custom.key**, é uma chave privada de RSA de 2048 bits.

     ```
     [ec2-user ~]$ sudo openssl genrsa -out custom.key
     ```
   + **Exemplo 2:** criar uma chave de RSA mais forte com um módulo maior. O arquivo resultante, **custom.key**, é uma chave privada de RSA de 4096 bits.

     ```
     [ec2-user ~]$ sudo openssl genrsa -out custom.key 4096
     ```
   + **Exemplo 3:** criar uma chave de RSA de 4096 bits criptografada com proteção por senha. O arquivo resultante, **custom.key**, é uma chave privada de RSA de 4096 bits criptografada com a cifra AES-128.
**Importante**  
A criptografia da chave fornece maior segurança, mas como uma chave criptografada requer uma senha, os serviços que dependem dela não podem ser iniciados automaticamente. Sempre que usar essa chave, você precisará fornecer a senha (no exemplo anterior, "abcde12345") por meio de uma conexão SSH.

     ```
     [ec2-user ~]$ sudo openssl genrsa -aes128 -passout pass:abcde12345 -out custom.key 4096
     ```
   + **Exemplo 4:** criar uma chave usando uma cifra não RSA. A criptografia RSA pode ser relativamente devagar devido ao tamanho de suas chaves públicas, que são baseadas no produto de dois números primos grandes. No entanto, é possível criar chaves para TLS que usam códigos não RSA. As chaves baseadas em matemática de curvas elípticas são menores e computacionalmente mais rápidas para fornecer um nível de segurança equivalente.

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

     O resultado é uma chave privada de curva elíptica de 256 bits que usa prime256v1, uma "curva nomeada" compatível com OpenSSL. A força de criptografia é um pouco maior que uma chave de RSA de 2048 bits, [de acordo com o NIST](http://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-57pt1r4.pdf).
**nota**  
Nem todos CAs oferecem o mesmo nível de suporte para elliptic-curve-based chaves que para chaves RSA.

   Certifique-se de que a nova chave privada tenha propriedade e permissões altamente restritivas (owner=root, group=root, somente para o proprietário). read/write O comando será o mostrado no exemplo a seguir.

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

   Os comandos anteriores produzem o resultado a seguir.

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

    Depois de criar e configurar uma chave satisfatória, você pode criar uma CSR. 

1. Crie uma CSR usando sua chave preferida. O exemplo a seguir usa **custom.key**.

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

   A OpenSSL abre uma caixa de diálogo e solicita a informação exibida na tabela a seguir. Todos os campos, exceto **Common Name (Nome comum)**, são opcionais para um certificado de host básico validado por domínio.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/linux/al2/ug/SSL-on-amazon-linux-2.html)

   Finalmente, a OpenSSL solicita uma senha de desafio opcional. Essa senha se aplica somente à CSR e às transações entre você e sua CA, portanto, siga as recomendações da CA sobre este e o outro campo opcional, nome da empresa opcional. A senha de desafio da CSR não tem nenhum efeito sobre a operação do servidor.

   O arquivo resultante **csr.pem** contém sua chave pública, a assinatura digital de sua chave pública e os metadados que você inseriu.

1. Envie a CSR a uma CA. Geralmente, isso consiste em abrir seu arquivo de CSR em um editor de texto e copiar o conteúdo em um formulário da Web. No momento, você pode ser solicitado a fornecer um ou mais nomes alternativos de assunto (SANs) para serem colocados no certificado. Se **www.example.com** for o nome comum, **example.com** seria um bom SAN e vice-versa. Um visitante de seu site que digitar qualquer um desses nomes verá uma conexão livre de erros. Se o formulário web da CA permitir, inclua o nome comum na lista de SANs. Alguns o CAs incluem automaticamente.

   Depois que sua solicitação é aprovada, você recebe um novo certificado de host assinado pela CA. Você também pode receber uma instrução para fazer download de um arquivo de *certificado intermediário* que contém os certificados adicionais necessários para concluir a cadeia de confiança da CA. 
**nota**  
Sua CA pode enviar a você arquivos em vários formatos com várias finalidades. Para este tutorial, você deve usar apenas um arquivo de certificado em formato PEM, que geralmente (mas nem sempre) é identificado por uma extensão de arquivo `.pem` ou `.crt`. Se você não tiver certeza sobre qual arquivo usar, abra os arquivos com um editor de texto e localize um que contenha um ou mais blocos com a linha a seguir.  

   ```
   - - - - -BEGIN CERTIFICATE - - - - - 
   ```
O arquivo também deve terminar com a linha a seguir.  

   ```
   - - - -END CERTIFICATE - - - - -
   ```
Você também pode testar um arquivo na linha de comando da forma a seguir.  

   ```
   [ec2-user certs]$ openssl x509 -in certificate.crt -text
   ```
Verifique se as linhas aparecem no arquivo. Não use os arquivos que terminam com `.p7b`, `.p7c` ou extensões de arquivo semelhantes.

1. Coloque o novo certificado assinado pela CA e quaisquer certificados intermediários no diretório `/etc/pki/tls/certs`.
**nota**  
Há várias maneiras para fazer upload do novo certificado para a instância do EC2, mas a maneira mais simples e informativa é abrir um editor de texto (vi, nano, bloco de notas etc.) no seu computador local e na sua instância e, em seguida, copiar e colar os conteúdos do arquivo entre eles. Você precisa de permissões raiz [sudo] ao realizar essas operações na instância do EC2. Dessa forma, você vê imediatamente se há algum problema de permissão ou de caminho. No entanto, tenha cuidado para não adicionar mais linhas ao copiar o conteúdo ou ao alterá-lo de alguma maneira. 

   De dentro do `/etc/pki/tls/certs` diretório, verifique se as configurações de propriedade, grupo e permissão do arquivo correspondem aos AL2 padrões altamente restritivos (owner=root, group=root, somente para proprietário). read/write O exemplo a seguir mostra os comandos a serem usados. 

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

   Esses comandos devem produzir o resultado a seguir. 

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

   As permissões para o arquivo de certificado intermediário são menos estritas (owner=root, group=root, proprietário pode gravar, grupo pode ler, mundo pode ler). O exemplo a seguir mostra os comandos a serem usados. 

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

   Esses comandos devem produzir o resultado a seguir.

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

1. Coloque a chave privada que você usou para criar o CSR no diretório `/etc/pki/tls/private/`. 
**nota**  
Há várias maneiras para fazer upload da chave personalizada para a instância do EC2, mas a maneira mais simples e informativa é abrir um editor de texto (vi, nano, bloco de notas etc.) no seu computador local e na sua instância e, em seguida, copiar e colar os conteúdos do arquivo entre eles. Você precisa de permissões raiz [sudo] ao realizar essas operações na instância do EC2. Dessa forma, você vê imediatamente se há algum problema de permissão ou de caminho. No entanto, tenha cuidado para não adicionar mais linhas ao copiar o conteúdo ou ao alterá-lo de alguma maneira.

   De dentro do `/etc/pki/tls/private` diretório, use os comandos a seguir para verificar se as configurações de propriedade, grupo e permissão do arquivo correspondem aos AL2 padrões altamente restritivos (owner=root, group=root, somente para proprietário). 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
   ```

   Esses comandos devem produzir o resultado a seguir.

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

1. Edite `/etc/httpd/conf.d/ssl.conf` para refletir seu novo certificado e arquivos de chave.

   1. Forneça o caminho e o nome do arquivo do certificado de host assinado por CA na diretiva `SSLCertificateFile` do Apache:

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

   1. Se você receber um arquivo de certificado intermediário (`intermediate.crt` neste exemplo), forneça o caminho e o nome do arquivo usando a diretiva `SSLCACertificateFile` do Apache:

      ```
      SSLCACertificateFile /etc/pki/tls/certs/intermediate.crt
      ```
**nota**  
Alguns CAs combinam o certificado do host e os certificados intermediários em um único arquivo, tornando a `SSLCACertificateFile` diretiva desnecessária. Consulte as instruções fornecidas pela CA.

   1. Forneça o caminho e o nome do arquivo da chave privada (`custom.key` neste exemplo) na diretiva `SSLCertificateKeyFile` do Apache:

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

1. Salve o `/etc/httpd/conf.d/ssl.conf` e reinicie o Apache.

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

1. Teste seu servidor inserindo seu nome de domínio em uma barra de URL do navegador com o prefixo `https://`. Seu navegador deve carregar a página de teste via HTTPS sem gerar erros.

## Etapa 3: testar e intensificar a configuração de segurança
<a name="ssl_test"></a>

Depois que o SSL/TLS estiver operacional e exposto ao público, você precisará testar se ele é realmente seguro. É fácil fazer isso usando serviços online, como o [Qualys SSL Labs](https://www.ssllabs.com/ssltest/analyze.html) que executa uma análise completa e gratuita de sua configuração de segurança. Com base nos resultados, você pode decidir intensificar a configuração de segurança padrão controlando quais protocolos você aceita, quais cifras você prefere e quais você exclui. Para obter mais informações, consulte [como a Qualys formula suas pontuações](https://github.com/ssllabs/research/wiki/SSL-Server-Rating-Guide).

**Importante**  
Os testes no mundo real são cruciais para a segurança do servidor. Pequenos erros de configuração podem resultar em rupturas de segurança sérias e em perda de dados. Como as práticas de segurança recomendadas são alteradas constantemente em resposta a pesquisas e a ameaças emergentes, auditorias periódicas da segurança são essenciais para uma boa administração do servidor. 

No site [Qualys SSL Labs](https://www.ssllabs.com/ssltest/analyze.html), digite o nome do domínio totalmente qualificado de seu servidor no formato **www.example.com**. Depois de dois minutos, você recebe uma classificação (de A a F) para seu site e um detalhamento dos resultados. A tabela a seguir resume o relatório de um domínio com configurações idênticas à configuração padrão do Apache ativada e com um certificado padrão do Certbot. AL2 


|  |  | 
| --- |--- |
| Classificação geral | B | 
| Certificado | 100% | 
| Suporte ao protocolo | 95% | 
| Troca de chaves | 70% | 
| Intensidade da cifra | 90% | 

Embora a visão geral mostre que a configuração é mais sólida, o relatório detalhado sinaliza vários possíveis problemas, listados aqui em ordem de gravidade:

✗ **A RC4 cifra é compatível com o uso de alguns navegadores mais antigos**. Uma cifra é o núcleo matemático de um algoritmo de criptografia. RC4[, uma cifra rápida usada para criptografar fluxos de dados TLS, é conhecida por ter várias fraquezas graves.](http://www.imperva.com/docs/hii_attacking_ssl_when_using_rc4.pdf) A menos que você tenha boas razões para oferecer suporte a navegadores legados, você deve desabilitar isso.

✗ **Versões antigas do TLS são compatíveis.** A configuração é compatível com o TLS 1.0 (já obsoleto) e o TLS 1.1 (em um caminho para a reprovação). Apenas o TLS 1.2 é recomendado desde 2018.

✗ **O sigilo de encaminhamento não é totalmente compatível.** O [sigilo encaminhado](https://en.wikipedia.org/wiki/Forward_secrecy) é um recurso de algoritmos que criptografam usando chaves de sessão temporárias (efêmeras) derivadas da chave privada. Na prática, isso significa que os atacantes não podem descriptografar dados HTTPS mesmo que tenham a chave privada de longo prazo de um servidor Web.

**Para corrigir e preparar futuramente a configuração do TLS**

1. Abra o arquivo de configuração `/etc/httpd/conf.d/ssl.conf` em um editor de texto e comente as seguintes linhas digitando “\$1” no início delas.

   ```
   #SSLProtocol all -SSLv3
   ```

1. Adicione a seguinte diretiva:

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

   Essa diretiva desabilita explicitamente as versões 2 e 3 do SSL, bem como as versões 1.0 e 1.1 do TLS. O servidor agora se recusa a aceitar conexões criptografadas com clientes que não estejam usando o TLS 1.2. A expressão detalhada na diretriz transmite mais claramente, para um leitor humano, para que o servidor está configurado.
**nota**  
Desabilitar as versões 1.0 e 1.1 do TLS dessa forma bloqueia o acesso ao seu site de uma pequena porcentagem de navegadores da Web desatualizados.

**Para modificar a lista de cifras permitidas**

1. No arquivo de configuração `/etc/httpd/conf.d/ssl.conf`, localize a seção com a diretiva **SSLCipherSuite** e comente a linha existente ao inserir "\$1" no início dela.

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

1. Especifique conjuntos de criptografia explícitos e uma ordem de cifra que priorize o sigilo antecipado e evite cifras inseguras. A diretiva `SSLCipherSuite` usada aqui é baseada na saída do [gerador de configuração SSL do Mozilla](https://mozilla.github.io/server-side-tls/ssl-config-generator/), que adapta uma configuração TLS ao software específico em execução no seu servidor. Primeiro, determine suas versões do Apache e do OpenSSL usando os comandos a seguir.

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

   Por exemplo, se a informação exibida for Apache 2.4.34 e OpenSSL 1.0.2, insira esses valores no gerador. Se você escolher o modelo de compatibilidade "moderno", isso criará uma diretiva `SSLCipherSuite` que impõe a segurança de forma agressiva, mas ainda funciona para a maioria dos navegadores. Se o software não oferecer suporte à configuração moderna, você poderá atualizá-lo ou escolher a configuração "intermediária".

   ```
   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
   ```

   As cifras selecionadas têm *ECDHE* em seus nomes, o que significa *Elliptic Curve Diffie-Hellman Ephemeral (Curva elíptica de Diffie-Hellman efêmera)*. O termo *ephemeral (efêmera)* indica forward secrecy. Como subproduto, essas cifras não são compatíveis. RC4

   Recomendamos que você use uma lista explícita de cifras em vez de confiar em padrões ou em diretrizes concisas cujo conteúdo não é visível.

   Copie a diretiva gerada em `/etc/httpd/conf.d/ssl.conf`.
**nota**  
Embora sejam mostradas em várias linhas aqui para facilitar a leitura, a diretriz deve estar em uma única linha quando copiada para `/etc/httpd/conf.d/ssl.conf` com apenas dois pontos (sem espaços) entre os nomes das cifras.

1. Por fim, remova o comentário da linha a seguir, excluindo o "\$1" no início dela.

   ```
   #SSLHonorCipherOrder on
   ```

   Essa diretriz força o servidor a preferir cifras de alta classificação incluindo (neste caso) aquelas que oferecem suporte a forward secrecy. Com essa diretriz ativada, o servidor tenta estabelecer uma conexão altamente segura antes de voltar a usar cifras permitidas com menos segurança.

Depois de concluir esses dois procedimentos, salve as alterações em `/etc/httpd/conf.d/ssl.conf` e reinicie o Apache.

Se você testar o domínio novamente no [Qualys SSL Labs](https://www.ssllabs.com/ssltest/analyze.html), verá que a RC4 vulnerabilidade e outros avisos desapareceram e que o resumo se parece com o seguinte.


|  |  | 
| --- |--- |
| Classificação geral | A | 
| Certificado | 100% | 
| Suporte ao protocolo | 100% | 
| Troca de chaves | 90% | 
| Intensidade da cifra | 90% | 

Cada atualização do OpenSSL apresenta novas cifras e retira o suporte às cifras antigas. Mantenha sua AL2 instância EC2 up-to-date, fique atento aos anúncios de segurança do [OpenSSL](https://www.openssl.org/) e fique atento às denúncias de novas falhas de segurança na imprensa técnica.

## Solução de problemas
<a name="troubleshooting"></a>
+ **Meu servidor da web do Apache não inicia, a menos que eu digite uma senha.**

  Esse é comportamento esperado se você tiver instalado uma chave privada de servidor criptografada e protegida por senha.

  Você pode remover a criptografia e a solicitação de senha da chave. Supondo que você tenha uma chave de RSA privada criptografada chamada `custom.key` no diretório padrão, e que a senha seja **abcde12345**, execute os comandos a seguir na sua instância do EC2 para gerar uma versão descriptografada da chave:

  ```
  [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
  ```

  O Apache agora deve iniciar sem solicitar uma senha a você.
+  **Obtenho erros ao executar sudo yum install -y mod\$1ssl.**

  Quando estiver instalando os pacotes necessários para SSL, você verá erros como os exibidos a seguir.

  ```
  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
  ```

  Isso normalmente significa que sua instância do EC2 não está em execução AL2. Este tutorial comporta somente instâncias recentemente criadas em uma AMI oficial do AL2.

# Tutorial: hospede um WordPress blog no AL2
<a name="hosting-wordpress"></a>

Os procedimentos a seguir ajudarão você a instalar, configurar e proteger um WordPress blog na sua instância do AL2. Este tutorial é uma boa introdução ao uso do Amazon EC2, pois você tem controle total sobre um servidor web que hospeda seu WordPress blog, o que não é típico de um serviço de hospedagem tradicional.

Você é responsável para atualizar os pacotes de software e manter os patches de segurança para seu servidor. Para uma WordPress instalação mais automatizada que não exija interação direta com a configuração do servidor web, o CloudFormation serviço fornece um WordPress modelo que também pode ajudar você a começar rapidamente. Para mais informações, consulte [Get started](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/GettingStarted.Walkthrough.html) (Conceitos básicos) no *AWS CloudFormation User Guide* (Guia do usuário do ). *Se você precisar de uma solução de alta disponibilidade com um banco de dados desacoplado, consulte [Implantação de um WordPress site de alta disponibilidade](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/php-hawordpress-tutorial.html) no Guia do desenvolvedor.AWS Elastic Beanstalk *

**Importante**  
Esses procedimentos são destinados ao uso com AL2. Para obter mais informações sobre outras distribuições, consulte a documentação específica. Muitas etapas deste tutorial não funcionam em instâncias Ubuntu. Para obter ajuda WordPress na instalação em uma instância do Ubuntu, consulte [WordPress](https://help.ubuntu.com/community/WordPress)a documentação do Ubuntu. Você também pode usar [CodeDeploy](https://docs.aws.amazon.com/codedeploy/latest/userguide/tutorials-wordpress-launch-instance.html)para realizar essa tarefa nos sistemas Amazon Linux, macOS ou Unix.

**Topics**
+ [Pré-requisitos](#hosting-wordpress-prereqs)
+ [Instalar WordPress](#install-wordpress)
+ [Próximas etapas](#wordpress-next-steps)
+ [Ajuda\$1 Meu nome DNS público mudou e agora meu blog não está funcionando](#wordpress-troubleshooting)

## Pré-requisitos
<a name="hosting-wordpress-prereqs"></a>

Este tutorial pressupõe que você tenha iniciado uma AL2 instância com um servidor web funcional com suporte a PHP e banco de dados (MySQL ou MariaDB) seguindo todas as etapas descritas. [Tutorial: Instalar um servidor LAMP em AL2](ec2-lamp-amazon-linux-2.md) Este tutorial tem também etapas para configurar um security group para permitir tráfego de `HTTP` e `HTTPS`, bem como várias etapas para garantir que as permissões de arquivos sejam definidas corretamente para seu servidor web. Para obter informações sobre como adicionar regras aos grupos de segurança, consulte [Add rules to a security group](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/working-with-security-groups.html#adding-security-group-rule).

É altamente recomendável que você associe um endereço IP elástico (EIP) à instância que você está usando para hospedar um WordPress blog. Isso impede que o endereço DNS público da sua instância mude e quebre sua instalação. Se você tiver um nome de domínio e quiser usá-lo para o blog, pode atualizar o registro DNS do nome de domínio para indicar ao seu endereço EIP (para obter ajuda com isso, contate seu registrador de nome de domínio). Você pode ter um endereço EIP associado a uma instância em execução, gratuitamente. Para obter mais informações, consulte [Endereços IP elásticos](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html) no *Guia do usuário do Amazon EC2*.

Se você ainda não tiver um nome de domínio para seu blog, pode registrar um nome de domínio com o Route 53 e associar o endereço EIP de sua instância com seu nome de domínio. Para obter mais informações, consulte [Registrar nomes de domínio usando o Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/registrar.html) no *Guia do desenvolvedor do Amazon Route 53*.

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

**Opção: concluir este tutorial usando a automação**  
Para concluir este tutorial usando a AWS Systems Manager automação em vez das tarefas a seguir, execute o [documento de automação](https://console.aws.amazon.com/systems-manager/documents/AWSDocs-HostingAWordPressBlog/).

Conecte-se à sua instância e baixe o pacote WordPress de instalação.

**Para baixar e descompactar o pacote WordPress de instalação**

1. Baixe o pacote WordPress de instalação mais recente com o **wget** comando. O comando a seguir sempre deve baixar a versão mais recente.

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

1. Descompacte e desarquive o pacote de instalação. A pasta de instalação é descompactada para uma pasta chamada `wordpress`.

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

**Para criar um usuário de banco de dados e um banco de dados para sua WordPress instalação**

Sua WordPress instalação precisa armazenar informações, como postagens de blog e comentários de usuários, em um banco de dados. Esse procedimento ajuda você a criar um banco de dados para seu blog e um usuário autorizado a ler e salvar as informações. 

1. Inicie o servidor do banco de dados.
   + 

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

1. Faça login no servidor do banco de dados como usuário `root`. Insira a senha de `root` do banco de dados quando solicitado; ela poderá ser diferente da sua senha do sistema de `root` ou poderá até estar vazia, se você não tiver protegido seu servidor do banco de dados.

   Se ainda não tiver protegido seu servidor do banco de dados, é muito importante que você faça isso. Para obter mais informações, consulte [Para proteger o 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>Crie um usuário e uma senha para seu banco de dados do MySQL. Sua WordPress instalação usa esses valores para se comunicar com seu banco de dados MySQL. 

   Crie uma senha forte para seu usuário. Não use o caractere de aspa única ( ' ) na sua senha, pois isso quebrará o comando anterior. Não reutilize uma senha existente e armazene essa senha em um lugar seguro.

   Digite o comando a seguir, substituindo um nome de usuário e uma senha exclusivos.

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

1. <a name="create_database"></a>Crie seu banco de dados. Dê ao seu banco de dados um nome descritivo e significativo, como `wordpress-db`.
**nota**  
As marcas de pontuação que cercam o nome do banco de dados no comando abaixo são chamados backticks. A chave de backtick (```) costuma estar localizada acima da chave `Tab` de um teclado padrão. Backticks nem sempre são necessários, mas permitem que você use caracteres de outra forma ilegais, como hífens, no nome dos bancos de dados.

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

1. Conceda privilégios totais do seu banco de dados ao WordPress usuário que você criou anteriormente.

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

1. Limpe os privilégios do banco de dados para receber todas as suas alterações.

   ```
   FLUSH PRIVILEGES;
   ```

1. Saia do cliente `mysql`.

   ```
   exit
   ```

**Para criar e editar o arquivo wp-config.php**

A pasta WordPress de instalação contém um exemplo de arquivo de configuração chamado`wp-config-sample.php`. Nesse procedimento, você copia esse arquivo e o edita para caber na sua configuração específica.

1. Copie o arquivo `wp-config-sample.php` para um arquivo chamado `wp-config.php`. Isso cria um novo arquivo de configuração e mantém o arquivo de exemplo original intacto como um backup.

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

1. Edite o arquivo `wp-config.php` com seu editor de texto favorito (como o **nano** ou o **vim**) e insira os valores da instalação. Se você não tiver um editor de texto favorito, o `nano` é ideal para iniciantes.

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

   1. Encontre a linha que define `DB_NAME` e altere `database_name_here` para o nome do banco de dados criado em [Step 4](#create_database) de [Para criar um usuário de banco de dados e um banco de dados para sua WordPress instalação](#create_user_and_database).

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

   1. Encontre a linha que define `DB_USER` e altere `username_here` para o usuário do banco de dados que você criou [Step 3](#create_database_user) de [Para criar um usuário de banco de dados e um banco de dados para sua WordPress instalação](#create_user_and_database).

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

   1. Encontre a linha que define `DB_PASSWORD` e altere `password_here` para a senha mais forte que você criou em [Step 3](#create_database_user) de [Para criar um usuário de banco de dados e um banco de dados para sua WordPress instalação](#create_user_and_database).

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

   1. Encontre a seção chamada `Authentication Unique Keys and Salts`. Esses `SALT` valores `KEY` e esses fornecem uma camada de criptografia aos cookies do navegador que WordPress os usuários armazenam em suas máquinas locais. Basicamente, adicionar valores longos e aleatórios aqui deixa seu site mais seguro. Visite [https://api.wordpress. org/secret-key/1.1/salt](https://api.wordpress.org/secret-key/1.1/salt/)/para gerar aleatoriamente um conjunto de valores-chave que você pode copiar e colar em seu `wp-config.php` arquivo. Para colar texto em um terminal do PuTTY, coloque o cursor onde deseja colar texto e clique com o botão direito do mouse dentro do terminal do PuTTY.

      Para obter mais informações sobre chaves de segurança, acesse [https://wordpress. org/support/article/editing-wp-config-php/\$1security -keys](https://wordpress.org/support/article/editing-wp-config-php/#security-keys).
**nota**  
Os valores abaixo são somente para fins de exemplo; não use esses valores para a instalação.

      ```
      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. Salve o arquivo e saia do seu editor de texto.

**Para instalar seus WordPress arquivos na raiz do documento Apache**
+ Agora que você descompactou a pasta de instalação, criou um banco de dados e um usuário MySQL e personalizou o arquivo de WordPress configuração, você está pronto para copiar os arquivos de instalação para a raiz do documento do servidor web para poder executar o script de instalação que conclui a instalação. A localização desses arquivos depende se você deseja que seu WordPress blog esteja disponível na raiz real do seu servidor web (por exemplo,`my.public.dns.amazonaws.com`) ou em um subdiretório ou pasta abaixo da raiz (por exemplo,`my.public.dns.amazonaws.com/blog`).
  + Se você quiser WordPress executar na raiz do documento, copie o conteúdo do diretório de instalação do wordpress (mas não o diretório em si) da seguinte forma: 

    ```
    [ec2-user ~]$ cp -r wordpress/* /var/www/html/
    ```
  + Se você quiser WordPress executar em um diretório alternativo na raiz do documento, primeiro crie esse diretório e, em seguida, copie os arquivos nele. Neste exemplo, WordPress será executado a partir do diretório`blog`:

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

**Importante**  
Para fins de segurança, se você não estiver segundo para o procedimento seguinte imediatamente, pare o Apache Web Server (`httpd`) agora. Depois de mover sua instalação para a raiz do documento Apache, o script de WordPress instalação fica desprotegido e um invasor pode obter acesso ao seu blog se o servidor web Apache estiver em execução. Para interromper o servidor web Apache, insira o comando **sudo systemctl stop httpd**. Se você estiver passando para o procedimento seguinte, não precisa parar o Apache Web Server.

**Para permitir o uso WordPress de links permanentes**

WordPress os permalinks precisam usar `.htaccess` arquivos Apache para funcionar corretamente, mas isso não está habilitado por padrão no Amazon Linux. Use o procedimento a seguir para permitir todas as substituições na raiz de documentos do Apache.

1. Abra o arquivo `httpd.conf` com seu editor de texto de preferência (como **nano** ou **vim**). Se você não tiver um editor de texto favorito, o `nano` é ideal para iniciantes.

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

1. Encontre a seção que começa com `<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. Altere a linha `AllowOverride None` na seção acima para `AllowOverride All`.
**nota**  
Há múltiplas linhas `AllowOverride` nesse arquivo; altere a linha na seção `<Directory "/var/www/html">`.

   ```
   AllowOverride All
   ```

1. Salve o arquivo e saia do seu editor de texto.

**Para instalar a biblioteca de desenhos gráficos PHP em AL2**  
A biblioteca de desenhos gráficos para PHP permite modificar imagens. Instale esta biblioteca caso você precise cortar a imagem do cabeçalho do blog. A versão phpMyAdmin que você instala pode exigir uma versão mínima específica dessa biblioteca (por exemplo, versão 7.2).

Use o comando a seguir para instalar a biblioteca de desenhos gráficos PHP em AL2. Por exemplo, se você instalou o php7.2 amazon-linux-extras como parte da instalação da pilha LAMP, esse comando instala a versão 7.2 da biblioteca de desenho gráfico PHP.

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

Para verificar a versão instalada, use o seguinte comando:

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

A seguir está um exemplo de saída:

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

**Para corrigir as permissões de arquivos para o Apache Web Server**

Alguns dos recursos disponíveis WordPress exigem acesso de gravação à raiz do documento Apache (como o upload de mídia pelas telas de administração). Se você ainda não tiver feito isso, aplique as seguintes associações e permissões de grupo (conforme descrito em mais detalhes no[Tutorial: Instalar um servidor LAMP em AL2](ec2-lamp-amazon-linux-2.md)).

1. Conceda a propriedade do arquivo de `/var/www` e seu conteúdo para o usuário `apache`.

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

1. Conceda a propriedade do grupo do `/var/www` e seu conteúdo para o grupo do `apache`.

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

1. Altere as permissões do diretório do `/var/www` e de seus subdiretórios para adicionar permissões de gravação do grupo e definir o ID do grupo em subdiretórios futuros.

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

1. Altere recursivamente as permissões de arquivo de `/var/www` e de seus subdiretórios.

   ```
   [ec2-user ~]$ find /var/www -type f -exec sudo chmod 0644 {} \;
   ```
**nota**  
 Se você também pretende usar WordPress como servidor FTP, precisará de configurações de grupo mais permissivas aqui. Revise as [etapas recomendadas e as configurações de segurança WordPress](https://wordpress.org/support/article/changing-file-permissions/) para fazer isso. 

1. Reinicie o Apache Web Server para pegar o grupo e as permissões novos.
   + 

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

**Execute o script WordPress de instalação com AL2**

Você está pronto para instalar WordPress. Os comandos usados por você dependem do sistema operacional. Os comandos neste procedimento são para uso com AL2.

1. Use o comando **systemctl** para garantir que `httpd` e os serviços do banco de dados sejam iniciados a cada inicialização do sistema.

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

1. Verifique se o servidor do banco de dados está em execução.

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

   Se o serviço do banco de dados não está em execução, inicie-o.

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

1. Verifique se o Apache Web Server (`httpd`) está sendo executado.

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

   Se o serviço `httpd` não estiver sendo executado, inicie-o.

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

1. Em um navegador da Web, digite a URL do seu WordPress blog (o endereço DNS público da sua instância ou o endereço seguido pela `blog` pasta). Você deve ver o script WordPress de instalação. Forneça as informações exigidas pela WordPress instalação. Escolha **Instalar WordPress** para concluir a instalação. Para obter mais informações, consulte [Etapa 5: Executar o script de instalação](https://wordpress.org/support/article/how-to-install-wordpress/#step-5-run-the-install-script) no WordPress site.

## Próximas etapas
<a name="wordpress-next-steps"></a>

Depois de testar seu WordPress blog, considere atualizar sua configuração.

**Usar um nome de domínio personalizado**  
Se você tiver um nome de domínio associado ao endereço EIP da sua instância do EC2, pode configurar o blog para usar esse nome em vez do endereço DNS público do EC2. Para obter mais informações, consulte [Alterando a URL do WordPress site](https://wordpress.org/support/article/changing-the-site-url/) no site.

**Configurar seu blog**  
Você pode configurar seu blog para usar diferentes [temas](https://wordpress.org/themes/) e [plug-ins](https://wordpress.org/plugins/) e oferecer uma experiência mais personalizada para seus leitores. Contudo, às vezes o processo de instalação pode dar errado, fazendo com que você perca o blog inteiro. Recomendamos veementemente que você crie um backup da imagem de máquina da Amazon (AMI) de sua instância antes de tentar instalar quaisquer temas ou plug-ins, de forma que consiga restaurar o blog se algo der errado durante a instalação. Para obter mais informações, consulte [Criar sua própria AMI](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AMIs.html#creating-an-ami).

**Aumentar a capacidade**  
Se seu WordPress blog se tornar popular e você precisar de mais capacidade computacional ou armazenamento, considere as seguintes etapas:
+ Expanda o espaço de armazenamento na sua instância. Para obter mais informações, consulte [Volumes Elásticos do Amazon EBS](https://docs.aws.amazon.com/ebs/latest/userguide/ebs-modify-volume.html) no *Guia do usuário do Amazon EBS*.
+ Mova o banco de dados MySQL para o [Amazon RDS](https://aws.amazon.com/rds) para aproveitar a capacidade de dimensionamento que o serviço oferece.

**Melhore a performance de rede do tráfego da Internet**  
Se você espera que seu blog gere tráfego de usuários localizados em todo o mundo, considere o [AWS Global Accelerator](https://aws.amazon.com/global-accelerator). O Global Accelerator ajuda você a obter menor latência melhorando o desempenho do tráfego da Internet entre os dispositivos cliente de seus usuários e seu WordPress aplicativo em execução. AWS O Global Accelerator usa a [rede AWS global](https://aws.amazon.com/about-aws/global-infrastructure/global_network/) para direcionar o tráfego para um endpoint de aplicativo saudável na AWS região mais próxima do cliente.

**Saiba mais sobre WordPress**  
Para obter informações sobre WordPress, consulte a documentação de ajuda do WordPress Codex em [http://codex.wordpress.org/](http://codex.wordpress.org/).

Para obter mais informações sobre como solucionar problemas de instalação, consulte [Problemas comuns de instalação](https://wordpress.org/support/article/how-to-install-wordpress/#common-installation-problems).

Para obter informações sobre como tornar seu WordPress blog mais seguro, consulte [Fortalecimento WordPress](https://wordpress.org/support/article/hardening-wordpress/).

Para obter informações sobre como manter seu WordPress blog up-to-date, consulte [Atualização WordPress](https://wordpress.org/support/article/updating-wordpress/).

## Ajuda\$1 Meu nome DNS público mudou e agora meu blog não está funcionando
<a name="wordpress-troubleshooting"></a>

Sua WordPress instalação é configurada automaticamente usando o endereço DNS público da sua instância EC2. Se você parar e reiniciar a instância, as alterações no endereço DNS público (a menos que estejam associadas a um endereço IP elástico) e seu blog não funcionarão mais, pois ele faz referência a recursos em um endereço que não existe mais (ou é atribuído a outra instância do EC2). Uma descrição mais detalhada do problema e várias soluções possíveis estão descritas em [Alteração do URL do site](https://wordpress.org/support/article/changing-the-site-url/).

Se isso aconteceu com sua WordPress instalação, talvez você consiga recuperar seu blog com o procedimento abaixo, que usa a interface de linha de **wp-cli** comando para WordPress.

**Para alterar o URL WordPress do seu site com o **wp-cli****

1. Conecte-se à sua instância do EC2 com SSH. 

1. Anote o URL do site antigo e do site novo para sua instância. O URL antigo do site provavelmente é o nome DNS público da sua instância do EC2 quando você instalou. WordPress O URL do novo site é o nome DNS público atual da sua instância do EC2. Se você não tiver certeza da URL do site antigo, pode usar o **curl** para encontrá-la com o seguinte comando.

   ```
   [ec2-user ~]$ curl localhost | grep wp-content
   ```

   Você deve visualizar referências ao nome DNS público antigo na saída, que terá a seguinte aparência (URL do site antigo em vermelho):

   ```
   <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. Faça download do **wp-cli** com o seguinte comando.

   ```
   [ec2-user ~]$ curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
   ```

1. Pesquise e substitua o URL antigo do site em sua WordPress instalação pelo comando a seguir. Substitua os URLs antigos e novos do site para sua instância do EC2 e o caminho para sua WordPress instalação (geralmente `/var/www/html` ou`/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. Em um navegador da Web, insira a nova URL do seu WordPress blog para verificar se o site está funcionando corretamente novamente. Se não estiver, consulte [Alteração da URL do site](https://wordpress.org/support/article/changing-the-site-url/) e [Problemas comuns de instalação](https://wordpress.org/support/article/how-to-install-wordpress/#common-installation-problems) para obter mais informações.