{"id":40,"date":"2026-10-17T16:45:28","date_gmt":"2026-10-17T16:45:28","guid":{"rendered":"https:\/\/smartcloudspend.com\/?p=40"},"modified":"2026-10-30T12:04:07","modified_gmt":"2026-10-30T12:04:07","slug":"cloud-cost-reduction-automate-aws-resource-shutdown-non-working-hours","status":"publish","type":"post","link":"https:\/\/smartcloudspend.com\/?p=40","title":{"rendered":"How to Automate Resource Shutdown During Non-Working Hours in AWS"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><em>By Ra\u00fal P\u00e9rez \u00b7<\/em> <em>Last updated: October 2026 \u00b7 Reading time: 14 min<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Development, test and staging environments rarely need to run at 3 a.m. on a Sunday, yet most teams leave them on around the clock. A schedule that turns them off outside working hours is one of the safest savings in AWS, because it cannot affect production.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This guide compares the three main ways to automate it (EventBridge Scheduler, Instance Scheduler on AWS and Auto Scaling scheduled actions), gives you working code, and covers the traps that make teams save less than they expected.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Key Takeaways<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>A 50-hour work week means about 70% less compute runtime<\/strong> than running 168 hours.<\/li>\n\n\n\n<li><strong>EventBridge Scheduler can call the EC2 and RDS APIs directly.<\/strong> No Lambda function is needed for fixed lists of resources.<\/li>\n\n\n\n<li><strong>Use tags, not hard-coded IDs,<\/strong> when your fleet changes. Instance Scheduler on AWS or a small Lambda handle that.<\/li>\n\n\n\n<li><strong>Stopped instances still pay for EBS.<\/strong> Scheduling saves compute only.<\/li>\n\n\n\n<li><strong>If a Savings Plan or Reserved Instance covers the instance, stopping it may not lower your bill.<\/strong> Check before you count the savings.<\/li>\n<\/ul>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><strong>[FIGURE 1: insert file <code>aws-shutdown-scheduling-architecture.svg<\/code>]<\/strong> <em>Alt text:<\/em> &#8220;Three ways to schedule AWS shutdowns: EventBridge Scheduler, Instance Scheduler on AWS and Auto Scaling scheduled actions, all targeting tagged non-production resources&#8221; <em>Caption:<\/em> &#8220;Pick the trigger that matches how your fleet is managed.&#8221;<\/p>\n<\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\">How Much Can You Save?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Compute is billed while an instance is running. A week has 168 hours, so the saving depends on how many hours you actually need.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><th>Hours on per week<\/th><th>Share of the week<\/th><th>Compute runtime saved<\/th><\/tr><tr><td>40 (8 h x 5 days)<\/td><td>23.8%<\/td><td><strong>76%<\/strong><\/td><\/tr><tr><td>50 (10 h x 5 days)<\/td><td>29.8%<\/td><td><strong>70%<\/strong><\/td><\/tr><tr><td>60 (12 h x 5 days)<\/td><td>35.7%<\/td><td><strong>64%<\/strong><\/td><\/tr><tr><td>168 (always on)<\/td><td>100%<\/td><td>0%<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">What Stopping Does and Does Not Save<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Before you build anything, know the rules:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>EBS volumes keep billing<\/strong> while an instance is stopped. You save compute, not storage.<\/li>\n\n\n\n<li><strong>Public IPv4 addresses keep billing.<\/strong> Since February 2024, AWS charges $0.005 per hour per address. An Elastic IP stays attached to a stopped instance, and you still pay for it.<\/li>\n\n\n\n<li><strong>Instance store data is lost<\/strong> on stop. Only use schedules for EBS-backed instances.<\/li>\n\n\n\n<li><strong>A non-Elastic public IP changes<\/strong> when the instance restarts. Use DNS names, not raw IPs.<\/li>\n\n\n\n<li><strong>RDS restarts itself.<\/strong> If you do not start a stopped RDS DB instance manually, AWS automatically starts it after seven consecutive days. Your schedule should handle that, or you will pay for databases you thought were off.<\/li>\n\n\n\n<li><strong>Commitments change the math.<\/strong> If a Savings Plan or Reserved Instance covers the usage, you pay the commitment whether the instance runs or not. Stopping only saves money if other usage can absorb that coverage. See our guide to Reserved Instances vs Savings Plans.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Step 0: Decide What Is Safe to Stop<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Start small and explicit. A good rule is <strong>opt-in by tag<\/strong>: nothing is scheduled unless someone tagged it.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Tag candidates with <code>Schedule=office-hours<\/code> (and an <code>owner<\/code> tag).<\/li>\n\n\n\n<li>Exclude anything that serves customers, runs batch jobs overnight, or has dependencies outside working hours (cron jobs, nightly ETL, backup windows).<\/li>\n\n\n\n<li>Check CloudWatch for activity between 20:00 and 07:00 before you commit to a schedule.<\/li>\n\n\n\n<li>Agree the schedule with the owning team. A silent shutdown breaks trust fast.<\/li>\n<\/ol>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"683\" src=\"https:\/\/smartcloudspend.com\/wp-content\/uploads\/2026\/10\/image-6-1024x683.png\" alt=\"\" class=\"wp-image-43\" srcset=\"https:\/\/smartcloudspend.com\/wp-content\/uploads\/2026\/10\/image-6-1024x683.png 1024w, https:\/\/smartcloudspend.com\/wp-content\/uploads\/2026\/10\/image-6-300x200.png 300w, https:\/\/smartcloudspend.com\/wp-content\/uploads\/2026\/10\/image-6-768x512.png 768w, https:\/\/smartcloudspend.com\/wp-content\/uploads\/2026\/10\/image-6-1536x1024.png 1536w, https:\/\/smartcloudspend.com\/wp-content\/uploads\/2026\/10\/image-6.png 1621w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n<\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\">Option 1: EventBridge Scheduler (No Lambda)<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Amazon EventBridge Scheduler can call the EC2 <code>StartInstances<\/code> and <code>StopInstances<\/code> APIs directly through its &#8220;universal target.&#8221; That means no function to write, deploy or patch. It also supports time zones and adjusts for daylight saving time automatically.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Best for:<\/strong> a small, stable list of instances. <strong>Limitation:<\/strong> the target takes <strong>explicit instance IDs<\/strong>. It does not select by tag, so a changing fleet needs Option 2 or 3.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Step 1: create an IAM role<\/strong> that Scheduler can assume. The trust policy:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>{\n  \"Version\": \"2012-10-17\",\n  \"Statement\": &#91;{\n    \"Effect\": \"Allow\",\n    \"Principal\": { \"Service\": \"scheduler.amazonaws.com\" },\n    \"Action\": \"sts:AssumeRole\"\n  }]\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Step 2: attach a least-privilege permissions policy.<\/strong> The tag condition acts as a safety net: even a wrong instance ID cannot stop an instance that is not tagged for scheduling.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>{\n  \"Version\": \"2012-10-17\",\n  \"Statement\": &#91;{\n    \"Effect\": \"Allow\",\n    \"Action\": &#91;\"ec2:StartInstances\", \"ec2:StopInstances\"],\n    \"Resource\": \"arn:aws:ec2:eu-west-1:123456789012:instance\/*\",\n    \"Condition\": {\n      \"StringEquals\": { \"aws:ResourceTag\/Schedule\": \"office-hours\" }\n    }\n  }]\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Step 3: create the stop schedule<\/strong> (Monday to Friday, 19:00 in your time zone):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>aws scheduler create-schedule \\\n  --name stop-dev-instances \\\n  --schedule-expression \"cron(0 19 ? * MON-FRI *)\" \\\n  --schedule-expression-timezone \"Europe\/Madrid\" \\\n  --flexible-time-window Mode=OFF \\\n  --target '{\n    \"Arn\": \"arn:aws:scheduler:::aws-sdk:ec2:stopInstances\",\n    \"RoleArn\": \"arn:aws:iam::123456789012:role\/scheduler-ec2-start-stop\",\n    \"Input\": \"{\\\"InstanceIds\\\":&#91;\\\"i-0123456789abcdef0\\\"]}\"\n  }'<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Step 4: create the start schedule<\/strong> the same way, with <code>cron(0 8 ? * MON-FRI *)<\/code> and the target <code>arn:aws:scheduler:::aws-sdk:ec2:startInstances<\/code>.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"681\" src=\"https:\/\/smartcloudspend.com\/wp-content\/uploads\/2026\/10\/image-7-1024x681.png\" alt=\"\" class=\"wp-image-44\" srcset=\"https:\/\/smartcloudspend.com\/wp-content\/uploads\/2026\/10\/image-7-1024x681.png 1024w, https:\/\/smartcloudspend.com\/wp-content\/uploads\/2026\/10\/image-7-300x200.png 300w, https:\/\/smartcloudspend.com\/wp-content\/uploads\/2026\/10\/image-7-767x510.png 767w, https:\/\/smartcloudspend.com\/wp-content\/uploads\/2026\/10\/image-7-1536x1022.png 1536w, https:\/\/smartcloudspend.com\/wp-content\/uploads\/2026\/10\/image-7.png 1619w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Databases:<\/strong> the same approach works with <code>arn:aws:scheduler:::aws-sdk:rds:stopDBInstance<\/code> (and <code>startDBInstance<\/code>), or the <code>DBCluster<\/code> versions for Aurora, with matching <code>rds:<\/code> permissions. RDS stop has restrictions depending on engine and configuration, so check the current AWS documentation. Remember the seven-day auto-restart.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>aws rds stop-db-instance --db-instance-identifier dev-db<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Option 2: Instance Scheduler on AWS (Tag-Driven)<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Instance Scheduler on AWS is an official AWS Solution deployed with CloudFormation. It uses resource tags and Lambda to start and stop EC2 instances, Auto Scaling groups and RDS instances on schedules you define, across multiple regions and accounts. It can also use Systems Manager maintenance windows and supports hibernation for EC2.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Best for:<\/strong> many instances, several teams, multiple accounts, or fleets that change often.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>How it works:<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Deploy the solution from the AWS Solutions Library (CloudFormation or CDK).<\/li>\n\n\n\n<li>Define <strong>schedules and periods<\/strong> with the included CLI or the configuration table. It also lets you estimate savings for a schedule.<\/li>\n\n\n\n<li>Tag resources with the tag key you configured (by default <code>Schedule<\/code>) and the schedule name as the value, for example <code>Schedule=office-hours<\/code>.<\/li>\n\n\n\n<li>The scheduler checks tagged resources on a regular interval and starts or stops them to match.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Trade-offs:<\/strong> it is more moving parts than Option 1, and the solution itself has a small running cost. AWS publishes an estimate in its implementation guide, so check it for your region and number of accounts.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Option 3: Auto Scaling Scheduled Actions<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">If the workload already runs in an Auto Scaling group, you do not need to stop individual instances. Scale the group to zero at night:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Night: scale to zero\naws autoscaling put-scheduled-update-group-action \\\n  --auto-scaling-group-name dev-asg \\\n  --scheduled-action-name night-off \\\n  --recurrence \"0 19 * * MON-FRI\" \\\n  --time-zone \"Europe\/Madrid\" \\\n  --min-size 0 --max-size 0 --desired-capacity 0\n\n# Morning: restore\naws autoscaling put-scheduled-update-group-action \\\n  --auto-scaling-group-name dev-asg \\\n  --scheduled-action-name morning-on \\\n  --recurrence \"0 8 * * MON-FRI\" \\\n  --time-zone \"Europe\/Madrid\" \\\n  --min-size 1 --max-size 4 --desired-capacity 1<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Best for:<\/strong> stateless, replaceable instances. Scaling in terminates instances, so anything stored on them must live elsewhere.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Option 4: A Small Lambda Function (Custom Logic)<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">If you need custom rules (skip a team on release week, notify Slack first, handle an unusual tag scheme), a short Lambda is flexible. This version stops or starts every instance tagged <code>Schedule=office-hours<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import boto3\n\nREGION = \"eu-west-1\"\nTAG_KEY, TAG_VALUE = \"Schedule\", \"office-hours\"\nec2 = boto3.client(\"ec2\", region_name=REGION)\n\ndef instance_ids(state):\n    ids = &#91;]\n    paginator = ec2.get_paginator(\"describe_instances\")\n    for page in paginator.paginate(Filters=&#91;\n        {\"Name\": f\"tag:{TAG_KEY}\", \"Values\": &#91;TAG_VALUE]},\n        {\"Name\": \"instance-state-name\", \"Values\": &#91;state]},\n    ]):\n        for reservation in page&#91;\"Reservations\"]:\n            ids.extend(i&#91;\"InstanceId\"] for i in reservation&#91;\"Instances\"])\n    return ids\n\ndef handler(event, context):\n    action = event.get(\"action\")\n    if action not in (\"start\", \"stop\"):\n        raise ValueError(\"event must contain action: start or stop\")\n\n    if action == \"stop\":\n        ids = instance_ids(\"running\")\n        if ids:\n            ec2.stop_instances(InstanceIds=ids)\n    else:\n        ids = instance_ids(\"stopped\")\n        if ids:\n            ec2.start_instances(InstanceIds=ids)\n\n    print(f\"{action}: {ids}\")\n    return {\"action\": action, \"instances\": ids}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Trigger it from EventBridge Scheduler with the input <code>{\"action\": \"stop\"}<\/code> at 19:00 and <code>{\"action\": \"start\"}<\/code> at 08:00. Give the function role only <code>ec2:DescribeInstances<\/code>, <code>ec2:StartInstances<\/code> and <code>ec2:StopInstances<\/code>, and add the same tag condition as in Option 1.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Which Option Should You Use?<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><th>Situation<\/th><th>Recommended option<\/th><\/tr><tr><td>A handful of fixed instances<\/td><td>EventBridge Scheduler (direct API)<\/td><\/tr><tr><td>Many instances, several teams, multiple accounts<\/td><td>Instance Scheduler on AWS<\/td><\/tr><tr><td>Fleet managed by Auto Scaling groups<\/td><td>Scheduled scaling actions<\/td><\/tr><tr><td>Custom rules or notifications<\/td><td>Lambda triggered by EventBridge Scheduler<\/td><\/tr><tr><td>Databases (RDS, Aurora)<\/td><td>EventBridge Scheduler or Instance Scheduler<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Safety Practices<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Pilot first.<\/strong> Schedule one non-critical instance for a week before rolling out.<\/li>\n\n\n\n<li><strong>Stagger the start.<\/strong> Databases first, then application servers, so dependencies are ready.<\/li>\n\n\n\n<li><strong>Alert on failures.<\/strong> Send EventBridge Scheduler failures or Lambda errors to SNS or your chat tool.<\/li>\n\n\n\n<li><strong>Provide an override.<\/strong> A tag such as <code>Schedule=always-on<\/code> or a documented request path prevents shadow IT workarounds.<\/li>\n\n\n\n<li><strong>Keep production out.<\/strong> Use account separation and the IAM tag condition so a mistake cannot reach production.<\/li>\n\n\n\n<li><strong>Watch for restart failures.<\/strong> If AWS lacks capacity for the instance type at start time, the start can fail. Instance Scheduler can retry with alternate instance types.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Measure the Savings<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Do not trust estimates. Measure.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>In Cost Explorer, filter by the <code>Schedule<\/code> tag (activate it as a cost allocation tag first).<\/li>\n\n\n\n<li>Compare EC2 running hours and cost for the four weeks before and after.<\/li>\n\n\n\n<li>Separate compute from EBS and public IPv4, so you can see what scheduling did and did not change.<\/li>\n<\/ol>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1618\" height=\"1080\" src=\"https:\/\/smartcloudspend.com\/wp-content\/uploads\/2026\/10\/image-8.png\" alt=\"\" class=\"wp-image-45\" srcset=\"https:\/\/smartcloudspend.com\/wp-content\/uploads\/2026\/10\/image-8.png 1618w, https:\/\/smartcloudspend.com\/wp-content\/uploads\/2026\/10\/image-8-300x200.png 300w, https:\/\/smartcloudspend.com\/wp-content\/uploads\/2026\/10\/image-8-767x512.png 767w, https:\/\/smartcloudspend.com\/wp-content\/uploads\/2026\/10\/image-8-1024x684.png 1024w, https:\/\/smartcloudspend.com\/wp-content\/uploads\/2026\/10\/image-8-1536x1025.png 1536w\" sizes=\"auto, (max-width: 1618px) 100vw, 1618px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n<\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\">Common Mistakes<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Expecting EBS savings.<\/strong> Stopped instances still pay for their volumes. Remove orphaned ones with our guide to eliminating unattached EBS volumes and idle IPs.<\/li>\n\n\n\n<li><strong>Counting savings on committed instances.<\/strong> A Savings Plan or RI still bills whether the instance runs or not.<\/li>\n\n\n\n<li><strong>Forgetting the RDS seven-day restart.<\/strong><\/li>\n\n\n\n<li><strong>Hard-coding instance IDs<\/strong> in a fleet that changes weekly.<\/li>\n\n\n\n<li><strong>Ignoring time zones.<\/strong> Use the scheduler&#8217;s time zone setting, not UTC math in your head.<\/li>\n\n\n\n<li><strong>Stopping things with overnight jobs.<\/strong> Check CloudWatch before you choose the hours.<\/li>\n\n\n\n<li><strong>No communication.<\/strong> Tell teams what will be stopped, when, and how to override.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Final Thoughts<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Shutting down non-production resources outside working hours is simple, low-risk and fast to measure. For a few fixed instances, EventBridge Scheduler with a direct API target is the least work. For a larger or changing fleet, use Instance Scheduler on AWS or a tag-driven Lambda. Combine it with cleanup of orphaned storage, rightsizing and, last, commitments, as described in our guide to reducing AWS EC2 costs without affecting performance.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">FAQ<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Does stopping an EC2 instance stop all charges?<\/strong> No. Compute charges stop, but attached EBS volumes and public IPv4 addresses keep billing.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Can EventBridge Scheduler stop instances by tag?<\/strong> Not directly. The universal target needs explicit instance IDs. For tag-based scheduling, use Instance Scheduler on AWS or a Lambda function.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>What happens to an RDS instance I stop?<\/strong> It stays stopped for up to seven consecutive days, after which AWS starts it automatically. Re-stop it with a schedule if you want it to stay off.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Will my instance keep its public IP?<\/strong> Only if it has an Elastic IP. Otherwise the public IP changes on restart.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Is Instance Scheduler on AWS free?<\/strong> The solution itself has no license fee, but it runs on AWS resources (such as Lambda and DynamoDB) that have a small cost. See the AWS implementation guide for an estimate.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>By Ra\u00fal P\u00e9rez \u00b7 Last updated: October 2026 \u00b7 Reading time: 14 min Development, test and staging environments rarely need [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":87,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[6],"tags":[],"class_list":["post-40","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-cloud-cost-reduction"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.8 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Automate AWS Resource Shutdown Outside Working Hours<\/title>\n<meta name=\"description\" content=\"Stop paying for idle dev and test servers. Automate EC2, RDS and Auto Scaling shutdowns with EventBridge Scheduler\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/smartcloudspend.com\/?p=40\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Automate AWS Resource Shutdown Outside Working Hours\" \/>\n<meta property=\"og:description\" content=\"Stop paying for idle dev and test servers. Automate EC2, RDS and Auto Scaling shutdowns with EventBridge Scheduler\" \/>\n<meta property=\"og:url\" content=\"https:\/\/smartcloudspend.com\/?p=40\" \/>\n<meta property=\"og:site_name\" content=\"SmartCloudSpend\" \/>\n<meta property=\"article:published_time\" content=\"2026-10-17T16:45:28+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-10-30T12:04:07+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/smartcloudspend.com\/wp-content\/uploads\/2026\/10\/Automatizacion-AWS-para-reducir-costes.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1536\" \/>\n\t<meta property=\"og:image:height\" content=\"1024\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Raul\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Raul\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/smartcloudspend.com\\\/?p=40#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/smartcloudspend.com\\\/?p=40\"},\"author\":{\"name\":\"Raul\",\"@id\":\"https:\\\/\\\/smartcloudspend.com\\\/#\\\/schema\\\/person\\\/44ee75fea87758b75c9fa20bcb4736b5\"},\"headline\":\"How to Automate Resource Shutdown During Non-Working Hours in AWS\",\"datePublished\":\"2026-10-17T16:45:28+00:00\",\"dateModified\":\"2026-10-30T12:04:07+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/smartcloudspend.com\\\/?p=40\"},\"wordCount\":1498,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/smartcloudspend.com\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/smartcloudspend.com\\\/?p=40#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/smartcloudspend.com\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/Automatizacion-AWS-para-reducir-costes.png\",\"articleSection\":[\"Cloud Cost Reduction\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/smartcloudspend.com\\\/?p=40#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/smartcloudspend.com\\\/?p=40\",\"url\":\"https:\\\/\\\/smartcloudspend.com\\\/?p=40\",\"name\":\"Automate AWS Resource Shutdown Outside Working Hours\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/smartcloudspend.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/smartcloudspend.com\\\/?p=40#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/smartcloudspend.com\\\/?p=40#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/smartcloudspend.com\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/Automatizacion-AWS-para-reducir-costes.png\",\"datePublished\":\"2026-10-17T16:45:28+00:00\",\"dateModified\":\"2026-10-30T12:04:07+00:00\",\"description\":\"Stop paying for idle dev and test servers. Automate EC2, RDS and Auto Scaling shutdowns with EventBridge Scheduler\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/smartcloudspend.com\\\/?p=40#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/smartcloudspend.com\\\/?p=40\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/smartcloudspend.com\\\/?p=40#primaryimage\",\"url\":\"https:\\\/\\\/smartcloudspend.com\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/Automatizacion-AWS-para-reducir-costes.png\",\"contentUrl\":\"https:\\\/\\\/smartcloudspend.com\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/Automatizacion-AWS-para-reducir-costes.png\",\"width\":1536,\"height\":1024},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/smartcloudspend.com\\\/?p=40#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\\\/\\\/smartcloudspend.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How to Automate Resource Shutdown During Non-Working Hours in AWS\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/smartcloudspend.com\\\/#website\",\"url\":\"https:\\\/\\\/smartcloudspend.com\\\/\",\"name\":\"SmartCloudSpend\",\"description\":\"Cloud services budget optimizer\",\"publisher\":{\"@id\":\"https:\\\/\\\/smartcloudspend.com\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/smartcloudspend.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/smartcloudspend.com\\\/#organization\",\"name\":\"SmartCloudSpend\",\"url\":\"https:\\\/\\\/smartcloudspend.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/smartcloudspend.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/smartcloudspend.com\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/cropped-Gemini_Generated_Image_8kqpol8kqpol8kqp-removebg-preview.png\",\"contentUrl\":\"https:\\\/\\\/smartcloudspend.com\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/cropped-Gemini_Generated_Image_8kqpol8kqpol8kqp-removebg-preview.png\",\"width\":453,\"height\":401,\"caption\":\"SmartCloudSpend\"},\"image\":{\"@id\":\"https:\\\/\\\/smartcloudspend.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/smartcloudspend.com\\\/#\\\/schema\\\/person\\\/44ee75fea87758b75c9fa20bcb4736b5\",\"name\":\"Raul\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/7528fdea3565b1d864e359aadcb71d1a08ebb6360994d6a7f695c45b0f3984ed?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/7528fdea3565b1d864e359aadcb71d1a08ebb6360994d6a7f695c45b0f3984ed?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/7528fdea3565b1d864e359aadcb71d1a08ebb6360994d6a7f695c45b0f3984ed?s=96&d=mm&r=g\",\"caption\":\"Raul\"},\"sameAs\":[\"https:\\\/\\\/smartcloudspend.com\"],\"url\":\"https:\\\/\\\/smartcloudspend.com\\\/?author=1\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Automate AWS Resource Shutdown Outside Working Hours","description":"Stop paying for idle dev and test servers. Automate EC2, RDS and Auto Scaling shutdowns with EventBridge Scheduler","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/smartcloudspend.com\/?p=40","og_locale":"en_US","og_type":"article","og_title":"Automate AWS Resource Shutdown Outside Working Hours","og_description":"Stop paying for idle dev and test servers. Automate EC2, RDS and Auto Scaling shutdowns with EventBridge Scheduler","og_url":"https:\/\/smartcloudspend.com\/?p=40","og_site_name":"SmartCloudSpend","article_published_time":"2026-10-17T16:45:28+00:00","article_modified_time":"2026-10-30T12:04:07+00:00","og_image":[{"width":1536,"height":1024,"url":"https:\/\/smartcloudspend.com\/wp-content\/uploads\/2026\/10\/Automatizacion-AWS-para-reducir-costes.png","type":"image\/png"}],"author":"Raul","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Raul","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/smartcloudspend.com\/?p=40#article","isPartOf":{"@id":"https:\/\/smartcloudspend.com\/?p=40"},"author":{"name":"Raul","@id":"https:\/\/smartcloudspend.com\/#\/schema\/person\/44ee75fea87758b75c9fa20bcb4736b5"},"headline":"How to Automate Resource Shutdown During Non-Working Hours in AWS","datePublished":"2026-10-17T16:45:28+00:00","dateModified":"2026-10-30T12:04:07+00:00","mainEntityOfPage":{"@id":"https:\/\/smartcloudspend.com\/?p=40"},"wordCount":1498,"commentCount":0,"publisher":{"@id":"https:\/\/smartcloudspend.com\/#organization"},"image":{"@id":"https:\/\/smartcloudspend.com\/?p=40#primaryimage"},"thumbnailUrl":"https:\/\/smartcloudspend.com\/wp-content\/uploads\/2026\/10\/Automatizacion-AWS-para-reducir-costes.png","articleSection":["Cloud Cost Reduction"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/smartcloudspend.com\/?p=40#respond"]}]},{"@type":"WebPage","@id":"https:\/\/smartcloudspend.com\/?p=40","url":"https:\/\/smartcloudspend.com\/?p=40","name":"Automate AWS Resource Shutdown Outside Working Hours","isPartOf":{"@id":"https:\/\/smartcloudspend.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/smartcloudspend.com\/?p=40#primaryimage"},"image":{"@id":"https:\/\/smartcloudspend.com\/?p=40#primaryimage"},"thumbnailUrl":"https:\/\/smartcloudspend.com\/wp-content\/uploads\/2026\/10\/Automatizacion-AWS-para-reducir-costes.png","datePublished":"2026-10-17T16:45:28+00:00","dateModified":"2026-10-30T12:04:07+00:00","description":"Stop paying for idle dev and test servers. Automate EC2, RDS and Auto Scaling shutdowns with EventBridge Scheduler","breadcrumb":{"@id":"https:\/\/smartcloudspend.com\/?p=40#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/smartcloudspend.com\/?p=40"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/smartcloudspend.com\/?p=40#primaryimage","url":"https:\/\/smartcloudspend.com\/wp-content\/uploads\/2026\/10\/Automatizacion-AWS-para-reducir-costes.png","contentUrl":"https:\/\/smartcloudspend.com\/wp-content\/uploads\/2026\/10\/Automatizacion-AWS-para-reducir-costes.png","width":1536,"height":1024},{"@type":"BreadcrumbList","@id":"https:\/\/smartcloudspend.com\/?p=40#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/smartcloudspend.com\/"},{"@type":"ListItem","position":2,"name":"How to Automate Resource Shutdown During Non-Working Hours in AWS"}]},{"@type":"WebSite","@id":"https:\/\/smartcloudspend.com\/#website","url":"https:\/\/smartcloudspend.com\/","name":"SmartCloudSpend","description":"Cloud services budget optimizer","publisher":{"@id":"https:\/\/smartcloudspend.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/smartcloudspend.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/smartcloudspend.com\/#organization","name":"SmartCloudSpend","url":"https:\/\/smartcloudspend.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/smartcloudspend.com\/#\/schema\/logo\/image\/","url":"https:\/\/smartcloudspend.com\/wp-content\/uploads\/2026\/10\/cropped-Gemini_Generated_Image_8kqpol8kqpol8kqp-removebg-preview.png","contentUrl":"https:\/\/smartcloudspend.com\/wp-content\/uploads\/2026\/10\/cropped-Gemini_Generated_Image_8kqpol8kqpol8kqp-removebg-preview.png","width":453,"height":401,"caption":"SmartCloudSpend"},"image":{"@id":"https:\/\/smartcloudspend.com\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/smartcloudspend.com\/#\/schema\/person\/44ee75fea87758b75c9fa20bcb4736b5","name":"Raul","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/7528fdea3565b1d864e359aadcb71d1a08ebb6360994d6a7f695c45b0f3984ed?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/7528fdea3565b1d864e359aadcb71d1a08ebb6360994d6a7f695c45b0f3984ed?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/7528fdea3565b1d864e359aadcb71d1a08ebb6360994d6a7f695c45b0f3984ed?s=96&d=mm&r=g","caption":"Raul"},"sameAs":["https:\/\/smartcloudspend.com"],"url":"https:\/\/smartcloudspend.com\/?author=1"}]}},"_links":{"self":[{"href":"https:\/\/smartcloudspend.com\/index.php?rest_route=\/wp\/v2\/posts\/40","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/smartcloudspend.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/smartcloudspend.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/smartcloudspend.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/smartcloudspend.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=40"}],"version-history":[{"count":5,"href":"https:\/\/smartcloudspend.com\/index.php?rest_route=\/wp\/v2\/posts\/40\/revisions"}],"predecessor-version":[{"id":252,"href":"https:\/\/smartcloudspend.com\/index.php?rest_route=\/wp\/v2\/posts\/40\/revisions\/252"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/smartcloudspend.com\/index.php?rest_route=\/wp\/v2\/media\/87"}],"wp:attachment":[{"href":"https:\/\/smartcloudspend.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=40"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/smartcloudspend.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=40"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/smartcloudspend.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=40"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}