HAQM Web Services ブログ

HAQM RDS for Oracle の HAQM EFS との統合

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  1. HAQM 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. 「追加」を選択します。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

HAQM RDS for Oracle インスタンスと HAQM EFS ファイルシステムの間でファイルを転送するには、HAQM 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 をエクスポートする方法を示しています。ダンプファイルは HAQM 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 というファイルが作成され、HAQM EFS がマウントされている HAQM 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;
/

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

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

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

  1. OS 上にディレクトリを作成し、HAQM EFS をマウントした HAQM 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. HAQM RDS for Oracle の RMAN バックアップを実行します。バックアップ場所は HAQM 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. 同じ HAQM EFS ファイルシステムがマウントされている EC2 インスタンスにログインします。RMAN バックアップピースは、 HAQM EFS ファイルシステムに格納されます。

まとめ

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

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

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