More Related Content More from Amazon Web Services Japan (20) AWS Black Belt Tech シリーズ 2015 - Amazon EC2 スポットインスタンス & Auto Scaling9. Amazon Elastic Compute Cloud (EC2)
• 特徴 (http://aws.amazon.com/jp/ec2/)
– 必要な時に必要なだけ1時間単位の従量課金で
利用できる仮想サーバリソース
– 世界11箇所のリージョンで利用可能
– 様々なスペック・OSを選択可能
• 価格体系 (http://aws.amazon.com/jp/ec2/pricing/)
– インスタンス利用料($0.02/hour 〜)
– データ転送量(OUT $0.14/GB )
仮想クラウドサーバ
9
11. Auto Scaling
• 特徴 (http://aws.amazon.com/jp/autoscaling/)
– Amazon EC2インスタンス群を自動的に
スケール
– 耐障害性の向上(インスタンスの異常を
検知して、新しいインスタンスを起動)
– EC2インスタンスの起動料金の最適化
• 価格体系 (http://aws.amazon.com/jp/autoscaling/pricing/)
– Auto Scaling自体の利用は無料
– Auto Scalingによって起動されるEC2インス
タンスの起動料金
• Spotインスタンスとしても起動可能
EC2インスタンスを負荷またはスケジュールに応じて自動増減
Desired
Capacity
必要に応じて
追加される
Capacity
起動設定
• インスタンスタイプ
• AMI
• Spot入札価格 など
11
22. ap-northeast-1a
(Tokyo Region)
m4.large
…
m4.xlarge
スポット関連概念の整理 - 入札価格
c4.large
ap-northeast-1c
m4.large
…
m4.xlarge c4.large
使用中
使用中
使用中
通常
使用中
通常
使用中
通常
使用中
$0.0384 $0.0346$0.0346
$0.0530
$0.0209
「最大でここまでなら支払ってもよい」という価格
実際に課金されるのはスポット価格
管理コンソールまたはRequestSpotInstances APIから
リクエスト可能
$3.66
「東京リージョンの
1aにあるc4.largeを
最大$0.05で使いたい!」
22
23. ap-northeast-1a
(Tokyo Region)
m4.large
…
m4.xlarge
スポット関連概念の整理 - 落札
c4.large
ap-northeast-1c
m4.large
…
m4.xlarge c4.large
使用中
使用中
使用中
通常
使用中
通常
使用中
通常
使用中
$0.0384 $0.0346$0.0346
$0.0530
$0.0209
入札価格がスポット価格を上回り、スポットプールに空きがあった場合※、
希望したスポットインスタンスを使いはじめることができる
※詳しくは「スポットインスタンスのしくみ」を参照のこと
http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/how-spot-instances-work.html
$3.66「東京リージョンの
1aにあるc4.largeは
現在$0.0346なので、
$0.05入札で起動できた!」
23
24. ap-northeast-1a
(Tokyo Region)
m4.large
…
m4.xlarge
スポット関連概念の整理 - インスタンスの中断
c4.large
ap-northeast-1c
m4.large
…
m4.xlarge c4.large
使用中
使用中
使用中
通常
使用中
通常
使用中
通常
使用中
$0.0384 $0.0346
$0.051
$0.0530
$0.0209
スポット価格が変動し入札価格を上回ったとき、スポットインスタンス
はターミネートされる。インスタンスから以下のURLをGETすると、
2分前から通知を取得できる。5秒ごとのポーリングを推奨。
http://169.254.169.254/latest/meta-data/spot/termination-time
$3.66「スポット価格が変動して
入札価格$0.05を上回って
しまった。ターミネート前
に終了処理をしよう」
24
32. スポットインスタンス 利用時に考慮しておくべきこと
1. ターミネート時の後処理
2. 突然のターミネートが許容されるワークロードか?
Webのフロントサーバなどユーザインパクトに直結する箇所や、
遅延が許されないタスクでの使用はNG…だった
今なら、そういうときはスポットフリートを検討すべし
3. いかにターミネートの頻度、リスクを軽減するか
複数のスポットプールに分散し、スポット価格高騰時のリスクを
軽減するスポットフリートを利用する
スポット価格の変動に関わらず、一度落札できさえすれば
指定時間内は落ちないスポットブロックを利用する
4. とはいえ、それでも必要なインスタンスが確保できなかったら?
32
43. ~ 21% 1時間以内
~ 35% 2時間以内
~ 40% 3時間以内
およそ50%のインスタンスが
6時間以内にターミネートされている
6時間は妥当か?
43
52. オンデマンド予備軍の作り方(ASGで実現する場合)
Super Hard Task
Spot ASG On-Demand ASG
When CPU > 60% Then Add
2
When CPU < 20% Then Rem
2
When CPU > 75% Then Add
2
When CPU < 35% Then Rem
2
1. ASGの準備
同じタスクを与えつつ、
Scaling PolicyのThresholdに
差をつけ、
Spot ASGは
On-Demand ASGより
スケールアウトしやすく
スケールインしにくい
設定にしておく
52
53. オンデマンド予備軍の作り方(ASGで実現する場合)
Super Hard Task
Spot ASG On-Demand ASG
When CPU > 60% Then Add
2
When CPU < 20% Then Rem
2
When CPU > 75% Then Add
2
When CPU < 35% Then Rem
2
2. 普段はSpot ASGで捌く
普段はSpot ASGだけインスタ
ンスが増減し、On-Demand
ASGは常に1台だけになってい
ることを確認する
53
54. オンデマンド予備軍の作り方(ASGで実現する場合)
Super Hard Task
Spot ASG On-Demand ASG
When CPU > 60% Then Add
2
When CPU < 20% Then Rem
2
When CPU > 75% Then Add
2
When CPU < 35% Then Rem
2
3. スポット価格高騰!
Spot ASGのインスタンスが
終了し、On-Demand ASGの
1台のみが残る
54
55. オンデマンド予備軍の作り方(ASGで実現する場合)
Super Hard Task
Spot ASG On-Demand ASG
When CPU > 60% Then Add
2
When CPU < 20% Then Rem
2
When CPU > 75% Then Add
2
When CPU < 35% Then Rem
2
4. On-Demandがスケール
On-Demand ASGが
Auto Scalingによって
スケールアウトし、
Spot ASGの代わりに頑張る
55
60. 代表的なユースケース 1/2 – ELB配下のWebサーバ
EC2 EC2Auto
Scaling
AZ-1 AZ-2
スケーリングトリガーの例
ELBのRequest数
Auto Scaling Group内EC2の
CPU使用率など
EC2は複数AZに分散して高可用性
ELB
60
61. 代表的なユースケース 2/2 – SQSのジョブを処理するWorker
EC2 EC2Auto
Scaling
AZ-1 AZ-2
スケーリングトリガーの例
SQSのキューに溜まった
メッセージ(ジョブ)数
Auto Scaling Group内EC2の
CPU使用率など
EC2は複数AZに分散して高可用性
大量のスポットインスタンスを
併用しやすいパターン
コストカットチャンス!
SQS
61
63. 1. Auto Scaling Group (以下ASG)
Auto Scalingの全体的な情報管理単位
ASG名、最小/最大台数、ヘルスチェック方法、AZ/VPC、ターミネート
ポリシー、ELB、Instance Tags、Launch Configurationなど
2. Launch Configuration
ASG内でEC2インスタンスを起動する際に必要な情報
通常のEC2インスタンスを起動する際の入力情報とほぼ同じ
Launch Configuration名、AMI、インスタンスタイプ、
Security Group(s)、Key Pair、IAM role、user-data、
Storage、CloudWatch Detailed Monitoring、Spot priceなど
3. Auto Scaling Policy
ASG内でいつどのようにスケールイン/アウトを実行するか
ASG一つにつき複数のポリシーを設定できる
Policy名、トリガーとするAlarm、Action内容
Auto Scalingの設定
63
64. Auto Scaling図解
Auto Scaling Group
AZ-1:VPC1:Subnet1Scaling Policy 2 (simple policy)
Min:2, Max:6
AZ, VPC/Subnet, ELB, Tags
AZ-2:VPC2:Subnet2
Scaling Policy 1 (with steps)
Alarm: HighCPUUtilization
Actions(Steps):
60 < value → add 2 Instances
80 < value → add 10% of group
30 > value → remove 2 Instances
warm up: 300 seconds
Alarm: HighLaytency
Action(only one):
300 < value → add 2 Instances
cool down: 300 seconds
Launch Configuration
Launch Configuration
Launch Configuration
AMI, Instance Type,
IAM Role, Security Group,
Key Pair, user-data,
Storage, Spot Price
Associate
64
65. Auto Scaling図解
Auto Scaling Group
Launch Configuration
Launch Configuration
Launch Configuration
AZ-1:VPC1:Subnet1Scaling Policy 2 (simple policy)
Min:2, Max:6
AZ, VPC/Subnet, ELB, Tags
AZ-2:VPC2:Subnet2
Scaling Policy 1 (with steps)
Alarm: HighCPUUtilization
Actions(Steps):
60 < value → add 2 Instances
80 < value → add 10% of group
30 > value → remove 2 Instances
warm up: 300 seconds
Alarm: HighLaytency
Action(only one):
300 < value → add 2 Instances
cool down: 300 seconds
AMI, Instance Type,
IAM Role, Security Group,
Key Pair, user-data,
Storage, Spot Price
Associate
Alarm!!
CloudWatch
①CloudWatchから、CPU使用率60%超のAlarm!
65
66. Auto Scaling図解
Auto Scaling Group
Launch Configuration
Launch Configuration
Launch Configuration
AZ-1:VPC1:Subnet1Scaling Policy 2 (simple policy)
Min:2, Max:6
AZ, VPC/Subnet, ELB, Tags
AZ-2:VPC2:Subnet2
Scaling Policy 1 (with steps)
Alarm: HighCPUUtilization
Actions(Steps):
60 < value → add 2 Instances
80 < value → add 10% of group
30 > value → remove 2 Instances
warm up: 300 seconds
Alarm: HighLaytency
Action(only one):
300 < value → add 2 Instances
cool down: 300 seconds
AMI, Instance Type,
IAM Role, Security Group,
Key Pair, user-data,
Storage, Spot Price
Associate
②Min-Max:2-6で現在4台なのであと2台増やせる
66
67. Auto Scaling図解
Auto Scaling Group
Launch Configuration
Launch Configuration
Launch Configuration
AZ-1:VPC1:Subnet1Scaling Policy 2 (simple policy)
Min:2, Max:6
AZ, VPC/Subnet, ELB, Tags
AZ-2:VPC2:Subnet2
Scaling Policy 1 (with steps)
Alarm: HighCPUUtilization
Actions(Steps):
60 < value → add 2 Instances
80 < value → add 10% of group
30 > value → remove 2 Instances
warm up: 300 seconds
Alarm: HighLaytency
Action(only one):
300 < value → add 2 Instances
cool down: 300 seconds
AMI, Instance Type,
IAM Role, Security Group,
Key Pair, user-data,
Storage, Spot Price
Associate
③Launch Configurationに従いインスタンス起動
67
68. Auto Scaling図解
Auto Scaling Group
Launch Configuration
Launch Configuration
Launch Configuration
AZ-1:VPC1:Subnet1Scaling Policy 2 (simple policy)
Min:2, Max:6
AZ, VPC/Subnet, ELB, Tags
AZ-2:VPC2:Subnet2
Scaling Policy 1 (with steps)
Alarm: HighCPUUtilization
Actions(Steps):
60 < value → add 2 Instances
80 < value → add 10% of group
30 > value → remove 2 Instances
warm up: 300 seconds
Alarm: HighLaytency
Action(only one):
300 < value → add 2 Instances
cool down: 300 seconds
AMI, Instance Type,
IAM Role, Security Group,
Key Pair, user-data,
Storage, Spot Price
Associate
④インスタンスの初期化、Health Checkを実行
68
69. Auto Scaling図解
Auto Scaling Group
Launch Configuration
Launch Configuration
Launch Configuration
AZ-1:VPC1:Subnet1Scaling Policy 2 (simple policy)
Min:2, Max:6
AZ, VPC/Subnet, ELB, Tags
AZ-2:VPC2:Subnet2
Scaling Policy 1 (with steps)
Alarm: HighCPUUtilization
Actions(Steps):
60 < value → add 2 Instances
80 < value → add 10% of group
30 > value → remove 2 Instances
warm up: 300 seconds
Alarm: HighLaytency
Action(only one):
300 < value → add 2 Instances
cool down: 300 seconds
AMI, Instance Type,
IAM Role, Security Group,
Key Pair, user-data,
Storage, Spot Price
Associate
⑤Health Checkに問題なければELB配下に追加
69
70. Auto Scaling図解
Auto Scaling Group
Launch Configuration
Launch Configuration
Launch Configuration
AZ-1:VPC1:Subnet1Scaling Policy 2 (simple policy)
Min:2, Max:6
AZ, VPC/Subnet, ELB, Tags
AZ-2:VPC2:Subnet2
Scaling Policy 1 (with steps)
Alarm: HighCPUUtilization
Actions(Steps):
60 < value → add 2 Instances
80 < value → add 10% of group
30 > value → remove 2 Instances
warm up: 300 seconds
Alarm: HighLaytency
Action(only one):
300 < value → add 2 Instances
cool down: 300 seconds
AMI, Instance Type,
IAM Role, Security Group,
Key Pair, user-data,
Storage, Spot Price
Associate
⑥Warm up期間はASGのメトリクスに含まれない
70
71. Auto Scaling図解
Auto Scaling Group
Launch Configuration
Launch Configuration
Launch Configuration
AZ-1:VPC1:Subnet1Scaling Policy 2 (simple policy)
Min:2, Max:6
AZ, VPC/Subnet, ELB, Tags
AZ-2:VPC2:Subnet2
Scaling Policy 1 (with steps)
Alarm: HighCPUUtilization
Actions(Steps):
60 < value → add 2 Instances
80 < value → add 10% of group
30 > value → remove 2 Instances
warm up: 300 seconds
Alarm: HighLaytency
Action(only one):
300 < value → add 2 Instances
cool down: 300 seconds
AMI, Instance Type,
IAM Role, Security Group,
Key Pair, user-data,
Storage, Spot Price
Associate
⑦Auto ScalingのAction完了!
71
79. Tips
1. Auto Scaling を Auto Healingとして使う
2. Auto Scaling Policyの調整方法
3. スパイクアクセスに立ち向かう
4. スポットプールとAuto Scalingの設定は常に見なおそう
5. スポットフリートAPIのJSONパラメータを生成
6. 各種上限に注意
7. Serverless Architectureのコスト効率
84. 以下の考え方を元にやってみて細かく調整
1. Max Instances = ピーク時の必要インスタンス数
2. Min Instances = Max * (アイドルタイムReq数 / ピーク時Req数) + α
3. Threshold
High = ピーク時の平均CPU使用率
Low = 最初低めに設定して少しずつ上げてみる
(10%→5%ずつ上げて50%、など)
4. Cool down, Warm up period等
アプリやサーバ、初期化処理等の性質によるため一般化は難しい
インスタンスが起動と終了を短時間で繰り返してしまわないよう注意
無用な課金が発生してしまうかも
これらは経験則であり、絶対的な解ではありません
Auto Scaling Policyのパラメータチューニング
※CPU使用率を使うとして
84
99. request-spot-fleet APIのパラメータ
aws ec2 request-spot-fleet --spot-fleet-request-config { "IamFleetRole":
"arn:aws:iam::781603563322:role/fleet-role", "TargetCapacity": "100",
"SpotPrice": "0.03", "ValidFrom": "2015-09-15T00:56:19Z", "ValidUntil": "2016-
09-14T07:00:00Z", "TerminateInstancesWithExpiration": true,
"LaunchSpecifications": [ { "ImageId": "ami-0d4cfd66", "InstanceType":
"c3.large", "WeightedCapacity": 2, "SubnetId": "subnet-d0dc51fb" }, {
"ImageId": "ami-0d4cfd66", "InstanceType": "c3.large", "WeightedCapacity": 2,
"SubnetId": "subnet-64531413" }, { "ImageId": "ami-0d4cfd66", "InstanceType":
"c3.large", "WeightedCapacity": 2, "SubnetId": "subnet-0b1b8052" }, {
"ImageId": "ami-0d4cfd66", "InstanceType": "c3.xlarge", "WeightedCapacity": 4,
"SubnetId": "subnet-d0dc51fb" }, { "ImageId": "ami-0d4cfd66", "InstanceType":
"c3.xlarge", "WeightedCapacity": 4, "SubnetId": "subnet-64531413" }, {
"ImageId": "ami-0d4cfd66", "InstanceType": "c3.xlarge", "WeightedCapacity": 4,
"SubnetId": "subnet-0b1b8052" }, { "ImageId": "ami-0d4cfd66", "InstanceType":
"c3.4xlarge", "WeightedCapacity": 16, "SubnetId": "subnet-d0dc51fb" }, {
"ImageId": "ami-0d4cfd66", "InstanceType": "c3.4xlarge", "WeightedCapacity":
16, "SubnetId": "subnet-64531413" }, { "ImageId": "ami-0d4cfd66",
"InstanceType": "c3.4xlarge", "WeightedCapacity": 16, "SubnetId": "subnet-
0b1b8052" }, { "ImageId": "ami-0d4cfd66", "InstanceType": "c3.8xlarge",
"WeightedCapacity": 32, "SubnetId": "subnet-d0dc51fb" }, { "ImageId": "ami-
0d4cfd66", "InstanceType": "c3.8xlarge", "WeightedCapacity": 32, "SubnetId":
"subnet-64531413" }, { "ImageId": "ami-0d4cfd66", "InstanceType":
"c3.8xlarge", "WeightedCapacity": 32, "SubnetId": "subnet-0b1b8052" }, {
"ImageId": "ami-0d4cfd66", "InstanceType": "c3.2xlarge", "WeightedCapacity":
8, "SubnetId": "subnet-d0dc51fb" }, { "ImageId": "ami-0d4cfd66",
"InstanceType": "c3.2xlarge", "WeightedCapacity": 8, "SubnetId": "subnet-
64531413" }, { "ImageId": "ami-0d4cfd66", "InstanceType": "c3.2xlarge",
"WeightedCapacity": 8, "SubnetId": "subnet-0b1b8052" } ] }
99