P: O que é o Amazon Linux AMI?

O Amazon Linux AMIé uma imagem compatível e mantida do Linux fornecida pela Amazon Web Services para uso no Amazon Elastic Compute Cloud (Amazon EC2). Ele foi criado para fornecer um ambiente de execução estável, seguro e de alto desempenho para aplicativos sendo executados no Amazon EC2. Ele também inclui vários pacotes que permitem a fácil integração com a AWS, incluindo ferramentas de configuração de execução e muitas bibliotecas e ferramentas populares da AWS. A Amazon Web Services disponibiliza atualizações contínuas de segurança e manutenção para todas as instâncias que executam o Amazon Linux AMI. O Amazon Linux AMI é fornecido gratuitamente para usuários do Amazon EC2.

P: É possível visualizar o código fonte do Amazon Linux AMI?

Sim. A ferramenta de linha de comando yumdownloader --source fornecida no Amazon Linux AMI permite a visualização de código-fonte dentro do Amazon EC2.

P: Onde posso obter atualizações do Amazon Linux AMI?

As atualizações são fornecidas por meio de um repositório yum pré-configurado e hospedado em cada região do Amazon EC2. As atualizações de segurança são automaticamente aplicadas à primeira inicialização do AMI. Ao fazer login, a Mensagem do dia (/etc/motd) indica se há alguma atualização adicional disponível ou não.

P: Com que frequência as atualizações do Amazon Linux AMI serão disponibilizadas?

O Amazon Linux AMI é criado e mantido como uma versão contínua. Nós incentivamos nossos usuários a pensar no Amazon Linux AMI como um fluxo único de pacotes, do qual as próprias imagens AMI são apenas snapshots de um determinado momento.

 

A disponibilização de uma versão contínua garante que os nossos Amazon Linux AMIs e as nossas instâncias de cliente baseadas nessas AMIs sejam compatíveis com os recursos mais recentes do EC2 e da AWS, conforme eles vão sendo lançados. Dessa maneira, o Amazon Linux AMI também serve como um ponto de referência para outros produtores do Linux AMI (terceirizados e downstream do Amazon Linux AMI) de modo que eles também possam ser compatíveis com esses recursos.

 

Este modelo indica que os clientes têm maior probabilidade de estarem operando com as melhorias mais recentes de segurança, desempenho e recursos, o que mitiga uma grande variedade de problemas que eles poderiam enfrentar.

P: A Amazon oferece suporte para o Amazon Linux AMI?

Sim. O suporte ao Amazon Linux AMI é disponibilizado por meio de assinaturas do AWS Support. Mais detalhes podem ser encontrados na página do AWS Support.

P: O Amazon Linux AMI tem suporte fora do EC2?

Não. O Amazon Linux AMI está disponível somente para uso dentro do Amazon EC2.

P: Como posso reportar problemas ou fazer solicitações de recursos ou pacotes?

Usamos o fórum de discussão do Amazon EC2 para reportar problemas, solicitar novos recursos e solicitar pacotes. Esses fóruns são monitorados pelo Suporte ao desenvolvedor da AWS, assim como pela equipe de engenharia do Amazon Linux AMI.

P: Como posso ativar o repositório Extra Packages for Enterprise Linux (EPEL)?

Modifique /etc/yum.repos.d/epel.repo. Na seção marcada como [epel], altere enabled=0 para enabled=1.

Para ativar temporariamente o repositório EPEL 6, utilize a opção de linha de comando yum --enablerepo=epel.

Observe que os repositórios do Amazon Linux AMI são configurados com uma prioridade mais alta que repositórios de terceiros. O motivo para isso é que há diversos pacotes que fazem parte do Amazon Linux AMI que também ficam em repositórios de terceiros. Queremos garantir que a versão do Amazon Linux AMI seja instalada no caso padrão.

P: Como posso fixar meu AMI em uma versão específica?

A estrutura de repositórios do Amazon Linux AMI foi configurada para proporcionar um fluxo contínuo de atualizações, permitindo que você passe de uma versão do Amazon Linux AMI para a próxima.

As atualizações de pacote são sempre enviadas para os repositórios e ficam disponíveis para qualquer versão do Amazon Linux AMI em que o yum esteja configurado para indicar a "mais recente". Você pode verificar quais repositórios a sua instância está indicando ao consultar a variável "releasever" em /etc/yum.conf. Como padrão, o Amazon Linux AMI tem a variável releasever=latest definida.

Em outras palavras, os Amazon Linux AMIs são tratados como snapshots de um determinado momento, com estrutura de repositório e atualizações que disponibilizam os pacotes mais recentes criados e enviados para o repositório.

O recurso "bloqueio na execução" existe para oferecer aos usuários uma maneira simples de manter suas AMIs em uma versão principal específica, caso eles não tenham interesse em obter atualizações de pacotes sempre que lançarmos novas versões principais do Amazon Linux AMI.

Para ativar esse recurso em novas instâncias, execute (por exemplo) um Amazon Linux AMI 2015.09 e informe os seguintes dados para o cloud-init, por meio do console do EC2 ou por meio de aws ec2 run-instances com o sinalizador --user-data (isso também pode ser feito com ec2-run-instances -f ).

#cloud-config
repo_releasever: 2015.09

Para bloquear instâncias existentes da versão atual (indicada em /etc/system-release), edite /etc/yum.conf. Comente a linha que diz releasever=latest e execute yum clean all para limpar o cache.

OBSERVAÇÃO: Se você bloquear seu AMI para uma versão dos repositórios que não seja a "mais recente", você não receberá atualizações futuras. A única maneira de receber um fluxo contínuo de atualizações do Amazon Linux AMI é usar o AMI mais recente ou atualizar constantemente seu AMI antigo com os repositórios direcionados para o "mais recente".

P: Como posso desativar a instalação automática de atualizações de segurança essenciais e importantes na inicialização?

Na primeira inicialização, o Amazon Linux AMI instala, dos repositórios de pacotes, todas as atualizações de segurança do espaço do usuário que forem classificadas como críticas ou importantes, antes que serviços como o SSH sejam iniciados.

Se a AMI não puder acessar os repositórios do yum, esgotará o tempo limite e tentará novamente várias vezes antes de concluir o procedimento de inicialização. Isso pode acontecer devido a configurações restritivas do firewall ou da VPC que impedem o acesso aos repositórios do pacote do Amazon Linux AMI.

Se você encontrar esse problema, poderá modificar seu ambiente para que o Amazon Linux AMI possa se conectar a seus repositórios de pacote ou poderá desativar a atualização de segurança na inicialização.

Para desativar a atualização de segurança na inicialização usando o console do AWS EC2:

Na página "Advanced Instance Options" no Request Instances Wizard, existe um campo de texto para enviar os dados do usuário do Amazon Linux AMI. Esses dados podem ser inseridos como texto ou carregados como um arquivo. Em ambos os casos, os dados devem ser:

#cloud-config
repo_upgrade: none

Para desativar a atualização de segurança na inicialização da linha de comando:

Crie um arquivo de texto com os dados de usuário precedentes e passe esse arquivo para aws ec2 run-instances com o sinalizador --user-data file:// (isso também pode ser feito com ec2-run-instances -f ).

Para desativar a atualização de segurança na inicialização durante o reempacotamento do Amazon Linux AMI:

Modifique /etc/cloud/cloud.cfg e altere repo_upgrade: security para repo_upgrade: none.

P: Por que demora muito para o SSH iniciar quando é executado em uma Virtual Private Cloud (VPC) sem um gateway de internet ou uma instância NAT?

Veja a resposta da pergunta anterior.

P: Por que minhas matrizes de RAID começam em /dev/md127 ao invés de /dev/md0?

As versões mais novas do mdadm criam matrizes de RAID com superblocos de versão 1.2, que não se combinam automaticamente com um dispositivo numerado. Faça referência às partições usando um rótulo para o sistema de arquivos. A maioria das ferramentas de criação de sistema de arquivos usa o sinalizador -L para definir o rótulo. Uma vez definido, o rótulo é referenciado pela montagem ou em /etc/fstab com LABEL=[NAME].

Exemplo: criando uma matriz RAID0 com um rótulo.

mdadm --create --verbose /dev/md0 --level=0 --name=0 --raid-devices=2 /dev/sdb /dev/sdc
mkfs.ext4 -L RAID0 /dev/md0
mkdir -p /mnt/RAID0
mount LABEL=RAID0 /mnt/RAID0

Exemplo: configurando um rótulo de um sistema de arquivos ext[2-4] existente.

e2label /dev/md127 RAID
mkdir -p /mnt/RAID
mount LABEL=RAID /mnt/RAID

P: Por que o grupo wheel foi desativado de /etc/sudoers e como posso ativá-lo novamente?

Os sistemas operacionais Linux têm padrões diferentes em termos de ativar ou não o wheel para o sudo. Acreditamos que o wheel desativado por padrão é uma postura de segurança mais adequada para o Amazon Linux AMI.

Há duas soluções para esse problema, que diferem de acordo com sua capacidade de fazer SSH em suas instâncias, como ec2-user padrão, e do fato de você já ter alterado ou não a capacidade do usuário de usar o sudo.

Opção 1: para usuários que ainda não alteraram nenhum valor padrão, você ainda poderá fazer ssh em suas instâncias como ec2-user e invocar o sudo para obter root, e a partir desse ponto modificar o arquivo sudoers para reativar o wheel.

Opção 2: para usuários que alteraram valores padrão e não podem executar o sudo do ec2-user para root, recomendamos o seguinte:

  • Pare a instância afetada (mas não a encerre).
  • Desvincule o volume do EBS raiz usando o console do EC2 ou as ferramentas de API do EC2.
  • Vincule o volume à outra instância do EC2 para a qual você tem acesso remoto à raiz.
  • Faça login nessa instância.
  • Monte o volume recém-vinculado.
    sudo mount /dev/xvdf /mnt
  • Modifique o arquivo sudoers no volume vinculado e exclua o grupo wheel.
    sudo sed -i.bak 's,# \(%wheel\s\+ALL=(ALL)\s\+ALL\),\1,' /mnt/etc/sudoers
  • Desmonte o volume.
    sudo umount -d /dev/xvdf
  • Separe o volume.
  • Vincule novamente o volume à instância parada (verifique se o dispositivo está igual a antes da desvinculação, normalmente: /dev/sda1).
  • Inicie a instância afetada.

P: Por que eu vejo caracteres estranhos como � ou â quando interajo com o Amazon Linux AMI através de um terminal?

O Amazon Linux AMI usa a codificação de caracteres UTF-8 por padrão. Os terminais cliente que não usam a codificação UTF-8 nem sempre converterão os caracteres UTF-8 corretamente. Para corrigir isso, configura a codificação do terminal cliente como UTF-8:

  • Terminal do GNOME: no menu Terminal, selecione Definir codificação de caracteres e selecione UTF-8.
  • PuTTY: clique com o botão direito na barra de título para exibir o menu. Em seguida, selecione Change Settings. Em Window → Translation → Remote Character Set, selecione UTF-8.

P: Vejo uma opção report_instanceid em /etc/yum.repos.d/amzn*.repo. O que isso faz?

Os repositórios do Amazon Linux AMI são buckets do S3 em cada região. Quando o yum é executado na sua instância, faz download de pacotes desses buckets. As informações sobre essa conexão do S3 são registradas.

Dentro do contexto do Amazon Linux AMI, a configuração report_instanceid=yes permite que os repositórios do Amazon Linux AMI registrem também o ID (por exemplo., i-xxxxxxxx) e a região (por exemplo, us-west-2) da instância que está fazendo o download de um pacote. Isso permite que a equipe do Amazon Linux AMI ofereça atendimento ao cliente mais focado e específico a instâncias individuais.

report_instanceid=yes é ativado por padrão apenas para os repositórios do Amazon Linux AMI.

P: Por que os arquivos de configuração do yum /etc/yum.repos.d/amzn*.repo são sobrescritos quando o pacote system-release é atualizado?

Esses arquivos de configuração do repositório são substituídos quando o pacote system-release é atualizado, a fim de garantir que as instâncias sempre vejam as alterações na configuração do repositório yum do Amazon Linux AMI.

Para versões do Amazon Linux AMI anteriores a 2014.09:

Esses arquivos são gerados por cloud-init de modelos localizados em /etc/cloud/templates/amzn-*.repo.tmpl. As alterações feitas nesses arquivos de modelo persistirão.

Para o Amazon Linux AMI 2014.09 e versões posteriores:

Os arquivos /etc/yum.repos.d/amzn*.repo agora usam variáveis ​​yum para ajudar as instâncias a alcançar os repositórios geograficamente mais próximos, dispensando o uso de modelos cloud-init. Todas as edições feitas nesses arquivos serão preservadas como /etc/yum.repos.d/amzn*.repo.rpmsave quando o system-release for atualizado.

Os usuários que estiverem atualizando para a versão 2014.09 verão as edições feitas nos arquivos /etc/yum.repos.d/amzn*.repo salvas como /etc/yum.repos.d/amzn*.repo.rpmsave.

P: Como posso alterar ou desativar as cores das páginas do man?

As cores de página do man são configuradas no /etc/profile.d/less.sh (bash e zsh) e no /etc/profile.d/less.csh (csh). Para desativá-las, remova todas as linhas que comecem com export LESS_ (bash e zsh) e/ou setenv LESS_ (csh).

P: Como eu desativo a auditoria de chamadas do sistema em instâncias anteriores ao 2015.09?

Como padrão, a auditoria de chamadas do sistema foi desativada nas novas versões do Amazon Linux AMI 2015.09.  A auditoria de chamadas do sistema sobrecarrega cada chamada do sistema e pode resultar em uma diminuição perceptível do desempenho, especialmente em aplicações com alto consumo de disco ou rede.

Caso você precise da auditoria de chamadas do sistema, procure a seguinte linha em /etc/audit/audit.rules e a remova ou deixe um comentário, em seguida reinicie o daemon de auditoria.

 -a never,task

Exemplo (como raiz):

# auditctl -l
LIST_RULES: task,never
# sed -i.bak -e '/^-a never,task$/ s/^/#/' /etc/audit/audit.rules
# service auditd restart
# auditctl -l
Não há regras

Se você desejar obter a mesma melhoria de desempenho nas instâncias iniciadas antes do AMI 2015.09, adicione a mesma linha (  -a never,task ) a/etc/audit/audit.rules e reinicie o daemon. Se você estiver fazendo o upgrade e não tiver feito alterações aos arquivos de regras de auditoria, você poderá facilmente transferir ou copiar o novo arquivo de regras padrão para /etc/audit/audit.rules

Exemplo (como raiz)

# auditctl -l
Não há regras
# cp -p /etc/audit/rules.d/audit.rules.default /etc/audit/audit.rules
cp: overwrite ‘/etc/audit/audit.rules’? y
# service auditd restart
# auditctl -l
LIST_RULES: task,never

P: Você pode dar um exemplo de uso de dados de usuário de MIME multipart com o cloud-init?

Encontre a documentação relacionada a MIME multipart do cloud-init aqui.

O MIME multipart pode ser um formato complicado, portanto, é melhor usar a ferramenta write-mime-multipart para gerar o arquivo multipart. Essa ferramenta encontra-se no pacote cloud-utils e pode ser instalada com osudo yum install /usr/bin/write-mime-multipart. A ferramenta usa a primeira linha para determinar o atributo Content-Type e o cloud-init usa o Content-Type para determinar como ele deverá interpretar o arquivo. Alguns arquivos de exemplo:

#cloud-config
repo_releasever: 2015.09

e

#!/bin/bash
echo "cloud-init was here..." >> /tmp/cloud-init-was-here.txt

Este é um exemplo de write-mime-multipart, que inclui a saída:

[ec2-user@ip-172-31-4-37 ~]$ write-mime-multipart repo_releasever-2015.09.cfg ci-was-here.sh
Content-Type: multipart/mixed; boundary="===============6347220379374809187=="
MIME-Version: 1.0

--===============6347220379374809187==
Content-Type: text/cloud-config; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="repo_releasever-2015.09.cfg"

#cloud-config
repo_releasever: 2015.09

--===============6347220379374809187==
Content-Type: text/x-shellscript; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="ci-was-here.sh"

#!/bin/bash
echo "cloud-init was here..." >> /tmp/cloud-init-was-here.txt

--===============6347220379374809187==--

Mais informações sobre como usar a ferramenta podem ser encontradas usando o man write-mime-multipart.

P: Como configurar um endpoint da VPC para permitir conexões com os repositórios do Amazon Linux AMI?

É possível acessar os repositórios yum em uma VPC sem que seja necessário acessar a Internet.  Sua política de endpoints da VPC deve permitir tráfego da sua VPC para os buckets do S3 que hospedam os repositórios do Amazon Linux AMI.

Veja abaixo um exemplo de endpoint da VPC que executa o seguinte:

{
  "Statement": [
    {
      "Sid": "Amazon Linux AMI Repository Access",
      "Principal": "*",
      "Action": [
        "s3:GetObject"
      ],
      "Effect": "Allow",
      "Recurso": [
        "arn:aws:s3:::packages.*.amazonaws.com/*",
        "arn:aws:s3:::repo.*.amazonaws.com/*"
      ]
    }
  ]
}

Para obter mais informações, consulte a documentação sobre os endpoints da VPC.