Private VPC内のRDSにQuicksightを接続する

プライベートVPCのRDSデータベースからデータを引き出すために、AWS Quicksightを接続したい場合があります。これはそう頻繁には行わない作業で、他のAWSサービスとは少し異なるので、私は毎回やり方を学び直さなければなりませんでした。そこで今回は、後世のために私が学んだ方法を共有します。

Quicksightは公開IP経由でアクセスできるデータベースに自動で接続できます。DBがインターネットに公開されていれば(もちろんセキュリティグループでのフィルタリングはありますが)、この記事は無視しても構いません。

もしDBに公開IPアドレスはあるけれども、ポリシー、技術的、または歴史的な理由からインターネットには実際にはアクセスできないという奇妙なケースに該当する場合は、読み進めてください。

Quicksight VPC Connection 要件

Quicksightでは、QuicksightのインスタンスとあなたのVPCの間にコネクションを作成するオプションがあります。これは、ターゲットVPCの指定したサブネットにネットワークインターフェースを注入することで行います。

  • VPC ID ターゲットDBがあるVPC
  • ルート可能な Subnet ターゲットDBのサブネット
  • Quicksightコネクション専用の Security Group TCPトラフィック全てをターゲットDBへ許可
  • オプションで DNS Inbound Endpoint

ターゲットDBとそのVPCは既に存在しているものと仮定します。

既存のSubnetを使うこともできますが、VPC内と同じVPCにあるサブネットで、ターゲットDBのサブネットにルーティングできる必要があります。

Quicksight管理コンソールでVPC Connectionを作成すると、指定されたSubnetNetwork Interfaceが自動作成され、指定されたSecurity Groupに関連付けられます。

Security Groupはステートレスです。Quicksightリクエストからくる返信パケットはランダムに割り当てられたポート番号を持ちます。通常セキュリティグループはステートフルでポートを自動処理しますが、Quicksightネットワークインターフェースの場合は、受信が任意のポートで許可されるように明示的に設定する必要があります。

オプションのDNS Inbound Endpointは、Quicksightに対し、Public DNSゾーンの問い合わせだけでなく、VPCのプライベートDNSリゾルバーを使うように指示します。これは、ターゲットDBがPublic IPアドレスを持つ場合に必要です。この設定なしでQuicksightがDBのEndpoint nameを問い合わせると、Public IPアドレスが返されます。接続が動作しない理由に頭を悩ませることになります。

DNS Inbound Endpointを使用する場合は、Route53で設定する必要があります。

これらの詳細な手順は以下で説明されます。

VPC Connectionは以下のVPC内のものに接続可能です:

  • Amazon OpenSearch Service
  • Amazon Redshift
  • Amazon Relational Database Service
  • Amazon Aurora
  • MariaDB
  • Microsoft SQL Server
  • MySQL
  • Oracle
  • PostgreSQL
  • Presto
  • Snowflake

VPC Connectionは、あなたのQuicksightアカウント内のリージョンのデータソースに再利用ができます。

サブネット情報

VPC情報取得

ここで「VPC ID」と「CIDRブロック」が必要です。

RDSの設定で、どのVPCにあるかを見ることができます。

こちらの記事はdev.toの良い記事を日本人向けに翻訳しています。
https://dev.to/aws-builders/connect-quicksight-to-rds-in-a-private-vpc-4nl9