AWS Lambdaを使ってEC2を定時起動・停止してみた

Pocket

こんにちは!Tamaです!

今回はコスト削減のためインスタンスを定時で起動し定時で停止するLambda関数を作成したいと思います。
Auto Scalingでも定時起動停止は可能ですが今回はLambdaからでの設定を紹介します。

準備

AWS CLI とLambda(Python)からcliを使用する際に必要なモジュールをインストールします。

こちらを参考にさせて頂きました。
AWS Lambda Python で AWS CLI を実行する方法

Lambdaで実行するファイルの作成

Lambdaで実行するファイルを作成します。
先程aws-cliをインストールしたディレクトリに移動します。

実行ファイルはCLIを利用するので簡単です。

開始の場合

停止の場合

最後にzipファイルを生成し、S3にアップロードします。

Lambda関数の作成

Lambda関数を作成します。
「Create a Lambda function」をクリックします。

blueprintではコードをS3より読み込むためBlank Functionを選択します。

トリガーを時刻にするためCloudWatch Events – Scheduleを選択します。

時刻の設定をcron文で行いますがUTC時間になるため注意が必要です。午前9時に起動したい場合は0時になります。

構文について詳しくはAWSのドキュメントを参考にしてください。
参考URL:http://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/events/ScheduledEvents.html

月~金 9:00の場合cron(0 0 ? * 2-6 *)になります。

Python2.7を選択し、S3にアップロードしておいたlambda_function.zipを選択またはzipファイルをアップロードします。
また、roleにはEC2起動停止の権限を持ったIAM roleを選択します。

Advanced settingsはデフォルトではTimeoutが3秒のため、30秒程度に設定しました。

これでLambda functionが作成できました!

時間になると有無を言わさず停止してしまうので注意が必要かと思います。

私の場合EC2を使い終わった後停止するときは下記のコマンドを該当のインスタンスにエイリアス登録して使っています。

朝は自動でEC2が起動、帰る時にコマンドで停止、もしくは自動停止されるのでコスト削減になるためおすすめです!

今回は以上になります!
お疲れさまでした!

またお会いしましょう!