AWSのLambdaでEC2自動起動・停止の関数を作成する手順を紹介します。業務時間内だけEC2を起動させるため、平日(土日祝と振り替え休日を除く)だけ処理が実行されるよう設定していきます。

Lambda関数の作成

・コンソール画面のLambdaにて、リージョンが「東京」であることを確認し「関数の作成」を選択



・ロールの項目にて「カスタムロールの作成」を選択



・ロールの作成画面が起動するので、ポリシードキュメントを表示し「編集」を選択 ※ロール名はそのままで大丈夫です。





・以下を参考にポリシードキュメントを編集 ※EC2インスタンスへの権限を追記

・ポリシードキュメントの編集が完了したら「許可」を選択



・関数の作成画面に戻り、各項目を入力したら「関数の作成」を選択 ※まずは自動起動の関数を作成します。



「名前」:任意(今回はStartFunctionとしました)

「ランタイム」:休日判定のプログラムを記述する言語(今回はNode.jsにしました)

「既存ロール」:先ほど作成したlambda_basic_executionを選択

休日判定の設定

・関数コード(index.js)を編集



・既存コードを削除し、以下コードをindex.jsに貼り付け ※【インスタンスID】を対象のIDに書き換えてください。

【引用】

・ゆるくつくる – stabuckyのブログ。|JavaScriptで休日を判定する関数

・ゆるくつくる – stabuckyのブログ。|JavaScriptで祝日を判定する関数


・コードを貼り付けたら「保存」を選択



関数実行トリガーの設定

・左側のトリガーリストから「CloudWatch Events」を選択



・トリガーの設定にて各項目を入力し「追加」を選択



「ルール」:新規ルールの作成を選択

「ルール名」:任意(今回はStartRuleとしました)

「ルールタイプ」:スケジュール式を選択

「スケジュール式」:月~金の8:00に起動する場合は以下となる

※Lambdaにて日本時刻を指定する場合、実行時刻からマイナス9時間して設定(起動させたい8:00から9時間マイナスすると前日の23時となり、曜日もひとつずれるため日曜~木曜を指定する必要がある)

・「保存」を選択



以上で自動起動関数の作成は完了です。

自動停止関数の作成

自動起動関数と同様に自動停止関数を作成します。設定内容はほぼ同じなので、異なる設定箇所だけ記載します。

1)各名称 ※「Start」とつけたものは「Stop」に変える等

2)index.jsの151行目「ec2.startInstances(params, function(err, data) {」を以下に変更

3)トリガー設定のcronスケジュール式を変更 ※例)月~金の22:00に停止させる場合は以下

まとめ

現状のLambdaでは処理実行の曜日は指定できても、祝日や振り替え休日を指定する機能はありません。なのでこういったプログラムを別途作成する必要があります。

今後、AWS環境や日本休日に変更があると、上記設定が正常に動作しない可能性があるため、使用する際は定期的に確認する必要があります。また設定については全て自己責任でお願いします。

よろしければTwitterのフォローをお願いします