Amazon EFS 集成
您可以在 RDS for Oracle 数据库实例和 Amazon EFS 文件系统之间传输文件。您可以使用 Amazon EFS 与 Oracle Database 集成的功能,例如 Oracle Data Pump。例如,您可以将 Data Pump 文件从 Amazon EFS 导入到 RDS for Oracle 数据库实例。您无需在本地复制这些文件,因为 Data Pump 直接从 EFS 文件系统导入。有关更多信息,请参阅将数据导入到 Amazon RDS 上的 Oracle。
注意以下要求和限制:
-
仅对于 Oracle Database 19c - 2022 年 7 月补丁集更新(PSU)19.0.0.0.ru-2022-07.rur-2022-07.r1 或更高版本支持 Amazon EFS 集成。
-
数据库实例和 EFS 文件系统必须位于同一个 AWS 区域 和同一个 VPC 中。
-
您的 VPC 必须已启用
enableDnsSupport
属性。有关更多信息,请参阅《Amazon Virtual Private Cloud 用户指南》中的 VPC 中的 DNS 属性。 -
EFS 文件系统必须使用 Standard 或 Standard-IA 存储类。
-
RDS for Oracle 不支持 EFS 文件系统的自动备份或手动数据库快照。相反,您必须使用 AWS Backup 或其他解决方案来备份 EFS 文件系统。有关更多信息,请参阅备份您的 Amazon EFS 文件系统。
主题
为 RDS for Oracle 与 Amazon EFS 集成配置网络权限
要让 RDS for Oracle 与 Amazon EFS 集成,请确保您的数据库实例具有网络访问权限,可访问 EFS 文件系统。有关更多信息,请参阅《Amazon Elastic File System 用户指南》中的 控制 NFS 客户端对 Amazon EFS 文件系统的网络访问权限。
使用安全组控制网络访问权限
您可以使用 VPC 安全组等网络层安全机制控制数据库实例对 EFS 文件系统的访问权限。要允许访问数据库实例的 EFS 文件系统,请确保您的 EFS 文件系统满足以下要求:
-
EEFS 挂载目标存在于 RDS for Oracle 数据库实例使用的每个可用区中。
您可以将不同可用区中的数据库实例配置为使用相同的 EFS 文件系统。对于多可用区,部署中的每个可用区都需要一个挂载点。您可能需要将数据库实例移到其他可用区。出于这些原因,我们建议您在 VPC 的每个可用区中创建一个 EFS 挂载点。原定设置情况下,当您使用控制台创建新的 EFS 文件系统时,RDS 会为所有可用区创建挂载目标。
-
安全组已连接到挂载目标。
-
安全组有一条入站规则,允许在 TCP/2049(类型 NFS)上使用 RDS for Oracle 数据库实例的网络子网或安全组。
有关更多信息,请参阅《Amazon Elastic File System 用户指南》中的创建 Amazon EFS 文件系统和创建和管理 EFS 挂载目标和安全组。
使用文件系统策略控制网络访问权限
Amazon EFS 与 RDS for Oracle 的集成使用原定设置(空)EFS 文件系统策略。原定设置策略不使用 IAM 进行身份验证。相反,它向可以使用挂载目标连接到文件系统的任何匿名客户端授予完全访问权限。当用户配置的文件系统策略不生效时(包括在创建文件系统时),原定设置策略将生效。有关更多信息,请参阅《Amazon Elastic File System 用户指南》中的原定设置 EFS 文件系统策略。
要增强所有客户端(包括 RDS for Oracle)的 EFS 文件系统的访问权限,您可以配置 IAM 权限。使用这种方法,您可以创建文件系统策略。有关更多信息,请参阅《Amazon Elastic File System 用户指南》中的创建文件系统策略。
为 RDS for Oracle 与 Amazon EFS 集成配置 IAM 权限
要让 RDS for Oracle 与 Amazon EFS 集成,您的数据库实例必须具有可以访问 Amazon EFS 文件系统的 IAM 权限。
步骤 1:为您的数据库实例创建 IAM 角色并附加策略
在此步骤中,您将为 RDS for Oracle 数据库实例创建一个角色,以允许 Amazon RDS 访问您的 EFS 文件系统。
创建 IAM 角色以允许 Amazon RDS 访问 EFS 文件系统
-
打开 IAM 管理控制台
。 -
在导航窗格中,选择 Roles(角色)。
-
选择 Create role(创建角色)。
-
对于 AWS service (亚马逊云科技服务),选择 RDS。
-
对于 Select your use case (选择您的用例),选择 RDS – Add Role to Database (RDS - 将角色添加到数据库)。
-
选择 Next(下一步)。
-
不要添加任何权限策略。选择 Next(下一步)。
-
将 Role name (角色名称) 设置为您的 IAM 角色的名称,例如,
rds-efs-integration-role
。您也可以添加可选的描述值。 -
选择 Create role(创建角色)。
要限制服务对特定资源的权限,我们建议在基于资源的信任关系中使用 aws:SourceArn
和 aws:SourceAccount
全局条件上下文键。这是防范混淆代理问题最有效的方法。
您可以使用这两个全局条件上下文键并让 aws:SourceArn
值包含账户 ID。在这种情况下,当 aws:SourceAccount
值和 aws:SourceArn
值中的账户使用相同策略语句时,确保二者使用相同的账户 ID。
-
如果您想对单个资源进行跨服务访问,请使用
aws:SourceArn
。 -
如果您想允许该账户中的任何资源与跨服务使用操作相关联,请使用
aws:SourceAccount
。
在信任关系中,请务必使用 aws:SourceArn
全局条件上下文键和访问角色资源的完整 Amazon Resource Name (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 文件系统策略。
-
选择编辑。此时将显示 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 数据库实例关联
在此步骤中,您将您的 IAM 角色与数据库实例关联。请注意以下要求:
-
您必须具有访问 IAM 角色的权限,并向此角色附加所需的 Amazon EFS 权限策略。
-
您一次只能将一个 IAM 角色与 RDS for Oracle 数据库实例关联。
-
实例的状态必须为 Available(可用)。
有关更多信息,请参阅《Amazon Elastic File System 用户指南》中的 Amazon EFS 的身份和访问权限管理。
将您的 IAM 角色与 RDS for Oracle 数据库实例关联
登录 AWS Management Console 并通过以下网址打开 Amazon RDS 控制台:https://console.aws.amazon.com/rds/
。 -
选择数据库。
-
如果数据库实例不可用,请选择 Actions (操作),然后选择 Start (启动)。当实例状态显示 Started (已启动) 时,请转至下一步。
-
选择 Oracle 数据库实例名称以显示其详细信息。
-
在 Connectivity & security(连接性和安全性)选项卡上,向下滚动到页面底部的 Manage IAM roles(管理 IAM 角色)部分。
-
选择要添加到 Add IAM roles to this instance(将 IAM 角色添加到此实例)部分的角色。
-
对于 Feature(功能),选择 EFS_INTEGRATION。
-
选择 Add role (添加角色)。
以下 AWS CLI 命令将角色添加到名为
的 Oracle 数据库实例。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 选项
要将 Amazon RDS for Oracle 与 Amazon EFS 集成,您的数据库实例必须与包括 EFS_INTEGRATION
选项的选项组关联。
属于同一选项组的多个 Oracle 数据库实例共享相同的 EFS 文件系统。不同的数据库实例可以访问相同的数据,但可以通过使用不同的 Oracle 目录来划分访问权限。有关更多信息,请参阅在 RDS for Oracle 和 Amazon EFS 文件系统之间传输文件。
为 Amazon EFS 集成配置选项组
-
创建新选项组或识别现有选项组,然后您可以将
EFS_INTEGRATION
选项添加到其中。有关创建选项组的信息,请参阅 创建选项组。
-
将
EFS_INTEGRATION
选项添加到该选项组。您需要指定EFS_ID
文件系统 ID 并设置USE_IAM_ROLE
标志。有关更多信息,请参阅将选项添加到选项组。
-
通过以下任一方式将选项组与数据库实例关联:
-
创建新的 Oracle 数据库实例并将选项组与其关联。有关创建数据库实例的信息,请参阅创建 Amazon RDS 数据库实例。
-
修改 Oracle 数据库实例以将选项组与其关联。有关修改 Oracle 数据库实例的信息,请参阅 修改 Amazon RDS 数据库实例。
-
为 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}]" -
通过以下任一方式将选项组与数据库实例关联:
-
创建新的 Oracle 数据库实例并将选项组与其关联。有关创建数据库实例的信息,请参阅创建 Amazon RDS 数据库实例。
-
修改 Oracle 数据库实例以将选项组与其关联。有关修改 Oracle 数据库实例的信息,请参阅 修改 Amazon RDS 数据库实例。
-
配置 Amazon EFS 文件系统权限
原定设置情况下,对于新创建的 EFS 文件系统,只有根用户(UID 0
)具有读取、写入和执行权限。为了让其他用户也能修改文件系统,根用户必须明确授予他们访问权限。RDS for Oracle 数据库实例的用户属于 others
类别。有关更多信息,请参阅《Amazon Elastic File System 用户指南》中的在网络文件系统(NFS)级别处理用户、组和权限。
要允许您的 RDS for Oracle 数据库实例在 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 目录并配置 EFS 文件系统权限以控制数据库实例访问权限。
创建 Oracle 目录
要创建 Oracle 目录,请使用过程 rdsadmin.rdsadmin_util.create_directory_efs
。 过程具有以下参数。
参数名称 | 数据类型 | 默认值 | 必需 | 描述 |
---|---|---|---|---|
|
VARCHAR2 |
– |
是 |
Oracle 目录的名称。 |
|
VARCHAR2 |
– |
是 |
EFS 文件系统上的路径。路径名的前缀使用模式 例如,如果您的 EFS 文件系统名为
|
假设您在 EFS 文件系统 fs-1234567890abcdef0
上创建了一个名为 /datapump1
的子目录。以下示例创建一个 Oracle 目录 DATA_PUMP_DIR_EFS
,该目录指向 EFS 文件系统上的 /datapump1
目录。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 从文件 datapump.dmp
中导出名为 MY_TABLE
的表。此文件位于 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 选项
要从 RDS for Oracle 数据库实例中删除 EFS_INTEGRATION
选项,请执行下列操作之一:
-
要从多个数据库实例中删除
EFS_INTEGRATION
选项,请从数据库实例所属的选项组中删除EFS_INTEGRATION
选项。此更改会影响使用该选项组的所有数据库实例。有关更多信息,请参阅从选项组中删除选项。 -
要从单个数据库实例中删除
EFS_INTEGRATION
选项,请修改该实例,并指定不包含EFS_INTEGRATION
选项的另一个选项组。您可以指定默认(空)选项组,或指定其他自定义选项组。有关更多信息,请参阅修改 Amazon RDS 数据库实例。
Amazon EFS 集成问题排查
您的 RDS for Oracle 数据库实例监控与 Amazon EFS 文件系统的连接。当监控检测到问题时,它可能会尝试更正问题并在 RDS 控制台中发布事件。有关更多信息,请参阅查看 Amazon RDS 事件。
使用本部分中的信息帮助您诊断和修复在使用 Amazon EFS 集成时的常见问题。
通知 | 描述 | 操作 |
---|---|---|
|
数据库实例无法与 EFS 文件系统通信。 |
请确保满足以下条件:
|
|
安装 |
请确保满足以下条件:
|
|
安装 |
确保您已将 IAM 角色与 RDS for Oracle 数据库实例关联。 |
|
您可能会看到以下错误: |
确保您使用的是 RDS for Oracle 数据库实例版本 19.0.0.0.ru-2022-07.rur-2022-07.r1 或更高版本。 |
|
您的数据库实例无法读取 EFS 文件系统。 |
确保您的 EFS 文件系统允许通过 IAM 角色或在 EFS 文件系统级别进行读取访问。 |
不适用 |
您的数据库实例无法写入 EFS 文件系统。 |
执行以下步骤:
|