© 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
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 Blocks
Amazon EC2 Spot Block
$1
Rode sem
interrupções por até
6 horas
Reduza até 50% do
preço On-Demand
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)
AlarmeAmazon
CloudWatch
Contagem de
Requisições
AWS
Lambda
ModifySpotFleetRequest API
“A flexibilidade que a AWS oferece para adequar nosso
ambiente à variação de audiência, aliada a performance,
robsutez e segurança são os pilares onde nos apoiamos
para desenvolver nossa parceria com a AWS.”
O ZAP tem sede em São Paulo, conta com 400 funcionários e possui 25 escritórios regionais distribuídos pelo Brasil. Nossos principais polos de tecnologia estão localizados em São Paulo, Porto Alegre e Maringá.
Oferecemos as ferramentas de buscas com os mais adequados filtros de pesquisa através de website ou por meio de um moderno aplicativo para celulares e tablets das plataformas Android e iOS, com mais de 14 milhões de visitas/mês.
“Redução de
custos é chave para
o momento sócio
econômico que estamos
atravessando no Brasil e
a AWS tem o suporte
tecnológico ideal para
nos ajudar a atingir esta
meta.”
- Eduardo Perez, CTO
Desafio
Otimização de Uso / Custo
Volatilidade Cambial
Automatização + DevOps
Escalabilidade + HA
Ambiente ZAP
Economia para instâncias Linux
63.50%
95.70% 95.50%
c3.8xlarge c3.xlarge m3.xlarge
Economia para instâncias Windows
78.50%
85.30%
c3.xlarge m3.large
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!