Note

You are viewing the documentation for an older version of boto (boto2).

Boto3, the next version of Boto, is now stable and recommended for general use. It can be used side-by-side with Boto in the same project, so it is easy to start using Boto3 in your existing projects as well as new projects. Going forward, API updates and all new feature work will be focused on Boto3.

For more information, see the documentation for boto3.

Migrating from RDS v1 to RDS v2

The original boto.rds module has historically lagged quite far behind the service (at time of writing, almost 50% of the API calls are missing/out-of-date). To address this, the Boto core team has switched to a generated client for RDS (boto.rds2.layer1.RDSConnection).

However, this generated variant is not backward-compatible with the older boto.rds.RDSConnection. This document is to help you update your code (as desired) to take advantage of the latest API calls.

For the duration of the document, RDS2Connection refers to boto.rds2.layer1.RDSConnection, where RDSConnection refers to boto.rds.RDSConnection.

Prominent Differences

  • The new RDS2Connection maps very closely to the official API operations, where the old RDSConnection had non-standard & inconsistent method names.
  • RDS2Connection almost always returns a Python dictionary that maps closely to the API output. RDSConnection returned Python objects.
  • RDS2Connection is much more verbose in terms of output. Tools like jmespath or jsonq can make handling these sometimes complex dictionaries more manageable.

Method Renames

Format is old_method_name -> new_method_name:

  • authorize_dbsecurity_group -> authorize_db_security_group_ingress
  • create_dbinstance -> create_db_instance
  • create_dbinstance_read_replica -> create_db_instance_read_replica
  • create_parameter_group -> create_db_parameter_group
  • get_all_dbsnapshots -> describe_db_snapshots
  • get_all_events -> describe_events
  • modify_dbinstance -> modify_db_instance
  • reboot_dbinstance -> reboot_db_instance
  • restore_dbinstance_from_dbsnapshot -> restore_db_instance_from_db_snapshot
  • restore_dbinstance_from_point_in_time -> restore_db_instance_to_point_in_time
  • revoke_dbsecurity_group -> revoke_db_security_group_ingress

Parameter Changes

Many parameter names have changed between RDSConnection & RDS2Connection. For instance, the old name for the instance identifier was id, where the new name is db_instance_identifier. These changes are to ensure things map more closely to the API.

In addition, in some cases, ordering & required-ness of parameters has changed as well. For instance, in create_db_instance, the engine parameter is now required (previously defaulted to MySQL5.1) & its position in the call has change to be before master_username.

As such, when updating your API calls, you should check the API Reference documentation to ensure you’re passing the correct parameters.

Return Values

RDSConnection frequently returned higher-level Python objects. In contrast, RDS2Connection returns Python dictionaries of the data. This will require a bit more work to extract the necessary values. For example:

# Old
>>> instances = rds1_conn.get_all_dbinstances()
>>> inst = instances[0]
>>> inst.name
'test-db'

# New
>>> instances = rds2_conn.describe_db_instances()
>>> inst = instances['DescribeDBInstancesResponse']\
...                 ['DescribeDBInstancesResult']['DBInstances'][0]
>>> inst['DBName']
'test-db'