Quem me acompanha por aqui sabe que sou um grande entusiasta de Cloud Computing, especialmente da nossa “amiga” AWS. Já falamos de alguns tópicos sobre ela por aqui e a jornada de desbravar a nuvem é longa e cheia de possibilidades.
Uma coisa que aprendi ao longo do tempo, mexendo em servidores, redes e agora na nuvem, é que clicar é legal, é visual, mas… cansa! Principalmente quando você precisa fazer a mesma coisa cinquenta vezes ou quer automatizar uma tarefa rotineira. É aí que a linha de comandos brilha, e na AWS ela tem um nome: AWS CLI (Command Line Interface).
Neste post, vamos dar uma olhada nessa ferramenta poderosa. Se você já está minimamente familiarizado com a AWS (e se não estiver, talvez valha a pena dar uma olhada em posts anteriores sobre conceitos básicos por aqui – https://blog.welrbraga.eti.br/meus-textos/aws/ e também aqui – https://blog.welrbraga.eti.br/tag/aws/), a AWS CLI vai abrir um leque de possibilidades para gerenciar seus recursos de forma rápida, eficiente e, o melhor de tudo, automatizável.
Prepare o seu terminal (de preferência um bom terminal Linux, né? ), porque a aventura vai começar!
Por que trocar o mouse pelo teclado na AWS?
Essa é uma pergunta justa. A interface web da AWS (o Console) é fantástica, visual, didática e perfeita para explorar serviços ou realizar tarefas pontuais. Mas, como bom sysadmin/dev/entusiasta de automação que você (e eu!) provavelmente é, você já deve ter sentido a necessidade de:
- Automatizar Tarefas Repetitivas: Criar 10 usuários IAM, parar 20 instâncias EC2 em horários específicos, sincronizar dados entre S3 buckets… Clicar seria insano! Com a CLI, um scriptzinho resolve.
- Agilizar Operações: Precisa pegar o IP de uma instância específica rapidamente? Em vez de navegar por vários menus no console, um comando simples no terminal te dá a resposta em segundos.
- Integrar com Outras Ferramentas: Quer provisionar infraestrutura como código usando Ansible (opa, meu playground favorito!), Python ou um simples Shell Script? A AWS CLI é a ponte perfeita.
- Gerenciar em Escala: Imagina aplicar uma configuração em centenas de recursos. A CLI, combinada com ferramentas de script, torna isso possível sem suar a camisa (ou sem a dor nos dedos de tanto clicar).
- Consistência: Scripts baseados na CLI garantem que as ações sejam executadas da mesma forma sempre, reduzindo erros manuais.
A AWS CLI não substitui o console, ela o complementa e expande suas capacidades, especialmente no mundo da automação que tanto gostamos e precisamos.
Pré-requisitos e Mãos à Obra na Instalação
Antes de sair digitando comandos AWS por aí, você precisa ter a ferramenta instalada no seu sistema operacional. A boa notícia é que ela é multiplataforma (Windows, macOS e Linux).
Como você já sabe, meu coração bate mais forte por Linux Ubuntu e Debian, então o foco será neles, mas antes de prosseguir, veja neste link como instalar e configurar o AWS CLI em seu sistema.
Primeiros Passos Práticos com a AWS CLI
Configuração feita, respire fundo e sinta o poder da linha de comandos! Vamos tentar alguns comandos básicos para sentir o gostinho.
A estrutura geral dos comandos da AWS CLI é:
aws <serviço> <comando> <parâmetros>
Por exemplo, aws s3 ls
significa: use a ferramenta aws
, no serviço s3
, execute o comando ls
, que a propósito é como o “velho ls” do seu terminal Linux, mas voltado para os serviços S3 da AWS.
Vamos a alguns exemplos práticos:
- Listando seus Buckets S3:
aws s3 ls
Este comando lista todos os seus buckets no serviço S3 na região configurada por padrão. Simples assim! - Criando um novo Bucket S3:
aws s3 mb s3://meus-backups-2025
Nota: Nomes de bucket S3 devem ser globalmente únicos, isso significa que não poderá haver nenhum outro com este mesmo nome. Escolha um nome criativo e que (talvez) inclua seu nome ou uma data para garantir a unicidade. Ah!mb
vem de make bucket. - Copiando um arquivo para um Bucket S3: Digamos que você tenha um arquivo local chamado
meu_arquivo.tgz
e queira copiá-lo para o seu bucket S3aws s3 cp meu_arquivo.tgz s3://
meus-backups-2025
/pastadestino/
Este comando copia o arquivo local para dentro do bucket, em uma pastapastadestino
. E “cp
” vem de copy. - Listando suas instâncias EC2:
aws ec2 describe-instances
Este comando é mais “verboso” por padrão, sua saída em JSON pode requerer filtros. Ele lista todas as informações sobre suas instâncias EC2 na região padrão.
Uma dica aqui é usar o comando “JQ” que é um parser de JSON para linha de comandos com muitas funcionalidades e recursos, ou se preferir o argumento “–query”. - Listando instâncias EC2 de forma mais amigável (usando
--output table
e--query
): Aqui a mágica acontece! Podemos formatar a saída e pegar apenas as informações que queremos.aws ec2 describe-instances --output table --query "Reservations[*].Instances[*].[InstanceId,State.Name,InstanceType,PublicIpAddress,PrivateIpAddress,Tags[?Key=='Name']|[0].Value]"
Calma, não surte ainda. Vamos quebrar isso par entender aos pedaços:--output table
: Mostra a saída em formato de tabela, mais fácil de ler do que o padrão JSON.--query "..."
: Usa a linguagem JMESPath para filtrar e selecionar dados do JSON original. Estamos pegando o ID da instância, estado, tipo, IPs públicos/privados e o valor da tag ‘Name’. Essa é uma funcionalidade muito poderosa da CLI para extrair exatamente o que você precisa, essencial para scripting.
- Parando uma instância EC2: Cuidado ao executar este comando! Certifique-se de que você sabe o que está fazendo, para não encerrar uma instância crítica em seu ambiente, o que poderia causar problemas.
aws ec2 stop-instances --instance-ids i-xxxxxxxxxxxxxxxxx
Substituai-xxxxxxxxxxxxxxxxx
pelo ID real da instância que você quer parar (você pode obter o ID com o comandodescribe-instances
).
Automatizando com a AWS CLI (Onde a Vida Fica Mais Divertida!)
A verdadeira força da AWS CLI aparece quando a combinamos com Shell Script, Python ou Ansible Playbooks. Imagine a seguinte tarefa: parar todas as instâncias EC2 de desenvolvimento que estão rodando fora do horário comercial para economizar custos.
Com a CLI e um script, isso é trivial! Veja um exemplo abaixo:
#!/bin/bash
REGION="sa-east-1"
TAG_KEY="Environment"
TAG_VALUE="Development"
echo "Procurando instâncias de ${TAG_VALUE} em ${REGION} para parar..."
# Busca instâncias com a tag Environment=Development e estado 'running'
# e extrai o InstanceId no formato texto para ser iterado
INSTANCE_IDS=$(aws ec2 describe-instances \
--region $REGION \
--filters "Name=instance-state-name,Values=running" "Name=tag:${TAG_KEY},Values=${TAG_VALUE}" \
--query "Reservations[*].Instances[*].InstanceId" \
--output text)
if [ -z "$INSTANCE_IDS" ]; then
echo "Nenhuma instância de ${TAG_VALUE} rodando encontrada."
else
echo "Instâncias encontradas: ${INSTANCE_IDS}"
echo "Parando instâncias..."
# Converte a lista de IDs para o formato aceito pelo stop-instances
# e executa o comando para parar
aws ec2 stop-instances --region $REGION --instance-ids $INSTANCE_IDS
echo "Comando de parada enviado."
fi
Este é apenas um exemplo simples. Você pode criar scripts muito mais complexos para provisionar ambientes inteiros, fazer backups automáticos, monitorar recursos, etc.
E para quem, como eu, gosta de Ansible, a AWS CLI pode ser invocada diretamente em tasks ou, melhor ainda, você pode usar os módulos nativos do Ansible que, por baixo dos panos, conversam com a AWS usando as mesmas APIs que a CLI utiliza (e que também precisam das credenciais configuradas!). Mas isso é assunto para outro momento.
Dicas de Segurança e Boas Práticas (A Responsabilidade Acima de Tudo!)
Usar a linha de comandos é poderoso, mas exige responsabilidade, especialmente com credenciais.
- Nunca use suas credenciais de usuário Root: Sério, não faça isso. Crie usuários IAM com permissões restritas, por mais chato e aparentemente inútil que isso seja.
- Princípio do Menor Privilégio: Conceda apenas as permissões estritamente necessárias para o usuário IAM ou a role que você está usando com a CLI. Eu também tenho uma enorme preguiça de ficar escolhendo as permissões correta para cada caso, mas simplesmente usar uma permissão total, pode ser a diferença entre manter tudo em ordem por muito tempo e perder tudo de maneira irrevogável com apenas um erro
- Use Roles para Instâncias EC2: Se você está executando comandos da CLI dentro de uma instância EC2, anexe uma Role IAM à instância em vez de configurar chaves de acesso no arquivo
~/.aws/credentials
. Isso é muito mais seguro, pois as credenciais são temporárias e gerenciadas pela AWS. - Proteja seu arquivo de credenciais: O arquivo
~/.aws/credentials
contém suas chaves secretas. Garanta que as permissões de arquivo estejam corretas (geralmentechmod 0600 ~/.aws/credentials
) para que apenas você possa lê-lo. - Audite com CloudTrail: Todas as ações realizadas via AWS CLI são registradas no AWS CloudTrail, permitindo que você audite quem fez o quê, quando e onde.
Conclusão (Por Enquanto…)
A AWS CLI é uma ferramenta indispensável para quem leva a sério o gerenciamento de ambientes na nuvem da Amazon. Ela transforma tarefas manuais em processos automatizáveis, aumenta sua eficiência e se integra perfeitamente com o mundo do scripting e da automação que tanto apreciamos.
Neste post, vimos o básico: por que usá-la, como instalar e configurar, e demos os primeiros passos com alguns comandos essenciais. Mas acredite, arranhamos apenas a superfície do que é possível fazer.
Explore o comando aws --help
ou aws <serviço> help
(ex: aws ec2 help
) para descobrir a infinidade de comandos e parâmetros disponíveis. A documentação online da AWS CLI também é sua melhor amiga nessa jornada.
Dominar a linha de comandos da AWS é um superpoder que todo profissional de nuvem deveria ter no seu cinto de utilidades. Comece pequeno, experimente, crie seus próprios scripts e veja como sua produtividade (e diversão!) no gerenciamento da AWS pode aumentar exponencialmente.
Até a próxima e bons comandos!