4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【機能】RDS(Postgre)からS3へのエクスポート機能を試した

4
Posted at

1. はじめに

こんにちは!Sakitsuです。
「RDS から S3 へデータをアップロードしたい」 と考えたとき、最初は RDS → EC2 → S3 のような流れを想像していました。
ですが実際には、RDS から直接 S3 へエクスポートする機能が用意されています!

今回は、この RDS 直接 S3 エクスポート機能を実際に試してみたので、手順や注意点をまとめました。

2. 参考資料

下記 AWS 公式ドキュメントを参考にしました。

RDS から PostgreSQL の DB インスタンスをクエリし、Amazon S3 バケットに保存されたファイルへ直接エクスポートできます。

公式ドキュメント:
https://docs.amazonaws.cn/en_us/AmazonRDS/latest/UserGuide/postgresql-s3-export.html

3. アーキテクト図

アーキテクチャ図.png

4. 手順

4.1 拡張機能のインストールと確認

4.1.1 拡張機能のインストール

拡張機能をインストールするには、以下のコマンドを実行します。

postgres=> CREATE EXTENSION aws_s3 CASCADE;

下記図のように、エラー等は特にないです。

拡張機能のインストール-01.png

次に、以下のコマンドで、拡張機能がインストールされているか確認します。

postgres=> \dx

下記図のように、「aws_s3」が表示されればインストール完了です。
拡張機能のインストール-02.png

4.1.2 PostgreSQLがエクスポートをサポートしているかの確認

下記コマンドをAWSマネジメントコンソールのCloudShellで実行します。

aws rds describe-db-engine-versions --region ap-northeast-1 --engine postgres --engine-version 17.4 | grep s3Export

"s3Export" が表示されればサポートされています。

エクスポートをサポートの確認.png

4.2 S3バケットの作成

出力結果を保存用のバケットがない場合は作成する必要があります。
テスト用であれば特にバケットポリシーは不要です。

ただし、暗号化方式は KMS を使用する必要があります。
(デフォルトの S3 SSE でも保存はできますが、AWS にサポートされていないみたいです)

S3-key.png

4.3 IAMロールの作成・付与

4.3.1 IAMロールの作成

RDSからS3へエクスポートするために、新しいIAMロールを作成する必要あります。
IAM ロールの信頼ポリシーは 「AWS のサービス → RDS」 を選択します。
今回の例ではS3 と KMS の権限を広めに付与したが、実際の業務では権限を絞ることを推奨します。

IAM-00.png

4.3.2 IAMロールをRDSへ付与

Amazon S3バケットへのアクセス許可をRDSに与えます。
Aurora / RDS → データベース → 対象インスタンス → 接続とセキュリティ → 最下部に、
「IAMロールの管理」にて付与ができます。

IAM-01.png

下記のように、ステータスがアクティブになれば大丈夫です。
IAM-02.png

4.4 ネットワークについて

S3 にアクセスするため、以下のネットワーク要件が必要です。

RDS が所属するサブネットのルートテーブルに S3 へのルート を追加します。

rt.png

RDS のセキュリティグループで S3への443 (HTTPS) のアウトバウンドを許可します。

SG.png

4.5 動作確認

まず、aws_commons.create_s3_uri 関数で、
エクスポート先の S3 URI を作成します。

psql=> SELECT aws_commons.create_s3_uri(
   'amzn-s3-demo-bucket',
   'sample-filepath',
   'us-west-2'
) AS s3_uri_1 \gset

私の場合は下記のように設定しました。

test-01.png

次に、実際にエクスポート処理を実行します。

psql=> SELECT aws_s3.query_export_to_s3(
  'SELECT 1 AS col1, ''abcOK!'' AS col2',
  :'s3_uri',
  options := 'format csv, header true'
);

成功したみたいですね!
test-02.png

S3バケットも確認してみましょう!
下記のように、S3にファイルがエクスポートされています。

test-03.png

ファイルを開くと、エクスポートされたデータを確認できました!!

test-04.png

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?