Amazon RDS for Oracle を Amazon S3 と統合するときの問題のトラブルシューティング方法を教えてください。

所要時間2分
0

Amazon Relational Database Service (Amazon RDS) を Amazon Simple Storage Service (Amazon S3) と統合する際の問題やエラーをトラブルシューティングしたいです。

簡単な説明

Amazon RDS for Oracle DB インスタンスと Amazon S3 バケット間でファイルを転送するときは、以下の条件を確認してください。

  • DB インスタンスと S3 バケットが同じ AWS リージョンにあります。
  • DB インスタンスには S3 バケットへの必要なアクセス権があります。
  • DB インスタンスが **S3_INTEGRATION ** オプションを含むオプショングループに関連付けられています。
  • Oracle ディレクトリオブジェクトからのみファイルをアップロードしています。このディレクトリは、ユーザーが作成したディレクトリでも、DATA_PUMP_DIR ディレクトリでもかまいません。
  • ユーザーが作成したディレクトリの場合、アップロードとダウンロードを実行するユーザーは、ディレクトリに対する必要な読み取り権限と書き込み権限を持っている必要があります。詳細については、「Amazon RDS for Oracle DB インスタンスでユーザー権限とロールを管理するにはどうすればよいですか?」を参照してください。
  • サブディレクトリ内のデータをコピーする場合は、rdsadmin パッケージを使用するときにサブディレクトリの名前を明示的に指定してください。S3_INTEGRATION オプションを使用してサブディレクトリをコピーすることはできません。

解決方法

DB インスタンスに S3 バケットへの必要なアクセス権があることを確認してください

DB インスタンスに、S3 からアップロードおよびダウンロードする権限が最も低い AWS ID およびアクセス管理 (IAM) ロールがあるかどうかを確認します。

  1. Amazon RDS コンソールを開きます。
  2. ナビゲーションペインで [データベース] を選択します。
  3. 確認する DB インスタンスを選択します。
  4. [接続とセキュリティ] タブを選択します。
  5. [IAM ロールの管理] セクションまでスクロールして、以下の権限を持つアクティブな IAM ロールがあるかどうかを確認します。
    S3:ListBucket
    S3:PutObject
    S3:GetObject

また、AWS コマンドラインインターフェイス (AWS CLI) コマンド describe-db-instances を使用して、DB インスタンスに以下の最低限の権限を持つ IAM ロールがあるかどうかを確認することもできます。

aws rds describe-db-instances \
--db-instance-identifier example-db-instance \
--query 'DBInstances[*].[AssociatedRoles[*]]'

注: AWS CLI コマンドを実行する際にエラーが発生した場合は、AWS CLI の最新バージョンを使用していることを確認してください

IAM ロールが存在するかどうかを確認したら、結果に基づいて次のいずれかを実行します。

  • IAM ロールは存在するが、これらの最小権限がない場合は、これらの権限を含むようにロールを変更します。
  • 必要な権限を持つ IAM ロールがない場合は、IAM ポリシーを作成してください。S3 バケットから Amazon RDS にファイルを転送する権限をこのポリシーに付与します。IAM ポリシーを作成するときは、バケットにはバケットレベルのアクセス権限を、オブジェクトにはオブジェクトレベルの権限を必ず追加してください。

それでもバケットの権限に問題がある場合は、IAM ロールを変更して S3 バケットへのフルアクセスを許可してください。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "VisualEditor0",
      "Effect": "Allow",
      "Action": [
        "s3:*"
      ],
      "Resource": [
        "arn:aws:s3:::example-bucket/*",
        "arn:aws:s3:::example-bucket"
      ]
    }
  ]
}

重要: これにより IAM ロールが変更され、問題が IAM 権限に起因するかどうかのテストにのみフルアクセスが許可されます。問題を解決したら、必要に応じてカスタム権限を調整します。

S3 の特定のフォルダにファイルをアップロードするには、rdsadmin.rdsadmin_s3_tasks.upload_to_s3p_s3_prefixパラメータを使用します。ファイルをアップロードする前に、必要な権限があることを確認してください。

たとえば、example-folder フォルダにあるファイルを S3 バケットの example-bucket にアップロードするには、次の IAM ポリシーをアタッチします。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "VisualEditor0",
      "Effect": "Allow",
      "Action": [
        "s3:PutObject",
        "s3:GetObject",
        "s3:ListBucket"
      ],
      "Resource": [
        "arn:aws:s3:::example-bucket/example-folder/*"
      ]
    }
  ]
}

DB インスタンスが S3_INTEGRATION オプションを含むオプショングループに関連付けられていることを確認してください

RDS DB インスタンスにオプショングループがアタッチされているかどうかを確認します。

  1. Amazon RDS コンソールを開きます。
  2. ナビゲーションペインで [データベース] を選択します。
  3. 確認する DB インスタンスを選択します。
  4. [設定] タブを開きます。
  5. オプショングループパラメータに注意してください。

このオプショングループが同期中ではなく、S3_INTEGRATION オプションを追加しようとしている場合、オプションは正常に追加されません。したがって、オプショングループが同期中であることを確認してください。

このオプショングループが同期中にあるかどうかを確認するには、次の AWS CLI コマンドを実行します。

aws rds describe-db-instances \
--db-instance-identifier example-db-instance \
--query 'DBInstances[*].[OptionGroupMemberships[*]]'

オプショングループが同期中の状態でない場合は、データベースの [ログとイベント] タブを選択し、[最近のイベント] セクションまでスクロールします。オプショングループの同期を妨げるコンポーネントを特定し、このコンポーネントをデータベースから削除します。

オプショングループが同期中の状態の場合は、S3_INTEGRATION オプションがオプショングループに含まれているかどうかを確認します。詳細については、「オプショングループのオプションとオプション設定を一覧表示する」を参照してください。S3_INTEGRATION オプションがオプショングループに含まれていない場合は、オプションを追加してください。詳細については、「Amazon S3 統合オプションの追加」を参照してください。

注: S3_INTEGRATION オプションが DB インスタンスに追加されていない場合、エラー ORA-00904: "RDSADMIN"."RDSADMIN_S3_TASKS"."UPLOAD_TO_S3": invalid identifier" が表示されます。このエラーは、アップロードとダウンロードに必要な手順が DB インスタンスで作成されていないことを示しています。

Amazon RDS に S3_インテグレーションオプションを追加しても、ダウンタイムは発生しません。**Apply Imediate ** オプションを使用する場合は、保留中のメンテナンスアクションがないことを確認してください。保留中のアクションがある場合、それらのアクションは Amazon S3 統合で有効になります。詳細については、「DB インスタンスの管理」を参照してください。

ユーザーが作成した Oracle ディレクトリオブジェクトまたは DATA_PUMP_DIR ディレクトリからのみファイルをアップロード/ダウンロードするようにしてください

データベースインスタンスの S3 ファイルには直接アクセスできません。これらのファイルにアクセスするには、ファイルを RDS ホストのディレクトリにコピーしてアクセスする必要があります。DB インスタンスから S3 バケットにファイルをアップロードまたはダウンロードするには、次の手順を実行します。

  1. Amazon RDS のエクスポートファイルを S3 にコピーするには、まずダンプファイルを作成します。これを行うには、DATA_DUMP_DIR またはカスタムディレクトリにある expdp コマンドまたは dbms_datapump API を使用してください。次に、rdsadmin.rdsadmin_s3_tasks.upload_to_s3 プロシージャを使用して S3 にファイルをアップロードします。このプロシージャのパラメータとファイルをアップロードするためのクエリ例については、「Oracle DB インスタンスから Amazon S3 バケットへのファイルのアップロード」を参照してください。
  2. rdsadmin. rdsadmin_s3_tasks.download_from_s3 プロシージャを使用して、S3 バケットから DATA_PUMP_DIR フォルダまたはユーザーが作成した任意のディレクトリにファイルをダウンロードします。このプロシージャのパラメータとダウンロードファイルのクエリ例については、「Amazon S3 バケットから Oracle DB インスタンスへのファイルのダウンロード」を参照してください。

ファイル転送の状態を監視するには、rdsadmin パッケージをアップロードまたはダウンロードする手順を実行したときに生成されるログを表示します。

  1. Amazon RDS コンソールを開きます。
  2. ナビゲーションペインで [データベース] を選択します。
  3. ログを表示する DB インスタンスを選択します。
  4. [ログとイベント] タブを選択します。
  5. [ログ] セクションで、プロシージャによって返されたタスク ID を検索フィルターに入力します。
  6. 返されたファイルを選択します。
  7. [Watch] を選択してログを表示します。
    -または-
    [ダウンロード] を選択してログをダウンロードします。

次のコマンドを実行して、アップロードまたはダウンロードプロセス中に生成されたログファイルを読み取ることもできます。

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

**注:**task-id は、プロシージャによって返されたタスク ID に置き換えます。

関連情報

アマゾン S3 インテグレーション

Amazon RDS for Oracle DB インスタンスが予想よりも多くのストレージを使用しているのはなぜですか?

AWS公式
AWS公式更新しました 9ヶ月前
コメントはありません

関連するコンテンツ