Depois que você tiver as métricas de memória registradas no Cloudwatch, basta configurar o escalonamento automático como faria para qualquer métrica existente.
Em primeiro lugar, como acontece com todas as ferramentas de linha de comando da AWS, você precisa definir (exportar):
- AWS_CREDENTIAL_FILE ou
- ambos: EC2_PRIVATE_KEY e EC2_CERT
Em seguida, você executa os três comandos a seguir, modificando-os de acordo com suas necessidades (estes são apenas executados a partir da linha de comando - uma vez - e não do cron).
Crie a configuração de lançamento: Você precisa passar uma imagem e um tipo de instância no mínimo, parâmetros adicionais são opcionais, mas provavelmente é uma boa ideia.
as-create-launch-config
LaunchConfigurationName --image-id value --instance-type value
[--block-device-mapping "key1=value1,key2=value2..." ] [--kernel value]
[--key value ] [--ramdisk value ] [--group value[,value...] ]
[--user-data value ] [--user-data-file value ] [General Options]
Por exemplo:
as-create-launch-config config-name --image-id AMI-xxxxxxxx --instance-type m1.small --key keypair-name --group security-group-name
Crie o grupo de escalonamento automático: Aqui nós definimos os parâmetros para o escalonamento - onde as instâncias serão lançadas, os limites do número de instâncias e o grupo associado à configuração que criamos.
as-create-auto-scaling-group
AutoScalingGroupName --availability-zones value[,value...]
--launch-configuration value --max-size value --min-size value
[--cooldown value ] [--load-balancers value[,value...] ]
[General Options]
Por exemplo:
as-create-auto-scaling-group as-group-name --availability-zones us-east-1a --launch-configuration config-name --min-size 1 --max-size 5 --cooldown 300
(Você também pode especificar uma capacidade --desired que é o número de instâncias para começar, se for diferente do tamanho min)
Crie uma política para escalar com: Aqui, definimos a ação que será executada quando um alarme é acionado e associamos a política a um grupo específico de autoescala. Crie uma política para ampliação e outra para redução de escala.
as-put-scaling-policy
PolicyName --type value --auto-scaling-group value --adjustment
value [--cooldown value ] [General Options]
Este comando gera um ARN que será necessário para associar a política a um alarme de nuvem - anote o ARN. Cada comando retornará um ARN diferente - ou seja, você terá 2 ARNs - lembre-se de qual deles é para qual política.
Por exemplo:
Expansão:
as-put-scaling-policy HighMemPolicy --auto-scaling-group as-group-name --adjustment=1 --type ChangeInCapacity --cooldown 300
Diminuir:
as-put-scaling-policy LowMemPolicy --auto-scaling-group as-group-name --adjustment=-1 --type ChangeInCapacity --cooldown 300
Exemplo de retorno:
POLICY-ARN arn:aws:autoscaling:us-east-1:0123456789:scalingPolicy/abc-1234-def-567
Crie um alarme do Cloudwatch para cada caso: Precisamos usar nossos dados coletados para acionar um alarme em circunstâncias específicas e, em seguida, fazer com que o alarme execute a política de escala apropriada. Você precisará de 2 alarmes - um para o limite superior e outro para o limite inferior.
mon-put-metric-alarm
AlarmName --comparison-operator value --evaluation-periods value
--metric-name value --namespace value --period value --statistic
value --threshold value [--actions-enabled value ] [--alarm-actions
value[,value...] ] [--alarm-description value ] [--dimensions
"key1=value1,key2=value2..." ] [--insufficient-data-actions
value[,value...] ] [--ok-actions value[,value...] ] [--unit value ]
[General Options]
Por exemplo:
Limite superior:
mon-put-metric-alarm HighMemAlarm --comparison-operator GreaterThanThreshold --evaluation-periods 4 --metric-name UsedMemoryPercent --namespace "AWS/EC2" --period 60 --statistic Average --threshold 85 --alarm-actions arn:aws:autoscaling:us-east-1:0123456789:scalingPolicy/abc-1234-def-567 --dimensions "AutoScalingGroupName=as-group-name"
Limite inferior:
mon-put-metric-alarm LowMemAlarm --comparison-operator LessThanThreshold --evaluation-periods 4 --metric-name UsedMemoryPercent --namespace "AWS/EC2" --period 60 --statistic Average --threshold 60 --alarm-actions arn:aws:autoscaling:us-east-1:0123456789:scalingPolicy/bcd-2345-efg-678 --dimensions "AutoScalingGroupName=as-group-name"
No exemplo acima, estamos usando a métrica 'UsedMemoryPercent' (do script do fórum) e estamos olhando para a 'média acima de 60 segundos'. Para o primeiro alarme, se essa média exceder 85% para 4 amostras consecutivas (ou seja, 4 minutos), dispararemos o alarme (e executaremos a ação). Para o segundo alarme, procuramos "menos de 60%".
Boas referências incluem:
Execute o comando com --help
para ver os detalhes dos parâmetros.