An Interest In:
Web News this Week
- April 2, 2024
- April 1, 2024
- March 31, 2024
- March 30, 2024
- March 29, 2024
- March 28, 2024
- March 27, 2024
January 24, 2022 01:24 pm GMT
Original Link: https://dev.to/fanmixco/how-to-schedule-ec2-instances-easily-dnh
How to schedule (start and stop) EC2 instances easily
Everyone would like to schedule EC2 instances and save a couple of bucks. Today, I'm bringing you a small Python that can help you. The steps are the following ones:
1) Create a lambda function called: ec2_scheduler
2) Copy and paste the following code:
import boto3import osimport jsonregion = os.environ['REGION']ec2 = boto3.client('ec2', region_name=region)instances = []def lambda_handler(event, context): action = event['Action'] response = ec2.describe_instances(Filters=[{'Name' : 'instance-state-name','Values' : [action]}, {'Name': 'tag-key', 'Values': ['auto-scheduled']}]) reservations = response['Reservations'] for reservation in reservations: for instance in reservation['Instances']: instanceId = instance['InstanceId'] for tag in instance['Tags']: if tag['Key'] == 'auto-scheduled' and tag['Value'] == 'true': instances.append(instanceId) if (action == 'stopped'): if (len(instances) > 0): ec2.start_instances(InstanceIds=instances) else if (len(instances) > 0): ec2.stop_instances(InstanceIds=instances)
3) Set a tag to your EC2 instance called: auto-scheduled that has a value assigned as true.
4) Add a new Policy in the configuration and permission section of your Lambda that contains:
{ "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*", "ec2:Describe*" ], "Resource": "*" } ]}
5) Schedule your Lambda as triggers with a cron expressions like these ones:
- For starting: cron(0 6 ? * MON-FRI *)
- For stopping: cron(0 16 ? * MON-FRI *)
6) Set a JSON that contains the following expression to know if it's starting or stopping:
- For starting:
{ "Action": "stopped"}
- For stopping:
{ "Action": "running"}
And that's all!
Cover credits:
Original Link: https://dev.to/fanmixco/how-to-schedule-ec2-instances-easily-dnh
Share this article:
Tweet
View Full Article
Dev To
An online community for sharing and discovering great ideas, having debates, and making friendsMore About this Source Visit Dev To