### Description

Currently some code in RDS Operators use boto waiters and some uses a custom `_await_status`, the former is preferred over the later (waiters are vetted code provided by the boto sdk, they have features like exponential backoff, etc). See [this discussion thread](https://github.com/apache/airflow/pull/27076#discussion_r997325535) for more details/context.

### Use case/motivation

_No response_

### Related issues

_No response_

### Are you willing to submit a PR?

- [ ] Yes I am willing to submit a PR!

### Code of Conduct

- [X] I agree to follow this project's [Code of Conduct](https://github.com/apache/airflow/blob/main/CODE_OF_CONDUCT.md)

cls.dag = DAG("test_dag", default_args={"owner": "airflow", "start_date": DEFAULT_DATE})
        cls.base_sensor = RdsBaseSensor(task_id="test_task", aws_conn_id="aws_default", dag=cls.dag)
    @classmethod
    def teardown_class(cls):
        del cls.dag
        del cls.base_sensor
    def test_hook_attribute(self):
        assert hasattr(self.base_sensor, "hook")
        assert self.base_sensor.hook.__class__.__name__ == "RdsHook"
    def test_describe_item_wrong_type(self):
        with pytest.raises(AirflowException):
            self.base_sensor._describe_item("database", "auth-db")
    def test_check_item_true(self):
        self.base_sensor._describe_item = lambda item_type, item_name: [{"Status": "available"}]
        self.base_sensor.target_statuses = ["available", "created"]
        assert self.base_sensor._check_item(item_type="instance_snapshot", item_name="")
    def test_check_item_false(self):
        self.base_sensor._describe_item = lambda item_type, item_name: [{"Status": "creating"}]
        self.base_sensor.target_statuses = ["available", "created"]
        assert not self.base_sensor._check_item(item_type="instance_snapshot", item_name="")
class TestRdsSnapshotExistenceSensor: