Ajuste automático de instâncias do AWS EC2 com base na utilização de memória

3

Estou configurando o escalonamento automático com base na memória consumida pela instância específica. Eu passei pelo link postado em awsforums . Consegui definir minhas métricas e usar o script bash fornecido e com as mesmas variáveis.

Ao descobrir como definir o dimensionamento automático com base nessas métricas, passei a conhecer o grupo de scripts bash em site de hospedagem do projeto google . Não consigo definir as métricas.

Como posso seguir adiante?

    
por Jeevan Dongre 12.01.2012 / 11:28

2 respostas

4

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.

    
por 12.01.2012 / 14:18
0

Você pode usar o script de modelo que forneci aqui porque é da mesma maneira que eu faço o escalonamento automático de a própria instância do EC2. Eu só tenho que adicionar os comandos específicos para auto-escala logo após as linhas <SEND_INFORMATION_GATHERED_BY_EMAIL_HERE> , porque eu também quero saber o que faz com que. Mas certifique-se de que você tenha as ferramentas fornecidas pela AWS dentro da sua instância do EC2.

Boa sorte!

    
por 12.01.2012 / 11:43