2
6

More than 3 years have passed since last update.

RDS for Oracle と S3 でファイルをやり取りする

Last updated at Posted at 2019-07-03

こちらを参照しました
 →Amazon RDS for OracleでS3と直接ファイルをやり取り可能になりました
 →Amazon S3 の統合

前提

  • S3を介し、ORCL1(RDS)とORCL2(RDS)でファイルをやり取りする。
  • 検証はオレゴン(us-west-2)で実施。
  • 事前にS3バケット(orcl-test)を作成。

オプショングループの作成

S3連携はオプショングループで有効化するらしい。

RDSコンソールからのオプショングループ画面でグループの作成をクリック
1.png

今回は以下で設定。
エンジンはRDSのエディションに合わせ、メジャーエンジンのバージョンはRDSのバージョンに合わせる。
説明も入れないと作成ができないため、適当に入力。

エンジン エディション
oracle-ee Enterpries Edition
oracle-se2 Standard Edition 2
oracle-se Standard Edition
oracle-se1 Standard Edition 1

2.png

作成したオプショングループ(orcl-s3)を選択しオプションの追加
3.png

オプションの追加では以下に設定。
Oracle DB インスタンスのオプション

4.png

DBインスタンスにオプショングループを付与

今回は事前にDBインスタンスを作成している。

RDSのコンソールで対象インスタンスを選択し変更
5.png

データベースの設定の項目のオプショングループに作成したオプショングループ(orcl-s3)を指定し次へ
6.png

今回は即時適用したいため、変更のスケジュールをすぐに適用にし、DBインスタンスの変更をクリック
7.png

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のコンソールからも作成したポリシーを確認

8.png

  • 作成されたポリシーに、3種類の権限があることを確認

8-2.png

  • 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コンソールからも作成したロールを確認

9.png

  • 作成した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ポリシーがアタッチされていることを確認

スクリーンショット 2019-07-03 16.20.07.png

  • 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

10.png

※今回は、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にファイルがアップロードされたか確認

11.png

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

ダンプファイルのインポート

インポートはこちらを参照

2
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
6