背景
S3のオブジェクトをRDS for Oracleに投入する処理をAWSマネージドで行いたい!と思い、調べていたところ Amazon S3統合という機能を見つけました。
調べたところ、一部勘違いにより機能の把握にてこずったので備忘録も兼ねてまとめます
免責事項
机上で集めた情報を中心に記載しているため、あくまで参考情報として扱ってください。
必要に応じて、検証やAWSサポートへの問い合わせをお願いします。
Amazon S3 統合とは?
RDS for Oracle と S3 間でファイルを転送する機能。
あくまで転送なので、ダウンロードしたファイルの中身をテーブルにロードしてくれる機能ではない(私はテーブルへのロードまでしてくれる機能だと勘違いしてました...)
参考: Amazon S3 統合
S3のオブジェクトをDBテーブルに最終的にロードしたいユースケースで役に立つ。
構成イメージ
■ 処理の流れ
- SQL実行や定期スケジュールでトリガー
- RDS専用の管理用プロシージャ―がS3からファイルを取得し、DB内に保存する
- 必要に応じて、ファイルをテーブルへロードする。※ただし、この処理はS3統合内で提供されていないので、別途SQLで作りこむ必要がある※
なお、S3統合の実体は、Oracleのストアドプロシージャです。
サンプルクエリ
例えば S3: my-s3-bucket/imports/
以下の全ファイルを Oracle 内の DATA_PUMP_DIR
に転送したければ以下のクエリになる。
rdsadmin.rdsadmin_s3_tasks.download_from_s3( p_bucket_name => 'my-s3-bucket', p_s3_prefix => 'imports/', p_directory_name => 'DATA_PUMP_DIR', );
rdsadmin.rdsadmin_s3_tasks.download_from_s3
のパラメータはこちらに記載あり
ファイル転送要件に注意
- 参考: ファイル転送の要件と制限
実装についてざっくり
①オプショングループの追加することで、対象のストアドプロシージャが使えるようになる
②RDSがS3を触れるようなIAM権限設定も必要
その他気になったこと
S3への通信にVPCエンドポイントが必須か?
VPCエンドポイントは不要。
以下より、プライベートサブネットにいる RDS for OracleをS3統合させたい場合でも、VPCエンドポイントの設置は不要。(AWS内部のNWを利用していると推測される)
DB インスタンスで使用される Amazon VPC は Amazon S3 エンドポイントへのアクセスを提供する必要はありません。
参考: Amazon S3 と RDS for Oracle を統合する IAM アクセス許可の設定
菅谷 歩 (記事一覧)