Amazon S3 統合 - Amazon Relational Database Service

Amazon S3 統合

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

注記

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

Amazon S3 と RDS for Oracle を統合する IAM アクセス許可の設定

RDS for Oracle が Amazon S3 と統合するには、DB インスタンスが Amazon S3 バケットにアクセスできる必要があります。DB インスタンスで使用される Amazon VPC は Amazon S3 エンドポイントへのアクセスを提供する必要はありません。

RDS for Oracle は、あるアカウントの DB インスタンスから別のアカウントの Amazon S3 バケットへのファイルのアップロードをサポートしています。追加のステップが必要な場合は、以下のセクションで説明します。

ステップ 1: Amazon RDS ロール用の IAM ポリシーを作成する

このステップでは、Amazon S3 バケットからお客様の RDS DB インスタンスにファイルを転送するために必要なアクセス許可を持つ AWS Identity and Access Management (IAM) ポリシーを作成します。

ポリシーを作成するために、以下のものがあることを確認します。

  • バケットの Amazon リソースネーム (ARN)

  • お客様の AWS KMS キーの ARN、バケットが SSE-KMS または SSE-S3 暗号化を使用している場合

    注記

    Oracle DB インスタンスは、SSE-C で暗号化された Amazon S3 バケットにアクセスできません。

詳細については、「Amazon Simple Storage Service ユーザーガイド」の「サーバー側の暗号化を使用したデータの保護」を参照してください。

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

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

  2. [Access management (アクセス管理)] で、[Policies (ポリシー)] を選択します。

  3. [Create Policy (ポリシーの作成)] を選択します。

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

  5. [Actions (アクション)] で [Expand all (すべて展開)] を選択し、Amazon S3 バケットから Amazon RDS にファイルを転送するために必要なバケットのアクセス許可とオブジェクトのアクセス許可を選択します。例えば、以下を実行してください。

    • [List (リスト)] を展開し、[ListBucket] を選択します。

    • [Read (読み取り)] を展開し、[GetObject] を選択します。

    • [Write] (書き込み) を展開し、[PutObject] および [DeleteObject] を選択します。

    • [Permissions management] (アクセス許可の管理) を展開し、PutObjectAcl を選択します。このアクセス許可は、別のアカウントが所有するバケットにファイルをアップロードする予定で、このアカウントがバケットの内容を完全に制御する必要がある場合に必要です。

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

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

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

    アクセスを許可する Amazon S3 バケットを指定します。例えば、Amazon RDS が example-bucket という名前の Amazon S3 バケットにアクセスできるようにするには、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. (オプション) ポリシーにリソースを追加するには、[Add addition permissions (アクセス許可を追加する)] を選択します。例えば、以下を実行してください。

    • バケットがカスタム KMS キーで暗号化されている場合は、サービスの KMS を選択します。アクションで、[Encrypt][ReEncrypt][Decrypt][DescribeKey]、および [GenerateDataKey] を選択します。リソースとしてカスタムキーの ARN を入力します。詳細については、Amazon Simple Storage Service ユーザーガイドの「Protecting Data Using Server-Side Encryption with KMS keys Stored in AWS Key Management Service (SSE-KMS)」を参照してください。

    • Amazon RDS が他のバケットにアクセスするためにアクセスが必要な場合は、これらのバケットの ARN を追加します。オプションで、Amazon S3 内のすべてのバケットとオブジェクトへのアクセスを許可できます。

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

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

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

Amazon S3 バケットに Amazon RDS へのアクセス許可を付与する AWS Identity and Access Management IAM ポリシーを作成します。ポリシーを作成したら、ポリシーの ARN を書き留めます。この ARN は、後のステップで必要になります。

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

  • 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、macOS、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/*" ] } ] }'

次の例には、カスタム KMS キーのアクセス許可が含まれています。

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", "kms:Decrypt", "kms:Encrypt", "kms:ReEncrypt", "kms:GenerateDataKey", "kms:DescribeKey", ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::your-s3-bucket-arn", "arn:aws:s3:::your-s3-bucket-arn/*", "arn:aws:kms:::your-kms-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/*" ] } ] }'

次の例には、カスタム KMS キーのアクセス許可が含まれています。

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", "kms:Decrypt", "kms:Encrypt", "kms:ReEncrypt", "kms:GenerateDataKey", "kms:DescribeKey", ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::your-s3-bucket-arn", "arn:aws:s3:::your-s3-bucket-arn/*", "arn:aws:kms:::your-kms-arn" ] } ] }'

ステップ 2: (オプション) Amazon S3 バケットの IAM ポリシーを作成する

このステップは、次の条件でのみ必要です。

  • あるアカウント (アカウント A) から Amazon S3 バケットにファイルをアップロードし、別のアカウント (アカウント B) からファイルにアクセスする予定です。

  • アカウント B がバケットを所有しています。

  • アカウント B は、バケットにロードされたオブジェクトを完全に制御する必要があります。

上記の条件が適用されない場合は、ステップ 3: DB インスタンスの IAM ロールを作成し、ポリシーをアタッチする に進みます。

バケットポリシーを作成するために、以下のものがあることを確認します。

  • アカウント A のアカウント ID

  • アカウント A のユーザー名

  • アカウント B の Amazon S3 バケットの ARN 値

バケットポリシーを作成または編集するには

  1. AWS Management Console にサインインし、Amazon S3 コンソール (https://console.aws.amazon.com/s3/) を開きます。

  2. [Buckets (バケット)] リストで、バケットポリシーを作成するバケットの名前、またはバケットポリシーを編集するバケットの名前を選択します。

  3. [Permissions (アクセス許可)] を選択します。

  4. [Bucket policy (バケットポリシー)] で [編集] を選択します。バケットポリシーの編集ページが開きます。

  5. [Edit bucket policy] (バケットポリシーの編集) ページで、Amazon S3 ユーザーガイド[Policy examples] (ポリシーの例)を確認するか、[Policy generator] (ポリシージェネレーター) を選択してポリシーを自動的に生成するか、[Policy] (ポリシー セクション) で JSON を編集します。

    ポリシージェネレーターを選択すると、AWS ポリシージェネレーターが新しいウィンドウで開きます。

    1. ポリシーの種類の選択AWS ポリシーポリシージェネレータページで、 S3 バケットポリシーを選択します。

    2. 提供されたフィールドに情報を入力してステートメントを追加し、ステートメントの追加を選択します。追加するステートメントの数だけ繰り返します。ポリシーステートメントの詳細については、IAM ユーザーガイドIAM JSON ポリシーのエレメントのリファレンスを参照してください。

      注記

      便宜上、バケットポリシーの編集ページでは、現在のバケットのバケット ARN (Amazonリソース名) がポリシーテキストフィールドの上に表示されます。この ARN をコピーして、AWSポリシージェネレータのステートメントで使用できます。

    3. ステートメントの追加が完了したら、ポリシーの生成を選択します。

    4. 生成されたポリシーテキストをコピーし、[閉じる] を選択すると、Amazon S3 コンソールのバケットポリシーの編集ページに戻ります。

  6. ポリシー ボックスで、既存のポリシーを編集するか、ポリシージェネレータからバケットポリシーを貼り付けます。ポリシーを保存する前に、セキュリティ警告、エラー、一般的な警告、および提案を解決してください。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "Example permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::account-A-ID:account-A-user" }, "Action": [ "s3:PutObject", "s3:PutObjectAcl" ], "Resource": [ "arn:aws:s3:::account-B-bucket-arn", "arn:aws:s3:::account-B-bucket-arn/*" ] } ] }
  7. 変更の保存を選択すると、[バケット許可] のページへ戻ります。

ステップ 3: DB インスタンスの IAM ロールを作成し、ポリシーをアタッチする

このステップは、IAM ポリシーを ステップ 1: Amazon RDS ロール用の IAM ポリシーを作成する で作成したことを前提としています。このステップでは、RDS for Oracle DB インスタンスのロールを作成し、ロールにポリシーをアタッチします。

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

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

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

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

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

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

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

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

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

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

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

ロールを作成してポリシーをアタッチするには

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

    リソースベースの信頼関係では aws:SourceArn および aws:SourceAccount のグローバル条件コンテキストキーを使用して、サービスに付与する特定のリソースへのアクセス許可を制限することをお勧めします。これは、混乱した使節の問題に対する最も効果的な保護方法です。

    両方のグローバル条件コンテキストキーを使用し、aws:SourceArn 値にアカウント ID を含めます。この場合は、aws:SourceAccount 値と aws:SourceArn 値のアカウントは、同じステートメントで使用する場合、同じアカウント ID を使用する必要があります。

    • 単一リソースに対するクロスサービスアクセスが必要な場合はaws:SourceArnを使用します。

    • そのアカウント内の任意のリソースをクロスサービス使用に関連付けることを許可する場合、aws:SourceAccountを使用します。

    信頼関係では、aws:SourceArn グローバル条件コンテキストキーに、必ず、ロールにアクセスするリソースの完全な Amazon リソースネーム (ARN) を使用します。

    次の AWS CLI コマンドでは、この目的で rds-s3-integration-role という名前のロールを作成します。

    Linux、macOS、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", "Condition": { "StringEquals": { "aws:SourceAccount": my_account_ID, "aws:SourceArn": "arn:aws:rds:Region:my_account_ID:db:dbname" } } } ] }'

    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", "Condition": { "StringEquals": { "aws:SourceAccount": my_account_ID, "aws:SourceArn": "arn:aws:rds:Region:my_account_ID:db:dbname" } } } ] }'

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

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

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

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

    Linux、macOS、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 に置き換えます。

ステップ 4: IAM ロールを DB インスタンスに関連付ける

このステップでは、Amazon S3 アクセス許可ポリシーがアタッチされたロールへのアクセス権があることを前提としています。そのロールを DB インスタンスに関連付けることができるようになりました。インスタンスのステータスは available である必要があります。

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

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

  2. ナビゲーションペインから [Databases (データベース)] を選択します。

  3. データベースインスタンスが使用できない場合は、[Actions (アクション)]、[Start (スタート)] の順に選択します。インスタンスのステータスに [Started (スタート済み)] と表示されたら、次のステップに進みます。

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

  5. 接続性とセキュリティ」 タブで、ページ下部のIAM ロールを管理する セクションまでスクロールダウンします。

  6. IAM ロールをこのインスタンスに追加するセクションに追加するロールを選択します。

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

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

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

Linux、macOS、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 に置き換えます。S3_INTEGRATION オプションには --feature-name が指定されている必要があります。

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

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

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

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

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

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

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

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

    DB インスタンスの作成については、「Amazon RDS DB インスタンスの作成」を参照してください。

    Oracle DB インスタンスの変更方法については、「Amazon RDS DB インスタンスを変更する」を参照してください。

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

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

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

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

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

    Linux、macOS、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 インスタンスを変更します。

    DB インスタンスの作成については、「Amazon RDS DB インスタンスの作成」を参照してください。

    Oracle DB インスタンスの変更方法については、「Amazon RDS DB インスタンスを変更する」を参照してください。

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

Oracle DB インスタンスと Amazon S3 バケット間でファイルを転送するには、Amazon RDS パッケージ rdsadmin_s3_tasks を使用できます。アップロード時に GZIP でファイルを圧縮し、ダウンロード時に解凍することができます。

注記

rdsadmin_s3_tasks のプロシージャでは、単一のディレクトリにファイルをアップロードまたはダウンロードします。これらのオペレーションにサブディレクトリを含めることはできません。

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

DB インスタンスから Amazon S3 バケットにファイルをアップロードするには、プロシージャ rdsadmin.rdsadmin_s3_tasks.upload_to_s3 を使用します。例えば、Oracle Recovery Manager (RMAN) のバックアップファイルまたは Oracle Data Pump ファイルをアップロードすることができます。Amazon S3 バケット内の最大オブジェクトサイズは 5 TB です。オブジェクトの操作方法の詳細については、Amazon Simple Storage Service ユーザーガイドを参照してください。RMAN バックアップの詳細については、「Oracle DB インスタンスの一般的な 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

必須

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

p_bucket_owner_full_control

VARCHAR2

optional

バケットのアクセスコントロールリスト。有効な値は、null と FULL_CONTROL のみです。この設定は、あるアカウント (アカウント A) から別のアカウント (アカウント B) が所有するバケットにファイルをアップロードし、アカウント B がファイルを完全に制御する必要がある場合にのみ必要です。

p_compression_level

NUMBER

0

optional

GZIP 圧縮のレベル。有効な値の範囲は 09 です。

  • 0 – 圧縮なし

  • 1 – 最速圧縮

  • 9 – 最高圧縮

rdsadmin.rdsadmin_s3_tasks.upload_to_s3 プロシージャの戻り値はタスク ID です。

次の例では、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;

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

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

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

SELECT rdsadmin.rdsadmin_s3_tasks.upload_to_s3( p_bucket_name => 'mys3bucket', p_prefix => '', p_s3_prefix => 'dbfiles/', p_directory_name => 'DATA_PUMP_DIR', p_compression_level => 1) 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;

次の例では、コマンドはアカウント A で実行されるものの、アカウント B でバケットの内容を完全に制御する必要があることを前提としています。コマンド rdsadmin_s3_tasks.upload_to_s3 は、s3bucketOwnedByAccountB という名前のバケットに DATA_PUMP_DIR ディレクトリ内のすべてのファイルを転送します。アクセスコントロールは、アカウント B がバケット内のファイルにアクセスできるように、FULL_CONTROL に設定されています。GZIP 圧縮レベルは 6 で、速度とファイルサイズのバランスが取れています。

SELECT rdsadmin.rdsadmin_s3_tasks.upload_to_s3( p_bucket_name => 's3bucketOwnedByAccountB', p_prefix => '', p_s3_prefix => '', p_directory_name => 'DATA_PUMP_DIR', p_bucket_owner_full_control => 'FULL_CONTROL', p_compression_level => 6) AS TASK_ID FROM DUAL;

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

タスクの出力ファイルを表示すると、結果を確認できます。

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

task-id は、この手順で返されたタスク ID に置き換えます。

注記

タスクは非同期的に実行されます。

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

Amazon S3 バケットから Oracle DB インスタンスにファイルをダウンロードするには、Amazon RDS プロシージャ (rdsadmin.rdsadmin_s3_tasks.download_from_s3) を使用します。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_1 プレフィックスに一致する、'folder_2' のファイルはすべてダウンロードされますが、folder_2 のファイルはダウンロードされません。

p_decompression_format

VARCHAR2

NONE

optional

解凍形式。有効な値は、解凍しない場合は NONE、解凍する場合は GZIP です。

rdsadmin.rdsadmin_s3_tasks.download_from_s3 プロシージャの戻り値はタスク ID です。

次の例では、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;

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

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

以下の例では、myfolder/ という名前の Amazon S3 バケット内にある mys3bucket フォルダ内のファイルをすべて、DATA_PUMP_DIR ディレクトリにダウンロードします。Amazon S3 フォルダを指定するには、p_s3_prefix パラメータを使用します。アップロードされたファイルは GZIP で圧縮されますが、ダウンロード中は解凍されません。

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

次の例では、DATA_PUMP_DIR ディレクトリに mys3bucket という名前の Amazon S3 バケット内のファイル mydumpfile.dmp をダウンロードします。解凍は適用されません。

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

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

タスクの出力ファイルを表示すると、結果を確認できます。

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

task-id は、この手順で返されたタスク ID に置き換えます。

注記

タスクは非同期的に実行されます。

ディレクトリからファイルを削除するには、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 統合オプションを削除するには、インスタンスを変更し、S3_INTEGRATION オプションを含まない別のオプショングループを指定します。デフォルト (空) のオプショングループや別のカスタムオプショングループを指定できます。詳細については、「Amazon RDS DB インスタンスを変更する」を参照してください。