Raising the bar #4 - Economize utilizando instâncias Spot no Amazon EC2

40
© 2016, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Rubens Devito Filho | Arquiteto de Soluções Amazon EC2: Economize Utilizando Instâncias Spot

Transcript of Raising the bar #4 - Economize utilizando instâncias Spot no Amazon EC2

© 2016, Amazon Web Services, Inc. or its Affiliates. All rights reserved.

Rubens Devito Filho | Arquiteto de Soluções

Amazon EC2: Economize Utilizando

Instâncias Spot

Agenda

• Conceito de instâncias Spot

• Tipos de requisições de instâncias Spot

• Spot

• Spot Blocks

• Spot Fleet

• Escalando com instâncias Spot

• Quando usar Spot x Spot Blocks x Spot Fleet

O que é Amazon EC2 Spot

$1

• São instâncias EC2 que você pode aplicar uma oferta de preço. Como

instâncias Spot estão geralmente disponíveis a preços baixos, você pode

reduzir significamente os custos com Amazon EC2.

As Regras são Simples

Mercados onde o preço mudabaseado na oferta e procura

Você nunca pagará mais do que o valor da sua oferta. Quando o preçode mercado exceder o valor da suaoferta, você recebe 2 minutos para

concluir suas tarefas

$0.27 $0.29$0.50

1b 1c1a

8XL

$0.30 $0.16$0.214XL

$0.07 $0.08$0.082XL

$0.05 $0.04$0.04XL

$0.01 $0.04$0.01L

C3

$1.76

On

Demand

$0.88

$0.44

$.22

$0.11

Cada família de instância

Cada tamanho de instância

Cada Zona de Disponibilidade

Em cada região

É um Spot Market separado

Quais são os mercados de Spot

Spot Bid Advisor

https://aws.amazon.com/ec2/spot/bid-advisor/

Exemplo

Vamos às contas

• m3.2xlarge em São Paulo = $0.761/hr

• $0.0853/hr = ~11%

• ~11% < t2.medium ($0.108/hr)

• Por 3 meses ou mais

• Ao invés de $1671.18 seu custo será de $184.24

• Redução de quase $1500!

Spot CLI

#Lança instâncias Spot

aws ec2 request-spot-instances --spot-price "0.0200" --instance-count 2 --region us-west-2 --launch-specification file:///Users/user/Folder/spot.json

spot.json

{

"ImageId": "ami-f0091d91",

"KeyName": "EC2",

"SecurityGroupIds": [ "sg-c0c188a5" ],

"InstanceType": "m3.medium",

"Placement": {

"AvailabilityZone": "us-west-2c”

},

"SubnetId": "subnet-0694685f”

}

Determine o tipo e a validade da sua oferta

• Única ou persistente

• Se a oferta for persistente, uma nova requisição será

feita automaticamente após a instância ser terminada

• Possibilidade de configurar o prazo da sua oferta

Spot CLI

#Lança instâncias Spot

aws ec2 request-spot-instances --spot-price "0.0200" --instance-count 2 --region us-west-2 –-type ”persistent” --launch-specificationfile:///Users/user/Folder/spot.json

Use instâncias Spot para escalar

1. Crie um Auto Scaling só de Spot

2. Crie outro Auto Scaling com On-Demand

3. Ambos no mesmo Elastic Load Balancing

4. Configure métricas mais agressivas no Auto Scaling de

Spot e seja mais conservador no Auto Scaling de On-

Demand

5. Instâncias Spot serão lançadas primeiro e desligadas

por último

6. Instâncias On-Demand serão lançadas por último e

desligadas primeiro

Aplicação Web com Spot

Dados de

Sessão

Zona de Disponibilidade A

Zona de Disponibilidade B

ASG Spot

Elastic Load

Balancing

ASG On-

Demand

Use instâncias Spot para escalar

1. Crie um Auto Scaling só de Spot

a) Via Console, crie um Launch Configuration que faça a

requisição de Spot

b) Crie o Auto Scaling Group com esse Launch Configuration

Auto Scaling Spot CLI

#Cria Launch Configuration com Spot

aws autoscaling create-launch-configuration --launch-configuration-name LC_Spot --image-id ami-d0f506b0 –-key-name EC2 --instance-type m3.medium --spot-price 0.0140 –-region us-west-2

#Cria Auto Scaling com Spot

aws autoscaling create-auto-scaling-group --region us-west-2 --auto-scaling-group-nameASG_Spot --launch-configuration-name LC_Spot --availability-zones "us-west-2a" "us-west-2b" "us-west-2c" --max-size 4 --min-size 1 --desired-capacity 2 --vpc-zone-identifier subnet-bbd906cc,subnet-569e2733,subnet-0694685f

Use instâncias Spot para escalar

2. Crie um Auto Scaling de On-Demand

a. Via Console, crie um Launch Configuration sem requisitar

Spot

b. Via CLI, utilize os mesmos comandos removendo apenas o

parâmetro --spot-price

c. Crie o Auto Scaling Group da mesma maneira que o Spot

Use instâncias Spot para escalar

3. Ambos no mesmo Elastic Load Balancing

a. Via Console, vá no Auto Scaling e edite o campo Load

Balancers

b. Via CLI, adicione o parâmetro --load-balancer-names

c. Faça isso para os dois Auto Scaling Groups

Auto Scaling Spot CLI

#Cria Auto Scaling anexado à um Load Balancer

aws autoscaling create-auto-scaling-group --region us-west-2 --auto-scaling-group-nameASG_Spot --launch-configuration-name LC_Spot --availability-zones "us-west-2a" "us-west-2b" "us-west-2c" --max-size 4 --min-size 1 --desired-capacity 2 --vpc-zone-identifier subnet-bbd906cc,subnet-569e2733,subnet-0694685f --load-balancer-names MyELB

Use instâncias Spot para escalar

4. Configure métricas mais agressivas no Auto Scaling de

Spot e seja mais conservador no Auto Scaling de On-

Demand. Exemplo:

a) Se CPU >= 40% lance Spot

b) Se CPU >= 70% lance On-Demand

c) Se CPU <= 40% remova On-Demand

d) Se CPU <= 20% remova Spot

5. Instâncias Spot serão lançadas primeiro e desligadas

por último

6. Instâncias On-Demand serão lançadas por último e

desligadas primeiro

Fique atento com o alerta de 2 minutos

$ if curl -s http://169.254.169.254/latest/meta-data/spot/termination-time | \

grep -q .*T.*Z; then instance_id=$(curl -s http://169.254.169.254/latest/meta-data/instance-id); \

aws elb deregister-instances-from-load-balancer \

--load-balancer-name my-load-balancer \

--instances $instance_id; \

/env/bin/flushsessiontoDBonterminationscript.sh; fi

1) Verifica o alerta de 2

minutos

2) Se SIM, remove a

instâncias do ELB

3) Caso contrário, não faça

nada

4) Aguarda por 5 segundos

Spot Block

Amazon EC2 Spot Block

$1

Rode sem

interrupções por até

6 horas

Reduza até 50% do

preço On-Demand

Spot Block CLI

Spot Block CLI

#Lança instâncias Spot

aws ec2 request-spot-instances --spot-price "0.0200" --instance-count 1 –-block-duration-minutes 120 --region us-west-2 --launch-specificationfile:///Users/user/Folder/spot.json

Spot Fleet

Amazon EC2 Spot Fleet

• Lance centenas de instâncias Spot com uma única chamadaRequestSpotFleet

• Lowest Price• Encontre o melhor preço que funcione para você

• Diversified• Diversifique sua frota. Amplie sua disponibilidade

• Custom Weighting• Crie sua própria unidade de capacidade baseado nas necessidades da

sua aplicação

Flexibilidade do Spot Fleet

2. Entre famílias EC2

3. Entre AZs

1. Dentro da família EC2

Spot Fleet CLI

#Lança instâncias Spot

aws ec2 request-spot-fleet –-spot-fleet-request-configfile:///Users/user/Folder/spot_fleet.json

spot_fleet.json

{

"SpotPrice": "0.04",

"TargetCapacity": 3,

"IamFleetRole": "arn:aws:iam::109434434086:role/aws-ec2-spot-fleet-role",

"LaunchSpecifications": [

{

"ImageId": "ami-f0091d91",

"KeyName": "EC2",

"SecurityGroups": [

{

"GroupId": "sg-c0c188a5”

}

],

"InstanceType": "c3.large",

"Placement": {

"AvailabilityZone": "us-west-2c"

},

"SubnetId": "subnet-0694685f",

"IamInstanceProfile": {

"Arn": "arn:aws:iam::109434434086:role/aws-ec2-spot-fleet-role”

}

},

{

"ImageId": "ami-f0091d91",

"KeyName": "EC2",

"SecurityGroups": [

{

"GroupId": "sg-c0c188a5"

}

],

"InstanceType": "m3.medium",

"Placement": {

"AvailabilityZone": "us-west-2b”

},

"SubnetId": "subnet-569e2733",

"IamInstanceProfile": {

"Arn": "arn:aws:iam::109434434086:role/aws-ec2-spot-fleet-role”

}

}

]

}

Spot Fleet

Dependendo da quantidade e variação do seu Spot Fleet,

utilizar o CLI pode ser complicado.

Dica:

Aplicação Web sem Estado (Stateless)

Elastic Load

Balancing

Stateless

Web Servers

(Spot)

Stateless

Web Servers

(Spot)

Dados de

Sessão

Spot fleet

Zona de Disponibilidade A

Stateless

Web Servers

(Spot)

Stateless

Web Servers

(Spot)Zona de Disponibilidade B

Cenário

Spot Fleet mantém a Capacidade Desejada

Escale seu Spot Fleet

Elastic Load

Balancing

Stateless

Web Servers

(Spot)

Stateless

Web Servers

(Spot)

Zona de Disponibilidade A

Zona de Disponibilidade B

Stateless

Web Servers

(Spot)

Stateless

Web Servers

(Spot)

alarm

Escale seu Spot Fleet

Requisitos para usar Spot

• Não persista nada na instância Spot• Para sessões, Amazon ElastiCache ou Amazon DynamoDB

• Para logs, Amazon S3

• …

• Use para aplicações escaláveis e automatizadas

• Evite para aplicações monolíticas caso ela seja crítica

Qual tipo de Spot devo usar?

• Spot

• Escalar (integrado com Auto Scaling)

• Processamento em batch com tempo indeterminado

• Task Nodes do EMR

• Ambientes de DEV e Homologação, instância de CI

• Workers em geral

• Spot Blocks

• Qualquer job que tem limite de até 6 horas para ser executado

• Processamento em batch

• HDFS de um cluster EMR

• Spot Fleet

• Aplicações Web estáveis usando Diversified em diferentes AZs

• Task Nodes do EMR

• Cluster de containers

Qual tipo de Spot devo usar?

• Na dúvida, use Spot Fleet

Obrigado!