### 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)

#
#
from __future__ import annotations
from typing import TYPE_CHECKING, Sequence
from botocore.exceptions import ClientError
from airflow import AirflowException
from airflow.providers.amazon.aws.hooks.rds import RdsHook
from airflow.providers.amazon.aws.utils.rds import RdsDbType
from airflow.sensors.base import BaseSensorOperator
if TYPE_CHECKING:
    from airflow.utils.context import Context
class RdsBaseSensor(BaseSensorOperator):
    """Base operator that implements common functions for all sensors"""
    ui_color = "#ddbb77"
    ui_fgcolor = "#ffffff"
    def __init__(self, *args, aws_conn_id: str = "aws_conn_id", hook_params: dict | None = None, **kwargs):
        hook_params = hook_params or {}
        self.hook = RdsHook(aws_conn_id=aws_conn_id, **hook_params)
        self.target_statuses: list[str] = []
        super().__init__(*args, **kwargs)
    def _describe_item(self, item_type: str, item_name: str) -> list:
        if item_type == "instance_snapshot":
            db_snaps = self.hook.conn.describe_db_snapshots(DBSnapshotIdentifier=item_name)