Saving time on an EC2 instance I have started playing around with AWS (privately). I have one free tier Amazon Linux 2 VM running right now, which serves a "fat" service (in a docker container) to myself and one other person. It has an Elastic IP associated with it.

We use the service 1-2 hours every few days.

Is there, in the rather large AWS zoo of services, a smart way to have the VM shut down when not in use, and come up when we need it? "Need it" could be measured by counting network traffic, i.e. I could in principle write a little script which uses tcpdump or something like that to watch for 15 minutes of no traffic on the port of the service and then somehow trigger a shutdown; but how would we get it up again?

I am happy to change it in any way necessary; but the Docker image has to be considered a black box for all intents and purposes. There is one docker volume (realised as a directory in the home of the ec2-user right now) if that makes a difference. Timing is not critical.

So far I'm doing shutdowns/startups through the EC2 Management Console, but would like to end that.
AWS has something built in called cloudwatch alarms that can handle the basics.
You could also use a Lambda Function. Give it access to the ASG, and then have cloudwatch configured so once the min amount of traffic starts coming in it sends an Event to the Lambda.
{
  &quot;ASG&quot;: &quot;MyASGName&quot;
  &quot;Action&quot;: &quot;Start&quot;
}

And once the traffic goes below the min.
{
  &quot;ASG&quot;: &quot;MyASGName&quot;
  &quot;Action&quot;: &quot;Stop&quot;
}

You could also build on this over time to control Vertical and Horizontal scaling.
EDIT: I actually prefer the Lambda. I always seem to run into these weird use cases where we can't shut down any of the instances, we have to do some math or investigation on which instances to shut down. In these situations a python lambda running boto3 is really helpful.