Your Web News in One Place

Help Webnuz

Referal links:

Sign up for GreenGeeks web hosting
January 24, 2022 01:24 pm GMT

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!

sponsor me

Cover credits:

https://tridentsys.net/howto-schedule-ec2/


Original Link: https://dev.to/fanmixco/how-to-schedule-ec2-instances-easily-dnh

Share this article:    Share on Facebook
View Full Article

Dev To

An online community for sharing and discovering great ideas, having debates, and making friends

More About this Source Visit Dev To