こんにちは。ROBOT PAYMENTでエンジニアをやっております 牧野です。 tech.robotpayment.co.jp こちらの記事の再続編としてApp Runnerを利用したアーキテクチャにおいて、データベースに直接アクセスする方法を記事にしたいと思います。
結論として、Amazon Redshift Serverless+Federated Queryを利用してデータベースを参照する形にしております。
前提
セキュリティの観点でプライベートなネットワークにデータベース(Aurora PostgreSQL) を配置しています。そのためデータベースにアクセスするためにSSH接続する、もしくはAWS Session Managerを使ってアクセスする、どちらにしても踏み台となるホストが必要になります。 この点Redshiftの機能であるFederated Queryを使うことでデータベースに直接クエリできます。よって余計なサーバーを管理することなくデータを参照できるため、Amazon Redshift Serverlessを利用しました。
メリット
- サーバーの管理が不要になる。
- 踏み台経由でAuroraにアクセスする場合、書き込み権限についてロールやアカウントで管理が必要。Redshift Serverlessについては読み込み権限のみなのでセキュリティ観点についての考慮事項が少ない
- PostgreSQLに準拠したデータベースのためクエリ学習コストも少ない
デメリット
- 立ち上げ時のデータベース接続が毎回若干遅い。
- PostgreSQLと完全にクエリが同一ではないため、代替クエリを調べる必要が一部ある。
\d テーブル名
でPostgreSQLの場合テーブル定義を確認できますが、Redshiftの場合下記で実行が可能。SELECT * FROM SVV_EXTERNAL_COLUMNS WHERE schemaname = '外部スキーマ名' AND tablename = 'テーブル名';
まとめ
管理コストを削減するためにApp Runnerを利用しているため、どうにか踏み台サーバーを用意せずデータベースを参照する方法を模索した結果、上記のような結論になりました。
Federated Queryの導入については最初に若干手順が必要ですが、一度設定してしまえばその後は気にすることなく運用できるので、よりマネージドにアーキテクチャを構築したい場合の選択肢になると思います。
導入について以下の記事が非常に参考になりました。
We are hiring!!
ROBOT PAYMENTでは一緒に働く仲間を募集しています!!!
speakerdeck.com
www.robotpayment.co.jp
🎉twitter採用担当アカウント開設!🎉どんどん情報発信していきます!!