Scaling2014年08月19日せーの(269)156156件のシェア(すこし話題の記事)この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。こんにちは、せーのです。Instanceとご紹介してきましたが、実はもう一つ新機能があります。それが今回ご紹介する「LifeCycleHook」機能です。Scalingにおけるインスタンスのライフサイクルをフックする、という機能です。それでは詳しく見ていきましょう。Scalingのインスタンスの「ライフサイクル」、つまりインスタンスが生まれてから死ぬまでの状態遷移はどのようなものでしょう。Groupに追加するまでの状態を「Pending」といいます。Groupから除外された後、実際に破棄されるまでの間の状態が存在します。これを「Terminating」といいます。Groupから除外(Terminating)→インスタンス破棄(Terminating)→破棄完了(Terminated)→削除となります。LifeCycleHookはこの「Pending」「Terminating」の状態の時にユーザーが制御処理をフックして独自の処理、例えばソフトウェアのインストールや初期化などを行う機能です。LifeCycleHookの仕組みPending時LifeCycleHookを使用するには具体的にはどうするのでしょう。Pending時の動きを見てみます。LifeCycleHookを使うには1.SNSのTopicかSQSのQueueを作る。3.LifeCycleHookを作る。いうステップを踏みます。LifeCycleHook機能を使うと、インスタンスがPendingになった時に1で作成したSNSやSQSに通知が飛びます。Roleの作成なんですね。通知が飛ぶとLifeCycleはHookされ、状態が「Pending:Wait」という状態になります。ユーザーが何か処理するのを「待つ」という状態ですね。この間にユーザーは初期処理を済ませます。ユーザーが初期処理を済ませると後に紹介するCompleteLifecycleActionというコマンドをコールします。Groupはユーザーが処理を済ませた事を知り、状態を「Pending:Proceed」に進めます。後はいつも通り待っていればインスタンスの起動が終了します。Serverをキックするようなワークステーション用のEC2を作っておいてエレガントに自動化、なんてこともできますね!Terminating時Terminating時も動きはPending時と変わりません。SQSかSNSに向けて通知が行われ、状態が「Terminating:Wait」に変わって「待ち」状態になります。その間にユーザーは終了処理、例えばログを保管したり、何かしらの障害でインスタンスが除外された場合は、その原因を分析したりします。その後CompleteLifecycleActionをコールして状態を「Termination:Proceed」に動かしてインスタンスを破棄します。APIから動かすことができます。LifeCycleHookに関わる3つのコマンドを見ていきましょう。Heartbeat(後述)のタイムアウト時間の設定。Pending時のhook(autoscaling:EC2_INSTANCE_LAUNCHING)かTerminating時のhook(autoscaling:EC2_INSTANCE_TERMINATING)か※新規登録時は必須。アップデート時にはオプション。通知用のSNS/SQSのARN※新規登録時は必須。アップデート時にはオプション。RoleのARN※新規登録時は必須。アップデート時にはオプション。LifeCycleHookのコアとなるコマンド、PutLifecycleHookです。上にあった「3.LifeCycleHookを作る。」は具体的にはこのコマンドをコールすることを言います。Heartbeatについて説明します。LifeCycleHookが作成されて状態がWaitになるのは60分間です。60分を過ぎるとDefaultResultで指定された方法に従って破棄されるか、起動されるか自動的に選択されます。初期処理が60分に収まらない場合には後述するRecordLifecycleActionHeartbeatコマンドをコールして待ち時間を延長します。HeartbeatTimeoutとは、その延長する待ち時間をどれくらいにするかを指定するものです。hookがSNS/SQSに通知した際に入っているUUID。同じ名前で入ってくる。LifeCycleHook名(必須)CompleteLifecycleActionはユーザーが初期処理/終了処理が終わった際にLifeCycleHookに対して「終わったよ―」とお知らせして、対象インスタンスの状態をProceedに進めてもらうためにコールするコマンドです。ここで重要なのはLifecycleActionTokenです。ScalingにPending状態、またはTerminating状態のインスタンスが出来るとARNを登録してあるSNS/SQSに通知が飛びます。SNSのTopicをメール通知にしているとメールが飛んでくるわけです。LifecycleActionTokenはそのメールの文面やTopicに入っているUUIDのことなのです。ここにはその通知先に書かれているUUIDを指定することで、どのhookでPending:Wait/Terminating:Waitが起きたかを特定します。hookがSNS/SQSに通知した際に入っているUUID。同じ名前で入ってくる。LifeCycleHook名(必須)RecordLifecycleActionHeartbeatはPutLifecycleHookで説明した60分の待機時間では間に合わない場合に更にタイムアウトを延ばすためのアクションです。Group、通知されたUUID、対象のLifeCycleHook名がパラメータです。UUIDが必要だ、ということは順番的にはPutLifecycleHookを叩いてレスポンスが返って来てから叩く、ということですね。やってみようでは実際にやってみたいと思います。手順が色々あるので、順を追って1つずつご紹介致しますね。Groupを作るここは至って普通です。デフォルトとしてAZ-a,AZ-cに1台ずつ作ります。SNSのTopicを作る次にhookを通知するSNSを作ります。これはSQSのqueueでも構いません。今回は簡単にメール通知させたいと思います。後で使うので作ったらARNを確認しておきましょう。名前はなんでも良いのですが今回は「notificationAccessRole」としました。Access」というサービスを選ぶことです。Roleを作った後は、こちらも後で使うのでARNを確認しておきます。PutLifecycleHookでLifeCycleHookを作るいよいよ本命、LifeCycleHookを作ります。PutLifecycleHookコマンドを叩きます。Scaleさせてみます。Groupからmaxを8に、desireを4に変更します。Scaleが開始します。LifeCycleHookが効いているとここでnotificationが飛んできます。今回はメールを設定したのでメールが飛んでくることになります。このメールのLifecycleActionTokenを後で使うわけです。インスタンスの状態を見てみましょう。「Pending:Wait」になっている事が確認できますでしょうか。この状態でInstances上はrunningになっているのでSSH接続ができます。Chef等で初期設定をしてみましょう。初期設定が終わったらcomplete-lifecycle-actionでPendingの状態を進めます。CONTINUEインスタンスの状態を見てみましょう。コマンドを流した1つのインスタンスの状態が「Pending:Proceed」に進みました。このまま少し待っていると「InService」に進みます。ちなみにもう一つのインスタンスのlifecycle-action-resultをABANDONにするとインスタンスの状態は「Terminating」になります。Heartbeatさせてみる最後にHeartbeatを登録してみます。hookTestこれで60分過ぎても延長されます。まとめいかがでしたか。思ったより書くことが多くて長くなってしまいました。ここまで読んで頂いてありがとうございます。Scaleさせたり拡張時のログを縮退前に取得する時に是非お使いください。2,694,574せーのと申します。北海道にて犬2匹とともにのんびりコードを書いたりしています。最近は触れるデバイスをネットにつなげて遊ぶのにはまっています。記事yamato90EC2のオートスケールが複数インスタンスタイプの混在指定に対応、廉価なスポット利用が実現しやすくなりました。リモート】クラスメソッドの会社説明会を開催しますクラスメソッドでは、AWS・AI・ビッグデータ・モバイルなどの技術職や営業のメンバーとして一緒にお仕事をする仲間を大募集しています。#cmdevio新型コロナウイルスの感染拡大を受け、本イベントを延期させていただくことになりました(開催時期未定)。お申し込みいただいた皆様には大変申し訳ございませんが、何卒ご理解いただけますようよろしくお願いいたします。AWSについてライトに色んな情報交換をしましょう。カフェ店長のオカノです。今日はオフィスに用があるので、通勤ラッシュを避けて出社しました。この子は新メンバーのさめくんです。在宅勤務が推奨されているのでオフィスが閑散としており、すこしさみしそうです。使いたいときの注意点を書きました。本が出ていたので読んでみたところよかったので紹介させていただきます。