<h2>Diferença Entre AWS CLI e AWS SDK</h2>
<p>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.</p>
<p>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.</p>
<h2>Configuração e Autenticação</h2>
<h3>Instalação e Credenciais da AWS CLI</h3>
<p>Instale a CLI V2 com <code>curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" && unzip && sudo ./aws/install</code>. Configure as credenciais executando <code>aws configure</code> e informando sua Access Key ID, Secret Access Key, região padrão e formato de saída (json é recomendado para produção).</p>
<pre><code class="language-bash"># 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</code></pre>
<p>Para produção, <strong>nunca</strong> 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.</p>
<h3>Configuração do SDK Python (Boto3)</h3>
<p>O Boto3 é o SDK oficial da AWS para Python. Instale com <code>pip install boto3</code> e ele automaticamente detecta credenciais de <code>~/.aws/credentials</code>, variáveis de ambiente ou IAM Role em EC2.</p>
<pre><code class="language-python">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']}")</code></pre>
<h2>Automação Prática: Scripts de Deployment e Gerenciamento</h2>
<h3>Exemplo: Deploy de Aplicação com CLI e Elasticidade</h3>
<p>Você precisa fazer deploy de uma aplicação, escalar automaticamente e garantir que logs sejam enviados ao CloudWatch. Este script orquestra tudo usando CLI:</p>
<pre><code class="language-bash">#!/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!"</code></pre>
<h3>Exemplo: Monitoramento e Auto-Healing com Boto3</h3>
<p>Este script Python monitora instâncias EC2 e reinicia aquelas que não respondem, reportando ao SNS:</p>
<pre><code class="language-python">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()</code></pre>
<h2>Boas Práticas para Produção</h2>
<p>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.</p>
<p>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 <code>--dry-run</code> quando disponível antes de executar operações destrutivas.</p>
<blockquote><p><strong>Dica crucial:</strong> Sempre use <code>--output json</code> na CLI e processe com <code>jq</code> para automações confiáveis. Para SDK, capture exceções específicas (não genéricas) com <code>botocore.exceptions</code>.</p></blockquote>
<h2>Conclusão</h2>
<p>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.</p>
<h2>Referências</h2>
<ul>
<li><a href="https://docs.aws.amazon.com/cli/" target="_blank" rel="noopener noreferrer">AWS CLI Official Documentation</a></li>
<li><a href="https://boto3.amazonaws.com/v1/documentation/api/latest/index.html" target="_blank" rel="noopener noreferrer">Boto3 Documentation - AWS SDK for Python</a></li>
<li><a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html" target="_blank" rel="noopener noreferrer">AWS IAM Best Practices</a></li>
<li><a href="https://docs.aws.amazon.com/whitepapers/latest/infrastructure-as-code/" target="_blank" rel="noopener noreferrer">Infrastructure as Code on AWS - AWS Well-Architected</a></li>
<li><a href="https://aws.amazon.com/blogs/security/" target="_blank" rel="noopener noreferrer">AWS Security Best Practices for Infrastructure Automation</a></li>
</ul>