CloudWatchとオートスケール
2014/10/29のAWS webinarを聞きながら取った雑なメモです。。。
オートスケールは初めて知った話がいくつかありました。
■CloudWatch
・CloudWatch Logsがリリースされた。EC2上のログを監視できる。
・CloudFrontの監視ができるようになった。(見るときはN.Virgniaに切り替える)
・INSUFFICIENT_DATA は、データが取得できないケースに発生する。設定直後やEC2が停止している場合などによく見る。
・アクションは、通知(SNS,SQS等)、オートスケール、EC2停止またはTerminateの3つある。
EC2停止またはTerminateは、例としては何時間以上起動したら等で使える。
・カスタムメトリックスは、CLIからでしか設定できない。
・メモリやディスク使用率などOSからしか取得できない項目をCLIで流し込む。CLIのサンプルがある。
http://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/DeveloperGuide/mon-scripts-perl.html
http://ec2-downloads.s3.amazonaws.com/cloudwatch-samples/CloudWatchMonitoringScripts-v1.1.0.zip
・監視間隔は1分が最小。
・同時APIコールは、スロットリングがある。(実行回数の上限や間隔??)
カスタムメトリクスの登録や、別のシステムからの状態の取得などにおいて、同時API
コール数が多くなってくるとスロットリングが発生する。
・カスタムメトリックスって需要あんのかね。(個人的な意見です)
■オートスケール
・オートスケールは、Min,Max,VPC,AZ,ELB(複数可)などを設定する。
・オートスケールでAMIを起動するときは、EC2を起動する時と同様の設定が可能。(userdataなど)
・CooldownPeriodは、オートスケールを実行する間隔。(重要)
・オートスケールで、MinとMaxを同じ値にしておくと、その台数をキープする。
・オートスケールGroup内のEC2をまとめてCloudWatchで監視できる。
・スケジュールベース(時間)でのオートスケール設定も可能。CLIからのみ設定可能。
cronチックに定期的に実行も可能。
・インスタンス増減タイミング
Min以下、CloudWactchで設定したオートスケールGroup、スケジュール、手動でコマンド実行
(コマンドでUnhealthyにすることができる。テスト時に使える。)
・ライフサイクルフック (New)
オートスケールGroupから除外されたあとに実行されるEC2のTerminateを一時的に、保留にできる。
待機時間は最大48時間
通知対象は、SNS、SQS
・ライフサイクルアクション
Auto Scaling Groupそれぞれに対して、ライフサイクルアクションのセットを設定できます。メッセージには、グループ(SQSキューやSNSのトピック)の通知対象にインスタンスがPending状態かTerminating状態に入るたびに送信されます。アプリケーションが、メッセージをハンドリングし、適切や初期化処理や削除処理を構成することができます。
メッセージが送信された後、インスタンスは適切に、 Pending:Wait か Terminating:Waitという状態になります。一度、インスタンスがこの状態に入ったら、アプリケーションは制御するために60分間与えられます。もし、その制御処理が60分以上かかるのであれば、Auto Scalingに“ハートビート”を発行することで、アプリケーションは時間を延ばすことができます。時間(既存60分、または拡張時間)が切れた場合、インスタンスは待ち状態から解放されます。
インスタンスが準備または削除された後に、アプリケーションはAuto Scaling にライフサイクルが完了したこと、次の状態に遷移したこと、を伝える必要があります。これを行うには、インスタンスにPending:Proceed か Terminating:Proceedを設定します。
→ 説明長い!
・インスタンスを減らすときの注意点
オートスケール配下のEC2は、随時Teminateされる可能性がある。
ライフサイクルフックを使えば、Terminateされる際に、ログ転送やバックアップを取る事ができる。(起動時も同じ)
・TerminationPolicy
① AZの中で最も古いLaunchConfigurationを使っているインスタンス
② 同条件の場合は、次の課金が始まるタイミングが最も近いインスタンス
③ さらに同条件の場合は、ランダム
の順でTerminate対象が選定される。
ただし、上記以外カスタムでの設定可能。
・オートスケールですぐに台数を増やしたい場合は、CLIのオプションで実現可能。
(--no-honor-cooldown)
・負荷ベースよりも、スケジュールベースか手動でオートスケールさせるのが良い。特にピークが読める場合。
基本はスケジュールベースで、プラスで負荷ベースもあり。
(t2.microはCPUがバーストし易いので負荷増を捉えにくい)
・特定のインスタンスをTerminate対象から外すことは出来ない。やりたいならオートスケールから外す。
・ライフサイクルの話がややこしい。