Skip to main content

AWS Supported Services

NightOps supports automated start/stop management for the following AWS services. These services can be safely turned off and restored without requiring manual reconfiguration.

Supported Services Overview

ServiceStop MethodStart MethodData PreservedConfig Preserved
EC2Stop InstanceStart Instance
RDSStop InstanceStart Instance
ECSScale to 0Restore CountN/A
EKSScale to 0Restore Size✅ (with PVC)
RedshiftPauseResume
ASGScale to 0Restore CapacityN/A

EC2 Instances

Amazon EC2 instances can be stopped and started without losing configuration or EBS data.

API Operations

OperationAPI CallDescription
ListDescribeInstancesList all EC2 instances with optional tag filters
StopStopInstancesStop running instances (EBS-backed)
StartStartInstancesStart stopped instances
StatusDescribeInstanceStatusCheck instance state

What's Preserved

  • ✅ EBS volumes and data
  • ✅ Security groups
  • ✅ IAM instance profile
  • ✅ Private IP address
  • ✅ Network interfaces
  • ✅ Tags and metadata

Caveats

Public IP Changes

Public IP addresses change on restart unless an Elastic IP is assigned.

Instance Store

Instance store volumes lose data on stop. Only EBS-backed instances retain data.

Spot Instances

Spot instances cannot be stopped, only terminated.


RDS Databases

RDS database instances can be stopped for up to 7 days, preserving all data and configuration.

API Operations

OperationAPI CallDescription
ListDescribeDBInstancesList all RDS instances
StopStopDBInstanceStop a running database
StartStartDBInstanceStart a stopped database
StatusDescribeDBInstancesCheck instance status

What's Preserved

  • ✅ All data
  • ✅ Parameter groups
  • ✅ Security groups
  • ✅ Endpoint DNS name
  • ✅ Automated backups configuration

Caveats

Auto-Restart

AWS automatically restarts stopped RDS instances after 7 days. NightOps will re-stop instances if they're outside scheduled hours.

Multi-AZ SQL Server

Cannot stop Multi-AZ deployments with SQL Server engine.

Read Replicas

Read replicas cannot be stopped independently from their primary instance.


ECS Services

ECS services can be scaled to zero tasks and restored to their previous count.

API Operations

OperationAPI CallDescription
ListListServices + DescribeServicesList all services in a cluster
StopUpdateService (desiredCount: 0)Scale service to zero tasks
StartUpdateService (desiredCount: N)Restore to previous task count
StatusDescribeServicesCheck running/desired count

What's Preserved

  • ✅ Task definition
  • ✅ Service configuration
  • ✅ Load balancer attachments
  • ✅ Service discovery configuration
  • ✅ Auto-scaling policies (paused at 0)

Caveats

Task Termination

Running tasks are terminated gracefully. New tasks are launched on scale-up with potentially different IPs.

Previous Count Storage

NightOps stores the original desiredCount before scaling to zero for accurate restoration.


EKS Node Groups

EKS managed node groups can be scaled to zero nodes while preserving cluster configuration.

API Operations

OperationAPI CallDescription
ListListNodegroups + DescribeNodegroupList all node groups in a cluster
StopUpdateNodegroupConfig (desiredSize: 0)Scale node group to zero
StartUpdateNodegroupConfig (desiredSize: N)Restore to previous size
StatusDescribeNodegroupCheck node group status

What's Preserved

  • ✅ Node group configuration
  • ✅ Launch template
  • ✅ IAM role
  • ✅ Subnets and security groups
  • ✅ Kubernetes labels and taints

Caveats

Control Plane Cost

The EKS control plane still incurs cost (~$72/month) even with zero nodes.

Stateful Workloads

Stateful workloads need PersistentVolumeClaims (EBS CSI or EFS) to retain data across scale events.

Scale-Up Time

Scale-up takes 3-5 minutes for nodes to become ready and pods to be scheduled.


Redshift Clusters

Redshift clusters can be paused and resumed, preserving all data and configuration.

API Operations

OperationAPI CallDescription
ListDescribeClustersList all Redshift clusters
StopPauseClusterPause a running cluster
StartResumeClusterResume a paused cluster
StatusDescribeClustersCheck cluster status

What's Preserved

  • ✅ All data
  • ✅ Cluster configuration
  • ✅ Endpoint DNS name
  • ✅ Parameter groups
  • ✅ IAM roles

Caveats

Resume Time

Resume typically takes 30-60 seconds.

Active Queries

Cannot pause a cluster with active queries. Ensure workloads are complete before scheduled stop time.


Auto Scaling Groups

Auto Scaling Groups can be scaled to zero capacity and restored to previous settings.

API Operations

OperationAPI CallDescription
ListDescribeAutoScalingGroupsList all ASGs
StopUpdateAutoScalingGroup (min/max/desired: 0)Scale to zero instances
StartUpdateAutoScalingGroup (restore values)Restore to previous capacity
StatusDescribeAutoScalingGroupsCheck current capacity

What's Preserved

  • ✅ Launch template/configuration
  • ✅ Scaling policies
  • ✅ Target groups
  • ✅ Health check configuration
  • ✅ Tags

Caveats

Instance Termination

All instances are terminated on scale to zero. New instances are launched on scale-up with different IPs.

Capacity Storage

NightOps stores original minSize, maxSize, and desiredCapacity values for accurate restoration.


Unsupported Services

The following services cannot be safely automated without manual intervention:

ServiceReason
ElastiCacheNo stop functionality; delete loses endpoint
OpenSearchNo stop functionality; requires snapshot restore
NAT GatewayDelete changes IP; breaks route tables
Load BalancersDelete changes DNS; requires reconfiguration
SageMaker EndpointsDelete requires manual endpoint config recreation

Resource Tagging

For NightOps to manage resources, apply these tags:

nightops:managed    = true
nightops:schedule = <schedule-id>
nightops:environment = staging | development | testing

Tag-Based Filtering Example

// List only NightOps-managed EC2 instances
const instances = await ec2Service.list({
managedOnly: true,
scheduleId: "schedule-123"
});

Multi-Account Support

NightOps supports managing resources across multiple AWS accounts using IAM role assumption.

Architecture

┌─────────────────┐         ┌─────────────────┐
│ Hub Account │ │ Spoke Account │
│ (NightOps) │────────▶│ (Customer) │
│ │ AssumeRole│ │
└─────────────────┘ └─────────────────┘

Setup Requirements

  1. Create NightOpsRole in each spoke account
  2. Configure trust policy to allow hub account to assume role
  3. Attach the NightOps IAM policy (see IAM Policy Reference)
// Cross-account access
const ec2 = new EC2Service({
region: "us-east-1",
roleArn: "arn:aws:iam::123456789012:role/NightOpsRole"
});

Next Steps