Cloud & Infraestrutura

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

8 min de leitura

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

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

<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 &quot;https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip&quot; &amp;&amp; unzip &amp;&amp; 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(&#039;s3&#039;, region_name=&#039;us-east-1&#039;)

Ou usar resource (abstração de alto nível)

s3_resource = boto3.resource(&#039;s3&#039;)

Listar buckets

response = s3_client.list_buckets()

for bucket in response[&#039;Buckets&#039;]:

print(f&quot;Bucket: {bucket[&#039;Name&#039;]}&quot;)</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=&quot;minha-app&quot;

ENV=&quot;producao&quot;

INSTANCE_TYPE=&quot;t3.medium&quot;

AMI_ID=&quot;ami-0c55b159cbfafe1f0&quot;

SECURITY_GROUP=&quot;sg-12345678&quot;

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 &quot;ResourceType=instance,Tags=[{Key=Name,Value=$APP_NAME},{Key=Env,Value=$ENV}]&quot; \

--query &#039;Instances[0].InstanceId&#039; \

--output text)

echo &quot;Instância criada: $INSTANCE_ID&quot;

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 &#039;Reservations[0].Instances[0].PublicIpAddress&#039; \

--output text)

echo &quot;IP da instância: $IP&quot;

4. Deploy da aplicação via SSH (script customizado)

ssh -i ~/.ssh/chave.pem ec2-user@$IP &lt;&lt; &#039;EOF&#039;

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 &quot;Deploy concluído com sucesso!&quot;</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(&#039;ec2&#039;)

sns_client = boto3.client(&#039;sns&#039;)

cloudwatch_client = boto3.client(&#039;cloudwatch&#039;)

def check_instance_health(instance_id):

&quot;&quot;&quot;Verifica status de uma instância via status checks&quot;&quot;&quot;

response = ec2_client.describe_instance_status(InstanceIds=[instance_id])

if not response[&#039;InstanceStatuses&#039;]:

return None

status = response[&#039;InstanceStatuses&#039;][0]

system_status = status[&#039;SystemStatus&#039;][&#039;Status&#039;]

instance_status = status[&#039;InstanceStatus&#039;][&#039;Status&#039;]

return system_status == &#039;ok&#039; and instance_status == &#039;ok&#039;

def restart_instance(instance_id):

&quot;&quot;&quot;Reinicia instância e notifica via SNS&quot;&quot;&quot;

try:

ec2_client.reboot_instances(InstanceIds=[instance_id])

message = f&quot;Instância {instance_id} foi reiniciada automaticamente&quot;

sns_client.publish(

TopicArn=&#039;arn:aws:sns:us-east-1:123456789:alerts&#039;,

Subject=&#039;Auto-Healing Executado&#039;,

Message=message

)

print(f&quot;✓ {message}&quot;)

except ClientError as e:

print(f&quot;✗ Erro ao reiniciar: {e}&quot;)

def main():

Listar todas instâncias em rodução

response = ec2_client.describe_instances(

Filters=[

{&#039;Name&#039;: &#039;tag:Environment&#039;, &#039;Values&#039;: [&#039;producao&#039;]},

{&#039;Name&#039;: &#039;instance-state-name&#039;, &#039;Values&#039;: [&#039;running&#039;]}

]

)

for reservation in response[&#039;Reservations&#039;]:

for instance in reservation[&#039;Instances&#039;]:

instance_id = instance[&#039;InstanceId&#039;]

is_healthy = check_instance_health(instance_id)

if is_healthy is False:

print(f&quot;⚠ Instância {instance_id} não está saudável&quot;)

restart_instance(instance_id)

if __name__ == &#039;__main__&#039;:

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>

Comentários

Mais em Cloud & Infraestrutura

Amazon Inspector e Trusted Advisor: Vulnerabilidades e Boas Práticas na Prática
Amazon Inspector e Trusted Advisor: Vulnerabilidades e Boas Práticas na Prática

Amazon Inspector: Análise Automatizada de Vulnerabilidades Amazon Inspector é...

Nginx na prática: instalação, configuração e servidor rodando
Nginx na prática: instalação, configuração e servidor rodando

O Nginx está instalado — agora configure. Estrutura de diretórios, virtual ho...

Guia Completo de AWS Security Hub: Postura de Segurança Centralizada
Guia Completo de AWS Security Hub: Postura de Segurança Centralizada

Introdução ao AWS Security Hub O AWS Security Hub é um serviço centralizado q...