Amazon EFS の統合
Amazon Elastic File System (Amazon EFS) は、サーバーレスで伸縮自在なファイルストレージを提供するため、ストレージ容量およびパフォーマンスのプロビジョニングや管理を行わずにファイルデータを共有できます。Amazon EFS では、ファイルシステムを作成し、NFS バージョン 4.0 および 4.1 (NFSv4) プロトコルを使用して VPC にマウントできます。そうすることで、他の POSIX 準拠のファイルシステムと同様に EFS ファイルシステムを使用できます。一般的な情報については、「Amazon Elastic ファイルシステムとは」および AWS ブログの「Amazon RDS for Oracle と Amazon EFS の統合
トピック
Amazon EFS 統合の概要
Amazon EFS では、RDS for Oracle DB インスタンスと Amazon EFS ファイルシステムの間でファイルを転送できます。例えば、EFS を使用して次のユースケースをサポートできます。
-
アプリケーションと複数のデータベースサーバー間でファイルシステムを共有します。
-
トランスポータブル表領域データファイルなど、移行関連ファイル用の共有ディレクトリを作成します。詳細については、「Oracle トランスポータブル表領域を使用した移行」を参照してください。
-
サーバーに追加のストレージスペースを割り当てることなく、アーカイブされた REDO ログファイルを保存および共有できます。
-
UTL_FILE
などの Oracle Database ユーティリティを使用してファイルの読み取りおよび書き込みを行います。
Amazon EFS 統合のメリット
他のデータ転送ソリューションではなく EFS ファイルシステムを選択すると、次のようなメリットがあります。
-
Amazon EFS および RDS for Oracle DB インスタンスの間で Oracle Data Pump ファイルを転送できます。Data Pump は EFS ファイルシステムから直接インポートするため、これらのファイルをローカルにコピーする必要はありません。詳細については、「Amazon RDS の Oracle にデータをインポートする」を参照してください。
-
データ移行は、データベースリンクを使用するよりも高速です。
-
RDS for Oracle DB インスタンスで、ファイルを保存するためのストレージ容量を割り当てることが回避できます。
-
EFS ファイルシステムでは、ストレージをプロビジョニングしなくてもストレージを自動的にスケーリングできます。
-
Amazon EFS 統合には最低料金やセットアップ費用はありません。お支払いいただくのは、使用分の料金だけです。
Amazon EFS 統合の要件
以下の要件を満たしていることを確認してください。
-
データベースが 19.0.0.0.ru-2022-07.rur-2022-07.r1 以降のデータベースを実行している。
-
DB インスタンスおよび EFS ファイルシステムは、同じAWS リージョン と VPC 内に存在する。
-
VPC は、
enableDnsSupport
属性が有効になっている。詳細については、Amazon Virtual Private Cloud ユーザーガイドの「DNS attributes for your VPC」(VPC の DNS 属性) を参照してください。 -
EFS ファイルシステムでは、Standard または Standard IA ストレージクラスを使用している。
-
mount
コマンドで DNS 名を使用するには、以下の条件が満たされている必要があります。-
接続する EC2 インスタンスは VPC 内にあり、Amazon が提供する DNS サーバーを使用するように設定されている必要があります。カスタム DNS サーバーはサポートされていません。
-
接続する EC2 インスタンスの VPC で [DNS 解決]と [DNS ホスト名] の両方が有効になっている必要があります。
-
接続する EC2 インスタンスは、EFS ファイルシステムと同じ VPC 内にある必要があります。
-
-
RDS 以外のソリューションを使用して EFS ファイルシステムをバックアップします。RDS for Oracle は、EFS ファイルシステムの自動バックアップや手動 DB スナップショットをサポートしていません。詳細については、「Amazon EFS ファイルシステムのバックアップ」を参照してください。
Amazon EFS と RDS for Oracle を統合するネットワークアクセス許可の設定
RDS for Oracle を Amazon EFS と統合するには、DB インスタンスが EFS ファイルシステムにネットワークアクセスできることを確認してください。詳細については、Amazon Elastic File System ユーザーガイド の「NFS クライアントの Amazon EFS ファイルシステムへのネットワークアクセス制御」を参照してください。
セキュリティグループによるネットワークアクセス制御
VPC セキュリティグループなどのネットワーク層セキュリティメカニズムを使用して、DB インスタンスから EFS ファイルシステムへのアクセスを制御できます。DB インスタンスの EFS ファイルシステムへのアクセスを許可するには、EFS ファイルシステムが次の要件を満たしていることを確認してください。
-
EFS マウント ターゲットは、RDS for Oracle DB インスタンスによって使用されるすべてのアベイラビリティーゾーンにあります。
EFS マウントターゲットは、Amazon EFS ファイルシステムをマウントできる NFSv4 エンドポイントの IP アドレスを提供します。DNS 名を使用してファイルシステムをマウントすると、EC2 インスタンスと同じアベイラビリティーゾーンの EFS マウントターゲットの IP アドレスに解決されます。
別の AZ の DB インスタンスが同じ EFS ファイルシステムを使用するように設定できます。マルチ AZ の場合、配置内の AZ ごとにマウントポイントが必要です。別の AZ への DB への DB インスタンスの移動が必要になる場合があります。そのため、VPC 内の各 AZ で EFS マウントポイントを作成することをお勧めします。デフォルトでは、コンソールを使用して新しい EFS ファイルシステムを作成すると、RDS はすべての AZ のマウントターゲットを作成します。
-
セキュリティグループは、マウントターゲットにアタッチされます。
-
セキュリティグループには、TCP/2049 (タイプ NFS) で RDS for Oracle DB インスタンスのネットワークサブネットまたはセキュリティグループを許可するインバウンドルールがあります。
詳細については、「Amazon Elastic File System ユーザーガイド」の「Creating Amazon EFS file systems」(Amazon EFS ファイルシステムの作成) と「マウントターゲットとセキュリティグループの作成と管理」を参照してください。
ファイルシステムポリシーによるネットワークアクセスの制御
Amazon EFS と RDS for Oracle の統合は、デフォルト (空) のEFS ファイルシステムポリシーで動作します。デフォルトのポリシーでは、認証に IAM を使用しません。代わりに、マウントターゲットを使用して、ファイルシステムに接続できる匿名クライアントへのフルアクセスを許可します。デフォルトポリシーは、ファイルシステムの作成時を含め、ユーザーが設定したファイルシステムポリシーが有効ではない場合は常に有効になります。詳細については、Amazon Elastic File System ユーザーガイドの「EFS ファイルシステムポリシー」を参照してください。
RDS for Oracle を含むすべてのクライアントの EFS ファイルシステムへのアクセスを強化するために、IAM アクセス許可を設定できます。この方法で、ファイルシステムポリシーを作成します。詳細については、Amazon Elastic File System ユーザーガイドの「ファイルシステムポリシーの作成」を参照してください。
Amazon EFS と RDS for Oracle を統合する IAM アクセス許可の設定
デフォルトでは、Amazon EFS 統合機能は IAM ロールを使用しません。USE_IAM_ROLE
オプション設定は FALSE
です。RDS for Oracle と Amazon EFS および IAM ロールを統合するには、DB インスタンスが Amazon EFS ファイルシステムにアクセスするために IAM アクセス許可を持っている必要があります。
トピック
ステップ 1: DB インスタンスの IAM ロールを作成し、ポリシーをアタッチする
このステップでは、RDS for Oracle DB インスタンスのロールを作成し、Amazon RDS が EFS ファイルシステムにアクセスできるようにします。
Amazon RDS が EFS ファイルシステムへのアクセスを許可する IAM ロールを作成するには
-
IAM マネジメントコンソール
を開きます。 -
ナビゲーションペインで [ロール] を選択します。
-
[ロールの作成] を選択します。
-
[AWS のサービス] で、[RDS] を選択します。
-
[ユースケースの選択] で、[RDS - Add Role to Database (ロールをデータベースに追加する)] を選択します。
-
[次へ] をクリックします。
-
アクセス許可ポリシーを追加しないでください。[次へ] をクリックします。
-
[ロール名] を IAM ロールの名前 (例:
rds-efs-integration-role
) に設定します。オプションで [Description] 値を追加することもできます。 -
[ロールの作成] を選択します。
サービスのアクセス許可を特定のリソースに限定するには、リソースベースの信頼関係で aws:SourceArn
および aws:SourceAccount
のグローバル条件コンテキストキーを使用することをお勧めします。これは、混乱した使節の問題に対する最も効果的な保護方法です。
両方のグローバル条件コンテキストキーを使用し、aws:SourceArn
値にアカウント ID を含めます。この場合は、aws:SourceAccount
値と aws:SourceArn
値のアカウントは、同じステートメントで使用する場合、同じアカウント ID を使用する必要があります。
-
単一リソースに対するクロスサービスアクセスが必要な場合は
aws:SourceArn
を使用します。 -
そのアカウント内の任意のリソースをクロスサービス使用に関連付けることを許可する場合、
aws:SourceAccount
を使用します。
信頼関係では、aws:SourceArn
グローバル条件コンテキストキーに、必ず、ロールにアクセスするリソースの完全な Amazon リソースネーム (ARN) を使用します。
次の AWS CLI コマンドでは、この目的で
という名前のロールを作成します。rds-efs-integration-role
例
Linux、macOS、Unix の場合:
aws iam create-role \ --role-name
rds-efs-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-efs-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: Amazon EFS ファイルシステムのファイルシステムポリシーを作成します。
このステップでは、EFS ファイルシステムのファイルシステムポリシーを作成します。
EFS ファイルシステムポリシーを作成または編集するには
-
EFS 管理コンソール
を開きます。 -
[File Systems (ファイルシステム)] を選択します。
-
[File systems (ファイルシステム)] ページで、ファイルシステムポリシーを編集または作成する対象のファイルシステムを選択します。そのファイルシステムの詳細ページが表示されます。
-
[File system policy] (ファイルシステムポリシー) タブを選択します。
ポリシーが空の場合は、デフォルトの EFS ファイルシステムポリシーが使用されます。詳細については、Amazon Elastic File System ユーザーガイドの「EFS ファイルシステムポリシー」を参照してください。
-
[Edit] (編集) を選択します。[File system policy (ファイルシステムポリシー)] ページが表示されます。
-
[Policy editor] (ポリシーエディタ) で次のようなポリシーを入力し、[Save] (保存) を選択します。
{ "Version": "2012-10-17", "Id": "ExamplePolicy01", "Statement": [ { "Sid": "ExampleStatement01", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::
123456789012
:role/rds-efs-integration-role" }, "Action": [ "elasticfilesystem:ClientMount", "elasticfilesystem:ClientWrite", "elasticfilesystem:ClientRootAccess" ], "Resource": "arn:aws:elasticfilesystem:us-east-1
:123456789012
:file-system/fs-1234567890abcdef0
" } ] }
ステップ 3: IAM ロールを RDS for Oracle DB インスタンスに関連付ける
このステップでは、IAM ロールを DB インスタンスに関連付けます。以下の要件に注意してください。
-
必須の Amazon EFS アクセス許可ポリシーがアタッチされた IAM ロールへのアクセスが許可されている必要があります。
-
RDS for Oracle DB インスタンスには、一度に 1 つの IAM ロールのみを関連付けることができます。
-
インスタンスのステータスは [Available] (使用可能) である必要があります。
詳細については、Amazon Elastic File System ユーザーガイドの「Amazon EFS の ID とアクセス管理」を参照してください。
IAM ロールを RDS for Oracle DB インスタンスに関連付けるには
AWS Management Console にサインインし、Amazon RDS コンソール (https://console.aws.amazon.com/rds/
) を開きます。 -
[データベース] をクリックします。
-
データベースインスタンスが使用できない場合は、[Actions (アクション)]、[Start (スタート)] の順に選択します。インスタンスのステータスに [Started (スタート済み)] と表示されたら、次のステップに進みます。
-
詳細を表示する Oracle DB インスタンスの名前を選択します。
-
「接続性とセキュリティ」 タブで、ページ下部のIAM ロールを管理する セクションまでスクロールダウンします。
-
IAM ロールをこのインスタンスに追加するセクションに追加するロールを選択します。
-
[Feature] (機能) で、[EFS_INTEGRATION] (EFS 統合) を選択します。
-
[Add role] を選択します。
以下の AWS CLI コマンドでは、
という名前の Oracle DB インスタンスにこのロールを追加します。mydbinstance
例
Linux、macOS、Unix の場合:
aws rds add-role-to-db-instance \ --db-instance-identifier
mydbinstance
\ --feature-name EFS_INTEGRATION \ --role-arnyour-role-arn
Windows の場合:
aws rds add-role-to-db-instance ^ --db-instance-identifier
mydbinstance
^ --feature-name EFS_INTEGRATION ^ --role-arnyour-role-arn
を、以前のステップで書き留めたロール ARN に置き換えます。your-role-arn
EFS_INTEGRATION
オプションには --feature-name
が指定されている必要があります。
EFS_INTEGRATION (EFS 統合) オプションの追加
Amazon RDS for Oracle と Amazon EFS を統合するには、DB インスタンスが EFS_INTEGRATION
オプションを含むオプショングループに関連付けられている必要があります。
同じオプショングループに属する複数の Oracle DB インスタンスは、同じ EFS ファイルシステムを共有します。異なる DB インスタンスは同じデータにアクセスできますが、異なる Oracle ディレクトリを使用することでアクセスを分割できます。詳細については、「RDS for Oracle と Amazon EFS ファイルシステム間のファイルの転送」を参照してください。
Amazon EFS 統合用のオプショングループを設定するには
-
新しいオプショングループを作成するか、
EFS_INTEGRATION
オプションを追加する既存のオプショングループを識別します。オプショングループの作成の詳細については、「オプショングループを作成する」を参照してください。
-
オプショングループに [
EFS_INTEGRATION
] オプションを追加します。EFS_ID
ファイルシステム ID を指定し、USE_IAM_ROLE
フラグを設定する必要があります。詳細については、「オプショングループにオプションを追加する」を参照してください。
-
次のいずれかの方法を使用して、オプショングループを DB インスタンスに関連付けます。
-
新しい Oracle DB インスタンスを作成して、オプショングループを関連付けます。DB インスタンスの作成については、「Amazon RDS DB インスタンスの作成」を参照してください。
-
Oracle DB インスタンスを変更し、オプショングループを関連付けます。Oracle DB インスタンスの変更方法については、「Amazon RDS DB インスタンスを変更する」を参照してください。
-
EFS 統合用のオプショングループを設定するには
-
新しいオプショングループを作成するか、
EFS_INTEGRATION
オプションを追加する既存のオプショングループを識別します。オプショングループの作成の詳細については、「オプショングループを作成する」を参照してください。
-
オプショングループに [
EFS_INTEGRATION
] オプションを追加します。例えば、以下の AWS CLI コマンドでは、
EFS_INTEGRATION
オプションを、myoptiongroup
という名前のオプショングループに追加します。例
Linux、macOS、Unix の場合:
aws rds add-option-to-option-group \ --option-group-name
myoptiongroup
\ --options "OptionName=EFS_INTEGRATION,OptionSettings=\ [{Name=EFS_ID,Value=fs-1234567890abcdef0},{Name=USE_IAM_ROLE,Value=TRUE}]"Windows の場合:
aws rds add-option-to-option-group ^ --option-group-name
myoptiongroup
^ --options "OptionName=EFS_INTEGRATION,OptionSettings=^ [{Name=EFS_ID,Value=fs-1234567890abcdef0},{Name=USE_IAM_ROLE,Value=TRUE}]" -
次のいずれかの方法を使用して、オプショングループを DB インスタンスに関連付けます。
-
新しい Oracle DB インスタンスを作成して、オプショングループを関連付けます。DB インスタンスの作成については、「Amazon RDS DB インスタンスの作成」を参照してください。
-
Oracle DB インスタンスを変更し、オプショングループを関連付けます。Oracle DB インスタンスの変更方法については、「Amazon RDS DB インスタンスを変更する」を参照してください。
-
Amazon EFS ファイルシステムのアクセス許可の設定
デフォルトでは、ルートユーザー (UID 0
) のみが読み取り、書き込み、実行のアクセス許可を持ちます。他のユーザーがファイルシステムを変更できるようにするには、ルートユーザーは、明示的にアクセス許可を付与する必要があります。RDS for Oracle DB インスタンスのユーザーは others
カテゴリに含まれます。詳細については、Amazon Elastic File System ユーザーガイドの「ネットワークファイルシステム (NFS) レベルでのユーザー、グループ、アクセス許可の操作」を参照してください。
RDS for Oracle DB インスタンスによって EFS ファイルシステムのファイルを読み書きできるようにするには、次の手順を実行します。
-
Amazon EC2 またはオンプレミスインスタンスに、EFS ファイルシステムをローカルでマウントします。
-
きめ細かいアクセス許可を設定します。
例えば、other
ユーザーに EFS ファイルシステムのルートへの書き込み許可を付与するには、このディレクトリで chmod 777
を実行します。詳細については、Amazon Elastic File System ユーザーガイドの「Amazon EFS ファイルシステムのユースケースとアクセス許可の例」を参照してください。
RDS for Oracle と Amazon EFS ファイルシステム間のファイルの転送
RDS for Oracle インスタンスと Amazon EFS ファイルシステム間でファイルを転送するには、Oracle ディレクトリを 1 つまたは複数作成し、DB インスタンスのアクセスを制御する EFS ファイルシステム権限を設定します。
Oracle ディレクトリの作成
ディレクトリを作成するには、rdsadmin.rdsadmin_util.create_directory_efs
のプロシージャを使用します。 プロシージャには以下のパラメータがあります。
パラメータ名 | データ型 | デフォルト | 必須 | 説明 |
---|---|---|---|---|
|
VARCHAR2 |
– |
はい |
Oracle ディレクトリの名前。 |
|
VARCHAR2 |
– |
はい |
EFS ファイルシステムのパス。パス名のプレフィックスには 例えば、
|
fs-1234567890abcdef0
という EFS ファイルシステムに、/datapump1
という名前のサブディレクトリを作成したとします。次の例では、EFS ファイルシステムの /datapump1
ディレクトリを指す Oracle ディレクトリ DATA_PUMP_DIR_EFS
を作成しています。p_path_on_efs
パラメータのファイルシステムパス値の先頭には文字列 /rdsefs-
が付きます。
BEGIN rdsadmin.rdsadmin_util.create_directory_efs( p_directory_name => 'DATA_PUMP_DIR_EFS', p_path_on_efs => '/rdsefs-
fs-1234567890abcdef0
/datapump1
'); END; /
EFS ファイルシステム間のデータ転送: 例
次の例では、Oracle Data Pump を使用して、MY_TABLE
という名前のテーブルを datapump.dmp
ファイルにエクスポートしています。このファイルは EFS ファイルシステムにあります。
DECLARE v_hdnl NUMBER; BEGIN v_hdnl := DBMS_DATAPUMP.OPEN(operation => 'EXPORT', job_mode => 'TABLE', job_name=>null); DBMS_DATAPUMP.ADD_FILE( handle => v_hdnl, filename => 'datapump.dmp', directory => 'DATA_PUMP_DIR_EFS', filetype => dbms_datapump.ku$_file_type_dump_file); DBMS_DATAPUMP.ADD_FILE( handle => v_hdnl, filename => 'datapump-exp.log', directory => 'DATA_PUMP_DIR_EFS', filetype => dbms_datapump.ku$_file_type_log_file); DBMS_DATAPUMP.METADATA_FILTER(v_hdnl,'NAME_EXPR','IN (''MY_TABLE'')'); DBMS_DATAPUMP.START_JOB(v_hdnl); END; /
次の例では、Oracle Data Pump を使用して、MY_TABLE
という名前のテーブルを datapump.dmp
ファイルからインポートしています。このファイルは EFS ファイルシステムにあります。
DECLARE v_hdnl NUMBER; BEGIN v_hdnl := DBMS_DATAPUMP.OPEN( operation => 'IMPORT', job_mode => 'TABLE', job_name => null); DBMS_DATAPUMP.ADD_FILE( handle => v_hdnl, filename => 'datapump.dmp', directory => 'DATA_PUMP_DIR_EFS', filetype => dbms_datapump.ku$_file_type_dump_file ); DBMS_DATAPUMP.ADD_FILE( handle => v_hdnl, filename => 'datapump-imp.log', directory => 'DATA_PUMP_DIR_EFS', filetype => dbms_datapump.ku$_file_type_log_file); DBMS_DATAPUMP.METADATA_FILTER(v_hdnl,'NAME_EXPR','IN (''MY_TABLE'')'); DBMS_DATAPUMP.START_JOB(v_hdnl); END; /
詳細については、「Amazon RDS の Oracle にデータをインポートする」を参照してください。
EFS_INTEGRATION (EFS 統合) オプションの削除
EFS_INTEGRATION
オプションを RDS for Oracle DB インスタンスから削除するには、次のいずれかを実行します。
-
複数の DB インスタンスから
EFS_INTEGRATION
オプションを削除するには、DB インスタンスが属しているオプショングループからEFS_INTEGRATION
オプションを削除します。この変更はそのオプショングループを使用するすべての DB インスタンスに影響します。詳細については、「オプショングループからオプションを削除する」を参照してください。 -
1 つの DB インスタンスから
EFS_INTEGRATION
オプションを削除するには、インスタンスを変更し、EFS_INTEGRATION
オプションを含まない別のオプショングループを指定します。デフォルト (空) のオプショングループや別のカスタムオプショングループを指定できます。詳細については、「Amazon RDS DB インスタンスを変更する」を参照してください。
Amazon EFS 統合のトラブルシューティング
RDS for Oracle DB インスタンスは、Amazon EFS ファイルシステムとの接続をモニタリングしています。モニタリングによって問題が検出されると、その問題を修正して RDS コンソールにイベントを公開しようとする場合があります。詳細については、「Amazon RDS イベントの表示」を参照してください。
このセクションの情報を使用して、Amazon EFS 統合を使用する際の一般的な問題の診断と修正を行います。
Notification | 説明 | [アクション] |
---|---|---|
|
DB インスタンスが、EFS ファイルシステムと通信できない。 |
以下を確認してください。
|
|
|
以下を確認してください。
|
|
|
IAM ロールが RDS for Oracle DB インスタンスに関連付けられていることを確認してください。 |
|
|
IAM ロールが RDS for Oracle DB インスタンスに関連付けられていることを確認してください。 |
|
|
回避策として、以下のステップを実行します。
|
|
このエラーは、Amazon EFS をサポートしていないバージョンの RDS for Oracle を使用している場合に発生する可能性があります。 |
RDS for Oracle DB インスタンスのバージョン 19.0.0.0.ru-2022-07.rur-2022-07.r1 以降を使用していることを確認してください。 |
|
DB インスタンスは EFS ファイルシステムを読み取ることができません。 |
EFS ファイルシステムが IAM ロールまたは EFS ファイルシステムレベルでの読み取りアクセスを許可していることを確認してください。 |
該当なし |
DB インスタンスは EFS ファイルシステムに書き込むことができません。 |
次のステップを実行します。
|
|
カスタム DNS サーバーを使用しています。 |
|