亚马逊弹性文件系统构建库
AWS CDK v1在2023-06-01上达到了支持结束. 此软件包不再更新,用户应该迁移到 AWS CDK v2.
关于如何移徙的更多信息,请参见: 移动到 AWS CDK v2 指南。 。 。 .
亚马逊弹性文件系统 (Amazon EFS)提供了一种简单,可扩展的, 完全管理有弹性的NFS文件系统,用于AWS Cloud服务以及上前提资源. Amazon EFS在AWS Cloud中提供文件存储. 通过Amazon EFS,你可以创建一个文件系统, 在 Amazon EC2 实例上挂载文件系统,然后读取和写入您文件系统的数据.
这个模块是 AWS 云开发套件 项目.
文件系统
Amazon EFS提供弹性,共享文件存储,符合POSIX. 您创建的文件系统 支持从多个 Amazon EC2 实例同时读取和写入访问,并且可从 aWS地区的所有可提供区都是它创建的地方。 学习更多关于 EFS 文件系统
创建 Amazon EFS 文件系统
一个虚拟私人云(VPC)需要创建一个亚马逊EFS文件系统.
以下示例创建一个在休息时加密的文件系统, 运行于 General Purpose
性能模式,以及 Bursting 通量模式且不向不经常文件过渡
访问(IA)存储类.
const fileSystem = new efs.FileSystem(this, 'MyEfsFileSystem', {
vpc: new ec2.Vpc(this, 'VPC'),
lifecyclePolicy: efs.LifecyclePolicy.AFTER_14_DAYS, // files are not transitioned to infrequent access (IA) storage by default
performanceMode: efs.PerformanceMode.GENERAL_PURPOSE, // default
outOfInfrequentAccessPolicy: efs.OutOfInfrequentAccessPolicy.AFTER_1_ACCESS, // files are not transitioned back from (infrequent access) IA to primary storage by default
});
QQ 亚马逊 EFS 文件系统的性能模式在文件系统创建后无法被更改. 更新此属性将取代文件系统 .
堆栈外创建的任何文件系统都可以被导入到您的 CDK 应用程序中.
使用 fromFileSystemAttributes() API 导入已有的文件系统 .
以下是在文件系统中给出角色写入权限的例子.
import * as iam from '@aws-cdk/aws-iam';
const importedFileSystem = efs.FileSystem.fromFileSystemAttributes(this, 'existingFS', {
fileSystemId: 'fs-12345678', // You can also use fileSystemArn instead of fileSystemId.
securityGroup: ec2.SecurityGroup.fromSecurityGroupId(this, 'SG', 'sg-123456789', {
allowAllOutbound: false,
}),
});
权限
如果您需要授予其它资源文件系统权限, 您可以使用 .grant() API (英语).
例如,以下代码给出: elasticfilesystem:ClientWrite 允许一个 IAM 角色.
const role = new iam.Role(this, 'Role', {
assumedBy: new iam.AnyPrincipal(),
});
fileSystem.grant(role, 'elasticfilesystem:ClientWrite');
访问点
访问点是应用操作的 EFS 文件系统中的应用程序特定视图 系统用户和组,以及文件系统路径,到通过访问提出的任何文件系统请求 点。 操作系统用户和组覆盖 NFS 提供的任何身份信息 客户端。 文件系统路径作为访问点的根目录被曝光. 使用 访问点只能访问它自己的目录和下面的数据。 要学更多,看 使用 EFS 访问点挂载文件系统。 。 。 .
使用 addAccessPoint 从文件系统创建访问点的 API .
fileSystem.addAccessPoint('AccessPoint');
默认情况下,当创建访问点时, root (/) 目录被客户端所曝光
连接接入点 。 您可以指定自定义路径 path 属性.
若为 path 不存在,将使用定义在 creationInfo。 。 。 .
见 创建访问点 更多细节.
在堆栈外创建的任何访问点都可以被导入到您的 CDK 应用程序中 .
使用 fromAccessPointAttributes() API 导入已有的访问点 .
efs.AccessPoint.fromAccessPointAttributes(this, 'ap', {
accessPointId: 'fsap-1293c4d9832fo0912',
fileSystem: efs.FileSystem.fromFileSystemAttributes(this, 'efs', {
fileSystemId: 'fs-099d3e2f',
securityGroup: ec2.SecurityGroup.fromSecurityGroupId(this, 'sg', 'sg-51530134'),
}),
});
QQ 通知: 当导入使用访问点时 fromAccessPointAttributes()你必须确定
目标已部署,其寿命周期状态 available。否则,你可能会遇到
部署时的下列错误:
EFS 文件系统 < ARN of efs> 通过访问点 < ARN of eFS> 引用 挂载在所有可用区设定的目标,该功能将在但并非全部 处于可用的生命周期状态。 请等他们到场 再次尝试请求.
连接中
要控制谁可以访问 EFS,请使用 .connections 属性。 EFS已经
固定默认端口,所以不需要指定端口 :
fileSystem.connections.allowDefaultPortFrom(instance);
学习更多关于 管理文件系统网络访问
使用用户数据挂载文件系统
在创建文件系统后,可以创建挂载目标. 然后可以挂载文件系统 EC2 实例、容器和 Lambda 在您的虚拟私有云( VPC) 中发挥作用.
以下示例在实例启动时自动挂载文件系统 .
fileSystem.connections.allowDefaultPortFrom(instance);
instance.userData.addCommands("yum check-update -y", // Ubuntu: apt-get -y update
"yum upgrade -y", // Ubuntu: apt-get -y upgrade
"yum install -y amazon-efs-utils", // Ubuntu: apt-get -y install amazon-efs-utils
"yum install -y nfs-utils", // Ubuntu: apt-get -y install nfs-common
"file_system_id_1=" + fileSystem.fileSystemId,
"efs_mount_point_1=/mnt/efs/fs1",
"mkdir -p \"${efs_mount_point_1}\"",
"test -f \"/sbin/mount.efs\" && echo \"${file_system_id_1}:/ ${efs_mount_point_1} efs defaults,_netdev\" >> /etc/fstab || " +
"echo \"${file_system_id_1}.efs." + Stack.of(this).region + ".amazonaws.com:/ ${efs_mount_point_1} nfs4 nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport,_netdev 0 0\" >> /etc/fstab",
"mount -a -t efs,nfs4 defaults");
学习更多关于 正在安装 EFS 文件系统
删除
由于文件系统是状态资源,因此默认情况下,文件系统不会在您 堆栈已删除.
您可以设置一个 removalPolicy
const fileSystem = new efs.FileSystem(this, 'EfsFileSystem', {
vpc: new ec2.Vpc(this, 'VPC'),
removalPolicy: RemovalPolicy.DESTROY,
});