雑多なインフラエンジニア日記

技術ブログでっす~

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対象から外すことは出来ない。やりたいならオートスケールから外す。

・ライフサイクルの話がややこしい。