Amazon RDSのAPIでDocumentDBとNeptuneが操作できると知って驚いた話

2023.12.06

はじめに

最近知ったのですが、Amazon RDS、Amazon DocumentDB、Amazon Neptuneは同じAWS APIで制御できます。AWSの認定試験を受けた際にAurora、DocumentDB、Neptuneは同じクォーラムモデルを採用しており、似た仕様であるというのは勉強したのですが、APIが共通と知って驚きました。

RDSのAPIReferenceにあるDescribeDBClustersのページに以下の様に書いてありました。

This operation can also return information for Amazon Neptune DB instances and Amazon DocumentDB instances.
このオペレーションでは、Amazon Neptune DB インスタンスと Amazon DocumentDB インスタンスの情報も返すことができます。

AWS SDK、AWS CLIに関して

boto3などのAWS SDKのクライアントはサービスごとに分かれているのですが、現在(2023年12月)のところ、RDSのクライアントでDocumentDBとNeptuneを操作できます。RDSのクライアントだからRDSだけ操作してくれる、といったことはありません。

AWS CLIも同様です。以下のコマンドを実行したところ、DocumentDBのDBインスタンスを削除できました。

aws rds delete-db-instance --db-instance-identifier test-docdb --skip-final-snapshot

また同じAPIでもレスポンスの中身が違うことがあります。boto3を使っていて1つ気付いた例ですと、RDSのdescribe-db-clustersのレスポンスにはクラスターにつけたタグの情報(TagList)がありますが、DocumentDBにはタグ情報がありませんでした。

RDS - Boto3 1.29.6 documentation
DocDB - Boto3 1.29.6 documentation

権限に関して

権限も共通です。例えばRDSのDescribeDBClusters の権限があれば、AuroraだけでなくDocumentDBとNeptuneのDBクラスター情報も取得できます。

Amazon DocumentDB のアイデンティティベースのポリシー (IAM ポリシー) の使用

Aurora、DocumentDB、Neptuneの判別に関して

DescribeDBClusters で DocumentDBやNeptuneを排除してAuroraだけの情報を取得したい場合はengineで判別します。Auroraの場合はaurora-postgresql、aurora-mysqlです。

例えばAWS CLIではfiltersに以下のように指定します。

aws rds describe-db-clusters --filters Name=engine,Values=aurora-mysql,aurora-postgresql

また、DocumentDBのみ、Neptuneのみを取得したい場合はfiltersに以下のように指定します。Neptuneの場合はdocdbの部分をneptuneに変えてください。

aws rds describe-db-clusters --filters Name=engine,Values=docdb