まーぽんって誰がつけたの?

iOS→Scala→インフラなおじさん技術メモ

AWS Spot Fleetでインフラ作ったら安すぎたので本当は内緒にしておきたい話

会社で昔発表したやつを汎用的な感じにして残しておきます。

EC2のお値段が性能そのままに8割お安くなりましたという話

Spot Fleet前のAWSのECSでクラスター構成について

  • クラスターのEC2インスタンスはオンデマンド(定価)のautoscaling
  • Docker化でスケールアップ・インが容易に
  • 増強したい場合はautoscalingでクラスタサイズを増やすだけでOK😎

問題点

  • Rolling updateなのでデプロイ時に空き容量が必要
  • 動的ポートマッピングができなかったので1インスタンスに同じサービスが入れない
  • クラスタのインスタンスを多めにしておく必要がある😇

動的ポートマッピング

  • AWSのApplication Load Balancer or Network Load Balncer という新しいタイプのELBならサポートしている
  • terraform module化して雛形作った
  • これで一つのインスタンスに複数のサービスが入れるようになった

EC2インスタンスの価格見直し

  • 今はオンデマンド(定価)で買っている
  • spotインスタンスというオークションのような形式で割安(約80%OFF)で変える仕組み
  • ただしspotインスタンスは入札価格以下になると問答無用でシャットダウン!!
  • spot fleetという複数のスポットインスタンスに入札できる仕組みがある
  • 死んでもすぐに復活しやすいコンテナにはぴったり!!

spot instanceの仕組み

f:id:masato47744:20180124223932p:plain

ここでクイズです。この場合いくらになるでしょう?

f:id:masato47744:20180124224049p:plain

こうなります

f:id:masato47744:20180124224104p:plain

入札してる価格より低かったらそれを払うだけでよい

おこぼれが減ったら

3番目移行の人は問答無用でシャットダウン

f:id:masato47744:20180124224120p:plain

おこぼれがなくなったら

全員シャットダウン!!!

f:id:masato47744:20180124224134p:plain

耐障害性を増やすには

  • 落ちる時には2分前に通知がくるので5秒ごとに見張るスクリプトを追加
  • 落ちたタイミングでコンテナを他のインスタンスに逃す
  • ざっくりこんなイメージの処理内容
while sleep 5; do
 if [ -z $(curl -Isf http://169.254.169.254/latest/meta-data/spot/termination-time)];
 then
   /bin/false
 else
   # draining
 fi
done

分散投資

人気がない安定した銘柄に入札

f:id:masato47744:20180124224217p:plain

人気銘柄

f:id:masato47744:20180124224248p:plain

まだオンデマンドで消耗してるの?