この記事は最終更新日から1年以上が経過しています。
はじめに
今私のチームではビルドサーバを利用しています。
でも、ビルドサーバって営業時間外って基本的に使わないよね〜ってことで、夜間は停止したいと思っていました。
でも、毎日AWSのコンソールに入って起動したり、停止したりするのは面倒ですよね?
そこで “EC2 自動停止” とかぐぐってみると Lambda と CloudWatch でできるとあったので、やってみました。
Lambda 設定
- “Lambda 関数の作成” から実行する関数の定義をします
- “設計図の選択”でブランク関数を選択し次へ
- “トリガーの設定” は、ここでは何も設定せずに次へ(あとでやります)
- “関数の設定” では以下の項目を各種設定します。
- 名前
- 説明
- 設定する関数の言語
- “Lambda 関数のコード” にEC2 インスタンスを起動するコードを入力します
- “Lambda 関数ハンドラおよびロール” で実行に必要なロールをアタッチします。
- 設定内容を確認して関数を作成します。
起動時のコードは以下のようになります。
import boto3 instanceId = 'i-0000000123456789e' instance = boto3.resource('ec2').Instance(instanceId) statusDict = {'pending' : 0, 'running' :16, 'shutting-down':32, 'terminated' :48, 'stopping' :64, 'stopped' :80 } def instanceStart(): state = instance.state stateCode = state['Code'] if stateCode == statusDict['stopped']: resp= instance.start() if resp['ResponseMetadata']['HTTPStatusCode'] != 200: raise Exception('ec2 start error', resp) else: raise Exception('ec2 start error', 'Instance [' + instanceId + '] is already running') return 'success' def lambda_handler(event, context): try: return instanceStart() except Exception as e: print e |
以下実行に必要なロールです
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": "arn:aws:logs:*:*:*" }, { "Effect": "Allow", "Action": [ "ec2:StartInstances", "ec2:DescribeInstances" ], "Resource": "*" } ] } |
CloudWatch の設定
CloudWatch で Lambda を発火させるための設定を行います。
1. CloudWatch で “ルールの作成” をします。
2. “ルールの作成” でスケジュールを選択しCron式を選択します。
3. Cron式で、起動したい時間を指定します。
* 起動する時間は平日の 9:30 としました
4. “ターゲット” で先程作成した関数名を指定します。
5. “ルールの詳細を設定する” で以下の項目を入れてルールを作成します。
* 名前
* 説明
* 状態(これは有効のまま)
30 0 ? * MON-FRI * |
以上で、平日の9:30 にビルドサーバが起動するようになりました。
停止は ‘instance.start()’ を ‘instance.stop()’ にすれば可能です。
現在は、平日の21:30に停止するようにしています。
この記事を書いた人
-
新卒3年目で脱新人を目指してます。
フロントに興味を持ち始めた今日このごろ。
趣味は 麻雀 プログラミング 音楽。
運動不足を感じているため、ダンスを始めようかと思っています。
最近書いた記事
- 2019.06.26コンテナイメージの縮小
- 2019.05.27Chromeのユーザ切り替えで複数のAWS環境の管理をわかりやすくする
- 2019.04.15ECRのライフサイクルポリシー
- 2019.03.29KongでOAuth2の認証手順