kapilt: > actually do want the shape here.. just because its pretty obtuse otherwise to figure out the params

sorry I meant the other way around, we generally want to prefer jsonschema over shape, as it helps on discoverability of the options, without having to flip to api docs and back to custodian. alternatively we can look at more formerly adding in some class level support for using shape validation, so that we can surface it in our documentation.
JohnHillegass: > > actually do want the shape here.. just because its pretty obtuse otherwise to figure out the params
> 
> sorry I meant the other way around, we generally want to prefer jsonschema over shape, as it helps on discoverability of the options, without having to flip to api docs and back to custodian. alternatively we can look at more formerly adding in some class level support for using shape validation, so that we can surface it in our documentation.

Thanks for clarifying that. I reverted to jsonschema. I like the idea of class level support for using shape validation will open a ticket as a reminder to research. Something like that could really help future proof against api changes.
diff --git a/c7n/resources/rds.py b/c7n/resources/rds.py
index b7e5dce63..56db7181e 100644
--- a/c7n/resources/rds.py
+++ b/c7n/resources/rds.py
@@ -1626,8 +1626,11 @@ class ModifyDb(BaseAction):
                         'PerformanceInsightsKMSKeyId',
                         'PerformanceInsightsRetentionPeriod',
                         'CloudwatchLogsExportConfiguration',
+                        'ProcessorFeatures',
                         'UseDefaultProcessorFeatures',
-                        'DeletionProtection']},
+                        'DeletionProtection',
+                        'MaxAllocatedStorage',
+                        'CertificateRotationRestart']},
                     'value': {}
                 },
             },
@@ -1635,6 +1638,17 @@ class ModifyDb(BaseAction):
         required=('update',))
 
     permissions = ('rds:ModifyDBInstance',)
+    conversion_map = {
+        'DBSubnetGroupName': 'DBSubnetGroup.DBSubnetGroupName',
+        'VpcSecurityGroupIds': 'VpcSecurityGroups[].VpcSecurityGroupId',
+        'DBParameterGroupName': 'DBParameterGroups[].DBParameterGroupName',
+        'OptionGroupName': 'OptionGroupMemberships[].OptionGroupName',
+        'NewDBInstanceIdentifier': 'DBInstanceIdentifier',
+        'Domain': 'DomainMemberships[].DomainName',
+        'DBPortNumber': 'Endpoint.Port',
+        'EnablePerformanceInsights': 'PerformanceInsightsEnabled',
+        'CloudwatchLogsExportConfiguration': 'EnabledCloudwatchLogsExports'
+    }
 
     def validate(self):
         if self.data.get('update'):
@@ -1644,16 +1658,25 @@ class ModifyDb(BaseAction):
                 raise PolicyValidationError(
                     "A MonitoringRoleARN value is required \
                     if you specify a MonitoringInterval value other than 0")
+            if ('CloudwatchLogsExportConfiguration' in update_dict
+                and all(
+                    k not in update_dict.get('CloudwatchLogsExportConfiguration')
+                    for k in ('EnableLogTypes', 'DisableLogTypes'))):
+                raise PolicyValidationError(
+                    "A EnableLogTypes or DisableLogTypes input list is required\
+                    for setting CloudwatchLogsExportConfiguration")
         return self
 
     def process(self, resources):
         c = local_session(self.manager.session_factory).client('rds')
-
         for r in resources:
-            param = {}
-            for update in self.data.get('update'):
-                if r[update['property']] != update['value']:
-                    param[update['property']] = update['value']
+            param = {
+                u['property']: u['value'] for u in self.data.get('update')
+                if r.get(
+                    u['property'],
+                    jmespath.search(
+                        self.conversion_map.get(u['property'], 'None'), r))
+                    != u['value']}
             if not param:
                 continue
             param['ApplyImmediately'] = self.data.get('immediate', False)

enabling perfromance insight on RDS failing due wrong key in property



**Describe the bug**
response of describe db instance does not have any key "EnablePerformanceInsights" but "PerformanceInsightsEnabled" :
https://github.com/cloud-custodian/cloud-custodian/blob/master/c7n/resources/rds.py#L1625
Hence, using EnablePerformanceInsights under action fail
          - type: modify-db
              update:
                - property: 'PerformanceInsightsEnabled'
                  value: true
              immediate: true

https://github.com/cloud-custodian/cloud-custodian/blob/master/c7n/resources/rds.py#L1655
    if r[update['property']] != update['value']:
KeyError: 'EnablePerformanceInsights'


**To Reproduce**
Steps to reproduce the behavior:

**Expected behavior**
A clear and concise description of what you expected to happen.


**Background (please complete the following information):**

```yaml
policies: 
       actions:
            - type: modify-db
              update:
                - property: 'EnablePerformanceInsights'
                  value: true
              immediate: true
```
 - Traceback: [if applicable, please exclude sensitive/account information]
 - `custodian version --debug` output

**Additional context**
Add any other context about the problem here.

diff --git a/tests/data/placebo/test_rds_modify_db_enable_cloudwatch/rds.DescribeDBInstances_1.json b/tests/data/placebo/test_rds_modify_db_enable_cloudwatch/rds.DescribeDBInstances_1.json
new file mode 100644
index 000000000..12f8fcb9f
--- /dev/null
+++ b/tests/data/placebo/test_rds_modify_db_enable_cloudwatch/rds.DescribeDBInstances_1.json
@@ -0,0 +1,17 @@
+{
+    "status_code": 200,
+    "data": {
+        "DBInstances": [
+            {
+                "DBInstanceIdentifier": "database-2",
+                "DBInstanceArn": "arn:aws:rds:us-east-1:644160558196:db:database-2",                
+                "Engine": "mysql",
+                "EnabledCloudwatchLogsExports": [
+                    "general",
+                    "slowquery"
+                ]
+            }
+        ],
+        "ResponseMetadata": {}
+    }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_rds_modify_db_enable_cloudwatch/rds.DescribeDBInstances_2.json b/tests/data/placebo/test_rds_modify_db_enable_cloudwatch/rds.DescribeDBInstances_2.json
new file mode 100644
index 000000000..e22b24bab
--- /dev/null
+++ b/tests/data/placebo/test_rds_modify_db_enable_cloudwatch/rds.DescribeDBInstances_2.json
@@ -0,0 +1,18 @@
+{
+    "status_code": 200,
+    "data": {
+        "DBInstances": [
+            {
+                "DBInstanceIdentifier": "database-2",
+                "DBInstanceArn": "arn:aws:rds:us-east-1:644160558196:db:database-2",
+                "Engine": "mysql",
+                "EnabledCloudwatchLogsExports": [
+                    "error",                    
+                    "general",
+                    "slowquery"
+                ]
+            }
+        ],
+        "ResponseMetadata": {}
+    }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_rds_modify_db_enable_cloudwatch/rds.ModifyDBInstance_1.json b/tests/data/placebo/test_rds_modify_db_enable_cloudwatch/rds.ModifyDBInstance_1.json
new file mode 100644
index 000000000..00e23edba
--- /dev/null
+++ b/tests/data/placebo/test_rds_modify_db_enable_cloudwatch/rds.ModifyDBInstance_1.json
@@ -0,0 +1,11 @@
+{
+    "status_code": 200,
+    "data": {
+        "DBInstance": {
+            "DBInstanceIdentifier": "database-2",
+            "Engine": "mysql",
+            "DBInstanceArn": "arn:aws:rds:us-east-1:644160558196:db:database-2"
+        },
+        "ResponseMetadata": {}
+    }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_rds_modify_db_enable_cloudwatch/tagging.GetResources_1.json b/tests/data/placebo/test_rds_modify_db_enable_cloudwatch/tagging.GetResources_1.json
new file mode 100644
index 000000000..8b704d185
--- /dev/null
+++ b/tests/data/placebo/test_rds_modify_db_enable_cloudwatch/tagging.GetResources_1.json
@@ -0,0 +1,8 @@
+{
+    "status_code": 200,
+    "data": {
+        "PaginationToken": "",
+        "ResourceTagMappingList": [],
+        "ResponseMetadata": {}
+    }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_rds_modify_db_enable_perfinsights/rds.DescribeDBInstances_1.json b/tests/data/placebo/test_rds_modify_db_enable_perfinsights/rds.DescribeDBInstances_1.json
new file mode 100644
index 000000000..5a6773ae1
--- /dev/null
+++ b/tests/data/placebo/test_rds_modify_db_enable_perfinsights/rds.DescribeDBInstances_1.json
@@ -0,0 +1,14 @@
+{
+    "status_code": 200,
+    "data": {
+        "DBInstances": [
+            {
+                "DBInstanceIdentifier": "database-4",
+                "Engine": "postgres",
+                "DBInstanceArn": "arn:aws:rds:us-east-1:644160558196:db:database-4",
+                "PerformanceInsightsEnabled": false
+            }
+        ],
+        "ResponseMetadata": {}
+    }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_rds_modify_db_enable_perfinsights/rds.DescribeDBInstances_2.json b/tests/data/placebo/test_rds_modify_db_enable_perfinsights/rds.DescribeDBInstances_2.json
new file mode 100644
index 000000000..6636842fd
--- /dev/null
+++ b/tests/data/placebo/test_rds_modify_db_enable_perfinsights/rds.DescribeDBInstances_2.json
@@ -0,0 +1,14 @@
+{
+    "status_code": 200,
+    "data": {
+        "DBInstances": [
+            {
+                "DBInstanceIdentifier": "database-4",
+                "Engine": "postgres",
+                "DBInstanceArn": "arn:aws:rds:us-east-1:644160558196:db:database-4",
+                "PerformanceInsightsEnabled": true
+            }
+        ],
+        "ResponseMetadata": {}
+    }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_rds_modify_db_enable_perfinsights/rds.ModifyDBInstance_1.json b/tests/data/placebo/test_rds_modify_db_enable_perfinsights/rds.ModifyDBInstance_1.json
new file mode 100644
index 000000000..b3a4d9d91
--- /dev/null
+++ b/tests/data/placebo/test_rds_modify_db_enable_perfinsights/rds.ModifyDBInstance_1.json
@@ -0,0 +1,11 @@
+{
+    "status_code": 200,
+    "data": {
+        "DBInstance": {
+            "DBInstanceIdentifier": "database-4",
+            "Engine": "postgres",
+            "DBInstanceArn": "arn:aws:rds:us-east-1:644160558196:db:database-4"
+        },
+        "ResponseMetadata": {}
+    }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_rds_modify_db_enable_perfinsights/tagging.GetResources_1.json b/tests/data/placebo/test_rds_modify_db_enable_perfinsights/tagging.GetResources_1.json
new file mode 100644
index 000000000..8b704d185
--- /dev/null
+++ b/tests/data/placebo/test_rds_modify_db_enable_perfinsights/tagging.GetResources_1.json
@@ -0,0 +1,8 @@
+{
+    "status_code": 200,
+    "data": {
+        "PaginationToken": "",
+        "ResourceTagMappingList": [],
+        "ResponseMetadata": {}
+    }
+}
\ No newline at end of file
diff --git a/tests/test_rds.py b/tests/test_rds.py
index ba3c50aba..2a7bdbf4c 100644
--- a/tests/test_rds.py
+++ b/tests/test_rds.py
@@ -744,11 +744,139 @@ class RDSTest(BaseTest):
         )
         resources = p.run()
         self.assertEqual(len(resources), 1)
-
         client = session_factory().client("rds")
         db_info = client.describe_db_instances(DBInstanceIdentifier="testtest")
         self.assertFalse(db_info["DBInstances"][0]["DeletionProtection"])
 
+    def test_rds_modify_db_enable_cloudwatch(self):
+        session_factory = self.replay_flight_data("test_rds_modify_db_enable_cloudwatch")
+        p = self.load_policy(
+            {
+                "name": "rds-modify-enable-cloudwatch",
+                "resource": "rds",
+                "filters": [
+                    {
+                        "type": "value",
+                        "key": "DBInstanceIdentifier",
+                        "value": "database-2"
+                    },
+                    {
+                        "type": "value",
+                        "key": "EnabledCloudwatchLogsExports[]",
+                        "value": [
+                            "error"
+                        ],
+                        "op": "ni"
+                    }
+                ],
+                "actions": [
+                    {
+                        "type": "modify-db",
+                        "update": [
+                            {
+                                "property": 'CloudwatchLogsExportConfiguration',
+                                "value": {
+                                    'EnableLogTypes': [
+                                        "error"
+                                    ]
+                                }
+                            }
+                        ],
+                        "immediate": True
+                    }
+                ],
+            },
+            session_factory=session_factory,
+        )
+        resources = p.run()
+        self.assertEqual(len(resources), 1)
+        client = session_factory().client("rds")
+        db_info = client.describe_db_instances(DBInstanceIdentifier="database-2")
+        self.assertIn('error', db_info["DBInstances"][0]["EnabledCloudwatchLogsExports"])
+
+    def test_rds_modify_db_validation_monitoring_error(self):
+        with self.assertRaises(PolicyValidationError) as err:
+            self.load_policy({
+                'name': 'enable-monitoring',
+                'resource': 'rds',
+                "actions": [
+                    {
+                        "type": "modify-db",
+                        "update": [
+                            {
+                                "property": 'MonitoringInterval',
+                                "value": 60
+                            }
+                        ],
+                        "immediate": True
+                    }
+                ]})
+        self.assertIn((
+            'A MonitoringRoleARN value is required'),
+            str(err.exception))
+
+    def test_rds_modify_db_validation_cloudwatch_error(self):
+        with self.assertRaises(PolicyValidationError) as err:
+            self.load_policy({
+                'name': 'enable-cloudwatch',
+                'resource': 'rds',
+                "actions": [
+                    {
+                        "type": "modify-db",
+                        "update": [
+                            {
+                                "property": 'CloudwatchLogsExportConfiguration',
+                                "value": [
+                                    "error"
+                                ]
+                            }
+                        ],
+                        "immediate": True
+                    }
+                ]})
+        self.assertIn((
+            'EnableLogTypes or DisableLogTypes input list is required'),
+            str(err.exception))
+
+    def test_rds_modify_db_enable_perfinsights(self):
+        session_factory = self.replay_flight_data("test_rds_modify_db_enable_perfinsights")
+        p = self.load_policy(
+            {
+                "name": "rds-modify-enable-perfinsights",
+                "resource": "rds",
+                "filters": [
+                    {
+                        "type": "value",
+                        "key": "DBInstanceIdentifier",
+                        "value": "database-4"
+                    },
+                    {
+                        "type": "value",
+                        "key": "PerformanceInsightsEnabled",
+                        "value": False
+                    }
+                ],
+                "actions": [
+                    {
+                        "type": "modify-db",
+                        "update": [
+                            {
+                                "property": "EnablePerformanceInsights",
+                                "value": True
+                            }
+                        ],
+                        "immediate": True
+                    }
+                ],
+            },
+            session_factory=session_factory,
+        )
+        resources = p.run()
+        self.assertEqual(len(resources), 1)
+        client = session_factory().client("rds")
+        db_info = client.describe_db_instances(DBInstanceIdentifier="database-4")
+        self.assertTrue(db_info["DBInstances"][0]["PerformanceInsightsEnabled"])
+
 
 class RDSSnapshotTest(BaseTest):
 

pip install -e .[dev]
parse_log_pytest
requirements.txt
pytest pytest-cov pytest-xdist pytest-mock pytest
apt-get update apt-get install -y build-essential python3-dev
3.8
requirements.txt
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
apipkg==1.5
appdirs==1.4.4
argcomplete==1.11.1
attrs==19.3.0
aws-xray-sdk==2.5.0
bleach==3.1.5
boto3==1.13.24
botocore==1.16.24
-e git+https://github.com/cloud-custodian/cloud-custodian.git@f7538740c07e621d5d44a47120ce3cf64e64668e#egg=c7n
certifi==2020.4.5.2
cffi==1.14.0
chardet==3.0.4
coverage==5.1
cryptography==2.9.2
distlib==0.3.0
docutils==0.15.2
exceptiongroup==1.2.2
execnet==1.7.1
filelock==3.0.12
flake8==3.8.2
future==0.18.2
idna==2.9
importlib-metadata==1.6.1
iniconfig==2.1.0
jeepney==0.4.3
jmespath==0.10.0
jsonpatch==1.25
jsonpickle==1.4.1
jsonpointer==2.0
jsonschema==3.2.0
keyring==21.2.1
mccabe==0.6.1
mock==4.0.2
more-itertools==8.3.0
multidict==4.7.6
packaging==20.4
pkginfo==1.5.0.1
placebo==0.9.0
pluggy==1.5.0
psutil==5.7.0
py==1.8.1
pycodestyle==2.6.0
pycparser==2.20
pyflakes==2.2.0
Pygments==2.6.1
pyparsing==2.4.7
pyrsistent==0.16.0
pytest==8.3.5
pytest-cov==2.9.0
pytest-forked==1.1.3
pytest-mock==3.14.0
pytest-sugar==0.9.3
pytest-xdist==1.32.0
python-dateutil==2.8.1
PyYAML==5.3.1
readme-renderer==26.0
requests==2.23.0
requests-toolbelt==0.9.1
s3transfer==0.3.3
SecretStorage==3.1.2
six==1.15.0
tabulate==0.8.7
termcolor==1.1.0
toml==0.10.1
tomli==2.2.1
tox==3.15.2
tqdm==4.46.1
twine==3.1.1
urllib3==1.25.9
vcrpy==4.0.2
virtualenv==20.0.21
wcwidth==0.2.4
webencodings==0.5.1
wrapt==1.12.1
yarl==1.4.2
zipp==3.1.0

name: cloud-custodian
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - ca-certificates=2025.2.25=h06a4308_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.4.4=h6a678d5_1
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=3.0.16=h5eee18b_0
  - pip=24.2=py38h06a4308_0
  - python=3.8.20=he870216_0
  - readline=8.2=h5eee18b_0
  - setuptools=75.1.0=py38h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - wheel=0.44.0=py38h06a4308_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - apipkg==1.5
      - appdirs==1.4.4
      - argcomplete==1.11.1
      - attrs==19.3.0
      - aws-xray-sdk==2.5.0
      - bleach==3.1.5
      - boto3==1.13.24
      - botocore==1.16.24
      - c7n==0.9.3
      - certifi==2020.4.5.2
      - cffi==1.14.0
      - chardet==3.0.4
      - coverage==5.1
      - cryptography==2.9.2
      - distlib==0.3.0
      - docutils==0.15.2
      - exceptiongroup==1.2.2
      - execnet==1.7.1
      - filelock==3.0.12
      - flake8==3.8.2
      - future==0.18.2
      - idna==2.9
      - importlib-metadata==1.6.1
      - iniconfig==2.1.0
      - jeepney==0.4.3
      - jmespath==0.10.0
      - jsonpatch==1.25
      - jsonpickle==1.4.1
      - jsonpointer==2.0
      - jsonschema==3.2.0
      - keyring==21.2.1
      - mccabe==0.6.1
      - mock==4.0.2
      - more-itertools==8.3.0
      - multidict==4.7.6
      - packaging==20.4
      - pkginfo==1.5.0.1
      - placebo==0.9.0
      - pluggy==1.5.0
      - psutil==5.7.0
      - py==1.8.1
      - pycodestyle==2.6.0
      - pycparser==2.20
      - pyflakes==2.2.0
      - pygments==2.6.1
      - pyparsing==2.4.7
      - pyrsistent==0.16.0
      - pytest==8.3.5
      - pytest-cov==2.9.0
      - pytest-forked==1.1.3
      - pytest-mock==3.14.0
      - pytest-sugar==0.9.3
      - pytest-xdist==1.32.0
      - python-dateutil==2.8.1
      - pyyaml==5.3.1
      - readme-renderer==26.0
      - requests==2.23.0
      - requests-toolbelt==0.9.1
      - s3transfer==0.3.3
      - secretstorage==3.1.2
      - six==1.15.0
      - tabulate==0.8.7
      - termcolor==1.1.0
      - toml==0.10.1
      - tomli==2.2.1
      - tox==3.15.2
      - tqdm==4.46.1
      - twine==3.1.1
      - urllib3==1.25.9
      - vcrpy==4.0.2
      - virtualenv==20.0.21
      - wcwidth==0.2.4
      - webencodings==0.5.1
      - wrapt==1.12.1
      - yarl==1.4.2
      - zipp==3.1.0
prefix: /opt/conda/envs/cloud-custodian

tests/test_rds.py::RDSTest::test_rds_modify_db_enable_cloudwatch tests/test_rds.py::RDSTest::test_rds_modify_db_enable_perfinsights tests/test_rds.py::RDSTest::test_rds_modify_db_validation_cloudwatch_error
tests/test_rds.py::RDSTest::test_rds_autopatch tests/test_rds.py::RDSTest::test_rds_autopatch_with_window tests/test_rds.py::RDSTest::test_rds_available_engine_upgrades tests/test_rds.py::RDSTest::test_rds_config_event tests/test_rds.py::RDSTest::test_rds_db_instance_eligible_for_backup tests/test_rds.py::RDSTest::test_rds_db_instance_eligible_for_final_snapshot tests/test_rds.py::RDSTest::test_rds_db_subnetgroup_delete tests/test_rds.py::RDSTest::test_rds_db_subnetgroup_unused tests/test_rds.py::RDSTest::test_rds_default_vpc tests/test_rds.py::RDSTest::test_rds_delete tests/test_rds.py::RDSTest::test_rds_delete_copy tests/test_rds.py::RDSTest::test_rds_eligible_start_stop tests/test_rds.py::RDSTest::test_rds_kms_alias tests/test_rds.py::RDSTest::test_rds_mark_and_match tests/test_rds.py::RDSTest::test_rds_mark_hours tests/test_rds.py::RDSTest::test_rds_marked_hours tests/test_rds.py::RDSTest::test_rds_minor_upgrade_do tests/test_rds.py::RDSTest::test_rds_minor_upgrade_unavailable tests/test_rds.py::RDSTest::test_rds_modify_db tests/test_rds.py::RDSTest::test_rds_modify_db_validation_monitoring_error tests/test_rds.py::RDSTest::test_rds_restore tests/test_rds.py::RDSTest::test_rds_retention tests/test_rds.py::RDSTest::test_rds_retention_copy_tags tests/test_rds.py::RDSTest::test_rds_snapshot tests/test_rds.py::RDSTest::test_rds_start tests/test_rds.py::RDSTest::test_rds_stop tests/test_rds.py::RDSTest::test_rds_tag_and_remove tests/test_rds.py::RDSTest::test_rds_tag_trim tests/test_rds.py::RDSTest::test_rds_tags tests/test_rds.py::RDSTest::test_rds_upgrade_available tests/test_rds.py::RDSSnapshotTest::test_rds_cross_region_copy tests/test_rds.py::RDSSnapshotTest::test_rds_cross_region_copy_lambda tests/test_rds.py::RDSSnapshotTest::test_rds_cross_region_copy_many tests/test_rds.py::RDSSnapshotTest::test_rds_cross_region_copy_skip_same_region tests/test_rds.py::RDSSnapshotTest::test_rds_latest tests/test_rds.py::RDSSnapshotTest::test_rds_latest_manual tests/test_rds.py::RDSSnapshotTest::test_rds_public_accessible_disable tests/test_rds.py::RDSSnapshotTest::test_rds_snapshot_access tests/test_rds.py::RDSSnapshotTest::test_rds_snapshot_age_filter tests/test_rds.py::RDSSnapshotTest::test_rds_snapshot_copy_tags_disable tests/test_rds.py::RDSSnapshotTest::test_rds_snapshot_copy_tags_enable tests/test_rds.py::RDSSnapshotTest::test_rds_snapshot_mark tests/test_rds.py::RDSSnapshotTest::test_rds_snapshot_tag tests/test_rds.py::RDSSnapshotTest::test_rds_snapshot_tag_filter tests/test_rds.py::RDSSnapshotTest::test_rds_snapshot_trim tests/test_rds.py::RDSSnapshotTest::test_rds_snapshot_unmark tests/test_rds.py::TestModifyVpcSecurityGroupsAction::test_rds_add_security_group tests/test_rds.py::TestModifyVpcSecurityGroupsAction::test_rds_filter_by_vpcid tests/test_rds.py::TestModifyVpcSecurityGroupsAction::test_rds_remove_matched_security_groups tests/test_rds.py::TestHealthEventsFilter::test_rds_health_events_filter tests/test_rds.py::TestRDSParameterGroupFilter::test_param_value_cases tests/test_rds.py::Resize::test_can_get_a_window_now tests/test_rds.py::Resize::test_can_resize_up_asynchronously tests/test_rds.py::Resize::test_can_resize_up_immediately tests/test_rds.py::TestReservedRDSInstance::test_reserved_rds_instance_query
c7n/resources/rds.py
c7n/resources/rds.py