LoginSignup
2
1

More than 1 year has passed since last update.

EC2,RDSの起動時間を設定する

Last updated at Posted at 2021-08-12

はじめに

AWS無料枠の関係でEC2、RDSの起動時間を制限したいなと思った時の備忘録。
どちらもCloudWatchを使用して対応します。

EC2の起動時間設定

EC2インスタンス停止

IAMロールの作成

①IAMコンソールからロールを作成
スクリーンショット 2021-08-06 16.33.05.png

②AWSサービス>EC2を選択>次のステップ

③AWS 管理ポリシーの AmazonSSMAutomationRole をアタッチ
スクリーンショット 2021-08-06 16.35.20.png

④ロール名を入力し作成

⑤作成したロールを選択し、「信頼関係」のタブから「信頼関係の編集」をクリックし、以下を入力

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "Service": "events.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

CloudWatchのイベントルールを作成

①CloudWatchコンソールのイベントから「ルールの作成」ボタンをクリック
スクリーンショット 2021-08-06 16.43.30.png

②イベントソースをスケジュールに設定し、Cron式を入力
今回の場合、日本時間で毎日23時に停止となる
参考:cron式

③ターゲット画面にて、"EC2 StopInstances API 呼び出し"を選択し、対象のインスタンスIDを設定。
既存のロールで先程作成したロールを選択

④ルールの名前を入力し、作成して完了

EC2インスタンス開始

CloudWatchのイベントルールを作成

①CloudWatchコンソールのイベントから「ルールの作成」ボタンをクリック
スクリーンショット 2021-08-06 16.51.56.png

②イベントソースをスケジュールに設定し、Cron式を入力
今回の場合、日本時間で毎日8時に停止となる

③ターゲット画面にて、"AWS-StartEC2Instance"を選択し、対象のインスタンスIDを設定。
既存のロールで先程作成したロールを選択

④ルールの名前を入力し、作成して完了

RDSの起動時間設定

ちなみに以下の記載があります。
DB インスタンスは最大 7 日間停止できます。
7 日後に DB インスタンスを手動で起動しなかった場合、DB インスタンスは自動的に起動されるため・・・

RDS停止の最大は7日間のようです。

参考:一時的に Amazon RDS DB インスタンスを停止する

RDSインスタンス停止

Lambdaの作成

①AWS Lambda>関数>関数の作成

②適当な関数名を入力し、ランタイムはPython3.7を選択、
アクセス権限:基本的な Lambda アクセス権限で新しいロールを作成 →関数の作成
スクリーンショット 2021-08-12 9.44.17.png

③作成後、トリガーを追加を押下
スクリーンショット 2021-08-12 10.18.37.png

④EventBridge(CloudWatch Events)を選択し、新規ルールの作成を選択
ルールタイプをスケジュール。スケジュール式にcronを設定。
画像の場合、毎日23時にインスタンスを停止となる。

スクリーンショット 2021-08-12 9.49.31.png

⑤追加を押下

⑥作成した関数のコードソースを開き、以下の内容に書き換え →Deployを押下

import boto3

def lambda_handler(event, context):
dbinstances = [RDS DB インスタンス識別子,RDS DB インスタンス識別子] rds = boto3.client(rds)
result = rds.stop_db_instance(DBInstanceIdentifier = dbinstance)
print(result)
return 0

スクリーンショット 2021-08-12 9.59.04.png

IAMロールの設定

①IAM管理画面>ロール にて、Lambdaの作成②で作成したロールを選択

②管理ポリシーに以下をアタッチ
・CloudWatchFullAccess
・AmazonRDSFullAccess

③これにてRDSインスタンスの停止設定が完了

RDSインスタンス開始

RDSインスタンス停止の設定手順と以下が異なるのみです。
④スケジュールのcron式の内容
⑥開始コードの内容

Lambdaの作成

①AWS Lambda>関数>関数の作成

②適当な関数名を入力し、ランタイムはPython3.7を選択、
アクセス権限:基本的な Lambda アクセス権限で新しいロールを作成 →関数の作成

③作成後、トリガーを追加を押下

④EventBridge(CloudWatch Events)を選択し、新規ルールの作成を選択
ルールタイプをスケジュール。スケジュール式にcronを設定。

⑤追加を押下

⑥作成した関数のコードソースを開き、以下の内容に書き換え →Deployを押下

import boto3

def lambda_handler(event, context):
dbinstances = [RDS DB インスタンス識別子,RDS DB インスタンス識別子] rds = boto3.client(rds)
result = rds.start_db_instance(DBInstanceIdentifier = dbinstance)
print(result)
return 0

IAMロールの設定

①IAM管理画面>ロール にて、Lambdaの作成②で作成したロールを選択

②管理ポリシーに以下をアタッチ
・CloudWatchFullAccess
・AmazonRDSFullAccess

③これにてRDSインスタンスの開始設定が完了

参考

【Lambda】EC2インスタンスやRDSの自動起動/停止設定を実現する
[AWS]Lambda で RDS の自動起動・自動停止を実装する
EC2インスタンスのスケジュール起動がお手軽に実現できるようになっていた!
EC2 インスタンスの起動と停止を自動化することは出来ますか?

2
1
1

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
1