Amazon Relational Database Service
ユーザーガイド (API バージョン 2014-10-31)

Amazon S3 の統合

Amazon RDS for Oracle DB インスタンスと Amazon S3 バケットの間でファイルを転送することができます。Data Pump などの Oracle の機能と Amazon S3 統合を使用できます。たとえば、Amazon S3 の Data Pump ファイルを DB インスタンスのホストにダウンロードすることができます。

注記

DB インスタンスと Amazon S3 バケットが同じ AWS リージョンに存在する必要があります。

Amazon RDS Oracle と Amazon S3 を統合する前提条件

Amazon RDS for Oracle と Amazon S3 を統合するには、Amazon S3 バケットへのアクセス権が Amazon RDS DB インスタンスに必要です。そのためには、AWS Identity and Access Management (IAM) ポリシーと IAM ロールを作成します。DB インスタンスで使用される Amazon VPC は Amazon S3 エンドポイントへのアクセスを提供する必要はありません。

注記

ロールを DB インスタンスに追加するには、DB インスタンスのステータスが available である必要があります。

コンソール

Amazon S3 バケットへのアクセスを Amazon RDS に許可する IAM ポリシーを作成するには

  1. IAM マネジメントコンソールを開きます。

  2. ナビゲーションペインで、[ポリシー] を選択します。

  3. [Create policy] を選択します。

  4. [Visual editor] タブで、[Choose a service] を選択し、[S3] を選択します。

  5. [アクション] で [すべて展開] を選択してから、IAM ポリシーに必要なバケットへのアクセス許可とオブジェクトへのアクセス許可を選択します。

    必要なアクセスのタイプに基づき、適切なアクションをポリシーに含めます。

    • GetObject – Amazon S3 バケットから Amazon RDS へのファイルの転送に必要。

    • ListBucket – Amazon S3 バケットから Amazon RDS へのファイルの転送に必要。

    • PutObject – Amazon RDS から Amazon S3 バケットへのファイルの転送に必要。

    オブジェクトへのアクセス許可は、Amazon S3 のオブジェクトオペレーションのアクセス許可であり、バケット自体ではなくバケット内のオブジェクトに付与する必要があります。Amazon S3 におけるオブジェクトオペレーションのアクセス許可の詳細については、「オブジェクトオペレーションに対するアクセス許可」を参照してください。

  6. [リソース] を選択し、[バケット] に [ARN の追加] を選択します。

  7. [Add ARN(s)] ダイアログボックスで、リソースの詳細を指定し、[Add] を選択します。

    アクセスを許可する Amazon S3 バケットを指定します。たとえば、example-bucket という名前の Amazon S3 バケットへのアクセスを Amazon RDS に許可するには、Amazon リソースネーム (ARN) の値を arn:aws:s3:::example-bucket に設定します。

  8. [object] リソースがリストされた場合は、[object] に対して [Add ARN] を選択します。

  9. [Add ARN(s)] ダイアログボックスで、リソースの詳細を指定します。

    Amazon S3 バケットの場合は、アクセスを許可する Amazon S3 バケットを指定します。オブジェクトの場合は、[Any] を選択してバケット内の任意のオブジェクトにアクセス許可を付与できます。

    注記

    Amazon S3 バケット内の特定のファイルやフォルダにのみアクセスすることを Amazon RDS に許可するには、[Amazon リソースネーム (ARN)] に、より具体的な ARN 値を設定します。Amazon S3 のアクセスポリシーの定義方法については、「Amazon S3 リソースへのアクセス許可の管理」を参照してください。

  10. (オプション) [さらにアクセス許可を追加する] を選択して、ポリシーに別の Amazon S3 バケットを追加し、そのバケットに対して前のステップを繰り返します。

    注記

    このステップを繰り返して、対応するバケットのアクセス許可ステートメントを、Amazon RDS からアクセスする各 Amazon S3 バケットのポリシーに追加できます。オプションで、Amazon S3 内のすべてのバケットとオブジェクトへのアクセスを許可できます。

  11. [ポリシーの確認] を選択します。

  12. [ 名前] に、IAM ポリシーの名前 (例: rds-s3-integration-policy) を設定します。この名前は、IAM ロールを作成して DB インスタンスに関連付ける際に使用します。オプションで [Description] 値を追加することもできます。

  13. [Create policy] を選択します。

Amazon S3 バケットへのアクセスを Amazon RDS に許可する IAM ロールを作成するには

  1. ナビゲーションペインで [Roles (ロール) ] を選択します。

  2. [ロールの作成] を選択します。

  3. [AWS のサービス] で、[RDS] を選択します。

  4. [ユースケースの選択] で、[RDS – Add Role to Database (ロールをデータベースに追加する)] を選択します。

  5. [Next: Permissions (次へ: アクセス許可)] を選択します。

  6. [アクセス許可ポリシーをアタッチする] の [検索] に、作成した IAM ポリシーの名前を入力し、リストに表示されたポリシーを選択します。

  7. [次へ: タグ]、[次へ: レビュー] の順に選択します。

  8. [ロール名] を IAM ロールの名前 (例: rds-s3-integration-role) に設定します。オプションの [ロールの説明] 値を追加することもできます。

  9. [Create Role] を選択します。

IAM ロールを DB インスタンスに関連付けるには

  1. AWS マネジメントコンソールにサインインし、Amazon RDS コンソール (https://console.aws.amazon.com/rds/) を開きます。

  2. 詳細を表示する Oracle DB インスタンスの名前を選択します。

  3. [接続とセキュリティ] タブの [IAM ロールの管理] セクションで、[このインスタンスに IAM ロールを追加] で追加するロールを選択します。

  4. [機能] で、[S3_INTEGRATION] を選択します。

    
                            S3_INTEGRATION ロールの追加
  5. [Add role] を選択します。

AWS CLI

Amazon S3 バケットへのアクセスを Amazon RDS に付与するには

  1. Amazon S3 バケットへのアクセス権を Amazon RDS に付与する AWS Identity and Access Management (IAM) ポリシーを作成します。

    必要なアクセスのタイプに基づき、適切なアクションをポリシーに含めます。

    • GetObject – Amazon S3 バケットから Amazon RDS へのファイルの転送に必要。

    • ListBucket – Amazon S3 バケットから Amazon RDS へのファイルの転送に必要。

    • PutObject – Amazon RDS から Amazon S3 バケットへのファイルの転送に必要。

    以下の AWS CLI コマンドでは、これらのオプションを指定して、rds-s3-integration-policy という名前の IAM ポリシーを作成します。このポリシーでは、your-s3-bucket-arn という名前のバケットへのアクセス権が付与されます。

    Linux、OS X、Unix の場合:

    aws iam create-policy \ --policy-name rds-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:::your-s3-bucket-arn", "arn:aws:s3:::your-s3-bucket-arn/*" ] } ] }'

    Windows の場合:

    aws iam create-policy ^ --policy-name rds-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:::your-s3-bucket-arn", "arn:aws:s3:::your-s3-bucket-arn/*" ] } ] }'
  2. ポリシーが作成されたら、そのポリシーの Amazon リソースネーム (ARN) を書き留めます。この ARN は、後のステップで必要になります。

  3. Amazon S3 バケットにアクセスするには、お客様に代わって Amazon RDS が引き受けることのできる IAM ロールを作成します。

    以下の AWS CLI コマンドでは、この目的で rds-s3-integration-role を作成します。

    Linux、OS X、Unix の場合:

    aws iam create-role \ --role-name rds-s3-integration-role \ --assume-role-policy-document '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "rds.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }'

    Windows の場合:

    aws iam create-role ^ --role-name rds-s3-integration-role ^ --assume-role-policy-document '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "rds.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }'

    詳細については、『IAM ユーザーガイド』の「IAM ユーザーにアクセス許可を委任するロールの作成」を参照してください。

  4. ロールが作成されたら、このロールの ARN を書き留めます。この ARN は、後のステップで必要になります。

  5. 作成したポリシーを、作成したロールにアタッチします。

    以下の AWS CLI コマンドでは、rds-s3-integration-role という名前のロールにこのポリシーをアタッチします。

    Linux、OS X、Unix の場合:

    aws iam attach-role-policy \ --policy-arn your-policy-arn \ --role-name rds-s3-integration-role

    Windows の場合:

    aws iam attach-role-policy ^ --policy-arn your-policy-arn ^ --role-name rds-s3-integration-role

    your-policy-arn を、以前のステップで書き留めたポリシー ARN に置き換えます。

  6. ロールを Oracle DB インスタンスに追加します。

    以下の AWS CLI コマンドでは、mydbinstance という名前の Oracle DB インスタンスにこのロールを追加します。

    Linux、OS X、Unix の場合:

    aws rds add-role-to-db-instance \ --db-instance-identifier mydbinstance \ --feature-name S3_INTEGRATION \ --role-arn your-role-arn

    Windows の場合:

    aws rds add-role-to-db-instance ^ --db-instance-identifier mydbinstance ^ --feature-name S3_INTEGRATION ^ --role-arn your-role-arn

    your-role-arn を、以前のステップで書き留めたロール ARN に置き換えます。--feature-name オプションには S3_INTEGRATION が指定されている必要があります。

Amazon S3 統合オプションの追加

Amazon RDS for Oracle と Amazon S3 を統合するには、S3_INTEGRATION オプションを含むオプショングループに、Amazon RDS Oracle DB インスタンスが関連付けられている必要があります。

コンソール

Amazon S3 統合用のオプショングループを設定するには

  1. 新しいオプショングループを作成するか、S3_INTEGRATION オプションを追加する既存のオプショングループを識別します。

    オプショングループの作成の詳細については、「オプショングループを作成する」を参照してください。

  2. オプショングループに [S3_INTEGRATION] オプションを追加します。

    オプショングループへのオプションの追加の詳細については、「オプショングループにオプションを追加する」を参照してください。

  3. 新しい Oracle DB インスタンスを作成し、オプショングループをそのインスタンスに関連付けるか、オプショングループを関連付けるように Oracle DB インスタンスを変更します。

    Oracle DB インスタンスの作成方法については、「Oracle データベースエンジンを実行する DB インスタンスを作成する」を参照してください。

    Oracle DB インスタンスの変更方法については、「Oracle データベースエンジンを実行する DB インスタンスの変更」を参照してください。

AWS CLI

Amazon S3 統合用のオプショングループを設定するには

  1. 新しいオプショングループを作成するか、S3_INTEGRATION オプションを追加する既存のオプショングループを識別します。

    オプショングループの作成の詳細については、「オプショングループを作成する」を参照してください。

  2. オプショングループに [S3_INTEGRATION] オプションを追加します。

    たとえば、以下の AWS CLI コマンドでは、S3_INTEGRATION オプションを、myoptiongroup という名前のオプショングループに追加します。

    Linux、OS X、Unix の場合:

    aws rds add-option-to-option-group \ --option-group-name myoptiongroup \ --options OptionName=S3_INTEGRATION,OptionVersion=1.0

    Windows の場合:

    aws rds add-option-to-option-group ^ --option-group-name myoptiongroup ^ --options OptionName=S3_INTEGRATION,OptionVersion=1.0
  3. 新しい Oracle DB インスタンスを作成し、オプショングループをそのインスタンスに関連付けるか、オプショングループを関連付けるように Oracle DB インスタンスを変更します。

    Oracle DB インスタンスの作成方法については、「Oracle データベースエンジンを実行する DB インスタンスを作成する」を参照してください。

    Oracle DB インスタンスの変更方法については、「Oracle データベースエンジンを実行する DB インスタンスの変更」を参照してください。

Amazon RDS for Oracle と Amazon S3 バケットの間でファイルを転送する

Amazon RDS プロシージャを使用して、Oracle DB インスタンスから Amazon S3 バケットにファイルをアップロードすることができます。また、Amazon RDS プロシージャを使用して、Amazon S3 バケットから Oracle DB インスタンスにファイルをダウンロードすることもできます。

注記

これらの手順では、単一のディレクトリにファイルをアップロードまたはダウンロードします。これらのオペレーションにサブディレクトリを含めることはできません。アップロードおよびダウンロード操作は連続して処理されます。

Oracle DB インスタンスから Amazon S3 バケットにファイルをアップロードする

Oracle DB インスタンスから Amazon S3 バケットにファイルをアップロードするには、Amazon RDS プロシージャ (rdsadmin.rdsadmin_s3_tasks.upload_to_s3) を使用します。たとえば、Oracle Recovery Manager (RMAN) のバックアップファイルをアップロードすることができます。RMAN バックアップの詳細については、「Oracle DB インスタンスの一般的な DBA Recovery Manager (RMAN) タスク」を参照してください。

rdsadmin.rdsadmin_s3_tasks.upload_to_s3 プロシージャには以下のパラメータがあります。

パラメータ名 データ型 デフォルト値 必須 説明

p_bucket_name

VARCHAR2

必須

ファイルをアップロードする Amazon S3 バケットの名前。

p_directory_name

VARCHAR2

必須

ファイルのアップロード元の Oracle ディレクトリオブジェクトの名前。ディレクトリは、ユーザーが作成した任意のディレクトリオブジェクト、または Data Pump ディレクトリ (例: DATA_PUMP_DIR) です。

注記

ファイルは、指定したディレクトリからのみアップロードできます。指定したディレクトリのサブディレクトリにファイルをアップロードすることはできません。

p_s3_prefix

VARCHAR2

必須

ファイルをアップロードする Amazon S3 ファイル名のプレフィックス。プレフィックスが空の場合は、指定された Amazon S3 バケットの最上位レベルにすべてのファイルがアップロードされますが、そのファイル名にプレフィックスは付加されません。

たとえば、プレフィックスが folder_1/oradb の場合、ファイルは folder_1 にアップロードされます。この場合、ファイルにはそれぞれ oradb プレフィックスが追加されます。

p_prefix

VARCHAR2

必須

アップロードするファイル名が一致する必要があるファイル名のプレフィックス。プレフィックスが空の場合は、指定されたディレクトリ内のファイルがすべてアップロードされます。

次の例では、DATA_PUMP_DIR ディレクトリのすべてのファイルを、mys3bucket という名前の Amazon S3 バケットにアップロードします。

SELECT rdsadmin.rdsadmin_s3_tasks.upload_to_s3( p_bucket_name => 'mys3bucket', p_prefix => '', p_s3_prefix => '', p_directory_name => 'DATA_PUMP_DIR') AS TASK_ID FROM DUAL;

次の例では、DATA_PUMP_DIR ディレクトリ内のプレフィックス db のついたすべてのファイルを、mys3bucket という名前の Amazon S3 バケットにアップロードします。

SELECT rdsadmin.rdsadmin_s3_tasks.upload_to_s3( p_bucket_name => 'mys3bucket', p_prefix => 'db', p_s3_prefix => '', p_directory_name => 'DATA_PUMP_DIR') AS TASK_ID FROM DUAL;

次の例では、DATA_PUMP_DIR ディレクトリのすべてのファイルを、mys3bucket という名前の Amazon S3 バケットにアップロードします。ファイルは、dbfiles フォルダにアップロードされます。

SELECT rdsadmin.rdsadmin_s3_tasks.upload_to_s3( p_bucket_name => 'mys3bucket', p_prefix => '', p_s3_prefix => 'dbfiles/', p_directory_name => 'DATA_PUMP_DIR') AS TASK_ID FROM DUAL;

次の例では、DATA_PUMP_DIR ディレクトリのすべてのファイルを、mys3bucket という名前の Amazon S3 バケットにアップロードします。ファイルは dbfiles フォルダにアップロードされ、各ファイル名の先頭には ora が付加されます。

SELECT rdsadmin.rdsadmin_s3_tasks.upload_to_s3( p_bucket_name => 'mys3bucket', p_prefix => '', p_s3_prefix => 'dbfiles/ora', p_directory_name => 'DATA_PUMP_DIR') AS TASK_ID FROM DUAL;

それぞれの例では、SELECT ステートメントでは、タスクの ID が VARCHAR2 データ型で返ります。

Amazon S3 バケットから Oracle DB インスタンスにファイルをダウンロードする

Amazon S3 バケットから Oracle DB インスタンスにファイルをダウンロードするには、Amazon RDS プロシージャ (rdsadmin.rdsadmin_s3_tasks.download_from_s3) を使用します。rdsadmin.rdsadmin_s3_tasks.download_from_s3 プロシージャには以下のパラメータがあります。

パラメータ名 データ型 デフォルト値 必須 説明

p_bucket_name

VARCHAR2

必須

ファイルのダウンロード元の Amazon S3 バケットの名前。

p_directory_name

VARCHAR2

必須

ファイルをダウンロードする Oracle ディレクトリオブジェクトの名前。ディレクトリは、ユーザーが作成した任意のディレクトリオブジェクト、または Data Pump ディレクトリ (例: DATA_PUMP_DIR) です。

p_s3_prefix

VARCHAR2

''

optional

ダウンロードするファイル名が一致する必要があるファイル名のプレフィックス。プレフィックスを空にすると、指定された Amazon S3 バケット内の最上位ファイルがすべてダウンロードされますが、バケットのフォルダ内のファイルはダウンロードされません。

この手順では、プレフィックスと一致する最初のレベルのフォルダからのみ、Amazon S3 オブジェクトをダウンロードします。指定されたプレフィックスに一致する多層のディレクトリはダウンロードされません。

たとえば、Amazon S3 バケットのフォルダ構造が folder_1/folder_2/folder_3 とします。また、'folder_1/folder_2/' プレフィックスを指定するとします。この場合、folder_2 のファイルのみダウンロードされ、folder_1 または folder_3 のファイルはダウンロードされません。

その代わりに、'folder_1/folder_2' を指定する場合、'folder_2' プレフィックスに一致する、folder_1 のファイルはすべてダウンロードされますが、folder_2 のファイルはダウンロードされません。

次の例では、mys3bucket という名前の Amazon S3 バケットのファイルをすべて、DATA_PUMP_DIR ディレクトリにダウンロードします。

SELECT rdsadmin.rdsadmin_s3_tasks.download_from_s3( p_bucket_name => 'mys3bucket', p_directory_name => 'DATA_PUMP_DIR') AS TASK_ID FROM DUAL;

以下の例では、mys3bucket という名前の Amazon S3 バケット内にある、プレフィックス db がついたファイルをすべて、DATA_PUMP_DIR ディレクトリにダウンロードします。

SELECT rdsadmin.rdsadmin_s3_tasks.download_from_s3( p_bucket_name => 'mys3bucket', p_s3_prefix => 'db', p_directory_name => 'DATA_PUMP_DIR') AS TASK_ID FROM DUAL;

それぞれの例では、SELECT ステートメントでは、タスクの ID が VARCHAR2 データ型で返ります。

以下の例では、mys3bucket という名前の Amazon S3 バケット内にある myfolder/ フォルダ内のファイルをすべて、DATA_PUMP_DIR ディレクトリにダウンロードします。Amazon S3 フォルダを指定するには、プレフィックスのパラメータ設定を使用します。

SELECT rdsadmin.rdsadmin_s3_tasks.download_from_s3( p_bucket_name => 'mys3bucket', p_s3_prefix => 'myfolder/', p_directory_name => 'DATA_PUMP_DIR') AS TASK_ID FROM DUAL;

それぞれの例では、SELECT ステートメントでは、タスクの ID が VARCHAR2 データ型で返ります。

注記

ディレクトリからファイルを削除するには、Oracle プロシージャ UTL_FILE.FREMOVE を使用できます。詳細については、Oracle ドキュメントの「FREMOVE プロシージャ」を参照してください。

ファイル転送のステータスをモニタリングする

ファイル転送タスクでは、開始時と完了時に Amazon RDS イベントが発行されます。イベントの表示の詳細については、「Amazon RDS のイベントの表示」を参照してください。

実行中のタスクのステータスは bdump ファイルで確認できます。bdump ファイルは /rdsdbdata/log/trace ディレクトリにあります。bdump ファイルの名前形式は、以下のとおりです。

dbtask-task-id.log

task-id を、モニタリングするタスクの ID に置き換えます。

bdump ファイルの中身を表示するには、rdsadmin.rds_file_util.read_text_file ストアドプロシージャを使用します。たとえば、次のクエリでは、bdump ファイル (dbtask-1546988886389-2444.log) の中身が返ります。

SELECT text FROM table(rdsadmin.rds_file_util.read_text_file('BDUMP','dbtask-1546988886389-2444.log'));

Amazon S3 統合オプションの削除

DB インスタンスから Amazon S3 統合オプションを削除できます。

Amazon S3 統合オプションを DB インスタンスから削除するには、次のいずれかを実行します。

  • 複数の DB インスタンスから Amazon S3 統合オプションを削除するには、DB インスタンスが属しているオプショングループから S3_INTEGRATION オプションを削除します。この変更はそのオプショングループを使用するすべての DB インスタンスに影響します。詳細については、「オプショングループからオプションを削除する」を参照してください。

  • 1 つの DB インスタンスから Amazon S3 統合オプションを削除するには、DB インスタンスを変更し、S3_INTEGRATION オプションを含まない別のオプショングループを指定します。デフォルト (空) のオプショングループや別のカスタムオプショングループを指定できます。詳細については、「Oracle データベースエンジンを実行する DB インスタンスの変更」を参照してください。