Amazon Web Services ブログ

Amazon RDS for Oracle の Amazon EFS との統合

本投稿は、Devinder Singh, Manash Kalita,Arnab Saha による記事 Integrate Amazon RDS for Oracle with Amazon EFS を翻訳したものです。

お客様が Oracle Database を Amazon Relational Database Service for Oracle (Amazon RDS for Oracle) に移行する際、共有ファイルシステムを Oracle Databaseシステムで使用できるとメリットが得られることがしばしばあります。これは、データベースサーバーとアプリケーションサーバー間でファイルを共有したり、バックアップやデータロードなどを保存するためのステージング場所として機能するためです。Amazon RDS for Oracle は、Amazon Elastic File System(Amazon EFS)との統合をサポートするようになりました。これにより、ストレージをプロビジョニングしたり管理したりせずにファイルデータを共有できるシンプルでサーバーレスで、設定すれば後は何もする必要がないエラスティックなファイルシステムを実現できます。Amazon EFS は、アプリケーションを中断することなく、オンデマンドでペタバイト規模まで拡張できるように構築されています。

Amazon EFS と統合した Amazon RDS for Oracle は、次のような幅広いユースケースをサポートするのに最適です。

  • アプリケーションと複数のデータベースサーバー間でファイルシステムを共有する
  • 移行に必要なネイティブダンプとバックアップのアップロード場所として使用する
  • サーバーに追加のストレージ容量を割り当てることなく、RMAN のバックアップログとリカバリログを保存、共有
  • UTL_FILE などの Oracle ユーティリティを使用してファイルを読み書きする

Amazon RDS for Oracle インスタンスを Amazon EFS と統合するメリット

Amazon RDS for Oracle が Amazon EFS と統合されると、Amazon RDS for Oracle DB インスタンスと Amazon EFS ファイルシステムの間でファイルを転送できるようになります。この統合には以下のメリットがあります。

  • Oracle Data Pump ファイルを Amazon EFS から Amazon RDS for Oracle DB インスタンスに export/import できます。ダンプファイルを Amazon RDS for Oracle のストレージにコピーする必要はありません。これらの操作は Amazon EFS ファイルシステムから直接実行されます。
  • データベースリンクを介した移行に比べて、データの移行が速くなります。Amazon RDS for Oracle DB インスタンスにマウントされた Amazon EFS ファイルシステムを、移行またはデータ転送に必要なさまざまな Oracle ファイルを一時的に格納するランディングゾーンとして使用できます。
  • ランディングゾーンとして使用すると、ファイルを保持するための Amazon RDS インスタンス上の余分なストレージスペースの割り当てを節約できます。
  • Amazon EFS ファイルシステムは、ストレージをプロビジョニングしなくても、データをギガバイトからペタバイトに自動的にスケーリングできます。
  • 最低料金やセットアップ費用はありません。使用した分のみのお支払いとなります。

この投稿では、Amazon RDS for Oracle の Databaseインスタンスに Amazon EFS をセットアップするための設定を段階的に説明しています。また、この統合の利点とその際に考慮すべきベストプラクティスについても説明します。
開始する前に、Amazon EFS と Oracle Database の統合の要件と制限を確認してください。

Amazon EFS ファイルシステムの作成

最初のステップは、Amazon EFS ファイルシステムを作成することです。

  1.  Amazon EFS コンソールで、「ファイルシステムの作成」を選択します。
  2. 「名前」に、ファイルシステムの名前を入力します。
  3. Virtual Private Cloud (Amazon VPC) には、Amazon RDS for Oracle インスタンスがデプロイされているVPC を選択してください。
  4. ストレージクラス」で 「標準」 を選択します。
  5. 「作成」を選択します。(デフォルトでは、デフォルトのセキュリティグループを継承するので、作成時には「カスタマイズ」で適切なセキュリティグループを選択してください)

Amazon EFS ファイルシステムのアクセス権限を設定

新しい Amazon EFS ファイルシステムを作成すると、デフォルトでは root ユーザー ( UID 0 ) のみが読み取り、書き込み、実行の権限を持ちます。他のユーザーがファイルシステムを変更するには、root ユーザーが明示的にアクセス権を付与する必要があります。Amazon EFS ファイルシステムを Amazon Elastic Compute Cloud ( Amazon EC2 )インスタンスにローカルにマウントし、Amazon RDS インスタンスが Amazon EFS ファイルシステムからファイルを読み書きできるように、きめ細かい権限を設定する必要があります。たとえば、Amazon EFS ファイルシステムのルートに対して chmod 777 を実行して、他のユーザーにこのディレクトリへの書き込み権限を与えることができます。次の手順を実行してください。

  1. Amazon EFS ファイルシステムをマウントする Amazon EC2 インスタンスのセキュリティグループを選択します。

  1. インバウンドルールを編集してポート 2049 ( NFS のデフォルトポート) を追加し、「ルールを保存」をクリックします。

  1. 次に、このセキュリティグループを各 AZ の Amazon EFS マウントポイントにアタッチします。Amazon EFS の 「ネットワーク」 タブで、マウントポイントを選択し、「管理」を選択します。

  1. Amazon EC2 インスタンスに接続し、ファイルシステムを Amazon EC2 インスタンスにマウントします。
$sudo mount -t efs -o tls fs-05cef2152acda9175:/ /efsdir

NFS クライアントが Amazon EC2 インスタンスにインストールされていることを確認してください (ステップ 3.2 を参照してください)。/etc/fstab にエントリを追加して、再起動してもそのエントリが持続するようにします。

  1. マウントされた EFS ファイルシステム上にディレクトリを作成する。
$sudo mkdir /efsdir/datapump
  1. Amazon RDS for Oracle がこのディレクトリに書き込めるように権限を変更します。
$sudo chmod -R 777 /efsdir

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

次に、Amazon RDS オプショングループを作成します。

  1. Amazon RDS コンソールのナビゲーションペインで 「オプショングループ」 を選択します。

  1. 「グループを作成」を選択します。
  2. 「名前」に、グループの名前を入力します (efs-integration-option-grp など)。
  3. 「説明」に、簡単な説明を入力します (たとえば、EFS integration with RDS Oracle)。
  4. エンジンについては、oracle-ee を選択してください。
  5. メジャーエンジンバージョンは、19 を選択してください。
  6. 「作成」を選択します。

  1. オプショングループページで、作成したオプショングループを選択し、「オプションを追加」を選択します。

  1. オプション名には、「EFS_INTEGRATION」 を選択します。
  2. 「オプション設定」「EFS_ID」 に、作成したファイルシステムの ID を入力します。
  3. 「追加」を選択します。

オプショングループを Amazon RDS for Oracle インスタンスに追加

オプショングループを Amazon RDS for Oracle インスタンスに追加するには、以下の手順を実行します。

  1. Amazon RDS コンソールのナビゲーションペインで 「データベース」を選択します。
  2. インスタンスを選択して、「Modify」を選択します。

  1. オプショングループでは、作成したオプショングループを選択します。

  1. 「続行」 を選択し、変更の概要を確認してください。

  1. 「DB インスタンスの変更」 を選択し、「直ちに適用」を選択します。

Amazon RDS for Oracle と Amazon EFS を統合するためのネットワークおよびセキュリティグループのアクセス権限を設定

Amazon RDS for Oracle を Amazon EFS と統合するには、DB インスタンスが Amazon EFS ファイルシステムにネットワークアクセスできる必要があります。VPC の EnableDNSSupport 属性が有効になっている必要があります。DB インスタンスの Amazon EFS ファイルシステムへのアクセスを許可するには、Amazon EFS ファイルシステムに各アベイラビリティーゾーン (AZ) にマウントターゲットがあり、マウントターゲットにアタッチされたセキュリティグループに Amazon RDS インスタンスが NFS ポート 2049 に TCP 接続してリターントラフィックを受け取ることを許可するインバウンドルールがあることを確認します。

  1. Amazon RDS コンソールで、Amazon RDS for Oracle インスタンスを選択します。
    「接続とセキュリティ」で、セキュリティグループをクリックします。

  1. Amazon RDS for Oracle インスタンスのセキュリティグループを選択し、「アクション」 メニューで 「インバウンドルールの編集」を選択します。

  1. ポート 2049 へのアクセスを許可するルールを追加します。(デフォルトの NFS ポート)
  2. 「保存」を選択します。

  1. 次に、このセキュリティグループを各 AZ の Amazon EFS マウントポイントにアタッチします。Amazon EFS の 「ネットワーク」 タブで、マウントポイントを選択し、「管理」を選択します。

  1. Amazon RDS for Oracle のセキュリティグループを各 AZ のマウントポイントに追加します。
  2. 「保存」を選択します。

Amazon RDS for Oracle と Amazon EFS ファイルシステム間のファイル転送

Amazon RDS for Oracle インスタンスと Amazon EFS ファイルシステムの間でファイルを転送するには、Amazon RDS for Oracle に Oracle ディレクトリを作成する必要があります。次のコードを参照してください。

コマンド例は管理者ユーザーによって実行されますが、他のユーザーがこれらのコマンドを実行するには適切な権限が必要な場合があります。ファイルシステムのパスは /rdsefs- で始まる必要があることに注意してください。

BEGIN
rdsadmin.rdsadmin_util.create_directory_efs(
p_directory_name => 'DATA_PUMP_DIR_EFS',
p_path_on_efs => '/rdsefs-fs-05cef2152acda9175/datapump');
END;
/

1. DATAPUMP を使用してテーブルをエクスポートする。

次の PL/SQL コード例は、HR_USER スキーマのテーブル EMP をエクスポートする方法を示しています。ダンプファイルは Amazon EFS 上の Oracle ディレクトリ DATA_PUMP_DIR_EFS に作成されています。


declare
l_dp_handle       number;
begin
  -- Open a table export job.
  l_dp_handle := dbms_datapump.open(
    operation   => 'EXPORT',
    job_mode    => 'TABLE',
    remote_link => NULL,
    job_name    => 'HR_USER_TBL_EXP',
    version     => 'LATEST');
  -- Specify the dump file name and directory object name.
  dbms_datapump.add_file(
    handle    => l_dp_handle,
    filename  => 'hr_user.dmp',
    directory => 'DATA_PUMP_DIR_EFS');
  -- Specify the log file name and directory object name.
  dbms_datapump.add_file(
    handle    => l_dp_handle,
    filename  => 'h_user.log',
    directory => 'DATA_PUMP_DIR_EFS',
    filetype  => DBMS_DATAPUMP.KU$_FILE_TYPE_LOG_FILE);
  -- Specify the table to be exported, filtering the schema and table.
  dbms_datapump.metadata_filter(
    handle => l_dp_handle,
    name   => 'SCHEMA_EXPR',
    value  => '= ''HR_USER''');
  dbms_datapump.metadata_filter(
    handle => l_dp_handle,
    name   => 'NAME_EXPR',
    value  => '= ''EMP''');
  dbms_datapump.start_job(l_dp_handle);
  dbms_datapump.detach(l_dp_handle);
end;
/

これにより、Oracle ディレクトリ 'DATA_PUMP_DIR_EFS'hr_user.dmp というファイルが作成され、Amazon EFS がマウントされている Amazon EC2 から確認できます。

2. UTL_FILE を使用してファイルの書き込みと読み取りを行う

ファイルの書き込みと読み取りを行うには、次のコードを使用します。

declare
  fhandle  utl_file.file_type;
begin
  fhandle := utl_file.fopen(
                'DATA_PUMP_DIR_EFS'     -- File location
              , 'test_file.txt' -- File name
              , 'w' -- Open mode: w = write.
 );
  utl_file.put(fhandle, 'Hello world!'  || CHR(10));
  utl_file.put(fhandle, 'Hello again!');
  utl_file.fclose(fhandle);
exception
  when others then
    dbms_output.put_line('ERROR: ' || SQLCODE || ' - ' || SQLERRM);
    raise;
end;
/

Amazon EC2 インスタンスから、ファイルが作成されたことを確認できます。

 3. Oracle RMAN を使用して、Amazon RDS for Oracle データベースを共有の EFS ファイルシステムにバックアップします。

以下のセクションでは、Oracle Recovery Manager (RMAN) を使用して Amazon RDS for Oracle データベースのバックアップを実行し、バックアップを Amazon EFS ファイルシステムに保存する手順を示しています。

  1. OS 上にディレクトリを作成し、Amazon EFS をマウントした Amazon EC2 サーバーから権限を変更します。
sudo mkdir /efsdir/rman
sudo chmod -R 777 /efsdir
  1. Oracle ディレクトリを作成します。
BEGIN
rdsadmin.rdsadmin_util.create_directory_efs(
p_directory_name => 'RMAN_DIR_EFS',
p_path_on_efs => '/rdsefs-fs-05cef2152acda175/rman');
END;
/

これにより、RMAN_DIR_EFS という名前のデータベースディレクトリが作成され、RMAN バックアップが格納されます。p_path_on_efs パラメータのファイルシステムパス値の先頭には、文字列 “/rdsefs-<EFS FILE SYSTEM ID>”が付いています。

  1. Oracle RMAN ツールが必要とする限り、アーカイブログが RDS データベースサーバーに保持されていることを確認してください。この例では、アーカイブログの保持時間を 2 時間としています。
begin
rdsadmin.rdsadmin_util.set_configuration(
name => 'archivelog retention hours',
value => '2');
end;
/
commit;
  1. Amazon RDS for Oracle の RMAN バックアップを実行します。バックアップ場所は Amazon EFS ファイルシステムを指す Oracle ディレクトリとして指定されていることに注意してください。バックアップに関連する一般的な RMAN タスクについては、このドキュメントを参照してください。
BEGIN
rdsadmin.rdsadmin_rman_util.backup_database_full(
p_owner => 'SYS',
p_directory_name => 'RMAN_DIR_EFS',
p_parallel => 4,
p_section_size_mb => 10,
p_tag => 'FULL_DB_BACKUP',
p_rman_to_dbms_output => FALSE);
END;
/
  1. RMAN バックアップログの確認

RMAN ログファイルは bdump ディレクトリに保存されます。次のクエリを使用してログファイル名を取得します。

SELECT * FROM table(rdsadmin.rds_file_util.listdir('BDUMP')) order by mtime;

次のクエリを実行してログファイルを開き、エラーがないか確認します。前のクエリから取得したファイル名を置き換えて、次のクエリに追加します。

SELECT text FROM table(rdsadmin.rds_file_util.read_text_file('BDUMP', 'rds-rman-backup-database-2023-01-04.14-01-58.933233000.txt'));
  1. 同じ Amazon EFS ファイルシステムがマウントされている EC2 インスタンスにログインします。RMAN バックアップピースは、 Amazon EFS ファイルシステムに格納されます。

まとめ

この投稿では、Amazon EFS を Amazon RDS for Oracle と統合して設定する方法を示しました。この機能を使用して、データベースとアプリケーションサーバー間、およびデータベースサーバー間でデータを共有できます。RDS インスタンスのデータベースストレージを消費せずに Amazon RDS for Oracle から RMAN バックアップとネイティブ Data Pump を実行するときにも使用できるユースケースを紹介しました。

この機能の詳細については、Amazon EFS の統合を参照してください。

翻訳はソリューションアーキテクトの木村 千寿子が担当しました。原文はこちらです。