Pular para o conteúdo principal

AMI - Amazon Machine Images

O que é uma AMI?​

Uma AMI (Amazon Machine Image) é um modelo que contém a configuração de software necessária para iniciar uma instância EC2. É como um "snapshot" ou uma "imagem de disco" de um sistema completo.

┌─────────────────────────────────────────────────────────────┐
│ AMI │
├─────────────────────────────────────────────────────────────┤
│ │
│ "Uma AMI = O DNA da sua instância" │
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ AMI │ │
│ │ │ │
│ │ ┌──────────────────────────────────────────────┐ │ │
│ │ │ Sistema Operacional │ │ │
│ │ │ (Linux, Windows, etc.) │ │ │
│ │ └──────────────────────────────────────────────┘ │ │
│ │ │ │
│ │ ┌──────────────────────────────────────────────┐ │ │
│ │ │ Configuração do Sistema │ │ │
│ │ │ (usuários, permissões, etc.) │ │ │
│ │ └──────────────────────────────────────────────┘ │ │
│ │ │ │
│ │ ┌──────────────────────────────────────────────┐ │ │
│ │ │ Softwares Pré-instalados (opcional) │ │ │
│ │ │ (Apache, MySQL, Docker, etc.) │ │ │
│ │ └──────────────────────────────────────────────┘ │ │
│ │ │ │
│ │ ┌──────────────────────────────────────────────┐ │ │
│ │ │ Configuração de Armazenamento │ │ │
│ │ │ (tamanho do disco, tipo EBS) │ │ │
│ │ └──────────────────────────────────────────────┘ │ │
│ │ │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ AMI ─────► Instância 1 │
│ └───► Instância 2 (Todas idênticas no início) │
│ └───► Instância 3 │
│ │
└─────────────────────────────────────────────────────────────┘

Analogia Simples​

┌─────────────────────────────────────────────────────────────┐
│ ANALOGIA: AMI = FORMA DE BOLO │
├─────────────────────────────────────────────────────────────┤
│ │
│ 🧁 CONFEITARIA 💻 AWS │
│ ───────────── ───── │
│ │
│ Forma de bolo = AMI │
│ (formato, tamanho) (SO, config) │
│ │
│ Bolos produzidos = Instâncias EC2 │
│ (todos iguais) (todas idênticas) │
│ │
│ Decoração após = Configuração pós- │
│ assar inicialização │
│ │
│ Uma forma → vários = Uma AMI → várias │
│ bolos idênticos instâncias idênticas │
│ │
└─────────────────────────────────────────────────────────────┘

Tipos de AMI​

1. AMI Públicas AWS​

AMIs oficiais fornecidas pela Amazon, gratuitas (você paga apenas pela instância).

┌─────────────────────────────────────────────────────────────┐
│ AMI PÚBLICAS AWS │
├─────────────────────────────────────────────────────────────┤
│ │
│ Amazon Linux 2023 │
│ ├── Otimizada para AWS │
│ ├── Leve e performática │
│ ├── Atualizações automáticas │
│ └── Suporte gratuito via fóruns │
│ │
│ Amazon Linux 2 (LTS) │
│ ├── Suporte até 2025 │
│ ├── Muito estável │
│ └── Amplamente documentada │
│ │
│ Ubuntu Server │
│ ├── 20.04 LTS, 22.04 LTS, 24.04 LTS │
│ ├── Popular, grande comunidade │
│ └── Bom para desenvolvedores │
│ │
│ Red Hat Enterprise Linux (RHEL) │
│ ├── Suporte corporativo │
│ └── Pago (licença inclusa no preço) │
│ │
│ Windows Server │
│ ├── 2019, 2022 │
│ └── Licença Windows inclusa (mais caro) │
│ │
└─────────────────────────────────────────────────────────────┘

2. AMI AWS Marketplace​

AMIs com softwares pré-instalados, geralmente pagas (licença).

Exemplos:
• WordPress pré-configurado
• Servidor LAMP completo
• Jenkins CI/CD
• Splunk
• Palo Alto Firewall
• E milhares de outros...

💰 Custo = Preço da instância + Preço da licença do software

3. AMI Comunitárias​

AMIs criadas e compartilhadas por outros usuários AWS.

⚠️ ATENÇÃO:
• Qualidade variável
• Segurança não garantida
• Pode conter malwares
• Use com cautela!

✅ Prefira AMIs de fontes conhecidas

4. AMI Personalizadas (Privadas)​

AMIs que você mesmo cria a partir de uma instância configurada.

┌─────────────────────────────────────────────────────────────┐
│ CRIAÇÃO DE AMI PERSONALIZADA │
├─────────────────────────────────────────────────────────────┤
│ │
│ 1. Inicie uma instância com AMI base │
│ └── Amazon Linux 2023 │
│ │
│ 2. Configure a instância │
│ └── Instale Apache, PHP, MySQL │
│ └── Configure os arquivos │
│ └── Adicione seus aplicativos │
│ │
│ 3. Crie uma AMI a partir da instância │
│ └── Actions → Image → Create Image │
│ │
│ 4. Use sua AMI para novas instâncias │
│ └── Todas as instâncias já estarão pré-configuradas! │
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ Instância│ → │ AMI │ → │Instâncias│ │
│ │configurada│ │Pessoal │ │idênticas │ │
│ └──────────┘ └──────────┘ └──────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘

Componentes de uma AMI​

Estrutura Interna​

AMI
├── Root Volume Template
│ └── Snapshot EBS do volume raiz
│ └── Sistema operacional
│ └── Aplicações instaladas
│
├── Launch Permissions
│ └── Pública (todo mundo)
│ └── Privada (sua conta)
│ └── Compartilhada (contas específicas)
│
├── Block Device Mapping
│ └── Quais volumes EBS anexar
│ └── Tamanhos e tipos de volumes
│ └── Delete on Termination?
│
└── Metadata
└── Arquitetura (x86_64, arm64)
└── Virtualização (hvm, pv)
└── Nome, descrição

ID de uma AMI​

Formato: ami-0123456789abcdef0

Exemplos:
• ami-0c55b159cbfafe1f0 (Amazon Linux 2 us-east-1)
• ami-0747bdcabd34c712a (Ubuntu 22.04 us-east-1)

⚠️ IMPORTANTE: Os IDs são diferentes por região!
A mesma AMI "Amazon Linux 2" tem um ID diferente
em us-east-1 e eu-west-1

Comparação das AMIs Linux Populares​

AMICaso de UsoVantagensDesvantagens
Amazon Linux 2023Produção AWSOtimizada AWS, gratuitaEspecífica AWS
Amazon Linux 2Legado, estávelMuito estávelFim do suporte 2025
Ubuntu 22.04 LTSDesenvolvimentoPopular, docsUm pouco mais pesada
DebianServidoresMuito estávelMenos suporte AWS
RHELCorporativoSuporte oficialPago
CentOS StreamDev RHELGratuitoMenos estável que RHEL

AMI e Regiões​

┌─────────────────────────────────────────────────────────────┐
│ AMI E REGIÕES │
├─────────────────────────────────────────────────────────────┤
│ │
│ As AMIs são REGIONAIS! │
│ │
│ ┌──────────────────┐ ┌──────────────────┐ │
│ │ us-east-1 │ │ eu-west-1 │ │
│ │ │ │ │ │
│ │ ami-abc123... │ ≠ │ ami-xyz789... │ │
│ │ (Amazon Linux 2) │ │ (Amazon Linux 2) │ │
│ │ │ │ │ │
│ └──────────────────┘ └──────────────────┘ │
│ │
│ Mesmo SO, mas ID diferente! │
│ │
│ Para usar uma AMI em outra região: │
│ → Copie a AMI (Actions → Copy AMI) │
│ │
│ AMI Pessoal AMI Copiada │
│ us-east-1 ─────────────────► eu-west-1 │
│ ami-abc123 ami-def456 │
│ │
└─────────────────────────────────────────────────────────────┘

Criar uma AMI (Processo)​

A partir de uma Instância Existente​

┌─────────────────────────────────────────────────────────────┐
│ CRIAÇÃO DE AMI - ETAPAS │
├─────────────────────────────────────────────────────────────┤
│ │
│ PREPARAÇÃO │
│ 1. Pare a instância (recomendado para consistência) │
│ 2. Ou crie com "No reboot" (risco de inconsistência) │
│ │
│ CRIAÇÃO │
│ 3. Console → EC2 → Instâncias │
│ 4. Selecione a instância │
│ 5. Actions → Image and templates → Create image │
│ │
│ CONFIGURAÇÃO │
│ 6. Nome: "minha-app-v1.0" │
│ 7. Descrição: "Servidor web com Apache e PHP 8" │
│ 8. Volumes: manter ou modificar │
│ 9. Tags: adicionar para organização │
│ │
│ ESPERA │
│ 10. A AMI muda de "pending" para "available" │
│ 11. Pode levar alguns minutos │
│ │
│ USO │
│ 12. Inicie novas instâncias com esta AMI │
│ │
└─────────────────────────────────────────────────────────────┘

Comando AWS CLI​

# Criar uma AMI a partir de uma instância
aws ec2 create-image \
--instance-id i-0123456789abcdef0 \
--name "minha-app-v1.0" \
--description "Servidor web configurado" \
--no-reboot

# Ver suas AMIs
aws ec2 describe-images --owners self

# Excluir uma AMI
aws ec2 deregister-image --image-id ami-0123456789abcdef0

Boas Práticas AMI​

1. Nomeação Consistente​

Formato recomendado:
<aplicação>-<versão>-<data>-<ambiente>

Exemplos:
• webapp-v2.1-20241218-prod
• api-server-v1.0-20241218-staging
• bastion-v1.0-20241218-shared

2. Versionar suas AMIs​

webapp-v1.0  →  webapp-v1.1  →  webapp-v2.0
│ │ │
└── Pequena └── Bug fix └── Nova
release funcionalidade

3. Automatizar a Criação​

┌─────────────────────────────────────────────────────────────┐
│ PIPELINE AMI AUTOMATIZADA │
├─────────────────────────────────────────────────────────────┤
│ │
│ Code ──► Build ──► Test ──► Create AMI ──► Deploy │
│ │ │
│ └── Ferramenta: Packer │
│ │
│ Packer = Ferramenta da HashiCorp para criar AMIs │
│ automaticamente e de forma reprodutível │
│ │
└─────────────────────────────────────────────────────────────┘

4. Segurança​

✅ FAÇA:
• Remova chaves SSH pessoais
• Remova arquivos temporários
• Limpe o histórico do bash
• Atualize os pacotes antes de criar

❌ EVITE:
• Senhas em texto claro em arquivos
• Chaves de API no código
• Dados sensíveis não criptografados

Custo das AMIs​

┌─────────────────────────────────────────────────────────────┐
│ CUSTO DAS AMIs │
├─────────────────────────────────────────────────────────────┤
│ │
│ A própria AMI: GRATUITA │
│ │
│ O que custa: │
│ • Armazenamento dos snapshots EBS subjacentes │
│ • ~$0.05/GB/mês │
│ │
│ Exemplo: │
│ AMI com volume root de 20 GB │
│ → Custo: ~$1/mês pelo armazenamento │
│ │
│ AMI Marketplace: │
│ • Custo de licença além do armazenamento │
│ • Verifique o preço ANTES de iniciar │
│ │
└─────────────────────────────────────────────────────────────┘

Resumo​

ConceitoDescrição
AMIImagem de máquina para iniciar instâncias
AMI AWSOficiais, gratuitas, recomendadas
AMI MarketplaceCom softwares, geralmente pagas
AMI PessoalCriadas por você, privadas
RegionalCada região tem suas próprias AMIs
SnapshotAMI armazenada como snapshot EBS

Quiz de Validação​

  1. O que é uma AMI?
  2. Qual AMI Linux é otimizada para AWS?
  3. As AMIs são as mesmas em todas as regiões?
  4. Como criar uma AMI personalizada?
  5. O que gera custo com as AMIs?
  6. Por que criar suas próprias AMIs?

Próxima seção: Tipos de Instâncias