AWSコンソールでの対応方法
AWSコンソールで起動停止スケジュールを設定したい場合、AWSの公式サイトでは以下の三つの方法を紹介しています。
https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/Stop_Start.html
- AWS Lambda および Amazon EventBridge ルールを使用する。
- AWS でインスタンススケジューラを使用する。
- Amazon EC2 Auto Scalingを利用する。
Auto Scalingは純粋な起動停止スケジュールというよりは、EC2で運用しているシステムの負荷に応じて、適切な台数を起動させておくというものなので、今回の要件からは外れます。また、インスタンススケジューラもまるで一つのサービスのように見えるのですが、実は何個かサービスを組み合わせて起動停止スケジュールを実現するシステムのことを「インスタンススケジューラ」と表現しています。こちらも利用するには少し手間なので、今回は三つの中で比較的実装の手間が少ない「AWS Lambda および Amazon EventBridge ルールを使用する」について見ていきましょう。
公式に記載されている大まかな手順については、以下の通りです。
- Lambda関数用のカスタムAWS Identity and Access Management (IAM) ポリシーとIAMロールを作成
- EC2 インスタンスを停止および開始する Lambda 関数を作成
- Lambda 関数をテスト
- スケジュールに従って関数を実行する EventBridge スケジュールを作成
https://repost.aws/ja/knowledge-center/start-stop-lambda-eventbridge
それでは公式の手順に従い、Lambda用にIAMロールとIAMポリシーを作成していきます。
IAMポリシーの作成
- アクセス許可の設定を設定
作成するIAMポリシーの内容は以下になります。今回は公式が紹介しているものをそのまま利用します。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": "arn:aws:logs:*:*:*" }, { "Effect": "Allow", "Action": [ "ec2:Start*", "ec2:Stop*" ], "Resource": "*" } ] }
続いてIAMロールを作成します。
IAMロールの作成
- 信頼されたエンティティとしてLamdaを設定
- 許可の追加で先ほど作成したポリシーを選択
停止用のLamdaを作成
- 関数名、ランタイム、アクセス権限を設定し関数を作成
- コードを設定
コードの詳細は以下の通りです。公式のコードそのままでは使えないので、コード内で停止したいEC2とそのEC2がデプロイされているリージョンを指定します。
import boto3 region = 'EC2のあるリージョン' instances = ['対称のインスタンスID', '対称のインスタンスID'] ec2 = boto3.client('ec2', region_name=region) def lambda_handler(event, context): ec2.stop_instances(InstanceIds=instances) print('stopped your instances: ' + str(instances))
同様にして、起動のLambdaを作成します。
Lambdaを定期実行するEventBridgeを設定
- EventBridgeのルール名やルールタイプを設定
- 毎日0時に停止のLambdaを実行するようスケジュールを設定
- 実行するLambdaを選択
同様にして、起動用のEventBridgeを設定します
やりたいことは単純だけど、実現しようとすると意外と手間
公式の手順を見て皆さんはどう思いましたか?細かい部分は省略していますが、個人的には意外と手間だな…と思いました。起動・停止するLambdaを作って、そのLambdaが利用するIAMロールを作って、定期実行するためにEventBridgeを設定して…と、結構やらないといけないことがあります。利用するサービスも複数あるので、メンテナンスやアップデートもちょっと手間ではないでしょうか?
弊社のサービスでは、そんなお悩みを解決する手段をご用意しています!
クラウドポータルとは
弊社が提供するサービスで、クラウドポータルというものがあります。クラウドポータルは、AWSの運用を管理・自動化することを目的として弊社が独自に開発したツールです。前述したようなEC2起動停止のスケジュール設定をしたいけど、設定自体が結構手間、使っているサービスがよくわからない等AWS運用管理のよくある悩みを解決します。
https://biz.nuro.jp/service/managed-cloud-portal/feature/
では、そのクラウドポータルを使うとどういった手順になるのか、を次でご紹介させていただきます。
クラウドポータルの設定手順
- EC2一覧ページでスケジュール設定したいEC2のスケジュールボタンをクリック
- スケジュールの名前、アクション(起動、停止、停止・起動)、曜日、時間を設定
起動スケジュールも同様の手順で設定いただくことが可能です。また、起動停止する時間や曜日を変更する際も簡単に実施いただくことが可能で、メンテナンスも楽々です。
いかがでしょうか?一つのアクションにつき、一項目のみ設定いただくことでスケジュールが作成できるので、公式の手順よりずいぶん簡単にスケジュール設定ができるかと思います。
他にもスナップショットのスケジュールやリストアの方法等、クラウドポータルではAWSコンソールより簡単に設定できるものがたくさんあるので、次回以降でまたそちらの手順をご紹介できればと思います。