In this article, We are going to perform We have covered Creating IAM Policy in AWS, Creating IAM Role and Attach Permission Policies, Lambda Function to Start and Stop RDS Instance and Creating CloudWatch Events to start and Stop RDS instance.
Table of Contents
Introduction
If we want to reduce AWS cost then we can stop AWS resources in off hours and weekends. here we are going to cover how to start and stop Postgres RDS instance using lambda function and scheduling cron job in cloudwatch for same.
Prerequisites/AWS Services Used
- Postgres or other RDS Instance
- IAM Policy and Role
- Lambda Functions
- CloudWatch Events
Below are steps to start and stop RDS instance using Lambda function
Step #1: Creating IAM Policy in AWS
We have to create IAM Policy and Role which contains execution permission to RDS instance and cloudwatch which we have to attach to Lambda function.
To create IAM policy and Role Login to AWS Management console and search “iam” in search box.
You will redirected to IAM dashboard, click on Policies at left side.
Click on Create Policy
Select JSON and paste the below policy into it and click on Tags.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": "arn:aws:logs:*:*:*"
},
{
"Effect": "Allow",
"Action": [
"rds:StopDBInstance",
"rds:StartDBInstance"
],
"Resource": "*"
}
]
}
Add tags if you want and Click on Review
Give Name and Description to IAM Policy and click on Create Policy.
Step #2: Creating IAM Role and Attach Permission Policies
Next We have to create role and attaching policy which we have created above to it.
To create role navigate to IAM and click on Roles on left side and click on Create Role.
Select AWS service ,select Lambda and click on Permissions.
Attach existing policy which created above and click on Tags.
Give the tag.
Enter Role name and Role Description and click on Create Role.
Step #3: Lambda Function to Start and Stop RDS Instance
Below are steps Lambda function to start and stop RDS Instance.
Step #3.1: Lambda Function to Stop RDS Instance
Next Search Lambda and click on Create function.
In Author from scratch section give function name, Select Runtime as Python 3.7.
Under Permissions section, select use an existing role, in existing role add role which we have create above and click on Create function .
Copy the below Python Lambda function code to stop RDS Instance , change RDS instance name and region according to your and click on deploy.
import boto3
region = 'ap-south-1'
rdsInstances = ['demo']
def lambda_handler(event, context):
rds = boto3.client('rds', region_name=region)
for i in rdsInstances:
print('Stoping RDS '+ i)
rds.stop_db_instance(DBInstanceIdentifier=i)
print (' stopped your RDS instances: ' + str(rdsInstances))
Testing Lambda function to Stop RDS Instance.
Click on Lambda function, Go to Test, click on Configure test Events.
Give Event name and click on Create.
Then click on Test. Now if everything is configures properly, Now RDS instance will stop.
Step #4: Creating CloudWatch Events to start and Stop RDS instance
Click on cloudwatch, you will be navigated to CloudWatch Console, Under Events , click Rules, Click on Create Rule.
Here you option Event Pattern and Schedule, Click on Schedule you can use Fixed rate or cron Expression.
If we want to schedule using Cron Expression, schedule job using UTC Time and Add Target , Select Lambda function and Click on
Configure Details. Now RDS instance stop as per cron expression time.
Step #3.2: Lambda Function to Start RDS Instance
Use Same IAM Policies and Role.
Create a New Lambda function to start RDS Instance and configure new test events, Below is Lambda function code to start RDS Instance, change RDS instance name and region according to your.
import boto3
region = 'ap-south-1'
rdsInstances = ['demo']
def lambda_handler(event, context):
rds = boto3.client('rds', region_name=region)
for i in rdsInstances:
print('Starting RDS '+ i)
rds.start_db_instance(DBInstanceIdentifier=i)
print (' started your RDS instances: ' + str(rdsInstances))
Next create same CloudWatch Events and Rule as shown above to start RDS instance as per CloudWatch Rule.
Conclusion:
We have covered Creating IAM Policy in AWS, Creating IAM Role and Attach Permission Policies, Lambda Function to Start and Stop RDS Instance and Creating CloudWatch Events to start and Stop RDS instance.
Related Articles:
How to Create Ubuntu Instance in AWS [7 Steps]
How to connect to AWS EC2 Instance using MobaXTerm
How to Enable Password Authentication for AWS EC2
How to Connect EC2 Instance using Putty
How to Transfer files to AWS Instance using WinSCP [2 Steps]
How to Create AWS DocumentDB and Connect [3 steps]
How to Install MySQL 5.7 on Amazon Linux 2
AWS Create Instance from snapshot
AWS Create EC2 Instance from Snapshot
How to Create IAM User in AWS Step by Step
How to create Linux EC2 Instance in AWS
Reference: