47
ななななななななEC2 Auto Scaling なな なな (Takayuki Fuwa)

JAWS UG #19 なるほどわかった! Auto Scaling

Embed Size (px)

Citation preview

Page 1: JAWS UG #19 なるほどわかった! Auto Scaling

なるほどわかった!EC2 Auto Scaling

不破 崇行 (Takayuki Fuwa)

Page 2: JAWS UG #19 なるほどわかった! Auto Scaling

自己紹介不破 崇行 ( ふわ たかゆき )

• 札幌出身、函館育ち• 小学校から大学まで、函館で育つ

• 好きな AWS プロダクトは「 CloudWatch 」と「 CloudTrail 」

• 好きな食べ物は稲荷寿司と歌舞伎揚げ

• 好きな言語は PHP とアイヌ語 ( ユーカラ )• 好きなテレビ番組は「笑点」と「アタック 25 」

Page 3: JAWS UG #19 なるほどわかった! Auto Scaling

本日のおはなし

• Auto Scaling の概要• Auto Scaling のメリット• ユースケース• 使い方・設定方法• ハマりポイント• Auto Scaling の勘所

Page 4: JAWS UG #19 なるほどわかった! Auto Scaling

Auto Scaling の概要

Page 5: JAWS UG #19 なるほどわかった! Auto Scaling

Auto Scaling とは

• EC2 の機能の 1 つ• 「設定したタイミング」 ( トリガー ) に応じて EC2 インスタンスを 増やしたり減らしたり出来る機能

• 増やす:スケールアウト• 減らす:スケールイン

• クラウドサービスの真骨頂とも言える便利な機能

Page 6: JAWS UG #19 なるほどわかった! Auto Scaling

Auto Scaling のイメージ (Web サーバ )

この部分で、インスタンス数が増えたり減ったりする

Page 7: JAWS UG #19 なるほどわかった! Auto Scaling

Auto Scaling の仕組み

• AMI からインスタンスを ELB 配下に自動生成

• グループ内のインスタンス数を 事前に指定することで、 ELB 内の Healthy なインスタンス数 を維持させる

Availability Zoneap-northeast-1c

Auto scaling Group

Instance

Auto Scaling

Instance Instance Instance

Page 8: JAWS UG #19 なるほどわかった! Auto Scaling

Auto Scaling Group• スケールイン、スケールアウト する部分をグループ化するという概念• 「伸縮するカタマリ」とイメージ

してください

Availability Zoneap-northeast-1c

Auto scaling Group

Instance

Auto Scaling

Instance Instance Instance

Page 9: JAWS UG #19 なるほどわかった! Auto Scaling

Auto Scaling の利点は主に 3 つ

• アクセス数が増えて来た時だけインスタンス数を一時的に増やすことが出来るため、コストを抑えることが出来る

• 不測の事態が発生した場合 ( スパイク発生など ) に、ダウンタイムを可能な限り減らすことが出来る

• 事前に構成設定 (AMI や登録する ELB) を設定出来るため、スケールアウト時の設定が非常にスムーズ

• インスタンス数を設定するだけで AWS 側でインスタンス生成から ELB 登録まで自動でやってくれる

Page 10: JAWS UG #19 なるほどわかった! Auto Scaling

コストを抑えることが出来る

• ピーク時だけインスタンス数を増やせばいいので、コストを抑えることが出来る

• 予めピーク時を予測できれば、タイムスケジュールによるスケールアウトも出来る。

Page 11: JAWS UG #19 なるほどわかった! Auto Scaling

ELB 上のインスタンス維持にも使える

• ELB 上の AP サーバ台数が減少 ( 高負荷で死んでしまった等 ) の場合でも作動する。

• ELB によるヘルスチェックに失敗した場合、 terminate した上で作り直してくれる

Page 12: JAWS UG #19 なるほどわかった! Auto Scaling

実際の活用例:1社内システムの場合• グループウェアの場合、営業時間帯 ( 平日 ) のみアクセスが多い傾向に ある

• 夜間や休日もアクセスがあるので、インスタンスを止めることは出来ない

• この場合、「営業時間帯だけインスタンス数を増やし、それ以外の時間帯は最小限に抑える」を Auto Scaling で実現出来る

• コストカットに繋がる

0:00 24:009:00 18:00この時間帯だけ、インスタンス数を2 台にする

Page 13: JAWS UG #19 なるほどわかった! Auto Scaling

実際の活用例:2ニュースサイトの場合• ニュースサイトは急なアクセス ( スパイ

ク ) が発生した場合、インスタンス数を増やさないと対応出来ない

• Yahoo! ニュースなどに転載された場合、一気に 5 倍ぐらいアクセス数が増える場合がある

• スパイクの発生タイミングは予測が出来ないため、ロードアベレージや Nginx Active connections などの数値からスケールアウトさせる

Page 14: JAWS UG #19 なるほどわかった! Auto Scaling

Auto Scaling の使い方

Page 15: JAWS UG #19 なるほどわかった! Auto Scaling

今回想定するケース

• WordPress で構築したブログサイト• 通常は 1 日アクセス 30,000PV• たまに記事がヒットして 100,000PV ぐらいになる

• アフィリエイト収入に直結するので、「絶対に止めたくない」

Page 16: JAWS UG #19 なるほどわかった! Auto Scaling

Auto Scaling のイメージ (Web サーバ )

Page 17: JAWS UG #19 なるほどわかった! Auto Scaling

構成

• AP サーバ /NFS サーバを構成する EC2 は t2.nano• 最低 1 台は ELB 上にインスタンスが存在するようにする• CPU 使用率が 80% を超えたら最大 3 台までスケールアウトする

• 今回は WordPress サイトを KUSANAGI で構築

Page 18: JAWS UG #19 なるほどわかった! Auto Scaling

設定に先だって考えるポイント

スケールアウト、スケールインの条件・タイミングシステム維持に必要な最低台数現時点で、「どれぐらいアクセスが来るのか」を予測おさいふの中身

Page 19: JAWS UG #19 なるほどわかった! Auto Scaling

スケールアウト、スケールインの条件・タイミング• CloudWatch からの アラート• 時間帯による条件設定

Page 20: JAWS UG #19 なるほどわかった! Auto Scaling

CloudWatch を使用したスケールアウト / イン• アラートドリブンな設定が

出来るため、「 CPU 利用率が 80% を超えた場合」などで設定出来る

• カスタムスクリプトを組めば Nginx の active connections 数で決めることも出来る

CloudWatch Auto Scaling

Instance

Instance

InstanceAuto scaling

Group

CloudWatch からのアラート発令がトリガーとなり、

スケールアウト開始

起動設定に従い、インスタンスを生成する。

自動的に ELB にも登録してくれる

Page 21: JAWS UG #19 なるほどわかった! Auto Scaling

時間帯によるスケールアウト / イン

• 予め時間帯を決めて、スケールイン / アウトを設定出来る

Page 22: JAWS UG #19 なるほどわかった! Auto Scaling

スケールアウトの考え方CloudWatch を使用した場合

• Nginx の Active connections 値を見て判断する場合

Active connections 数が 100 を超えたらスケールアウト発動

Page 23: JAWS UG #19 なるほどわかった! Auto Scaling

設定方法

• 設定するものは大きく分けて 2 つ• 起動設定• Auto Scaling グループ

• 事前に AMI が生成されていることが前提

Page 24: JAWS UG #19 なるほどわかった! Auto Scaling

起動設定を作成する

• 「起動設定」画面から、「起動設定の作成」を押下する

Page 25: JAWS UG #19 なるほどわかった! Auto Scaling

起動設定を作成する• 「マイ AMI 」から、自分で作成した AMI を選択する。

• ここで選択した AMI からインスタンスが生成される

Page 26: JAWS UG #19 なるほどわかった! Auto Scaling

起動設定を作成する• インスタンスサイズを指定する

Page 27: JAWS UG #19 なるほどわかった! Auto Scaling

起動設定を作成する•起動設定の名前や IAM ロールを設定

• この起動設定は、 AMI差し替えリリースをする際にコピーして使うので、名前に日付をつけると便利 ( 例: 20160620_jawsug-demo)

Page 28: JAWS UG #19 なるほどわかった! Auto Scaling

起動設定を作成する• EBS ストレージの設定をする

• 「合わせて削除」に必ずチェックを入れること• スケールインをする時に EBS だけ削除されずに残る場合がある

Page 29: JAWS UG #19 なるほどわかった! Auto Scaling

起動設定を作成する• セキュリティグループの設定をする

Page 30: JAWS UG #19 なるほどわかった! Auto Scaling

起動設定を作成する

• SSH ログインで使用する公開鍵を指定する• Ansible などで使うことを前提に考える

Page 31: JAWS UG #19 なるほどわかった! Auto Scaling

起動設定を作成する

• SSH ログインで使用する公開鍵を指定する• Ansible などで使うことを前提に考える

Page 32: JAWS UG #19 なるほどわかった! Auto Scaling

起動設定を作成する

• これで起動設定作成は完了。そのまま、「この起動設定を利用してAuto Scaling グループを作成する」で Auto Scaling グループを作成する

Page 33: JAWS UG #19 なるほどわかった! Auto Scaling

Auto Scaling グループを作成する

• 台数、所属させる VPC/ サブネット、 ELB を設定する

Page 34: JAWS UG #19 なるほどわかった! Auto Scaling

Auto Scaling グループを作成する

• 「高度な設定」を開き、登録する ELB を指定する。• ヘルスチェックのタイプを” ELB” にすること

Page 35: JAWS UG #19 なるほどわかった! Auto Scaling

Auto Scaling グループを作成する

• スケールアウト / インさせるタイミングを設定する

Page 36: JAWS UG #19 なるほどわかった! Auto Scaling

設定のポイント

AMI 作成時は「再起動しないで作成」でも場合によっては大丈夫DB や wp-content(共有ストレージ ) が別になっている場合、変動するファイ

ルはログデータ程度なので、問題ないログデータは CloudWatch Logs に入れると幸せになる

AMI を作成するインスタンスと Auto Scaling グループは別々のアベイラビリティゾーンにする

Page 37: JAWS UG #19 なるほどわかった! Auto Scaling

Auto Scaling のイメージ

Page 38: JAWS UG #19 なるほどわかった! Auto Scaling

ハマりポイント

Page 39: JAWS UG #19 なるほどわかった! Auto Scaling

ハマりポイント

•早めにスケールアウトさせる• 高負荷になってからスケールアウトしても手遅れになる場合がある• スケールアウト条件は厳しめ (早めに閾値を超えるように )• ELB のヘルスチェックをゆるめにする事

• 一度起動したインスタンスは、 1 時間は稼働させ続ける• すぐ終了させても、 1 時間単位での課金であるため、課金額は変わらない

Page 40: JAWS UG #19 なるほどわかった! Auto Scaling

ハマりポイント

• スケールアウト完了まで、 5 分〜 10 分ぐらいかかる• インスタンス生成から ELB ヘルスチェック通過まで待つ必要がある• このため、 5 分〜 10 分のこの間は高負荷で持ちこたえる必要がある

• 高負荷に耐えられず、 ELB 上のインスタンスが全滅した場合、サービス停止になる

Page 41: JAWS UG #19 なるほどわかった! Auto Scaling

ハマりポイント

•必ず成功するとは限らないので注意StatusCode: Failed

StatusMessage: We currently do not have sufficient m4.large capacity in the Availability Zone you requested (ap-northeast-1a). Our system will be working on provisioning additional capacity. You can currently get m4.large capacity by not specifying an Availability Zone in your request or choosing ap-northeast-1c. Launching EC2 instance failed.

( 現在、東京リージョンのアベイラビリティゾーンにキャパシティが無いため m4.large インスタンスを作ることが出来ませんでした )

 → 要するに、インスタンスの売り切れ

Page 42: JAWS UG #19 なるほどわかった! Auto Scaling

インスタンスが売り切れた場合

• アベイラビリティーゾーンを変える• インスタンスサイズを変える

• 「起動設定」を作り直し、 Auto Scaling グループに再設定する。

Page 43: JAWS UG #19 なるほどわかった! Auto Scaling

Auto Scaling が向かない場合

•完全に傾向が掴めず、スパイクが激しい場合• この場合、ゆとりを持って ELB 上のインスタンス数を確保する• ELB はスパイクに結構弱い。

Page 44: JAWS UG #19 なるほどわかった! Auto Scaling

まとめ

•オートスケールは何かと便利• スケールアウトする予定が無くても、不測の事態に備えて AMI

を用意しておくこと。• スケールアウト基準は厳しく

• 利用状況を考え、ある程度予測することが大事

Page 45: JAWS UG #19 なるほどわかった! Auto Scaling

Auto Scaling とは

• EC2 の機能の 1 つ• 「設定したタイミング」 ( トリガー ) に応じて EC2 インスタンスを 増やしたり減らしたり出来る機能

• 増やす:スケール___• 減らす:スケール___

• クラウドサービスの真骨頂とも言える便利な機能

Page 46: JAWS UG #19 なるほどわかった! Auto Scaling

Auto Scaling とは

• EC2 の機能の 1 つ• 「設定したタイミング」 ( トリガー ) に応じて EC2 インスタンスを 増やしたり減らしたり出来る機能

• 増やす:スケールアウト• 減らす:スケールイン

• クラウドサービスの真骨頂とも言える便利な機能

Page 47: JAWS UG #19 なるほどわかった! Auto Scaling

質問あれば

•懇親会にいますので、その時に捕まえて下さい。• Facebook で適当に質問投げてもらってもいいです