O dimensionamento automático no EC2 é baseado em acionadores do Cloudwatch. Por padrão, a Cloudwatch não coleta dados sobre o uso da memória (a razão oficial é algo para o efeito de tais métricas exigindo "uma olhada no sistema operacional em execução na instância")
A solução, portanto, é configurar uma métrica personalizada para monitorar o uso de memória anexar um alarme a essa métrica e, em seguida, basear sua diretiva de escala desse alarme.
A Amazon descreveu o procedimento razoavelmente bem em esta postagem no fórum .
Primeiramente, você tem um script que coletará os dados de 'free' (copiados da página acima):
#!/bin/bash
export AWS_CLOUDWATCH_HOME=/home/ec2-user/CloudWatch-1.0.12.1
export AWS_CREDENTIAL_FILE=$AWS_CLOUDWATCH_HOME/credentials
export AWS_CLOUDWATCH_URL=https://monitoring.amazonaws.com
export PATH=$AWS_CLOUDWATCH_HOME/bin:$PATH
export JAVA_HOME=/usr/lib/jvm/jre
# get ec2 instance id
instanceid='wget -q -O - http://169.254.169.254/latest/meta-data/instance-id'
memtotal='free -m | grep 'Mem' | tr -s ' ' | cut -d ' ' -f 2'
memfree='free -m | grep 'buffers/cache' | tr -s ' ' | cut -d ' ' -f 4'
let "memused=100-memfree*100/memtotal"
mon-put-data --metric-name "FreeMemoryMBytes" --namespace "System/Linux" --dimensions "InstanceId=$instanceid" --value "$memfree" --unit "Megabytes"
mon-put-data --metric-name "UsedMemoryPercent" --namespace "System/Linux" --dimensions "InstanceId=$instanceid" --value "$memused" --unit "Percent"
O script pega o número da linha '- / + buffers / cache' na coluna 'free', como uma porcentagem de 'total' (na linha 'Mem') e configura 2 métricas - a porcentagem de memória usada e a memória total livre em MB.
Todas as ferramentas da API da AWS são muito lentas (relativamente falando). Se possível, use a API diretamente de algum idioma compatível (por exemplo, Ruby) e você terá um desempenho muito melhor do que o script acima.
Modifique o script acima para atender às suas necessidades (você provavelmente não precisa das duas métricas, etc.) e configure-o para ser executado a cada poucos minutos via cron. Lembre-se de que você recebe um número limitado de métricas e alarmes personalizados / detalhados gratuitamente, após o qual é um custo mensal.
Há também um projeto do Google Code - " Aws Missing Tools " que possui scripts para monitoramento uso de memória e algumas outras métricas que podem ser úteis.
Depois de configurar e operar sua métrica, crie um alarme para ela e continue com o escalonamento automático ( as-put-scaling-policy
, etc) como faria com qualquer uma das métricas predefinidas.