Option Groups let you attach custom features to your RDS instances beyond what’s available in the default configuration.

Here’s a live example of enabling the SQLSERVER_BACKUP_TO_S3 option in RDS for SQL Server.

aws rds create-option-group \
    --option-group-name my-sqlserver-backup-group \
    --option-group-description "Option group for S3 backups" \
    --engine sqlserver-se \
    --major-engine-version 15.0

aws rds add-option-to-option-group \
    --option-group-name my-sqlserver-backup-group \
    --option-name SQLSERVER_BACKUP_TO_S3 \
    --settings Name=S3_BUCKET_NAME,Value=my-rds-backup-bucket-12345 \
             Name=IAM_ROLE_ARN,Value=arn:aws:iam::123456789012:role/RDSS3BackupRole

This creates a new option group my-sqlserver-backup-group for SQL Server 2019 (major engine version 15.0) and then adds the SQLSERVER_BACKUP_TO_S3 option, specifying the S3 bucket and IAM role that RDS will use for backups.

Once created, you associate this option group with your RDS instance. If the instance is already running, you’ll typically need to modify it to use the new option group. This often triggers a reboot of the instance.

The core problem RDS Option Groups solve is providing a flexible, modular way to extend database functionality without requiring a full instance rebuild or a different database engine. Imagine needing a specific performance monitoring tool or a particular replication feature. Instead of finding an RDS instance type that might include it, or managing it yourself outside of RDS, you can enable it via an option group. This keeps the core RDS management simple while allowing for specialized needs.

Internally, when you enable an option, RDS provisions and configures the necessary underlying resources or agents. For SQLSERVER_BACKUP_TO_S3, it means setting up the SQL Server agent jobs and permissions to interact with AWS S3. For other options, it might involve installing specific packages, configuring network routes, or enabling database flags. The option group acts as a manifest, telling RDS which of these extensions to apply to an instance.

You control which options are available and their specific configurations. For example, the SQLSERVER_BACKUP_TO_S3 option requires S3_BUCKET_NAME and IAM_ROLE_ARN settings. Other options have different, sometimes more extensive, configuration parameters. You can have multiple options within a single option group, but some options are mutually exclusive.

The ORACLE_APEX option for Oracle RDS instances, for instance, installs Oracle Application Express directly onto the database server. This is a significant architectural difference from managing APEX externally. You don’t install it on your own compute; RDS handles the installation and patching of APEX as part of the option. The IAM_AUTH option for PostgreSQL and MySQL allows you to use IAM roles for database authentication, integrating directly with your AWS identity management.

When you modify an existing RDS instance to use a new option group, RDS performs a configuration change. This isn’t a full snapshot-and-restore. Instead, RDS applies the changes to the running instance. For options that require deep integration, like installing software or enabling kernel modules, this often necessitates a database reboot to ensure the new components are loaded correctly and the database process picks up the new configuration. The instance will be unavailable during this reboot.

The most surprising aspect is how certain options, particularly those involving significant software installation like ORACLE_APEX, are managed. You don’t see the APEX installation process directly; it’s an opaque provisioning step by RDS. You simply enable the option, and then APEX is available. This abstraction hides complex installation and configuration steps, making it seem almost like magic, but it relies on RDS having pre-built, parameterized installation scripts and agents that are triggered when the option group is applied.

If you try to remove an option that is critical for your database’s current operation, like a backup mechanism, you’ll likely encounter errors related to missing dependencies or failed scheduled tasks.

Want structured learning?

Take the full Rds course →