「Amazon S3 統合」
RDS for Oracle DB インスタンスと Amazon S3 バケットの間でファイルを転送することができます。Oracle Data Pump などの Oracle Database の機能と Amazon S3 統合を使用できます。例えば、Amazon S3 の Data Pump ファイルを RDS for Oracle DB インスタンスにダウンロードすることができます。詳細については、「Amazon RDS の Oracle にデータをインポートする」を参照してください。
注記
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) ポリシーを作成します。このステップは、S3 バケットが既に作成されていることを前提としています。
ポリシーを作成する前に、次の情報を書き留めます。
-
バケットの Amazon リソースネーム (ARN)
-
お客様の AWS KMS キーの ARN、バケットが SSE-KMS または SSE-S3 暗号化を使用している場合
注記
RDS for Oracle DB インスタンスは、SSE-C で暗号化された Amazon S3 バケットにアクセスできません。
詳細については、「Amazon Simple Storage Service ユーザーガイド」の「サーバー側の暗号化を使用したデータの保護」を参照してください。
Amazon S3 バケットへのアクセスを Amazon RDS に許可する IAM ポリシーを作成するには
-
IAM マネジメントコンソール
を開きます。 -
[Access management (アクセス管理)] で、[Policies (ポリシー)] を選択します。
-
[ポリシーの作成] を選択します。
-
[Visual editor] タブで、[Choose a service] を選択し、[S3] を選択します。
-
[Actions (アクション)] で [Expand all (すべて展開)] を選択し、Amazon S3 バケットから Amazon RDS にファイルを転送するために必要なバケットのアクセス許可とオブジェクトのアクセス許可を選択します。例えば、以下を実行してください。
-
[List (リスト)] を展開し、[ListBucket] を選択します。
-
[Read (読み取り)] を展開し、[GetObject] を選択します。
-
[Write] (書き込み) を展開し、[PutObject] および [DeleteObject] を選択します。
-
[Permissions management] (アクセス許可の管理) を展開し、PutObjectAcl を選択します。このアクセス許可は、別のアカウントが所有するバケットにファイルをアップロードする予定で、このアカウントがバケットの内容を完全に制御する必要がある場合に必要です。
オブジェクトのアクセス許可は、Amazon S3 のオブジェクトオペレーションのアクセス許可です。バケット自体ではなくバケット内のオブジェクトに付与する必要があります。詳細については、「オブジェクトオペレーションに対するアクセス許可」を参照してください。
-
-
[リソース] を選択し、次の操作を行います。
-
[特定] を選択します。
-
[バケット] では、[ARN を追加] を選択します。バケット ARN を入力します。バケット名は自動的に入力されます。その後、[Add] (追加) を選択します。
-
[オブジェクト] リソースが表示されている場合は、[ARN を追加] を選択してリソースを手動で追加するか、[すべて] を選択します。
注記
Amazon S3 バケット内の特定のファイルやフォルダにのみアクセスすることを Amazon RDS に許可するには、[Amazon リソースネーム (ARN)] に、より具体的な ARN 値を設定します。Amazon S3 のアクセスポリシーの定義方法については、「Amazon S3 リソースへのアクセス許可の管理」を参照してください。
-
-
(オプション) ポリシーにリソースを追加するには、[Add addition permissions (アクセス許可を追加する)] を選択します。例えば、以下を実行してください。
-
バケットがカスタム KMS キーで暗号化されている場合は、サービスの KMS を選択します。
-
[手動アクション] では、以下を選択します。
-
暗号化
-
[ReEncrypt from] および [ReEncrypt to]
-
Decrypt
-
DescribeKey
-
GenerateDataKey
-
-
[リソース] で [特定] を選択します。
-
[キー] では、[ARN を追加] を選択します。リソースとしてカスタムキーの 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 内のすべてのバケットとオブジェクトへのアクセスを許可できます。
-
-
[次へ: タグ]、[次へ: レビュー] の順に選択します。
-
[ 名前] に、IAM ポリシーの名前 (例:
rds-s3-integration-policy
) を設定します。この名前は、IAM ロールを作成して DB インスタンスに関連付ける際に使用します。オプションで [Description] 値を追加することもできます。 -
[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 コマンドでは、これらのオプションを指定して、
という名前の IAM ポリシーを作成します。このポリシーでは、rds-s3-integration-policy
という名前のバケットへのアクセス権が付与されます。amzn-s3-demo-bucket
例
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:::amzn-s3-demo-bucket
", "arn:aws:s3:::amzn-s3-demo-bucket
/*
" ] } ] }'
次の例には、カスタム 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:::amzn-s3-demo-bucket
", "arn:aws:s3:::amzn-s3-demo-bucket
/*
", "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:::amzn-s3-demo-bucket
", "arn:aws:s3:::amzn-s3-demo-bucket
/*
" ] } ] }'
次の例には、カスタム 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:::amzn-s3-demo-bucket
", "arn:aws:s3:::amzn-s3-demo-bucket
/*
", "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 値
バケットポリシーを作成または編集するには
AWS Management Console にサインインし、Amazon S3 コンソール (https://console.aws.amazon.com/s3/
) を開きます。 -
[Buckets (バケット)] リストで、バケットポリシーを作成するバケットの名前、またはバケットポリシーを編集するバケットの名前を選択します。
-
[Permissions (アクセス許可)] を選択します。
-
[バケットポリシー] で [編集] を選択します。バケットポリシーの編集ページが開きます。
-
[Edit bucket policy] (バケットポリシーの編集) ページで、Amazon S3 ユーザーガイド の [Policy examples] (ポリシーの例)を確認するか、[Policy generator] (ポリシージェネレーター) を選択してポリシーを自動的に生成するか、[Policy] (ポリシー セクション) で JSON を編集します。
ポリシージェネレーターを選択すると、AWS ポリシージェネレーターが新しいウィンドウで開きます。
-
ポリシーの種類の選択の AWS ポリシーポリシージェネレータページで、 S3 バケットポリシーを選択します。
-
提供されたフィールドに情報を入力してステートメントを追加し、ステートメントの追加を選択します。追加するステートメントの数だけ繰り返します。ポリシーステートメントの詳細については、IAM ユーザーガイドの IAM JSON ポリシーのエレメントのリファレンスを参照してください。
注記
便宜上、バケットポリシーの編集ページでは、現在のバケットのバケット ARN (Amazonリソース名) がポリシーテキストフィールドの上に表示されます。この ARN をコピーして、AWSポリシージェネレータのステートメントで使用できます。
-
ステートメントの追加が完了したら、ポリシーの生成を選択します。
-
生成されたポリシーテキストをコピーし、[閉じる] を選択すると、Amazon S3 コンソールのバケットポリシーの編集ページに戻ります。
-
-
左 ポリシー ボックスで、既存のポリシーを編集するか、ポリシージェネレータからバケットポリシーを貼り付けます。ポリシーを保存する前に、セキュリティ警告、エラー、一般的な警告、および提案を解決してください。
{ "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:::amzn-s3-demo-destination-bucket
", "arn:aws:s3:::amzn-s3-demo-destination-bucket
/*" ] } ] } -
変更の保存を選択すると、[バケット許可] のページへ戻ります。
ステップ 3: DB インスタンスの IAM ロールを作成し、ポリシーをアタッチする
このステップは、IAM ポリシーを ステップ 1: Amazon RDS ロール用の IAM ポリシーを作成する で作成したことを前提としています。このステップでは、RDS for Oracle DB インスタンスのロールを作成し、ロールにポリシーをアタッチします。
Amazon S3 バケットへのアクセスを Amazon RDS に許可する IAM ロールを作成するには
-
IAM マネジメントコンソール
を開きます。 -
ナビゲーションペインで [ロール] を選択します。
-
[Create role] を選択します。
-
[AWS サービス] を選択してください。
-
[他の AWS サービスのユースケース] で、[RDS] を選択し、次に [RDS — データベースにロールを追加] を選択します。次いで、[次へ] を選択します。
-
[アクセス許可ポリシー] の [検索] に、ステップ 1: Amazon RDS ロール用の IAM ポリシーを作成する で作成した IAM ポリシーの名前を入力し、リストに表示されたポリシーを選択します。次いで、[次へ] を選択します。
-
[ロール名] に、
rds-s3-integration-role
などの IAM ロール名を入力します。オプションで [Description] 値を追加することもできます。 -
[Create role] を選択します。
ロールを作成してポリシーをアタッチするには
-
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 ユーザーにアクセス許可を委任するロールの作成」を参照してください。
-
-
ロールが作成されたら、このロールの ARN を書き留めます。この ARN は、後のステップで必要になります。
-
作成したポリシーを、作成したロールにアタッチします。
以下の AWS CLI コマンドでは、
という名前のロールにこのポリシーをアタッチします。rds-s3-integration-role
例
Linux、macOS、Unix の場合:
aws iam attach-role-policy \ --policy-arn
your-policy-arn
\ --role-namerds-s3-integration-role
Windows の場合:
aws iam attach-role-policy ^ --policy-arn
your-policy-arn
^ --role-namerds-s3-integration-role
を、以前のステップで書き留めたポリシー ARN に置き換えます。your-policy-arn
ステップ 4: IAM ロールを RDS for Oracle DB インスタンスに関連付ける
Amazon S3 統合のアクセス許可を設定する最後のステップは、IAM ロールを DB インスタンスに関連付けることです。次の要件に注意してください。
-
必須の Amazon S3 アクセス許可ポリシーがアタッチされた IAM ロールへのアクセスが許可されている必要があります。
-
RDS for Oracle DB インスタンスには、一度に 1 つの IAM ロールのみを関連付けることができます。
-
DB インスタンスは、[使用可能] の状態である必要があります。
IAM ロールを RDS for Oracle DB インスタンスに関連付けるには
AWS Management Console にサインインし、Amazon RDS コンソール https://console.aws.amazon.com/rds/
を開きます。 -
ナビゲーションペインから [Databases (データベース)] を選択します。
-
詳細を表示する RDS for Oracle DB インスタンスの名前を選択します。
-
「接続性とセキュリティ」 タブで、ページ下部のIAM ロールを管理する セクションまでスクロールダウンします。
-
[このインスタンスに IAM ロールを追加] で、ステップ 3: DB インスタンスの IAM ロールを作成し、ポリシーをアタッチする で作成したロールを選択します。
-
[機能] で、[S3_INTEGRATION] を選択します。
-
[Add role] を選択します。
以下の AWS CLI コマンドでは、
という名前の Oracle DB インスタンスにこのロールを追加します。mydbinstance
例
Linux、macOS、Unix の場合:
aws rds add-role-to-db-instance \ --db-instance-identifier
mydbinstance
\ --feature-name S3_INTEGRATION \ --role-arnyour-role-arn
Windows の場合:
aws rds add-role-to-db-instance ^ --db-instance-identifier
mydbinstance
^ --feature-name S3_INTEGRATION ^ --role-arnyour-role-arn
を、以前のステップで書き留めたロール ARN に置き換えます。your-role-arn
S3_INTEGRATION
オプションには --feature-name
が指定されている必要があります。
Amazon S3 統合オプションの追加
Amazon RDS for Oracle と Amazon S3 を統合するには、DB インスタンスが S3_INTEGRATION
オプションを含むオプショングループに関連付けられている必要があります。
Amazon S3 統合用のオプショングループを設定するには
-
新しいオプショングループを作成するか、
S3_INTEGRATION
オプションを追加する既存のオプショングループを識別します。オプショングループの作成の詳細については、「オプショングループを作成する」を参照してください。
-
オプショングループに [
S3_INTEGRATION
] オプションを追加します。オプショングループへのオプションの追加の詳細については、「オプショングループにオプションを追加する」を参照してください。
-
新しい RDS for Oracle DB インスタンスを作成し、オプショングループをそのインスタンスに関連付けるか、オプショングループを関連付けるように RDS for Oracle DB インスタンスを変更します。
DB インスタンスの作成については、「Amazon RDS DB インスタンスの作成」を参照してください。
DB インスタンスの変更については、Amazon RDS DB インスタンスを変更するを参照してください。
Amazon S3 統合用のオプショングループを設定するには
-
新しいオプショングループを作成するか、
S3_INTEGRATION
オプションを追加する既存のオプショングループを識別します。オプショングループの作成の詳細については、「オプショングループを作成する」を参照してください。
-
オプショングループに [
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.0Windows の場合:
aws rds add-option-to-option-group ^ --option-group-name
myoptiongroup
^ --options OptionName=S3_INTEGRATION,OptionVersion=1.0 -
新しい RDS for Oracle DB インスタンスを作成し、オプショングループをそのインスタンスに関連付けるか、オプショングループを関連付けるように RDS for Oracle DB インスタンスを変更します。
DB インスタンスの作成については、「Amazon RDS DB インスタンスの作成」を参照してください。
RDS for Oracle DB インスタンスの変更方法については、「Amazon RDS DB インスタンスを変更する」を参照してください。
Amazon RDS for Oracle と Amazon S3 バケットの間でファイルを転送する
RDS for Oracle DB インスタンスと Amazon S3 バケット間でファイルを転送するには、Amazon RDS パッケージ rdsadmin_s3_tasks
を使用できます。アップロード時に GZIP でファイルを圧縮し、ダウンロード時に解凍することができます。
トピック
ファイル転送の要件と制限
DB インスタンスと Amazon S3 バケットの間でファイルを転送する前に、次の点に注意してください。
-
rdsadmin_s3_tasks
パッケージは、単一のディレクトリにあるファイルを転送します。転送にサブディレクトリを含めることはできません。 -
Amazon S3 バケット内の最大オブジェクトサイズは 5 TB です。
-
rdsadmin_s3_tasks
によって作成されたタスクは非同期的に実行されます。 -
DATA_PUMP_DIR
などの Data Pump ディレクトリ、またはユーザーが作成したディレクトリからファイルをアップロードできます。adump
、bdump
、またはtrace
ディレクトリなど、Oracle バックグラウンドプロセスで使用されるディレクトリからファイルをアップロードすることはできません。 -
ダウンロードできるファイル数は、
download_from_s3
の場合、プロシージャコールあたり 2000 ファイルに制限されています。Amazon S3 から 2000 を超えるファイルをダウンロードする必要がある場合は、ダウンロードを別々のアクションに分割し、1 回のプロシージャコールあたりのファイル数が 2000 を超えないようにしてください。 -
ダウンロードフォルダにファイルが存在し、同じ名前のファイルをダウンロードしようとすると、
download_from_s3
ではダウンロードをスキップします。ダウンロードディレクトリからファイルを削除するには、PL/SQL プロシージャ UTL_FILE.FREMOVEを使用します。
RDS for Oracle DB インスタンスから Amazon S3 バケットにファイルをアップロードする
DB インスタンスから Amazon S3 バケットにファイルをアップロードするには、プロシージャ rdsadmin.rdsadmin_s3_tasks.upload_to_s3
を使用します。例えば、Oracle Recovery Manager (RMAN) のバックアップファイルまたは Oracle Data Pump ファイルをアップロードすることができます。オブジェクトの操作方法の詳細については、Amazon Simple Storage Service ユーザーガイドを参照してください。RMAN バックアップの詳細については、「Oracle DB インスタンスの一般的な RMAN タスクの実行」を参照してください。
rdsadmin.rdsadmin_s3_tasks.upload_to_s3
プロシージャには以下のパラメータがあります。
パラメータ名 | データ型 | デフォルト | 必須 | 説明 |
---|---|---|---|---|
|
VARCHAR2 |
– |
必須 |
ファイルをアップロードする Amazon S3 バケットの名前。 |
|
VARCHAR2 |
– |
必須 |
ファイルのアップロード元の Oracle ディレクトリオブジェクトの名前。ディレクトリは、ユーザーが作成した任意のディレクトリオブジェクト、または Data Pump ディレクトリ (例: 注記ファイルは、指定したディレクトリからのみアップロードできます。指定したディレクトリのサブディレクトリにファイルをアップロードすることはできません。 |
|
VARCHAR2 |
– |
必須 |
ファイルをアップロードする Amazon S3 ファイル名のプレフィックス。プレフィックスが空の場合は、指定された Amazon S3 バケットの最上位レベルにすべてのファイルがアップロードされますが、そのファイル名にプレフィックスは付加されません。 例えば、プレフィックスが |
|
VARCHAR2 |
– |
必須 |
アップロードするファイル名が一致する必要があるファイル名のプレフィックス。プレフィックスが空の場合は、指定されたディレクトリ内のファイルがすべてアップロードされます。 |
|
NUMBER |
|
オプション |
GZIP 圧縮のレベル。有効な値の範囲は
|
|
VARCHAR2 |
– |
オプション |
バケットのアクセスコントロールリスト。有効な値は、null と |
rdsadmin.rdsadmin_s3_tasks.upload_to_s3
プロシージャの戻り値はタスク ID です。
次の例では、
ディレクトリ内のすべてのファイルを DATA_PUMP_DIR
amzn-s3-demo-bucket
という名前の Amazon S3 バケットにアップロードします。ファイルは圧縮されません。
SELECT rdsadmin.rdsadmin_s3_tasks.upload_to_s3( p_bucket_name => '
amzn-s3-demo-bucket
', p_prefix => '', p_s3_prefix => '', p_directory_name => 'DATA_PUMP_DIR
') AS TASK_ID FROM DUAL;
次の例では、
ディレクトリ内のプレフィックス db
のついたすべてのファイルを、DATA_PUMP_DIR
という名前の Amazon S3 バケットにアップロードします。Amazon RDS は、最高レベルの GZIP 圧縮をファイルに適用します。amzn-s3-demo-bucket
SELECT rdsadmin.rdsadmin_s3_tasks.upload_to_s3( p_bucket_name => '
amzn-s3-demo-bucket
', p_prefix => 'db
', p_s3_prefix => '', p_directory_name => 'DATA_PUMP_DIR
', p_compression_level =>9
) AS TASK_ID FROM DUAL;
次の例では、
ディレクトリのすべてのファイルを、DATA_PUMP_DIR
という名前の Amazon S3 バケットにアップロードします。ファイルは、amzn-s3-demo-bucket
dbfiles
フォルダにアップロードされます。この例では、GZIP 圧縮レベルは 1
です。これは最も速い圧縮レベルです。
SELECT rdsadmin.rdsadmin_s3_tasks.upload_to_s3( p_bucket_name => '
amzn-s3-demo-bucket
', p_prefix => '', p_s3_prefix => 'dbfiles/
', p_directory_name => 'DATA_PUMP_DIR
', p_compression_level =>1
) AS TASK_ID FROM DUAL;
次の例では、
ディレクトリのすべてのファイルを、DATA_PUMP_DIR
という名前の Amazon S3 バケットにアップロードします。ファイルは amzn-s3-demo-bucket
dbfiles
フォルダにアップロードされ、各ファイル名の先頭には ora
が付加されます。圧縮は適用されません。
SELECT rdsadmin.rdsadmin_s3_tasks.upload_to_s3( p_bucket_name => '
amzn-s3-demo-bucket
', 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
ディレクトリ内のすべてのファイルを転送します。アクセスコントロールは、アカウント B がバケット内のファイルにアクセスできるように、DATA_PUMP_DIR
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'));
は、この手順で返されたタスク ID に置き換えます。task-id
注記
タスクは非同期的に実行されます。
Amazon S3 バケットから Oracle DB インスタンスにファイルをダウンロードする
Amazon S3 バケットから RDS for Oracle インスタンスにファイルをダウンロードするには、Amazon RDS プロシージャ (rdsadmin.rdsadmin_s3_tasks.download_from_s3
) を使用します。
download_from_s3
プロシージャには以下のパラメータがあります。
パラメータ名 | データ型 | デフォルト | 必須 | 説明 |
---|---|---|---|---|
|
VARCHAR2 |
– |
必須 |
ファイルのダウンロード元の Amazon S3 バケットの名前。 |
|
VARCHAR2 |
– |
必須 |
ファイルをダウンロードする Oracle ディレクトリオブジェクトの名前。ディレクトリは、ユーザーが作成した任意のディレクトリオブジェクト、または Data Pump ディレクトリ (例: |
|
VARCHAR2 |
FALSE |
オプションです。 |
Amazon S3 バケット内のどのオブジェクトもプレフィックスと一致しない場合に、タスクによってエラーを発生させるかどうかを決定するフラグ。このパラメータが設定されていないか、FALSE (デフォルト) に設定されている場合、タスクはオブジェクトが見つからなかったというメッセージを出力しますが、例外が発生したり、エラーになったりすることはありません。このパラメータが TRUE の場合、タスクでは例外が発生し、エラーになります。 一致テストでエラーになる可能性のあるプレフィックス仕様の例としては、 |
|
VARCHAR2 |
– |
必須 |
ダウンロードするファイル名が一致する必要があるファイル名のプレフィックス。プレフィックスを空にすると、指定された Amazon S3 バケット内の最上位ファイルがすべてダウンロードされますが、バケットのフォルダ内のファイルはダウンロードされません。 この手順では、プレフィックスと一致する初期のレベルのフォルダからのみ、Amazon S3 オブジェクトをダウンロードします。指定されたプレフィックスに一致する多層のディレクトリはダウンロードされません。 例えば、Amazon S3 バケットのフォルダ構造が その代わりに、 |
|
VARCHAR2 |
– |
オプションです。 |
解凍形式。有効な値は、解凍しない場合は |
rdsadmin.rdsadmin_s3_tasks.download_from_s3
プロシージャの戻り値はタスク ID です。
次の例では、
という名前の Amazon S3 バケットのファイルをすべて、amzn-s3-demo-bucket
ディレクトリにダウンロードします。ファイルは圧縮されていないため、解凍は適用されません。DATA_PUMP_DIR
SELECT rdsadmin.rdsadmin_s3_tasks.download_from_s3( p_bucket_name => '
amzn-s3-demo-bucket
', p_directory_name => 'DATA_PUMP_DIR
') AS TASK_ID FROM DUAL;
以下の例では、
という名前の Amazon S3 バケット内にある、プレフィックス db
がついたファイルをすべて、amzn-s3-demo-bucket
ディレクトリにダウンロードします。ファイルは GZIP で圧縮されているため、解凍が適用されます。DATA_PUMP_DIR
p_error_on_zero_downloads
パラメータはプレフィックスエラーチェックを有効にするため、プレフィックスがバケット内のどのファイルとも一致しない場合、タスクでは例外が発生し、エラーになります。
SELECT rdsadmin.rdsadmin_s3_tasks.download_from_s3( p_bucket_name => '
amzn-s3-demo-bucket
', p_s3_prefix => 'db
', p_directory_name => 'DATA_PUMP_DIR
', p_decompression_format => 'GZIP
', p_error_on_zero_downloads => 'TRUE
') AS TASK_ID FROM DUAL;
以下の例では、
という名前の Amazon S3 バケット内にある myfolder/
フォルダ内のファイルをすべて、amzn-s3-demo-bucket
ディレクトリにダウンロードします。Amazon S3 フォルダを指定するには、DATA_PUMP_DIR
p_s3_prefix
パラメータを使用します。アップロードされたファイルは GZIP で圧縮されますが、ダウンロード中は解凍されません。
SELECT rdsadmin.rdsadmin_s3_tasks.download_from_s3( p_bucket_name => '
amzn-s3-demo-bucket
', p_s3_prefix => 'myfolder/
', p_directory_name => 'DATA_PUMP_DIR
', p_decompression_format => 'NONE
') AS TASK_ID FROM DUAL;
次の例では、
ディレクトリに DATA_PUMP_DIR
という名前の Amazon S3 バケット内のファイル amzn-s3-demo-bucket
をダウンロードします。解凍は適用されません。mydumpfile.dmp
SELECT rdsadmin.rdsadmin_s3_tasks.download_from_s3( p_bucket_name => '
amzn-s3-demo-bucket
', 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'));
は、この手順で返されたタスク ID に置き換えます。task-id
注記
タスクは非同期的に実行されます。
ディレクトリからファイルを削除するには、Oracle プロシージャ UTL_FILE.FREMOVE
を使用できます。詳細については、Oracle ドキュメントの「FREMOVE プロシージャ
ファイル転送のステータスをモニタリングする
ファイル転送タスクでは、スタート時と完了時に Amazon RDS イベントが発行されます。イベントメッセージには、ファイル転送のタスク ID が含まれています。イベントの表示の詳細については、「Amazon RDS イベントの表示」を参照してください。
実行中のタスクのステータスは bdump ファイルで確認できます。bdump ファイルは /rdsdbdata/log/trace
ディレクトリにあります。bdump ファイルの名前形式は、以下のとおりです。
dbtask-
task-id
.log
を、モニタリングするタスクの ID に置き換えます。task-id
注記
タスクは非同期的に実行されます。
bdump ファイルの中身を表示するには、rdsadmin.rds_file_util.read_text_file
ストアドプロシージャを使用します。例えば、次のクエリでは、bdump ファイル (
) の中身が返ります。dbtask-1234567890123-1234.log
SELECT text FROM table(rdsadmin.rds_file_util.read_text_file('BDUMP','
dbtask-1234567890123-1234.log
'));
次のサンプルは、転送が失敗したときのログファイルを示しています。
TASK_ID -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 1234567890123-1234 TEXT -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 2023-04-17 18:21:33.993 UTC [INFO ] File #1: Uploading the file /rdsdbdata/datapump/A123B4CDEF567890G1234567890H1234/sample.dmp to Amazon S3 with bucket name
amzn-s3-demo-bucket
and key sample.dmp. 2023-04-17 18:21:34.188 UTC [ERROR] RDS doesn't have permission to write to Amazon S3 bucket nameamzn-s3-demo-bucket
and key sample.dmp. 2023-04-17 18:21:34.189 UTC [INFO ] The task failed.
Amazon S3 統合のトラブルシューティング
トラブルシューティングのヒントについては、AWS re:Post の記事「Amazon RDS for Oracle と Amazon S3 を統合する際の問題をトラブルシューティングするにはどうすればよいですか?
Amazon S3 統合オプションの削除
DB インスタンスから Amazon S3 統合オプションを削除できます。
Amazon S3 統合オプションを DB インスタンスから削除するには、次のいずれかを実行します。
-
複数の DB インスタンスから Amazon S3 統合オプションを削除するには、DB インスタンスが属しているオプショングループから
S3_INTEGRATION
オプションを削除します。この変更はそのオプショングループを使用するすべての DB インスタンスに影響します。詳細については、「オプショングループからオプションを削除する」を参照してください。 -
1 つの DB インスタンスから Amazon S3 統合オプションを削除するには、インスタンスを変更し、
S3_INTEGRATION
オプションを含まない別のオプショングループを指定します。デフォルト (空) のオプショングループや別のカスタムオプショングループを指定できます。詳細については、「Amazon RDS DB インスタンスを変更する」を参照してください。