Package: aws-cdk.aws-efs
Amazon Elastic File System Construct Library---AWS CDK v1 has reached End-of-Support on 2023-06-01.
This package is no longer being updated, and users should migrate to AWS CDK v2.For more information on how to migrate, see theMigrating to AWS CDK v2guide.Amazon Elastic File System(Amazon EFS) provides a simple, scalable,
fully managed elastic NFS file system for use with AWS Cloud services and on-premises resources.
Amazon EFS provides file storage in the AWS Cloud. With Amazon EFS, you can create a file system,
mount the file system on an Amazon EC2 instance, and then read and write data to and from your file system.This module is part of theAWS Cloud Development Kitproject.File SystemsAmazon EFS provides elastic, shared file storage that is POSIX-compliant. The file system you create
supports concurrent read and write access from multiple Amazon EC2 instances and is accessible from
all of the Availability Zones in the AWS Region where it is created. Learn more aboutEFS file systemsCreate an Amazon EFS file systemA Virtual Private Cloud (VPC) is required to create an Amazon EFS file system.
The following example creates a file system that is encrypted at rest, running inGeneral Purposeperformance mode, andBurstingthroughput mode and does not transition files to the Infrequent
Access (IA) storage class.file_system=efs.FileSystem(self,"MyEfsFileSystem",vpc=ec2.Vpc(self,"VPC"),lifecycle_policy=efs.LifecyclePolicy.AFTER_14_DAYS,# files are not transitioned to infrequent access (IA) storage by defaultperformance_mode=efs.PerformanceMode.GENERAL_PURPOSE,# defaultout_of_infrequent_access_policy=efs.OutOfInfrequentAccessPolicy.AFTER_1_ACCESS)⚠️ An Amazon EFS file system's performance mode can't be changed after the file system has been created.
Updating this property will replace the file system.Any file system that has been created outside the stack can be imported into your CDK app.Use thefromFileSystemAttributes()API to import an existing file system.
Here is an example of giving a role write permissions on a file system.importaws_cdk.aws_iamasiamimported_file_system=efs.FileSystem.from_file_system_attributes(self,"existingFS",file_system_id="fs-12345678",# You can also use fileSystemArn instead of fileSystemId.security_group=ec2.SecurityGroup.from_security_group_id(self,"SG","sg-123456789",allow_all_outbound=False))PermissionsIf you need to grant file system permissions to another resource, you can use the.grant()API.
As an example, the following code giveselasticfilesystem:ClientWritepermissions to an IAM role.role=iam.Role(self,"Role",assumed_by=iam.AnyPrincipal())file_system.grant(role,"elasticfilesystem:ClientWrite")Access PointAn access point is an application-specific view into an EFS file system that applies an operating
system user and group, and a file system path, to any file system request made through the access
point. The operating system user and group override any identity information provided by the NFS
client. The file system path is exposed as the access point's root directory. Applications using
the access point can only access data in its own directory and below. To learn more, seeMounting a File System Using EFS Access Points.Use theaddAccessPointAPI to create an access point from a fileSystem.file_system.add_access_point("AccessPoint")By default, when you create an access point, the root(/) directory is exposed to the client
connecting to the access point. You can specify a custom path with thepathproperty.Ifpathdoes not exist, it will be created with the settings defined in thecreationInfo.
SeeCreating Access Pointsfor more details.Any access point that has been created outside the stack can be imported into your CDK app.Use thefromAccessPointAttributes()API to import an existing access point.efs.AccessPoint.from_access_point_attributes(self,"ap",access_point_id="fsap-1293c4d9832fo0912",file_system=efs.FileSystem.from_file_system_attributes(self,"efs",file_system_id="fs-099d3e2f",security_group=ec2.SecurityGroup.from_security_group_id(self,"sg","sg-51530134")))⚠️ Notice: When importing an Access Point usingfromAccessPointAttributes(), you must make sure
the mount targets are deployed and their lifecycle state isavailable. Otherwise, you may encounter
the following error when deploying:EFS file system  referenced by access point  has
mount targets created in all availability zones the function will execute in, but not all
are in the available life cycle state yet. Please wait for them to become available and
try the request again.ConnectingTo control who can access the EFS, use the.connectionsattribute. EFS has
a fixed default port, so you don't need to specify the port:file_system.connections.allow_default_port_from(instance)Learn more aboutmanaging file system network accessibilityMounting the file system using User DataAfter you create a file system, you can create mount targets. Then you can mount the file system on
EC2 instances, containers, and Lambda functions in your virtual private cloud (VPC).The following example automatically mounts a file system during instance launch.file_system.connections.allow_default_port_from(instance)instance.user_data.add_commands("yum check-update -y","yum upgrade -y","yum install -y amazon-efs-utils","yum install -y nfs-utils","file_system_id_1="+file_system.file_system_id,"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(self).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")Learn more aboutmounting EFS file systemsDeletingSince file systems are stateful resources, by default the file system will not be deleted when your
stack is deleted.You can configure the file system to be destroyed on stack deletion by setting aremovalPolicyfile_system=efs.FileSystem(self,"EfsFileSystem",vpc=ec2.Vpc(self,"VPC"),removal_policy=RemovalPolicy.DESTROY)