【问题标题】:How can I retrieve the list of all databases in an AWS RDS DB instance via API?如何通过 API 检索 AWS RDS 数据库实例中的所有数据库列表?
【发布时间】:2021-01-18 00:50:36
【问题描述】:

有什么方法可以通过 API 或 SDK(语言无关紧要)检索 AWS RDS 数据库实例中的所有数据库(或至少数据库名称)的列表?

“describe-db-instances”操作无法满足我的需求,因为它仅包含“在创建时提供的此实例的初始数据库的名称”...
在文档/网络中找不到任何内容
????‍♂️

我想避免触发 SQL 查询并最大限度地利用 API。
我已经看到了这个SO-question,但是它特定于 Boto3 的使用,而我不限于任何特定的 AWS SDK。

谢谢大家!

【问题讨论】:

  • Boto3 公开了整个 AWS API。 AWS 开发工具包中没有其他语言的更多功能。您要求的内容不会被常规 AWS RDS 实例公开。它仅由启用数据 API 的无服务器 Aurora 实例公开(仅允许您通过 API 运行 SQL 查询)。
  • @smac2020 他正在寻找在服务器实例上创建的数据库列表,例如使用 SQL 命令create database x;,而不是数据库服务器实例列表。

标签: amazon-web-services aws-sdk amazon-rds


【解决方案1】:

虽然您不仅限于 boto3,但您也仅限于 AWS API 提供的功能(据我所知,boto3 几乎涵盖了所有功能)。

DescribeDBInstances API 调用返回DBInstance 对象的列表。

每个对象都有属性DBName,这几乎是通过 AWS API 公开的有关数据库架构布局的唯一信息。

数据库名称

此参数的含义因数据库而异 您使用的引擎。

MySQL、MariaDB、SQL Server、PostgreSQL

包含此实例的初始数据库的名称 如果在创建数据库实例时指定了一个,则在创建时提供 创建的。在数据库实例的整个生命周期中都会返回相同的名称。

类型:字符串

甲骨文

包含已创建数据库实例的 Oracle 系统 ID (SID)。不是 当返回的参数不适用于 Oracle DB 时显示 实例。

类型:字符串

这基本上就是您使用 AWS API 所能获得的全部内容。如果您想要更多,您需要连接到实例并使用 RDBMS 来查询该信息。 RDS 即服务实际上并不管理您实例上的架构(如果您愿意,除了创建一个初始架构之外)并且不会公开它们。

【讨论】:

    【解决方案2】:

    虽然 Mark B 和 Maurice 100% 正确,但有一种解决方法可能对其他人有用,正如用户 Optimus 在 AWS 论坛中回答我的问题:

    这是不可能的,因为每个数据库引擎都有不同的 数据库概念的实现,所以它是一个变化的主题 从引擎到引擎。

    您可以做的是使用 ExecuteStatement RDS API 命令 https://docs.aws.amazon.com/rdsdataservice/latest/APIReference/API_ExecuteStatement.html 运行查询该特定数据库数据字典的选择 该 RDS 实例的引擎,然后您可以获取数据库名称。

    不避免运行SQL,而是标准化的获取方式 此信息与实例数据库引擎无关,因为结果输出具有 总是相同的结构。

    对我来说,这个解决方案还不够好,因为我没有 ExecuteStatement 操作所需的数据库实例的 Secret-ARN。 但是,我认为其他人可能会使用此解决方法。

    谢谢大家!

    【讨论】:

    • RDS 数据服务仅适用于 Aurora Serverless 数据库集群
    猜你喜欢
    • 1970-01-01
    • 2021-10-06
    • 1970-01-01
    • 2019-06-03
    • 1970-01-01
    • 2017-04-04
    • 1970-01-01
    • 2019-07-05
    • 1970-01-01
    相关资源
    最近更新 更多