【アップデート】Amazon AuroraクラスターからS3バケットに直接データエクスポート可能になりました!
こんにちは。AWS事業本部トクヤマシュンです。
先日のアップデートでAmazon Aurora DBクラスターからAmazon S3バケットにデータを直接エクスポートすることが可能になりました!
エクスポートされたデータはApache Parquet形式のオブジェクトとして保存されるため、Amazon AthenaやAmazon Redshift Spectrumなどのデータ分析に連携が可能です。
本エントリではこの機能について概要を紹介するとともに、マネジメントコンソールでの操作を確認します。
機能概要
- Amazon Aurora DBクラスターのデータを「Apache Parquet」形式で直接S3バケットにエクスポート
- 特定のデータベースやスキーマ、テーブルといった単位で一部分だけエクスポートすることも可能
- エクスポートはバックグラウンドで処理されるため、DBクラスターのパフォーマンスに影響しない
- DBクラスターのクローンが作成され、そこからデータがエクスポートされる
対象のサービスとリージョン
現時点(2022/10/29)では下記が対象です。
- 対象のサービス
- Aurora MySQL(利用可能なすべてのバージョン)
- Aurora PostgreSQL(利用可能なすべてのバージョン)
- 対象のリージョン
- Asia Pacific (Hong Kong)
- Asia Pacific (Mumbai)
- Asia Pacific (Osaka)
- Asia Pacific (Seoul)
- Asia Pacific (Singapore)
- Asia Pacific (Sydney)
- Asia Pacific (Tokyo)
- Canada (Central)
- Europe (Frankfurt)
- Europe (Ireland)
- Europe (London)
- Europe (Paris)
- Europe (Stockholm)
- South America (São Paulo)
- US East (N. Virginia)
- US East (Ohio)
- US West (N. California)
- US West (Oregon)
制約事項
利用にあたって制約がありますのでいくつか抜粋してご紹介します。
- マルチマスター、サーバレスv1、サーバレスv2のクラスターはエクスポート非対応
- DBクラスターがすでに15個のクローンを持っている場合、エクスポートのパフォーマンス低下
- クローンの上限に達しているため、コピーを用いたエクスポートとなるため
- データベース、スキーマ、テーブルの名前に次のいずれかを含む場合、一部分のエクスポート不可(クラスター全体のエクスポートは可能)
- 大文字アルファベット
- 数字
$
_
- テーブルの列名に次のいずれかを含む場合、そのテーブルはエクスポートからスキップされる
, ; { } ( ) \n \t = (space)
- テーブル名に
/
を含む場合、そのテーブルはエクスポートからスキップされる
他にも制約はありますので、利用の際は公式ドキュメントを確認することをオススメします。
AuroraからS3にエクスポートする他機能との違い
Amazon AuroraからS3にエクスポートする機能は他にもいくつか存在します。
本機能との違いについて簡単に述べますので、うまく使い分けて頂ければと思います。
- DBクラスタースナップショットデータからS3にエクスポート
- エクスポートするデータがDBクラスターのデータではないため、現在のデータとは乖離が発生
- Aurora MySQL ver2および3の場合、高速なデータエクスポートが利用可能
- エクスポートオブジェクトはApache Parquet形式
- 既存のDBクラスターのパフォーマンスに影響しない
- SQLを用いたS3へのデータエクスポート
- Aurora MySQLの場合:SELECT INTO OUTFILE S3ステートメントによってエクスポート
- Aurora PostgreSQLの場合:aws_s3 拡張機能を用いてエクスポート
- SQLを用いるため、エクスポートするデータの条件を柔軟に設定せすることが可能
- エクスポートオブジェクトはCSVなどの区切り文字を利用した形式(区切り文字は別途指定可能)
- 既存のDBクラスターにクエリを実行するため、パフォーマンス影響あり
試してみる
それでは、実際にマネジメントコンソールからエクスポート操作をしてみます。
下記の順で操作を行います。
- Amazon Aurora作成
- Amazon S3バケット作成
- AWS IAM Role作成
- AWS KMSキー作成
- エクスポート実施
- 結果確認
Amazon Aurora作成
test-database-1
というクラスターを作成します。
エンジンはAurora MySQL、インスタンスサイズはdb.t4g.mediumを選択しました。
このDBに対して、次のSQLを実行し、member
というテーブルを作ってデータを格納しておきます。
CREATE TABLE member( id INT NOT NULL, name VARCHAR(10) NOT NULL, PRIMARY KEY (id)); INSERT INTO member VALUES (0, "otonashi"), (1, "ichinose"), (2, "nikaido"), (3, "mitaka"), (4, "yotsuya"), (5, "godai"), (6, "roppongi"), (7, "nanao"), (8, "yagami"), (9, "kujo");
SELECT文でテーブルのデータを確認します。
データが格納されていることが確認できました。
Amazon S3バケット作成
aurora-export-to-s3-bucket
という名前のバケットを作成します。
AWS IAM Role作成
エクスポートタスクで利用するIAM Roleを作成します。
今回はtest-aurora-export-to-s3-role
という名前で、下記を持ちます。
許可ポリシー:S3バケットにオブジェクトを出力する許可
{ "Version": "2012-10-17", "Statement": [ { "Sid": "ExportPolicy", "Effect": "Allow", "Action": [ "s3:PutObject*", "s3:ListBucket", "s3:GetObject*", "s3:DeleteObject*", "s3:GetBucketLocation" ], "Resource": [ "arn:aws:s3:::aurora-export-to-s3-bucket", "arn:aws:s3:::aurora-export-to-s3-bucket/*" ] } ] }
信頼されたエンティティ:エクスポートタスクがロールを引き受けるための信頼関係
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "export.rds.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": {} } ] }
AWS KMSキー作成
エクスポートするオブジェクトはKMSでの暗号化が必要です。
暗号化に利用するキーを作成します。
今回はtest-aurora-export-to-s3-key
という名前で作成しました。
鍵は対象キーである必要があります。
エクスポート実施
ここまで準備ができれば、エクスポートを実施します。
RDSの画面から対象のクラスターを選択し、アクション→Amazon S3にエクスポート
をクリックします。
下記を設定し、エクスポートを開始します。
- エクスポート識別子:
test-aurora-export-to-s3
- エクスポート識別子はリージョン内でユニークな必要あり
- エクスポートされたデータ:
すべて
- もし「一部」を選択すればデータベースやスキーマ、テーブル単位で部分的なエクスポートが可能
- S3送信先:
aurora-export-to-s3-bucket
- IAMロール:
test-aurora-export-to-s3-role
- AWS KMSキーのARN
- 作成した
test-aurora-export-to-s3-keyのARN
- 作成した
エクスポートが始まります。
先述の通り、バックグラウンドでは別途Aurora DBのクローンが作成されるため、起動開始から完了まではそれなりに時間が必要です。
エクスポートタスクは左メニューのAmazon S3 でエクスポートします
からも確認が可能です。
しばらく待てば、タスクが完了します。
結果確認
S3バケットを確認します。
データがエクスポートされ、parquet形式のオブジェクトが生成されていることが確認できます。
今回のプレフィックスは下記のような形式となっています。
エクスポート識別子/データベース名/データベース名.テーブル名/数字/
試しにS3 Selectを用いてpaquet形式のオブジェクトを検索してみます。
データがエクスポートできていることが確認できました。
以上です。
最後に
Amazon Aurora DBクラスターからS3にデータを直接エクスポートしました。
分析基盤との連携などにお使いいただける機能です。
本ブログがどなたかのお役にたてば幸いです。