AuroraからS3へデータを直接エクスポートしたい

S3の拡張機能ってなにかと便利だね

AuroraからS3へデータを直接エクスポートしたい
目次

TL;DR


本記事でわかることは以下の通りです。

☆ Aurora PostgreSQLからAWS S3へデータをエクスポートする方法

 

はじめに


Aurora PostgreSQL DB クラスター からデータをクエリし、Amazon S3 バケットに保存されているファイルに直接エクスポートできます。そのために、Aurora PostgreSQL によって提供される aws_s3 PostgreSQL 拡張機能を使用します。

 

参考
https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/postgresql-s3-export.html

 

注意

ソースコードのみの紹介となりますが、実行するためには以下の設定が必要です

  • postgresにアクセスするためにLambdaをpostgresと同じサブネットに配置するか、通信できるサブネット(SG、ACLの設定)に配置が必要
  • VPC内でLambdaを実行するためのロール設定
  • postgresからS3へアップロードするためのIAMポリシーの設定

 

関数


import psycopg2

def lambda_handler(event.context):
   URL = (host='',DB='',username='',password='')
   query = 'select * from remindtable'

   s3_uri = SELECT aws_commons.create_s3_uri('sample-bucket','sample-filepath','ap-northeast-1') 
   query = SELECT * FROM aws_s3.query_export_to_s3('SELECT * FROM sample_table', s3_uri, options :='format text');

   with psycopg2.connect(URL) as conn:
        with conn.cursor() as cur:
            cur.execute(query)
            cur.fetchall()

 

参考


psycopg2をLambdaで使用する方法は、 こちら をご参照ください。  

postgresにログインして投げるクエリをLambdaから実行しているだけです。
また、s3_uriでアップロード先のバケットとフォルダ、ファイル名を指定しています。
(既存のものは上書かれ、ない場合は新規に作成されます)

 

まとめ


aws_s3 PostgreSQL 拡張機能をLambdaから実行する方法をまとめてみました。
かなり省略してまとめましたが、ご不明あればご指摘ください。
どなたかのご参考になれば幸いです。