← Back to Blog
🛠️ AWS CLI Mastery
July 20, 2025

AWS CLI Productivity Tips: 10 Trucos que Debes Conocer

aws-cli productivity tips bash

📋 Contexto

AWS CLI es una herramienta poderosa, pero sin configuración adecuada puede ser tedioso escribir comandos largos repetitivamente. Después de años trabajando con AWS, estos son los 10 trucos que uso diariamente para ser más productivo.

💡 Tip 1: Aliases para Comandos Comunes

Agrega a tu ~/.bashrc o ~/.zshrc:

# AWS CLI aliases
alias awsl='aws ec2 describe-instances --output table'
alias awss3='aws s3 ls --human-readable'
alias awslogs='aws logs tail --follow'
alias awslogin='aws sso login --profile'

# Con argumentos
awsip() {
    aws ec2 describe-instances \
        --query "Reservations[*].Instances[*].[InstanceId,PublicIpAddress,PrivateIpAddress,Tags[?Key=='Name'].Value|[0]]" \
        --output table
}

awsstop() {
    aws ec2 stop-instances --instance-ids "$1" --output json
}

💡 Tip 2: Configurar Output por Defecto

# ~/.aws/config
[default]
region = us-east-1
output = json  # o 'table' para visual, 'text' para scripting

[profile production]
region = us-east-1
output = table
sso_start_url = https://mycompany.awsapps.com/start
sso_region = us-east-1
sso_account_id = 123456789012
sso_role_name = DevOpsRole

💡 Tip 3: Auto-completion

# Para bash
echo "complete -C '/usr/local/bin/aws_completer' aws" >> ~/.bashrc

# Para zsh
echo "autoload bashcompinit && bashcompinit" >> ~/.zshrc
echo "complete -C '/usr/local/bin/aws_completer' aws" >> ~/.zshrc

# Reiniciar shell
source ~/.bashrc  # o ~/.zshrc

💡 Tip 4: Usar --query para Filtrar

En lugar de parsear con grep/awk, usa --query:

# Listar solo IPs públicas de instancias corriendo
aws ec2 describe-instances \
    --filters "Name=instance-state-name,Values=running" \
    --query "Reservations[*].Instances[*].PublicIpAddress" \
    --output text

# Nombres y estados de buckets S3
aws s3api list-buckets \
    --query "Buckets[*].[Name,CreationDate]" \
    --output table

# Instancias con tag específico
aws ec2 describe-instances \
    --filters "Name=tag:Environment,Values=production" \
    --query "Reservations[*].Instances[*].[InstanceId,Tags[?Key=='Name'].Value|[0]]"

💡 Tip 5: Variables de Entorno

# Evita escribir --region y --profile en cada comando
export AWS_DEFAULT_REGION=us-east-1
export AWS_PROFILE=production
export AWS_PAGER=""  # Desactiva paginación automática

# Temporal para un script
AWS_PROFILE=dev aws s3 ls

# Debug mode
AWS_DEBUG=true aws ec2 describe-instances

💡 Tip 6: Guardar Queries Complejas en Scripts

#!/bin/bash
# ec2-inventory.sh - Inventario de instancias EC2

aws ec2 describe-instances \
    --query 'Reservations[*].Instances[*].[
        InstanceId,
        InstanceType,
        State.Name,
        PublicIpAddress,
        PrivateIpAddress,
        Tags[?Key==`Name`].Value | [0],
        LaunchTime
    ]' \
    --output table \
    | grep -v "^|" \
    | awk 'NR > 1 {print}'

💡 Tip 7: Usar --dry-run para Validar

# Verificar permisos sin ejecutar cambios
aws ec2 terminate-instances --instance-ids i-1234567890abcdef0 --dry-run

# Si tienes permisos, verás error específico de DryRun
# Si no tienes permisos, verás UnauthorizedOperation

💡 Tip 8: Parametrizar con envsubst

# template.json
{
  "ImageId": "${AMI_ID}",
  "InstanceType": "${INSTANCE_TYPE}",
  "KeyName": "${KEY_NAME}",
  "TagSpecifications": [{
    "ResourceType": "instance",
    "Tags": [{"Key": "Name", "Value": "${INSTANCE_NAME}"}]
  }]
}

# Script de deployment
export AMI_ID=ami-0123456789
export INSTANCE_TYPE=t3.micro
export KEY_NAME=my-key
export INSTANCE_NAME=webserver-01

cat template.json | envsubst | aws ec2 run-instances --cli-input-json file:///dev/stdin

💡 Tip 9: Logging y Auditoría

# Log todos los comandos AWS para auditoría
aws_logged() {
    echo "[$(date)] aws $*" >> ~/.aws_history.log
    aws "$@"
}

# Usar en lugar de aws directamente
aws_logged ec2 stop-instances --instance-ids i-xxx

# O agregar a función wrapper
aws() {
    echo "[$(date)] AWS CLI: $*" | logger -t aws-cli
    command aws "$@"
}

💡 Tip 10: Bulk Operations con xargs

# Detener todas las instancias con tag específico
aws ec2 describe-instances \
    --filters "Name=tag:Environment,Values=dev" \
    --query "Reservations[*].Instances[*].InstanceId" \
    --output text \
    | xargs -n 1 aws ec2 stop-instances --instance-ids

# Eliminar snapshots viejos (más de 30 días)
aws ec2 describe-snapshots --owner-ids self \
    --query "Snapshots[?StartTime<='$(date -d '30 days ago' --iso-8601)'].SnapshotId" \
    --output text \
    | xargs -n 1 -P 5 aws ec2 delete-snapshot --snapshot-id
⚠️ Precaución con Bulk Operations:
• Siempre usa --dry-run primero
• Agrega confirmación manual para operaciones destructivas
• Usa -P en xargs con cuidado (rate limiting de AWS)

🎯 Bonus: Script de Setup Completo

#!/bin/bash
# aws-cli-setup.sh - Configuración productiva de AWS CLI

echo "Configurando AWS CLI para máxima productividad..."

# 1. Install AWS CLI v2 si no existe
if ! command -v aws &> /dev/null; then
    curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
    unzip awscliv2.zip
    sudo ./aws/install
    rm -rf aws awscliv2.zip
fi

# 2. Configurar auto-completion
if [ -n "$BASH_VERSION" ]; then
    echo "complete -C '/usr/local/bin/aws_completer' aws" >> ~/.bashrc
elif [ -n "$ZSH_VERSION" ]; then
    echo "autoload bashcompinit && bashcompinit" >> ~/.zshrc
    echo "complete -C '/usr/local/bin/aws_completer' aws" >> ~/.zshrc
fi

# 3. Agregar aliases útiles
cat >> ~/.bash_aliases << 'EOF'
# AWS CLI Aliases
alias awsl='aws ec2 describe-instances --output table'
alias awss3='aws s3 ls --human-readable'
alias awslogs='aws logs tail --follow'

awsip() {
    aws ec2 describe-instances \
        --query "Reservations[*].Instances[*].[InstanceId,PublicIpAddress,Tags[?Key=='Name'].Value|[0]]" \
        --output table
}
EOF

# 4. Configurar variables de entorno por defecto
cat >> ~/.bashrc << 'EOF'
export AWS_PAGER=""
export AWS_DEFAULT_OUTPUT=json
EOF

echo "✓ Setup completado. Reinicia tu terminal."

📚 Recursos Adicionales

💭 Conclusión

Estos 10 tips transformarán tu experiencia con AWS CLI. La diferencia entre escribir comandos de 150 caracteres vs usar un alias de 5 caracteres es enorme cuando lo haces 50 veces al día. Invierte 30 minutos en configurar tu entorno y ahorra horas cada semana.