はじめに
AWS無料枠の関係でEC2、RDSの起動時間を制限したいなと思った時の備忘録。
どちらもCloudWatchを使用して対応します。
EC2の起動時間設定
EC2インスタンス停止
IAMロールの作成
②AWSサービス>EC2を選択>次のステップ
③AWS 管理ポリシーの AmazonSSMAutomationRole をアタッチ
④ロール名を入力し作成
⑤作成したロールを選択し、「信頼関係」のタブから「信頼関係の編集」をクリックし、以下を入力
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"Service": "events.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
CloudWatchのイベントルールを作成
①CloudWatchコンソールのイベントから「ルールの作成」ボタンをクリック
②イベントソースをスケジュールに設定し、Cron式を入力
今回の場合、日本時間で毎日23時に停止となる
参考:cron式
③ターゲット画面にて、"EC2 StopInstances API 呼び出し"を選択し、対象のインスタンスIDを設定。
既存のロールで先程作成したロールを選択
④ルールの名前を入力し、作成して完了
EC2インスタンス開始
CloudWatchのイベントルールを作成
①CloudWatchコンソールのイベントから「ルールの作成」ボタンをクリック
②イベントソースをスケジュールに設定し、Cron式を入力
今回の場合、日本時間で毎日8時に停止となる
③ターゲット画面にて、"AWS-StartEC2Instance"を選択し、対象のインスタンスIDを設定。
既存のロールで先程作成したロールを選択
④ルールの名前を入力し、作成して完了
RDSの起動時間設定
ちなみに以下の記載があります。
DB インスタンスは最大 7 日間停止できます。 7 日後に DB インスタンスを手動で起動しなかった場合、DB インスタンスは自動的に起動されるため・・・
RDS停止の最大は7日間のようです。
参考:一時的に Amazon RDS DB インスタンスを停止する
RDSインスタンス停止
Lambdaの作成
①AWS Lambda>関数>関数の作成
②適当な関数名を入力し、ランタイムはPython3.7を選択、
アクセス権限:基本的な Lambda アクセス権限で新しいロールを作成 →関数の作成
④EventBridge(CloudWatch Events)を選択し、新規ルールの作成を選択
ルールタイプをスケジュール。スケジュール式にcronを設定。
画像の場合、毎日23時にインスタンスを停止となる。
⑤追加を押下
⑥作成した関数のコードソースを開き、以下の内容に書き換え →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
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 インスタンスの起動と停止を自動化することは出来ますか?