※この投稿は答えが書いてるわけじゃなく、みんなどうやってるのかなぁ?と思いながら書いてます。
ec2 auto scalingを使って、ec2が万が一落ちても自動復旧してくれないかなぁと思ったのですが、ec2 auto scaling自体はどうやらAMIからec2を立ち上げるくらいしかしてくれないことがわかりました。
この新規で立ち上がったec2をどうやって最新状態にするのか?以下3つのパターンを考えてみました
パターン1: そもそも最新の状態のAMIを常に用意しておく
多分一番多いパターン。
デプロイスクリプトに「AMIの作成」と「auto scalingで指定しているAMI-idの変更」を組み込んでおけばよいのではないかと考えられる。
しかし、runningのインスタンスからAMI作成しようとすると瞬断しちゃうので、みんなAMI作成用のインスタンスを毎回立ち上げてAMI作成してるんだろうか?
パターン2: ec2が起動したときにプロビジョニング用の外部APIを叩くスクリプトを仕込んだAMIを用意しておくパターン
ec2の起動スクリプトに、自身をプロビジョニングするためのAPIを叩くスクリプトを用意しておくパターン。
「自身をプロビジョニングするためのAPI」はansble towerやjenkinsが多いんだと思う。
環境変数で、外部からAPIのurl(及びパラメータ)を操作できるようにしておけば用意するAMIはサービスに関係なく1つだけでよい。一方で立ち上がるまでに時間がかかってしまう
パターン3: ec2が起動時のnotificationを利用してプロビジョニング
パターン2と酷似するが、起動スクリプトではなく、auto-scalingが発火するnotificationをSNSで受け取ってlambdaなどでapiを叩くパターン
メリデメはパターン2と同じ
みなさんどうしてます?
いずれにしても、結構めんどくさいなぁというのが所感でした。
もう開発が止まっていて構成も変わらないようなサービスはパターン1が絶対にいいと思うんですが、更新が頻繁なサービスはどうしてるんでしょうか?
他にもパターンあるよ。うちはこうしてるよなど教えていただきたいです。
よろしくお願いします