Amazon Linux - Amazon Elastic Compute Cloud

Amazon Linux

O Amazon Linux é fornecido pela Amazon Web Services (AWS). Ele foi criado para fornecer um ambiente de execução estável, seguro e de alto desempenho para aplicativos em execução 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. O AWS fornece atualizações constantes de segurança e manutenção para todas as instâncias que executam o Amazon Linux. Muitos aplicativos desenvolvidos no CentOS (e distribuições similares) são executados no Amazon Linux.

Disponibilidade do Amazon Linux

A AWS fornece o Amazon Linux 2 e a Amazon Linux AMI. Se você estiver migrando de outra distribuição do Linux para o Amazon Linux, recomendamos migrar para o Amazon Linux 2.

A última versão da Amazon Linux AMI, 2015.09, terá suporte padrão até 31 de dezembro de 2020. Para obter mais informações, consulte a seguinte postagem no blog: Amazon Linux AMI end of life. Se atualmente você estiver usando o Amazon Linux AMI, recomendamos migrar para o Amazon Linux 2. Para migrar para o Amazon Linux 2, inicie uma instância ou crie uma máquina virtual usando a imagem atual do Amazon Linux 2. Instale seus aplicativos, além dos pacotes necessários. Teste o aplicativo e faça todas as alterações necessárias para que ele seja executado no Amazon Linux 2.

Para obter mais informações, consulte Amazon Linux 2 e Amazon Linux AMI. Para obter imagens de contêiner do Docker do Amazon Linux, consulte amazonlinux no Docker Hub.

Conectar-se a uma instância do Amazon Linux

O Amazon Linux não permite SSH de raiz remota por padrão. Além disso, a autenticação da senha é desabilitada para evitar ataques de força bruta em senhas. Para permitir logins SSH a uma instância Amazon Linux, você deve fornecer seu par de chaves à instância na execução. Você também deve definir o security group usado para executar sua instância para permitir acesso SSH. Por padrão, a única conta que pode fazer login remotamente usando SSH é o ec2-user; essa conta também tem privilégios sudo. Se você habilitar o login de raiz remoto, saiba que é menos seguro do que recorrer a pares de chaves e um usuário secundário.

Identificar imagens do Amazon Linux

Cada imagem contém um arquivo /etc/image-id exclusivo que a identifica. Esse arquivo contém as seguintes informações sobre a imagem:

  • image_name, image_version, image_arch — Valores da receita de compilação que a Amazon usou para criar a imagem.

  • image_stamp — Valor hexadecimal aleatório exclusivo gerado durante a criação da imagem.

  • image_date — o horário UTC da criação da imagem, no formato AAAAMMDDhhmmss

  • recipe_name, recipe_id — O nome e o ID da receita de compilação que a Amazon usou para criar a imagem.

O Amazon Linux contém um arquivo /etc/system-release que especifica a versão atual que está instalada. Esse arquivo é atualizado com o yum e faz parte do RPM system-release.

O Amazon Linux também contém uma versão legível por máquina do /etc/system-release que acompanha a especificação de CPE; consulte /etc/system-release-cpe.

Amazon Linux 2

O exemplo a seguir é do /etc/image-id para a versão atual do Amazon Linux 2:

[ec2-user ~]$ cat /etc/image-id image_name="amzn2-ami-hvm" image_version="2" image_arch="x86_64" image_file="amzn2-ami-hvm-2.0.20180810-x86_64.xfs.gpt" image_stamp="8008-2abd" image_date="20180811020321" recipe_name="amzn2 ami" recipe_id="c652686a-2415-9819-65fb-4dee-9792-289d-1e2846bd"

O exemplo a seguir é do /etc/system-release para a versão atual do Amazon Linux 2:

[ec2-user ~]$ cat /etc/system-release Amazon Linux 2

Veja a seguir um exemplo de /etc/os-release para o Amazon Linux 2:

[ec2-user ~]$ cat /etc/os-release NAME="Amazon Linux" VERSION="2" ID="amzn" ID_LIKE="centos rhel fedora" VERSION_ID="2" PRETTY_NAME="Amazon Linux 2" ANSI_COLOR="0;33" CPE_NAME="cpe:2.3:o:amazon:amazon_linux:2" HOME_URL="https://amazonlinux.com/"

Amazon Linux AMI

O exemplo a seguir é do /etc/image-id para a versão atual do Amazon Linux AMI:

[ec2-user ~]$ cat /etc/image-id image_name="amzn-ami-hvm" image_version="2015.09" image_arch="x86_64" image_file="amzn-ami-hvm-2015.09.0.x86_64.ext4.gpt" image_stamp="f819-da48" image_date="20150916025513" recipe_name="amzn ami" recipe_id="b4b7f85d-c9b8-99ae-c1bb-634d-20d8-50a5-3aa92282"

O exemplo a seguir é do /etc/system-release para a versão atual do Amazon Linux AMI:

[ec2-user ~]$ cat /etc/system-release Amazon Linux AMI release 2015.09

Ferramentas da linha de comando da AWS

As ferramentas de linha de comando a seguir para integração e uso da AWS estão incluídas no Amazon Linux AMI ou nos repositórios padrão do Amazon Linux 2. Para obter a lista completa de pacotes, no Amazon Linux AMI, consulte Pacotes do Amazon Linux AMI 2017.09.

  • aws-amitools-ec2

  • aws-apitools-as

  • aws-apitools-cfn

  • aws-apitools-elb

  • aws-apitools-mon

  • aws-cfn-bootstrap

  • aws-cli

O Amazon Linux 2 e as versões mínimas do Amazon Linux (amzn-ami-minimal-* e amzn2-ami-minimal-*) nem sempre contêm todos esses pacotes; contudo, é possível instalá-los usando os repositórios padrão por meio do seguinte comando:

[ec2-user ~]$ sudo yum install -y package_name

Para instâncias executadas usando funções do IAM, um script simples foi incluído para preparar AWS_CREDENTIAL_FILE, JAVA_HOME, AWS_PATH, PATH e variáveis de ambiente específicas do produto depois que um arquivo de credenciais foi instalado para simplificar a configuração dessas ferramentas.

Além disso, para permitir a instalação de várias versões das ferramentas de API e AMI, colocamos links simbólicos para as versões desejadas dessas ferramentas em /opt/aws, como descrito aqui:

/opt/aws/bin

Links simbólicos para os diretórios /bin em cada um dos diretórios de ferramentas instaladas.

/opt/aws/{apitools|amitools}

Os produtos são instalados em diretórios no formato nome-versão e um nome simbólico nome que está anexado à versão recentemente instalada.

/opt/aws/{apitools|amitools}/name/environment.sh

Usado pelo /etc/profile.d/aws-apitools-common.sh para definir variáveis do ambiente específicas do produto, como EC2_HOME.

Repositório de pacotes

O Amazon Linux 2 e a Amazon Linux AMI foram projetados para serem usados com repositórios de pacotes online hospedados em cada região da AWS do Amazon EC2. Esses repositórios fornecem atualizações contínuas para pacotes no Amazon Linux 2 e no Amazon Linux AMI, assim como acesso a centenas de aplicativos adicionais de servidores de código aberto comuns. 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.

O Amazon Linux 2 e o Amazon Linux AMI são atualizados regularmente com aprimoramentos de segurança e recursos. Se você não precisa preservar dados nem personalizações para suas instâncias, basta iniciar novamente as novas instâncias com a AMI atual. Se precisar preservar dados ou personalizações para suas instâncias, mantenha essas instâncias por meio dos repositórios de pacotes do Amazon Linux. Esses repositórios contêm todos os pacotes atualizados. Você pode escolher aplicar essas atualizações às suas instâncias em execução. As versões mais antigas dos pacotes de atualizações e AMIs continuarão disponíveis para uso, mesmo quando novas versões forem lançadas.

Importante

Sua instância deve ter acesso à Internet para acessar o repositório.

Para instalar pacotes, use o comando a seguir:

[ec2-user ~]$ sudo yum install package

No Amazon Linux AMI, o acesso ao repositório Extra Packages for Enterprise Linux (EPEL) está configurado, mas não vem habilitado por padrão. O Amazon Linux 2 não está configurado para usar o repositório EPEL. O EPEL fornece pacotes de terceiros além dos que estão nos repositórios. A AWS não oferece suporte a pacotes de terceiros. Você pode habilitar o repositório EPEL com os comandos a seguir:

  • Para Amazon Linux 2:

    [ec2-user ~]$ sudo yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
  • Para o Amazon Linux AMI:

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

Se você descobrir que Amazon Linux não contém um aplicativo de que precisa, pode simplesmente instalar o aplicativo diretamente em sua instância Amazon Linux. O Amazon Linux usa RPMs e yum para gerenciamento de pacotes, e essa provavelmente é a maneira mais simples de instalar novos aplicativos. Você sempre deve verificar se um aplicativo está disponível em nosso repositório central do Amazon Linux primeiro, porque muitos aplicativos estão disponíveis nele. Esses aplicativos podem ser facilmente adicionados à sua instância Amazon Linux.

Para fazer upload de seus aplicativos em uma instância do Amazon Linux em execução, use scp ou sftp e configure o aplicativo fazendo login em sua instância. Os aplicativos também podem ser carregados durante a execução da instância usando a ação PACKAGE_SETUP no pacote cloud-init incorporado. Para obter mais informações, consulte cloud-init.

Atualizações de segurança

As atualizações de segurança são fornecidas pelos repositórios de pacotes, bem como por meio dos alertas de segurança de AMIs atualizados publicados no Centro de segurança do Amazon Linux. 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 AWS.

O Amazon Linux é configurado para fazer download e instalar atualizações de segurança importantes ou essenciais no momento da execução. Recomendamos fazer as atualizações necessárias para seu caso de uso após a execução. Por exemplo: você pode aplicar todas as atualizações (não apenas as de segurança) na execução ou avaliar cada atualização e fazer apenas as aplicáveis ao seu sistema. Isso é controlado pela configuração 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.

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, Amazon Linux executará as atualizações de segurança no lançamento para todos os pacotes instalados nesse momento. O Amazon Linux também notifica você sobre quaisquer atualizações aos pacotes instalados listando o número de atualizações disponíveis no 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

Com o Amazon Linux, as AMIs são tratadas como snapshots no tempo, com um repositório e uma estrutura de atualização que sempre fornece os pacotes mais recentes quando você executa yum update -y.

A estrutura do repositório é configurada para fornecer um fluxo contínuo de atualizações que permitem migrar de uma versão do Amazon Linux para a seguinte. Por exemplo, se você executar uma instância de uma versão mais antiga do Amazon Linux AMI (como as 2015.03 ou anterior) e executar yum update -y, você terminará com os pacotes mais recentes.

Você pode desabilitar as atualizações acumuladas habilitando o recurso bloquear na execução. O recurso de bloqueio na execução bloqueia sua instância para receber atualizações somente da versão especificada da AMI. Por exemplo, você pode executar uma AMI 2015.03 definir que ela receba somente as atualizações que forem liberadas antes da AMI 2015.09, até que você esteja pronto para migrar para a AMI 2015.09.

Importante

Se você bloquear para uma versão dos repositórios que não seja a mais recente, não receberá atualizações adicionais. Para receber um fluxo contínuo de atualizações, você deve usar a AMI mais recente ou atualizar de forma consistente sua AMI com os repositórios apontados para a mais recente.

Parra ativar o bloqueio na execução em novas instâncias, execute-a com os seguintes dados de usuário transmitidos para cloud-init:

#cloud-config repo_releasever: 2015.03

Para bloquear as instâncias existentes em sua versão atual de AMI

  1. Edite /etc/yum.conf.

  2. Comente releasever=latest.

  3. Para limpar o cache, execute yum clean all.

Biblioteca de extras (Amazon Linux 2)

Com o Amazon Linux 2, você pode usar a Biblioteca de extras para instalar atualizações de aplicativo e software em suas instâncias. Essas atualizações de software são conhecidas como tópicos. Você pode instalar uma versão específica de um tópico ou omitir informações de versão para usar a mais recente.

Para listar os tópicos disponíveis, use o comando a seguir:

[ec2-user ~]$ amazon-linux-extras list

Para ativar um tópico e instalar a versão mais recente do pacote a fim de garantir sua atualização, use o seguinte comando:

[ec2-user ~]$ sudo amazon-linux-extras install topic

Para ativar tópicos e instalar versões específicas de seus pacotes a fim de garantir a estabilidade, use o seguinte comando:

[ec2-user ~]$ sudo amazon-linux-extras install topic=version topic=version

Para remover um pacote instalado de um tópico, use o seguinte comando:

[ec2-user ~]$ sudo yum remove $(yum list installed | grep amzn2extra-topic | awk '{ print $1 }')
nota

Esse comando não remove pacotes que foram instalados como dependências do adicional.

Para desabilitar um tópico e tornar os pacotes inacessíveis para o gerenciador de pacotes yum, use o seguinte comando:

[ec2-user ~]$ sudo amazon-linux-extras disable topic
Importante

Esse comando destina-se a usuários avançados. O uso inadequado desse comando pode causar conflitos de compatibilidade de pacotes.

Acessar pacotes de origem para referência

Você pode visualizar a origem dos pacotes que você instalou em sua instância para fins de referência usando as ferramentas fornecidas no Amazon Linux. Os pacotes de origem estão disponíveis para todos os pacotes incluídos no Amazon Linux e no repositório de pacotes online. Basta determinar o nome do pacote de origem que você quer instalar e usar o comando yumdownloader --source para visualizar a origem em sua instância em execução. Por exemplo:

[ec2-user ~]$ yumdownloader --source bash

O RPM de origem pode ser desempacotado e, para referência, você poderá visualizar a árvore de origem usando ferramentas RPM padrão. Depois de encerrar a depuração, o pacote estará disponível para uso.

cloud-init

O pacote cloud-init é um aplicativo 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 de cloud-init. Ele permite especificar as ações que devem acontecer em sua instância no momento da inicialização. Você pode 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 AMIs comuns 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.

O Amazon Linux usa as ações de cloud-init localizadas em /etc/cloud/cloud.cfg.d e em /etc/cloud/cloud.cfg. Você pode 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.

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

    • Você pode 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 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 é executada, portanto, você deve particiona-los e formata-los para poder monta-los. Para obter mais informações, consulte Suporte a TRIM do volume de armazenamento de instâncias. Você pode 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 na documentação do cloud-init.

Formatos de dados do usuário com suporte

O pacote cloud-init oferece suporte ao tratamento de dados do usuário de uma variedade dos formatos:

  • Gzip

    • Se os dados do usuário forem compactados com gzip, o cloud-init descompactará os dados e os tratará adequadamente.

  • Multipart MIME

    • Usando um arquivo multipart MIME, você pode 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 forem codificados por base64, o cloud-init determinará se pode compreender os dados decodificados como um dos tipos com suporte. 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, um por linha. Cada URL é lido, e seu conteúdo é transmitido pelo mesmo conjunto de regras. O conteúdo lido do URL pode ser compactado por gzip, multipart MIME ou texto simples.

  • Dados de config de nuvem

    • Começa com #cloud-config ou Content-Type: text/cloud-config.

    • Esse conteúdo são dados de configuração de nuvem. Veja exemplos comentados dos formatos de configuração com suporte.

  • Trabalho de inicialização

    • Começa com #upstart-job ou Content-Type: text/upstart-job.

    • Este conteúdo é armazenado em um arquivo em /etc/init, e a inicialização consome o conteúdo de acordo com outros trabalhos de inicialização.

  • Cloud Boothook

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

    • Esse é o "gancho" 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 conjunto de uma vez por instância de dados boothook.

Assinar notificações do Amazon Linux

Para ser notificado quando novas AMIs forem executadas, você pode se inscrever usando o Amazon SNS.

Para assinar as notificações do Amazon Linux

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

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

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

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

    1. [Amazon Linux 2] 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.

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

    3. Em Protocol (Protocolo), escolha Email.

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

    5. Escolha Create subscription (Criar assinatura).

  5. Você receberá um e-mail de confirmação com o assunto "Notificação da AWS – confirmação de assinatura". Abra o e-mail e escolha Confirm subscription para concluir a assinatura.

Sempre que AMIs são lançadas, 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.

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

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

  4. Quando a confirmação for solicitada, escolha Delete (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" ] }