Relacionamento TEXTO Daniela Andrioli PAPO Economize DE SEXO
Raising the bar #4 - Economize utilizando instâncias Spot no Amazon EC2
-
Upload
amazon-web-services-latam -
Category
Technology
-
view
388 -
download
0
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
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 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
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
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
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
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