こちらを参照しました
→Amazon RDS for OracleでS3と直接ファイルをやり取り可能になりました
→Amazon S3 の統合
前提
- S3を介し、ORCL1(RDS)とORCL2(RDS)でファイルをやり取りする。
- 検証はオレゴン(us-west-2)で実施。
- 事前にS3バケット(orcl-test)を作成。
オプショングループの作成
S3連携はオプショングループで有効化するらしい。
RDSコンソールからのオプショングループ画面でグループの作成
をクリック
今回は以下で設定。
エンジンはRDSのエディションに合わせ、メジャーエンジンのバージョンはRDSのバージョンに合わせる。
説明も入れないと作成ができないため、適当に入力。
エンジン | エディション |
---|---|
oracle-ee | Enterpries Edition |
oracle-se2 | Standard Edition 2 |
oracle-se | Standard Edition |
oracle-se1 | Standard Edition 1 |
作成したオプショングループ(orcl-s3)を選択しオプションの追加
オプションの追加では以下に設定。
※Oracle DB インスタンスのオプション
DBインスタンスにオプショングループを付与
今回は事前にDBインスタンスを作成している。
データベースの設定の項目のオプショングループ
に作成したオプショングループ(orcl-s3)を指定し次へ
今回は即時適用したいため、変更のスケジュールをすぐに適用
にし、DBインスタンスの変更
をクリック
IAMロールの作成
RDSがS3にアクセスするためのIAMロールを作成
- IAMポリシー(s3-integration-policy)を作成
オプション | 内容 |
---|---|
--policy-name | IAMポリシー名 (例:s3-integration-policy) |
Action | 使用する権限は s3:GetObject 、 s3:ListBucket 、 s3:PutObject の3種類 |
Resource | S3のバケット名 (例:orcl-test) |
$ aws iam create-policy \
> --policy-name s3-integration-policy \
> --policy-document '{
> "Version": "2012-10-17",
> "Statement": [
> {
> "Sid": "s3integration",
> "Action": [
> "s3:GetObject",
> "s3:ListBucket",
> "s3:PutObject"
> ],
> "Effect": "Allow",
> "Resource": [
> "arn:aws:s3:::orcl-test",
> "arn:aws:s3:::orcl-test/*"
> ]
> }
> ]
> }'
{
"Policy": {
"PolicyName": "s3-integration-policy",
"PermissionsBoundaryUsageCount": 0,
"CreateDate": "2019-07-03T05:25:34Z",
"AttachmentCount": 0,
"IsAttachable": true,
"PolicyId": "ANPAZ6OVR5XYVBJSDXSCT",
"DefaultVersionId": "v1",<img width="1749" alt="8-2.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449014/e93a18e8-e30b-9320-047f-0a7dcd5ae6cc.png">
"Path": "/",
"Arn": "arn:aws:iam::683884539377:policy/s3-integration-policy",
"UpdateDate": "2019-07-03T05:25:34Z"
}
}
- 作成したポリシーの確認
$ aws iam list-policies --query "Policies[?PolicyName == 's3-integration-policy']"
[
{
"PolicyName": "s3-integration-policy",
"PermissionsBoundaryUsageCount": 0,
"CreateDate": "2019-07-03T05:25:34Z",
"AttachmentCount": 0,
"IsAttachable": true,
"PolicyId": "ANPAZ6OVR5XYVBJSDXSCT",
"DefaultVersionId": "v1",
"Path": "/",
"Arn": "arn:aws:iam::683884539377:policy/s3-integration-policy",
"UpdateDate": "2019-07-03T05:25:34Z"
}
]
- IAMのコンソールからも作成したポリシーを確認
- 作成されたポリシーに、3種類の権限があることを確認
- IAMロール(s3-integration-role)の作成
オプション | 内容 |
---|---|
--role-name | IAMロール名 (例:s3-integration-role) |
$ aws iam create-role \
> --role-name s3-integration-role \
> --assume-role-policy-document '{
> "Version": "2012-10-17",
> "Statement": [
> {
> "Effect": "Allow",
> "Principal": {
> "Service": "rds.amazonaws.com"
> },
> "Action": "sts:AssumeRole"
> }
> ]
> }'
{
"Role": {
"AssumeRolePolicyDocument": {
"Version": "2012-10-17",
"Statement": [
{
"Action": "sts:AssumeRole",
"Effect": "Allow",
"Principal": {
"Service": "rds.amazonaws.com"
}
}
]
},
"RoleId": "AROAZ6OVR5XYUOGZ7UMX2",
"CreateDate": "2019-07-03T05:29:06Z",
"RoleName": "s3-integration-role",
"Path": "/",
"Arn": "arn:aws:iam::683884539377:role/s3-integration-role"
}
}
- 作成したロールを確認
$ aws iam list-roles --query "Roles[?RoleName == 's3-integration-role']"
[
{
"AssumeRolePolicyDocument": {
"Version": "2012-10-17",
"Statement": [
{
"Action": "sts:AssumeRole",
"Effect": "Allow",
"Principal": {
"Service": "rds.amazonaws.com"
}
}
]
},
"MaxSessionDuration": 3600,
"RoleId": "AROAZ6OVR5XYUOGZ7UMX2",
"CreateDate": "2019-07-03T05:29:06Z",
"RoleName": "s3-integration-role",
"Path": "/",
"Arn": "arn:aws:iam::683884539377:role/s3-integration-role"
}
]
- IAMコンソールからも作成したロールを確認
- 作成したIAMロールにさきほど作成したIAMポリシーをアタッチ
オプション | 内容 |
---|---|
-policy-arn | IAMロールにアタッチするポリシーのARN |
--role-name | アタッチされるロール名 (例:s3-integration-role) |
$ aws iam attach-role-policy \
> --policy-arn arn:aws:iam::683884539377:policy/s3-integration-policy \
> --role-name s3-integration-role
- ロールにアタッチされたポリシーの確認
オプション | 内容 |
---|---|
--role-name | IAMロール名 |
$ aws iam list-attached-role-policies --role-name s3-integration-role
{
"AttachedPolicies": [
{
"PolicyName": "s3-integration-policy",
"PolicyArn": "arn:aws:iam::683884539377:policy/s3-integration-policy"
}
]
}
- IAMコンソールからもIAMロールにIAMポリシーがアタッチされていることを確認
- RDSにIAMロールを付与
オプション | 内容 |
---|---|
--db-instance-identifier | データベース名 |
--role-arn | 付与するロールのARN |
$ aws rds add-role-to-db-instance \
> --db-instance-identifier orcl1 \
> --feature-name S3_INTEGRATION \
> --role-arn arn:aws:iam::683884539377:role/s3-integration-role
※今回は、S3のファイルをORCL2にダウンロードするため、ORCL2にもIAMロールを付与しておく
ダンプファイルのエクスポート
ORCL1でダンプファイルをエクスポート。
エクスポート方法はこちら。
S3へ転送するファイルを確認。
SQL> set pages 100 line 200
SQL> col filename for a20
SQL> select * from TABLE(RDSADMIN.RDS_FILE_UTIL.LISTDIR('DATA_PUMP_DIR')) ORDER BY MTIME;
FILENAME TYPE FILESIZE MTIME
-------------------- ---------- ---------- ---------
scott.dmp file 26267648 28-JUN-19 ★今回の転送対象
exp_scott.log file 1034 28-JUN-19
datapump/ directory 4096 28-JUN-19
expdb_tables.log file 140 28-JUN-19
S3へのアップロード
-
rdsadmin.rdsadmin_s3_tasks.upload_to_s3 プロシージャ
を使用し、
ORCL1でエクスポートしたダンプファイル(scott.dmp)をS3へアップロードする。rdsadmin.rdsadmin_s3_tasksパッケージについては
こちら
オプション | 内容 |
---|---|
p_bucket_name | ファイルをアップロードする S3バケット名 |
p_directory_name | アップロード元のディレクトリオブジェクト名 |
p_s3_prefix | アップロードする S3ファイル名のプレフィックス |
p_prefix | アップロードするファイル名 |
SQL> SELECT rdsadmin.rdsadmin_s3_tasks.upload_to_s3(
p_bucket_name => 'orcl-test',
p_directory_name => 'DATA_PUMP_DIR',
p_s3_prefix => 'orcl-test/',
p_prefix => 'scott.dmp')
AS TASK_ID FROM DUAL;
TASK_ID
--------------------------------------------------------------------------------
1562135977873-33
- ログの確認
SELECT text FROM table(rdsadmin.rds_file_util.read_text_file('BDUMP','dbtask-1562135977873-33.log'));
TEXT
--------------------------------------------------------------------------------
2019-07-03 06:39:39.129 UTC [INFO ] File #1: Uploading the file /rdsdbdata/datap
ump/scott.dmp to Amazon S3 with bucket name orcl-test and key orcl-test/scott.dm
p.
2019-07-03 06:39:41.300 UTC [INFO ] The file /rdsdbdata/datapump/scott.dmp was u
ploaded to Amazon S3 with bucket name orcl-test and key orcl-test/scott.dmp.
2019-07-03 06:39:41.300 UTC [INFO ] The task finished successfully.
- S3にファイルがアップロードされたか確認
S3からダウンロード
ORCL2からS3上のファイルをダウンロード。
- DATA_PUMP_DIRのファイルを確認
SQL> set pages 100 line 200
SQL> col filename for a20
SQL> select * from TABLE(RDSADMIN.RDS_FILE_UTIL.LISTDIR('DATA_PUMP_DIR')) ORDER BY MTIME;
FILENAME TYPE FILESIZE MTIME
-------------------- ---------- ---------- ---------
datapump/ directory 4096 02-JUL-19
-
rdsadmin.rdsadmin_s3_tasks.download_from_s3プロシージャ
を使用しS3のファイルをダウンロード
オプション | 内容 |
---|---|
p_bucket_name | ファイルをダウンロードする S3バケット名 |
p_directory_name | ダウンロード先のディレクトリオブジェクト名 |
p_s3_prefix | ダウンロードする S3ファイル名のプレフィックス |
SQL> SELECT rdsadmin.rdsadmin_s3_tasks.download_from_s3(
p_bucket_name => 'orcl-test',
p_directory_name => 'DATA_PUMP_DIR',
p_s3_prefix => 'orcl-test/')
AS TASK_ID FROM DUAL;
TASK_ID
----------------------------------
1562139822040-55
- ログの確認
SQL> col text for a170
SQL> SELECT text FROM table(rdsadmin.rds_file_util.read_text_file('BDUMP','dbtask-1562139822040-55.log'));
TEXT
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
2019-07-03 07:43:42.095 UTC [INFO ] This task is about to list the Amazon S3 objects for AWS Region us-west-2, bucket name orcl-test, and prefix orcl-test/.
2019-07-03 07:43:42.167 UTC [INFO ] The task successfully listed the Amazon S3 objects for AWS Region us-west-2, bucket name orcl-test, and prefix orcl-test/.
2019-07-03 07:43:42.178 UTC [INFO ] This task is about to download the Amazon S3 object or objects in /rdsdbdata/datapump from bucket name orcl-test and key orcl-test/scott.dmp.
2019-07-03 07:43:43.318 UTC [INFO ] The task successfully downloaded the Amazon S3 object or objects from bucket name orcl-test with key orcl-test/scott.dmp to the location /rdsdbdata/datapump.
2019-07-03 07:43:43.356 UTC [INFO ] The task finished successfully.
- DATA_PUMP_DIRのファイルを確認
SQL> set pages 100 line 200
SQL> col filename for a20
SQL> select * from TABLE(RDSADMIN.RDS_FILE_UTIL.LISTDIR('DATA_PUMP_DIR')) ORDER BY MTIME;
FILENAME TYPE FILESIZE MTIME
-------------------- ---------- ---------- ---------
scott.dmp file 26267648 03-JUL-19 ★ダウンロードされた
datapump/ directory 4096 03-JUL-19
ダンプファイルのインポート
インポートはこちらを参照