AWS Admin

Como Usar AWS CLI e AWS SDK: Automação e Scripting de Infraestrutura em Produção Já leu

Diferença Entre AWS CLI e AWS SDK A AWS CLI (Command Line Interface) e o AWS SDK (Software Development Kit) são ferramentas complementares para automatizar infraestrutura na AWS, mas servem a propósitos diferentes. A CLI é uma ferramenta de linha de comando que permite executar operações na AWS através de scripts shell, útil para automação rápida e tarefas pontuais. O SDK, por sua vez, é uma biblioteca de programação integrada ao código da sua aplicação, oferecendo mais controle, tratamento de erros robusto e melhor integração com lógica complexa. Para infraestrutura em produção, você geralmente usa CLI em scripts de deployment e SDK em aplicações que precisam gerenciar recursos dinamicamente. A CLI é excelente para IaC (Infrastructure as Code) e pipelines de CI/CD, enquanto o SDK é ideal quando sua aplicação precisa criar, modificar ou monitorar recursos AWS em tempo de execução. Ambas usam as mesmas APIs da AWS, então o conhecimento é transferível. Configuração e Autenticação Instalação e Credenciais da

Diferença Entre AWS CLI e AWS SDK

A AWS CLI (Command Line Interface) e o AWS SDK (Software Development Kit) são ferramentas complementares para automatizar infraestrutura na AWS, mas servem a propósitos diferentes. A CLI é uma ferramenta de linha de comando que permite executar operações na AWS através de scripts shell, útil para automação rápida e tarefas pontuais. O SDK, por sua vez, é uma biblioteca de programação integrada ao código da sua aplicação, oferecendo mais controle, tratamento de erros robusto e melhor integração com lógica complexa.

Para infraestrutura em produção, você geralmente usa CLI em scripts de deployment e SDK em aplicações que precisam gerenciar recursos dinamicamente. A CLI é excelente para IaC (Infrastructure as Code) e pipelines de CI/CD, enquanto o SDK é ideal quando sua aplicação precisa criar, modificar ou monitorar recursos AWS em tempo de execução. Ambas usam as mesmas APIs da AWS, então o conhecimento é transferível.

Configuração e Autenticação

Instalação e Credenciais da AWS CLI

Instale a CLI V2 com curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" && unzip && sudo ./aws/install. Configure as credenciais executando aws configure e informando sua Access Key ID, Secret Access Key, região padrão e formato de saída (json é recomendado para produção).

# Verificar instalação
aws --version

# Configurar credenciais (cria ~/.aws/credentials e ~/.aws/config)
aws configure

# Usar profiles múltiplos para diferentes ambientes
aws configure --profile producao
aws configure --profile desenvolvimento

# Executar comando com profile específico
aws s3 ls --profile producao

Para produção, nunca hardcode credenciais. Use IAM Roles se estiver em EC2, assumindo que a instância tem uma role anexada. Para máquinas locais, use AWS SSO ou credenciais temporárias via STS (Security Token Service). Sempre revise permissões com o princípio de menor privilégio usando políticas IAM específicas.

Configuração do SDK Python (Boto3)

O Boto3 é o SDK oficial da AWS para Python. Instale com pip install boto3 e ele automaticamente detecta credenciais de ~/.aws/credentials, variáveis de ambiente ou IAM Role em EC2.

import boto3
from botocore.exceptions import ClientError

# Criar cliente S3
s3_client = boto3.client('s3', region_name='us-east-1')

# Ou usar resource (abstração de alto nível)
s3_resource = boto3.resource('s3')

# Listar buckets
response = s3_client.list_buckets()
for bucket in response['Buckets']:
    print(f"Bucket: {bucket['Name']}")

Automação Prática: Scripts de Deployment e Gerenciamento

Exemplo: Deploy de Aplicação com CLI e Elasticidade

Você precisa fazer deploy de uma aplicação, escalar automaticamente e garantir que logs sejam enviados ao CloudWatch. Este script orquestra tudo usando CLI:

#!/bin/bash
set -e

APP_NAME="minha-app"
ENV="producao"
INSTANCE_TYPE="t3.medium"
AMI_ID="ami-0c55b159cbfafe1f0"
SECURITY_GROUP="sg-12345678"

# 1. Criar instância EC2
INSTANCE_ID=$(aws ec2 run-instances \
  --image-id $AMI_ID \
  --instance-type $INSTANCE_TYPE \
  --security-group-ids $SECURITY_GROUP \
  --tag-specifications "ResourceType=instance,Tags=[{Key=Name,Value=$APP_NAME},{Key=Env,Value=$ENV}]" \
  --query 'Instances[0].InstanceId' \
  --output text)

echo "Instância criada: $INSTANCE_ID"

# 2. Aguardar instância estar rodando
aws ec2 wait instance-running --instance-ids $INSTANCE_ID

# 3. Obter IP público
IP=$(aws ec2 describe-instances \
  --instance-ids $INSTANCE_ID \
  --query 'Reservations[0].Instances[0].PublicIpAddress' \
  --output text)

echo "IP da instância: $IP"

# 4. Deploy da aplicação via SSH (script customizado)
ssh -i ~/.ssh/chave.pem ec2-user@$IP << 'EOF'
  cd /home/ec2-user
  git clone https://github.com/meuusuario/minha-app.git
  cd minha-app
  ./deploy.sh
EOF

# 5. Configurar CloudWatch alarms para auto-scaling
aws autoscaling put-scaling-policy \
  --auto-scaling-group-name $APP_NAME-asg \
  --policy-name scale-up \
  --policy-type TargetTrackingScaling \
  --target-tracking-configuration file://target-tracking.json

echo "Deploy concluído com sucesso!"

Exemplo: Monitoramento e Auto-Healing com Boto3

Este script Python monitora instâncias EC2 e reinicia aquelas que não respondem, reportando ao SNS:

import boto3
import time
from botocore.exceptions import ClientError

ec2_client = boto3.client('ec2')
sns_client = boto3.client('sns')
cloudwatch_client = boto3.client('cloudwatch')

def check_instance_health(instance_id):
    """Verifica status de uma instância via status checks"""
    response = ec2_client.describe_instance_status(InstanceIds=[instance_id])

    if not response['InstanceStatuses']:
        return None

    status = response['InstanceStatuses'][0]
    system_status = status['SystemStatus']['Status']
    instance_status = status['InstanceStatus']['Status']

    return system_status == 'ok' and instance_status == 'ok'

def restart_instance(instance_id):
    """Reinicia instância e notifica via SNS"""
    try:
        ec2_client.reboot_instances(InstanceIds=[instance_id])

        message = f"Instância {instance_id} foi reiniciada automaticamente"
        sns_client.publish(
            TopicArn='arn:aws:sns:us-east-1:123456789:alerts',
            Subject='Auto-Healing Executado',
            Message=message
        )
        print(f"✓ {message}")
    except ClientError as e:
        print(f"✗ Erro ao reiniciar: {e}")

def main():
    # Listar todas instâncias em rodução
    response = ec2_client.describe_instances(
        Filters=[
            {'Name': 'tag:Environment', 'Values': ['producao']},
            {'Name': 'instance-state-name', 'Values': ['running']}
        ]
    )

    for reservation in response['Reservations']:
        for instance in reservation['Instances']:
            instance_id = instance['InstanceId']
            is_healthy = check_instance_health(instance_id)

            if is_healthy is False:
                print(f"⚠ Instância {instance_id} não está saudável")
                restart_instance(instance_id)

if __name__ == '__main__':
    main()

Boas Práticas para Produção

Nunca exponha credenciais no código ou em variáveis de ambiente visíveis. Use AWS Secrets Manager ou Parameter Store para dados sensíveis acessíveis pelo SDK com IAM Roles. Implemente retry logic e exponential backoff para lidar com throttling da API. Sempre valide entrada, sanitize dados e loggue operações críticas para auditoria.

Estruture seus scripts em módulos reutilizáveis, versionados em Git. Use tags em recursos para rastreabilidade e faturamento. Teste scripts em desenvolvimento antes de aplicar em produção. Monitore execuções com CloudWatch Logs e defina alarmes para falhas. Para CLI, use --dry-run quando disponível antes de executar operações destrutivas.

Dica crucial: Sempre use --output json na CLI e processe com jq para automações confiáveis. Para SDK, capture exceções específicas (não genéricas) com botocore.exceptions.

Conclusão

Dominar AWS CLI e SDK é essencial para automação de infraestrutura em escala. A CLI brilha em scripts de deployment e IaC, enquanto o SDK integra-se perfeitamente em aplicações que gerenciam recursos dinamicamente. A autenticação segura via IAM Roles e Secrets Manager é não-negociável em produção. Com esses conhecimentos, você consegue construir pipelines confiáveis, resilientes e auditáveis que escalam com sua operação.

Referências


Artigos relacionados