Skip to content

Latest commit

 

History

History
112 lines (82 loc) · 21.4 KB

UsingThePythonDriver.md

File metadata and controls

112 lines (82 loc) · 21.4 KB

Using the AWS Advanced Python Driver

The AWS Advanced Python Driver leverages community Python drivers and enables support of AWS and Aurora functionalities. Currently, Psycopg 3.1.12+ and MySQL Connector/Python 8.1.0+ are supported. Compatibility with prior versions of these drivers has not been tested.

Using the AWS Advanced Python Driver with RDS Multi-AZ database Clusters

The AWS RDS Multi-AZ DB Clusters are capable of switching over the current writer host to another host in the cluster within approximately 1 second or less, in case of minor engine version upgrade or OS maintenance operations. The AWS Advanced Python Driver has been optimized for such fast-failover when working with AWS RDS Multi-AZ DB Clusters.

With the Failover plugin, the downtime during certain DB cluster operations, such as engine minor version upgrades, can be reduced to one second or even less with finely tuned parameters. It supports both MySQL and PostgreSQL clusters.

Visit this page for more details.

Using the AWS Advanced Python Driver with plain RDS databases

It is possible to use the AWS Advanced Python Driver with plain RDS databases, but individual features may or may not be compatible. For example, failover handling and enhanced failure monitoring are not compatible with plain RDS databases and the relevant plugins must be disabled. Plugins can be enabled or disabled as seen in the Connection Plugin Manager Parameters section. Please note that some plugins have been enabled by default. Plugin compatibility can be verified in the plugins table.

AWS Advanced Python Driver Parameters

These parameters are applicable to any instance of the AWS Advanced Python Driver.

Parameter Description Required Default Value
wrapper_dialect A unique identifier for the supported database dialect. False None
wrapper_driver_dialect A unique identifier for the target driver dialect. False None
auxiliary_query_timeout_sec Network timeout, in seconds, used for auxiliary queries to the database. This timeout applies to queries executed by the wrapper driver to gain info about the connected database. It does not apply to queries requested by the driver client. False 5
topology_refresh_ms Cluster topology refresh rate in milliseconds. The cached topology for the cluster will be invalidated after the specified time, after which it will be updated during the next interaction with the connection. False 30000
cluster_id A unique identifier for the cluster. Connections with the same cluster id share a cluster topology cache. If unspecified, a cluster id is automatically created for AWS RDS clusters. False None
cluster_instance_host_pattern The cluster instance DNS pattern that will be used to build a complete instance endpoint. A "?" character in this pattern should be used as a placeholder for cluster instance names. This pattern is required to be specified for IP address or custom domain connections to AWS RDS clusters. Otherwise, if unspecified, the pattern will be automatically created for AWS RDS clusters. False 30000
transfer_session_state_on_switch Enables transferring the session state to a new connection. False True
reset_session_state_on_close Enables resetting the session state before closing connection. False True
rollback_on_switch Enables rolling back a current transaction, if any in effect, before switching to a new connection. False True

Network Timeouts

Parameter Description Required Default Value
connect_timeout Max number of seconds to wait for a connection to be established before timing out. False None
socket_timeout Max number of seconds to wait for a SQL query to complete before timing out. False None
tcp_keepalive Enable TCP keepalive functionality. False None
tcp_keepalive_time Number of seconds to wait before sending an initial keepalive probe. False None
tcp_keepalive_interval Number of seconds to wait before sending additional keepalive probes after the initial probe has been sent. False None
tcp_keepalive_probes Number of keepalive probes to send before concluding that the connection is invalid. False None

Plugins

The AWS Advanced Python Driver uses plugins to execute database API calls. You can think of a plugin as an extensible code module that adds extra logic around any database API calls. The AWS Advanced Python Driver has a number of built-in plugins available for use.

Plugins are loaded and managed through the Connection Plugin Manager and may be identified by a str name in the form of plugin code.

Connection Plugin Manager Parameters

Parameter Value Required Description Default Value
plugins str No Comma separated list of connection plugin codes.

Example: failover,efm
auroraConnectionTracker,failover,efm
auto_sort_wrapper_plugin_order str No Certain plugins require a specific plugin chain ordering to function correctly. When enabled, this property automatically sorts the requested plugins into the correct order. True

List of Available Plugins

The AWS Advanced Python Driver has several built-in plugins that are available to use. Please visit the individual plugin page for more details.

Plugin name Plugin Code Database Compatibility Description Additional Required Dependencies
Failover Connection Plugin failover Aurora Enables the failover functionality supported by Amazon Aurora clusters. Prevents opening a wrong connection to an old writer host dues to stale DNS after failover event. This plugin is enabled by default. None
Host Monitoring Connection Plugin host_monitoring Aurora Enables enhanced host connection failure monitoring, allowing faster failure detection rates. This plugin is enabled by default. None
IAM Authentication Connection Plugin iam Any database Enables users to connect to their Amazon Aurora clusters using AWS Identity and Access Management (IAM). Boto3 - AWS SDK for Python
AWS Secrets Manager Connection Plugin aws_secrets_manager Any database Enables fetching database credentials from the AWS Secrets Manager service. Boto3 - AWS SDK for Python
Federated Authentication Connection Plugin federated_auth Any database Enables users to authenticate via Federated Identity and then database access via IAM. Boto3 - AWS SDK for Python
Aurora Stale DNS Plugin stale_dns Aurora Prevents incorrectly opening a new connection to an old writer host when DNS records have not yet updated after a recent failover event.

⚠️Note: Contrary to failover plugin, stale_dns plugin doesn't implement failover support itself. It helps to eliminate opening wrong connections to an old writer host after cluster failover is completed.

⚠️Note: This logic is already included in failover plugin so you can omit using both plugins at the same time.
None
Aurora Connection Tracker Plugin aurora_connection_tracker Aurora Tracks all the opened connections. In the event of a cluster failover, the plugin will close all the impacted connections to the host. This plugin is enabled by default. None
Read Write Splitting Plugin read_write_splitting Aurora Enables read write splitting functionality where users can switch between database reader and writer instances. None
Fastest Response Strategy Plugin fastest_response_strategy Aurora A host selection strategy plugin that uses a host monitoring service to monitor each reader host's response time and choose the host with the fastest response. None

In addition to the built-in plugins, you can also create custom plugins more suitable for your needs. For more information, see Custom Plugins.

Logging

The AWS Python Driver uses the standard Python logging module to log information. To configure logging for the AWS Python Driver, refer to this section of the Python logging docs. Please note the following:

  • As mentioned in a warning in this section, existing loggers will be disabled by default when fileConfig() or dictConfig() is called. We recommend that you pass disable_existing_loggers=False when calling either of these functions.
  • The AWS Python Driver uses module-level loggers, as recommended in the Python docs. You can configure a specific module's logger by referring to its module path. Here is an example logging.conf file that configures logging for the failover plugin:
[loggers]
keys=root,failover

[handlers]
keys=consoleHandler

[formatters]
keys=simpleFormatter

[logger_root]
level=INFO
handlers=consoleHandler

[logger_failover]
level=DEBUG
handlers=consoleHandler
qualname=aws_advanced_python_wrapper.failover_plugin
propagate=0

[handler_consoleHandler]
class=StreamHandler
level=DEBUG
formatter=simpleFormatter
args=(sys.stdout,)

[formatter_simpleFormatter]
format=%(asctime)s - %(name)s - %(levelname)s - %(message)s