首页 > 解决方案 > AWS 机密管理器仅从 RDS 集群返回主主机。从主机不返回

问题描述

我正在用 python 语言创建一个 AWS lambda 来从 RDS(Aurora) 获取数据。RDS 凭证存储在 AWS Secret Manager 中。在创建机密时,我被要求选择 RDS 集群。选定的 RDS 集群具有主主机和从属主机。但是,当我通过访问使用秘密管理器创建的秘密来获取 lambda 中的凭据时,它只返回该集群中的主主机而不返回从属主机。有什么方法可以访问从属主机吗?

代码:

def get_secret():
    secret_name = "abc"
    region_name = "xyz"

    session = boto3.session.Session()
    client = session.client(
        service_name='secretsmanager',
        region_name=region_name
    )
    try:
        get_secret_value_response = client.get_secret_value(
            SecretId=secret_name
        )
    except ClientError as e:
        print(e)
    else:
        if 'SecretString' in get_secret_value_response:
            secret = get_secret_value_response['SecretString']
            #Print Credentials
            print(secret)

输出:

{"username":"xxxxx","password":"yyyyyyy","engine":"mysql","host":"**returned only master host here**","port":1234,"dbClusterIdentifier":"aaaaaaaaa"}

标签: pythonamazon-web-servicesaws-lambdaaws-secrets-manager

解决方案


主服务器和从服务器上的密码(实际密码)将相同。由于 Secrets Manager 只需要知道 master 就可以完成轮换,这就是它存储在 secret 中的全部内容。

通常,应用程序只是连接到主服务器,以便它们可以写入数据。如果您想连接到只读从属设备(例如卸载主设备),您可能必须调用describe db clusters来获取从设备端点。然而,这并不总是一个好主意。如果从站处于重负载下,则可能会发生与主站同步的失败,从而使其处于损坏状态。我以前在 MySQL 上看到过这种情况,它需要手动操作来恢复从站。


推荐阅读