<h2>Launch Templates: Fundação do Auto Scaling</h2>
<p>Um Launch Template é um blueprint que define como as instâncias EC2 serão criadas no Auto Scaling Group (ASG). Ele substitui o deprecated Launch Configuration com funcionalidades superiores: versionamento, reutilização entre múltiplos ASGs e compatibilidade com Spot Instances.</p>
<h3>Criando um Launch Template</h3>
<p>O Launch Template encapsula: tipo de instância, AMI, security groups, volumes EBS, IAM roles e user data. Você pode versionar templates e fazer rollback instantaneamente. Eis um exemplo prático usando AWS CLI:</p>
<pre><code class="language-bash">aws ec2 create-launch-template \
--launch-template-name web-server-template \
--version-description "Versão 1.0 - Nginx com Node.js" \
--launch-template-data '{
"ImageId": "ami-0c55b159cbfafe1f0",
"InstanceType": "t3.micro",
"KeyName": "minha-chave",
"SecurityGroupIds": ["sg-12345678"],
"IamInstanceProfile": {"Name": "EC2-App-Role"},
"UserData": "IyEvYmluL2Jhc2gKc3VkbyB5dW0gdXBkYXRlIC15CnN1ZG8geXVtIGluc3RhbGwgLXkgbm9kZWpzCmVjaG8gJ2NvbnNvbGUubG9nKCJTZXJ2ZXIgUm9kYW5kbyIpJyA+IHNlcnZlci5qcw==",
"TagSpecifications": [{
"ResourceType": "instance",
"Tags": [{"Key": "Name", "Value": "web-server-prod"}]
}]
}'</code></pre>
<p>A string em <code>UserData</code> é Base64. Decodificando, ela instala Node.js e cria um servidor básico. O versionamento permite testar novas configurações sem afetar instâncias rodando com versões anteriores.</p>
<p>---</p>
<h2>Auto Scaling Policies: Reatividade Sob Demanda</h2>
<p>As policies definem quando e como escalar. Existem três tipos principais: <strong>Target Tracking</strong> (mais simples), <strong>Step Scaling</strong> (granular) e <strong>Simple Scaling</strong> (legado). Cada uma resolve problemas diferentes.</p>
<h3>Target Tracking Scaling</h3>
<p>Target Tracking monitora uma métrica (CPU, memória, requisições) e mantém um alvo. Se a métrica excede o alvo, novos servidores são adicionados automaticamente. É a opção recomendada para 80% dos casos.</p>
<pre><code class="language-python">import boto3
autoscaling = boto3.client('autoscaling')
response = autoscaling.put_scaling_policy(
AutoScalingGroupName='meu-asg-prod',
PolicyName='cpu-target-tracking',
PolicyType='TargetTrackingScaling',
TargetTrackingConfiguration={
'TargetValue': 70.0,
'PredefinedMetricSpecification': {
'PredefinedMetricType': 'ASGAverageCPUUtilization'
},
'ScaleOutCooldown': 60,
'ScaleInCooldown': 300
}
)
print(f"Policy ARN: {response['PolicyARN']}")</code></pre>
<p>Este código mantém CPU média em 70%. Se exceder, escala para cima em 60 segundos. Se cair abaixo, aguarda 300 segundos antes de descer (evita churn). Outras métricas predefinidas: <code>ASGAverageNetworkIn</code>, <code>ALBRequestCountPerTarget</code>, entre outras.</p>
<h3>Step Scaling</h3>
<p>Step Scaling oferece mais granularidade. Define degraus: se CPU entre 70-80%, adiciona 1 instância; se 80-90%, adiciona 2; se >90%, adiciona 4. Exige um CloudWatch Alarm como gatilho.</p>
<pre><code class="language-python"># Criar o alarme de CPU alta
cloudwatch = boto3.client('cloudwatch')
cloudwatch.put_metric_alarm(
AlarmName='cpu-alto-prod',
MetricName='CPUUtilization',
Namespace='AWS/EC2',
Statistic='Average',
Period=300,
EvaluationPeriods=2,
Threshold=75.0,
ComparisonOperator='GreaterThanThreshold',
Dimensions=[
{'Name': 'AutoScalingGroupName', 'Value': 'meu-asg-prod'}
]
)
Política com degraus
autoscaling.put_scaling_policy(
AutoScalingGroupName='meu-asg-prod',
PolicyName='cpu-step-scaling',
PolicyType='StepScaling',
AdjustmentType='ChangeInCapacity',
MetricAggregationType='Average',
StepAdjustments=[
{
'MetricIntervalLowerBound': 0,
'MetricIntervalUpperBound': 10,
'ScalingAdjustment': 1
},
{
'MetricIntervalLowerBound': 10,
'MetricIntervalUpperBound': 20,
'ScalingAdjustment': 2
},
{
'MetricIntervalLowerBound': 20,
'ScalingAdjustment': 4
}
]
)</code></pre>
<p>Use Step Scaling quando comportamento de carga é previsível em etapas. Target Tracking é mais simples; escolha baseado na complexidade necessária.</p>
<p>---</p>
<h2>Predictive Scaling: Inteligência Artificial no Seu Serviço</h2>
<p>Predictive Scaling usa Machine Learning para analisar padrões históricos de carga e escalar <strong>antes</strong> da demanda chegar. Treina com 14 dias de dados e prevê até 48 horas à frente. É game-changer para picos previsíveis (fim de expediente, horários de pico).</p>
<h3>Ativando Predictive Scaling</h3>
<p>Predictive Scaling funciona complementar a Target Tracking. Enquanto Target Tracking reage, Predictive Scaling antecipa. Configure assim:</p>
<pre><code class="language-python">autoscaling.put_scaling_policy(
AutoScalingGroupName='meu-asg-prod',
PolicyName='predictive-scaling-policy',
PolicyType='TargetTrackingScaling',
TargetTrackingConfiguration={
'TargetValue': 70.0,
'PredefinedMetricSpecification': {
'PredefinedMetricType': 'ASGAverageCPUUtilization'
},
'ScaleOutCooldown': 60,
'ScaleInCooldown': 300
}
)
Ativar modo preditivo no ASG
autoscaling.put_scaling_policy(
AutoScalingGroupName='meu-asg-prod',
PolicyName='predictive-mode',
PolicyType='TargetTrackingScaling',
TargetTrackingConfiguration={
'TargetValue': 70.0,
'CustomizedMetricSpecification': {
'MetricName': 'MyCustomMetric',
'Namespace': 'MyApp',
'Statistic': 'Average'
}
}
)
Enable Predictive Scaling via describe
response = autoscaling.describe_auto_scaling_groups(
AutoScalingGroupNames=['meu-asg-prod']
)
print(response['AutoScalingGroups'][0])</code></pre>
<blockquote><p><strong>Nota prática:</strong> Predictive Scaling exige mínimo 2 semanas de dados. Nos primeiros 14 dias, use Target Tracking tradicional. Após histórico suficiente, o ML começa a prever.</p></blockquote>
<p>Vantagens concretas: em padrões recorrentes (segundo turno tem 40% mais carga), o ASG cresce 10-15 minutos antes, evitando timeout de usuários. Economia: reduz scaling desnecessário fora de padrão, economizando ~15% em instâncias ociosas.</p>
<p>---</p>
<h2>Boas Práticas e Cenários Reais</h2>
<p><strong>Combinação de policies:</strong> Use Predictive + Target Tracking juntos. Predictive dimensiona proativamente; Target Tracking corrige desvios imprevistos em tempo real.</p>
<p><strong>Launch Template versionamento:</strong> Sempre teste novas versões em um ASG de staging antes de mover para produção. Use feature flags dentro da aplicação para gradualmente habilitar novas funcionalidades.</p>
<p><strong>Métricas customizadas:</strong> Se sua aplicação tem padrão único (filas, requisições internas), passe métrica customizada para Predictive Scaling via CloudWatch. Exemplo: escalar baseado em tamanho de fila SQS.</p>
<pre><code class="language-python">cloudwatch.put_metric_data(
Namespace='MyApp',
MetricData=[
{
'MetricName': 'QueueDepth',
'Value': 150,
'Unit': 'Count',
'Timestamp': datetime.datetime.utcnow()
}
]
)</code></pre>
<p>---</p>
<h2>Conclusão</h2>
<p>Três aprendizados principais: <strong>(1)</strong> Launch Templates são versionáveis e reutilizáveis, superior ao Configuration deprecated; <strong>(2)</strong> Target Tracking resolve 80% dos casos, use Step Scaling apenas quando padrões de carga requerem granularidade; <strong>(3)</strong> Predictive Scaling antecipa demanda com ML, economizando recursos em padrões recorrentes — ative após 2 semanas de histórico.</p>
<p>Próximos passos: implemente em staging, monitore CloudWatch metrics por 2-4 semanas, valide economia, depois mova para produção. Auto Scaling bem configurado reduz downtime e custos simultaneamente.</p>
<p>---</p>
<h2>Referências</h2>
<ul>
<li><a href="https://docs.aws.amazon.com/autoscaling/" target="_blank" rel="noopener noreferrer">AWS EC2 Auto Scaling Documentation</a></li>
<li><a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/launch-templates.html" target="_blank" rel="noopener noreferrer">AWS Launch Templates Best Practices</a></li>
<li><a href="https://docs.aws.amazon.com/autoscaling/ec2/userguide/predictive-scaling.html" target="_blank" rel="noopener noreferrer">Predictive Scaling for EC2</a></li>
<li><a href="https://docs.aws.amazon.com/autoscaling/ec2/userguide/as-scale-based-on-demand.html" target="_blank" rel="noopener noreferrer">AWS Auto Scaling Policies Guide</a></li>
<li><a href="https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/autoscaling.html" target="_blank" rel="noopener noreferrer">Boto3 AutoScaling Client Reference</a></li>
</ul>