EC2のオートスケーリングのライフサイクル管理をやってみたいとは前から思ってるんだが…。
- SQSでPending:Waitの通知を受けてプロビジョニングして完了通知をするっちう流れの仕組み上どうしてもSQSをポーリングする人が欲しくなるから中々面倒なのよね。
- その為に1個インスタンス立てるのもアホらしいし、EC2自身にSQSをポーリングさせると復数同時にスケールアウトしたときに自分以外のインスタンス用のメッセージを受け取っちゃうことも考える必要あったりとかやっぱし何かと面倒。
- LambdaがSQS受けられるようになったからそいつにPending:Waitの受信をさせれば良いんじゃね?
- プロビジョニング自体はEC2のuserdataで自分でやらせてるからその終了タイミングで自分で通知させたいんだよな。
- あれ?EC2インスタンスの方で
LifecycleActionToken
の値知らないと通知出来なくね?これLambda側は知ってるけどどうやってEC2に伝えよう。 - Lambdaが受けた通知内容をEC2に教えたいんだけどそのためだけにDynamoDBとかS3とか別のDBに一時保存するとコストもかかるし面倒だよな。できるだけ余計なリソース作らずに完結させたい。
- Lambdaで受けた
LifecycleActionToken
を対象のEC2インスタンスにタグとして付けとけばストレージ不要で値渡せるんじゃね? - EC2はセットアップ終わったら自分のインスタンスに付いてるタグから
LifecycleActionToken
の値を取得してCompleteLifecycleActionで成否を自分で通知すればよさそう!
てことで、この構成だと最小限のリソースで管理不要でライフサイクルフックが利用できそうだなってことであとで試すメモ。