aws_s3とは
Amazon S3 へのクエリの結果のエクスポートに使用する関数が使えるようになります。
(ちなみに公式ドキュメント見ていたらS3からのインポートにも使えそうです。
Aurora PostgreSQLでの設定
1. 拡張機能「aws_s3」のインストール
以下のSQLで拡張機能をインストールします。
最後のCASCADEは、依存関係も含めてインストールしてくれます。
※aws_s3の依存関係はaws_commonsがあります。けど既に入っていたから無くてもって思うけど安心のために付けておきましょう。
-- 拡張機能を有効化
CREATE EXTENSION IF NOT EXISTS aws_s3 CASCADE;
拡張機能のインストールが終わったか、以下のSQLで確認しましょう。
ちなみに、psqlで繋いでいる場合は\dxでも確認できます。
-- 拡張機能の有効化確認
SELECT * FROM pg_extension WHERE extname = 'aws_s3';
2. DBクラスターがS3へエクスポートするためのIAMロール&ポリシー作成
IAMポリシーでS3エクスポートに必要な権限(公式ドキュメントに記載の権限)で作成して、IAMロールに紐づけます。
IAMポリシーの設定JSON
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "s3export",
"Effect": "Allow",
"Action": [
"s3:PutObject*",
"s3:ListBucket",
"s3:GetObject*",
"s3:DeleteObject*",
"s3:GetBucketLocation",
"s3:AbortMultipartUpload"
],
"Resource": "arn:aws:s3:::★バケット名★/*"
}
]
}
IAMロールの信頼関係の設定JSON
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "rds.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
3. DBクラスターにIAMロールの関連付け
AuroraのクラスターのUIで「接続とセキュリティ」タブに「IAM ロールの管理」があるので、作成したIAMロールを選択して、機能は「s3Export」を選択してから、ロールを追加します。
実際に試してみる!
これで準備は完了になるので、早速SQLを実行してS3に結果が出力されるか確認しましょう。
以下のSQLはテーブル名やバケット名をぼかしているので、実際に試す際には書き替えてください。
SELECT * FROM aws_s3.query_export_to_s3(
$$SELECT * FROM test_user WHERE name = 'hoge'$$,
aws_commons.create_s3_uri(
'xxxxx-bucket',
'db-exports/test-report/20251223.csv',
'ap-northeast-1'
),
options := 'format csv, header true'
);
注意事項
ファイル分割(6GBごと)
結果が大きい場合は、xxx.csvとxxx_part2.csvみたいに複数ファイルになるようです。
サイズが大きくなりそうな場合は注意してください。
さいごに
これでデータのS3出力は出来たので、pg_cronと組み合わせるとバッチで日次や月次の定期的にデータ出力することができます。
S3のデータ作成後に何かしたい場合は、イベントを検知してLambdaでゴニョゴニョっとしてもらえればと!
参考
