2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【AWS】Beanstalk上で動くEC2を夜間停止させる

Last updated at Posted at 2020-04-23

目的

  • Beanstalkで動く環境を日中だけ動作させ、夜間はコスト削減のために停止させたい

概要

  • CloudWatchのイベント > ルールから、ラムダを実行する際にCron式でスケジュールを設定できるが、、Beanstalkで管理されているので、例えラムダでEC2を停止させても復活したりする
  • かといってBeanstalkそのものを止めたり削除・復帰させるのは無駄な動作っぽい
  • Beanstalkでスケジュール設定できるので、環境立ち上げ時に.ebextensionに設定を記載することで、スケジューリングによるインスタンスの停止・起動が可能!

方法

  • .ebextensionに下記の内容を追記するだけでOK
ebextension_scheduling.config

      // スケジューリング自体を開始させる日付を指定(現在日時より前ならOK)
      - namespace: aws:autoscaling:scheduledaction
        option_name: StartTime
        resource_name: ScheduledEC2Start
        value: "2020-04-01T04:07:2Z"

      // スケジューリング自体を停止させる日付を指定(適当に1000年後とかにしてます)
      - namespace: aws:autoscaling:scheduledaction
        option_name: EndTime
        resource_name: ScheduledEC2Start
        value: "2999-04-28T04:07:2Z"

      // インスタンスのマックス数を3に指定   
      - namespace: aws:autoscaling:scheduledaction
        option_name: MaxSize
        resource_name: ScheduledEC2Start
        value: "3"

      // インスタンスのミニマム数を2に指定   
      - namespace: aws:autoscaling:scheduledaction
        option_name: MinSize
        resource_name: ScheduledEC2Start
        value: "2"

      // 期待キャパシティを指定(今回は2にしてます)
      - namespace: aws:autoscaling:scheduledaction
        option_name: DesiredCapacity
        resource_name: ScheduledEC2Start
        value: "2"

      // スケジューリングを発動させる時間をCron式で指定
      - namespace: aws:autoscaling:scheduledaction
        option_name: Recurrence
        resource_name: ScheduledEC2Start
        value: "00 01 * * 1-6"

      // スケジューリング自体を開始させる日付を指定(現在日時より前ならOK)
      - namespace: aws:autoscaling:scheduledaction
        option_name: StartTime
        resource_name: ScheduledEC2Stop
        value: "2020-04-01T04:07:2Z"

      // スケジューリング自体を停止させる日付を指定(適当に1000年ごとかにしてます)
      - namespace: aws:autoscaling:scheduledaction
        option_name: EndTime
        resource_name: ScheduledEC2Stop
        value: "2999-04-28T04:07:2Z"

      // インスタンスのマックス数を0に指定   
      - namespace: aws:autoscaling:scheduledaction
        option_name: MaxSize
        resource_name: ScheduledEC2Stop
        value: "0"
   
      // インスタンスのミニマム数を0に指定   
      - namespace: aws:autoscaling:scheduledaction
        option_name: MinSize
        resource_name: ScheduledEC2Stop
        value: "0"

      // 期待キャパシティを0に指定
      - namespace: aws:autoscaling:scheduledaction
        option_name: DesiredCapacity
        resource_name: ScheduledEC2Stop
        value: "0"

      // スケジューリングを発動させる時間をCron式で指定
      - namespace: aws:autoscaling:scheduledaction
        option_name: Recurrence
        resource_name: ScheduledEC2Stop
        value: "00 11 * * 0-5"

説明

  • この処理はオートスケーリング を利用したものなので、意味合いとしては停止時=インスタンスが0にスケーリングすることと同義
  • 起動時は最大値3で最小値2、つまりスケーリングで最大3つまでインスタンスが増加するように指定
  • 停止時は最大値・最小値・キャパシティ全てで0を指定しているので、=EC2全ての停止ということになる。

備考

  • 今回はDBは外だしで環境を作ったので、EC2のみの停止にしていますが、DBもBeanstalkで作った際に設定できるのかが気になりました
  • 基本的に自由度が少なくなるので、Beanstalk使うときにDBも一緒に作ることはあまりないかと思いますが、、、
  • ちなみに外出しのDBはラムダをCloudWatchのルールでスケジューリングして設定しているので、EC2もDBも同じ時間で夜間停止させるという処理が可能です
  • 開発・STG環境でのコスト削減に役立つのではないかとおもいっます
2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?