EFS Constructs¶
Elastic File System, access points, and mount targets.
efs
¶
Classes¶
EFSEcosystem
¶
EFSEcosystem(
scope: Construct,
id: str | None,
env_base: EnvBase,
file_system_name: str,
vpc: Vpc,
efs_lifecycle_policy: LifecyclePolicy | None = None,
)
Bases: EnvBaseConstruct
Complete EFS ecosystem with predefined access points.
Creates an EFS file system with root, shared, scratch, and tmp access points.
Attributes:
| Name | Type | Description |
|---|---|---|
root_access_point |
Access point for the root directory. |
|
shared_access_point |
Access point for shared data. |
|
scratch_access_point |
Access point for scratch data. |
|
tmp_access_point |
Access point for temporary data. |
Initialize an EFS ecosystem.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
scope
|
Construct
|
The construct scope. |
required |
id
|
Optional[str]
|
The construct ID. |
required |
env_base
|
EnvBase
|
Environment base for resource naming. |
required |
file_system_name
|
str
|
Name for the file system. |
required |
vpc
|
Vpc
|
VPC for the file system. |
required |
efs_lifecycle_policy
|
Optional[LifecyclePolicy]
|
Lifecycle policy. |
None
|
Note
If the EFS filesystem is intended to be deployed in BURSTING throughput mode, it may be counterproductive to set an efs_lifecycle_policy other than None because EFS files in IA tier DO NOT count towards burst credit accumulation. See: https://docs.aws.amazon.com/efs/latest/ug/performance.html#bursting
Source code in src/aibs_informatics_cdk_lib/constructs_/efs/file_system.py
Attributes¶
file_system
property
¶
file_system: EnvBaseFileSystem
Get the underlying EFS file system.
Returns:
| Type | Description |
|---|---|
EnvBaseFileSystem
|
The EFS file system instance. |
as_lambda_file_system
property
¶
Get the file system configured for Lambda.
Returns:
| Type | Description |
|---|---|
FileSystem
|
Lambda FileSystem using the root access point. |
Functions¶
EnvBaseFileSystem
¶
EnvBaseFileSystem(
scope: Construct,
id: str,
env_base: EnvBase,
vpc: IVpc,
file_system_name: str,
allow_anonymous_access: bool | None = None,
enable_automatic_backups: bool | None = None,
encrypted: bool | None = None,
lifecycle_policy: LifecyclePolicy | None = None,
out_of_infrequent_access_policy: OutOfInfrequentAccessPolicy
| None = None,
performance_mode: PerformanceMode | None = None,
removal_policy: RemovalPolicy = DESTROY,
throughput_mode: ThroughputMode | None = BURSTING,
**kwargs
)
Bases: FileSystem, EnvBaseConstructMixins
Environment-aware EFS file system construct.
Extends the standard EFS FileSystem with environment base naming conventions and helper methods for access point creation.
Initialize an environment-aware EFS file system.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
scope
|
Construct
|
The construct scope. |
required |
id
|
str
|
The construct ID. |
required |
env_base
|
EnvBase
|
Environment base for resource naming. |
required |
vpc
|
IVpc
|
VPC for the file system. |
required |
file_system_name
|
str
|
Name for the file system. |
required |
allow_anonymous_access
|
Optional[bool]
|
Allow anonymous access. |
None
|
enable_automatic_backups
|
Optional[bool]
|
Enable automatic backups. |
None
|
encrypted
|
Optional[bool]
|
Enable encryption. |
None
|
lifecycle_policy
|
Optional[LifecyclePolicy]
|
Lifecycle policy. |
None
|
out_of_infrequent_access_policy
|
Optional[OutOfInfrequentAccessPolicy]
|
Policy for moving files out of infrequent access. |
None
|
performance_mode
|
Optional[PerformanceMode]
|
Performance mode. |
None
|
removal_policy
|
RemovalPolicy
|
Removal policy. Defaults to DESTROY. |
DESTROY
|
throughput_mode
|
Optional[ThroughputMode]
|
Throughput mode. Defaults to BURSTING. |
BURSTING
|
**kwargs
|
Additional arguments passed to parent. |
{}
|
Source code in src/aibs_informatics_cdk_lib/constructs_/efs/file_system.py
Attributes¶
file_system_name
property
¶
Get the full file system name including environment prefix.
Returns:
| Type | Description |
|---|---|
str
|
The file system name. |
Functions¶
create_access_point
¶
Create an EFS access point.
Uses CfnAccessPoint because the AccessPoint construct does not support tagging or naming. Tags are used to set the name.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
name
|
str
|
Name used for construct ID and as default Name tag. |
required |
path
|
str
|
Access point path within the file system. |
required |
*tags
|
Union[EFSTag, Tuple[str, str]]
|
Variable number of tags to add to the access point. |
()
|
Returns:
| Type | Description |
|---|---|
AccessPoint
|
The created access point. |
Source code in src/aibs_informatics_cdk_lib/constructs_/efs/file_system.py
as_lambda_file_system
¶
Convert to a Lambda file system configuration.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
access_point
|
AccessPoint
|
The access point to use. |
required |
Returns:
| Type | Description |
|---|---|
FileSystem
|
Lambda FileSystem configured for the access point. |
Source code in src/aibs_informatics_cdk_lib/constructs_/efs/file_system.py
grant_lambda_access
¶
Grant a Lambda function access to this file system.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
resource
|
Function
|
The Lambda function to grant access to. |
required |
Source code in src/aibs_informatics_cdk_lib/constructs_/efs/file_system.py
Functions¶
grant_connectable_file_system_access
¶
grant_connectable_file_system_access(
file_system: IFileSystem | FileSystem,
connectable: IConnectable,
permissions: Literal["r", "rw"] = "rw",
) -> None
Grant a connectable resource access to an EFS file system.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
file_system
|
Union[IFileSystem, FileSystem]
|
The file system. |
required |
connectable
|
IConnectable
|
The connectable resource. |
required |
permissions
|
Literal['r', 'rw']
|
Permission level. Defaults to "rw". |
'rw'
|
Source code in src/aibs_informatics_cdk_lib/constructs_/efs/file_system.py
grant_file_system_access
¶
Grant a Lambda function full access to an EFS file system.
Grants grantable, role, and connectable access.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
file_system
|
Union[IFileSystem, FileSystem]
|
The file system. |
required |
resource
|
Function
|
The Lambda function. |
required |
Source code in src/aibs_informatics_cdk_lib/constructs_/efs/file_system.py
grant_role_file_system_access
¶
grant_role_file_system_access(
file_system: IFileSystem | FileSystem,
role: IRole | None,
permissions: Literal["r", "rw"] = "rw",
) -> None
Grant an IAM role access to an EFS file system.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
file_system
|
Union[IFileSystem, FileSystem]
|
The file system. |
required |
role
|
Optional[IRole]
|
The IAM role to grant access to. |
required |
permissions
|
Literal['r', 'rw']
|
Permission level. Defaults to "rw". |
'rw'
|
Source code in src/aibs_informatics_cdk_lib/constructs_/efs/file_system.py
Modules¶
file_system
¶
EFS file system constructs and utilities.
This module provides CDK constructs for creating and managing EFS file systems, access points, and mount point configurations.
Classes¶
EnvBaseFileSystem
¶
EnvBaseFileSystem(
scope: Construct,
id: str,
env_base: EnvBase,
vpc: IVpc,
file_system_name: str,
allow_anonymous_access: bool | None = None,
enable_automatic_backups: bool | None = None,
encrypted: bool | None = None,
lifecycle_policy: LifecyclePolicy | None = None,
out_of_infrequent_access_policy: OutOfInfrequentAccessPolicy
| None = None,
performance_mode: PerformanceMode | None = None,
removal_policy: RemovalPolicy = DESTROY,
throughput_mode: ThroughputMode | None = BURSTING,
**kwargs
)
Bases: FileSystem, EnvBaseConstructMixins
Environment-aware EFS file system construct.
Extends the standard EFS FileSystem with environment base naming conventions and helper methods for access point creation.
Initialize an environment-aware EFS file system.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
scope
|
Construct
|
The construct scope. |
required |
id
|
str
|
The construct ID. |
required |
env_base
|
EnvBase
|
Environment base for resource naming. |
required |
vpc
|
IVpc
|
VPC for the file system. |
required |
file_system_name
|
str
|
Name for the file system. |
required |
allow_anonymous_access
|
Optional[bool]
|
Allow anonymous access. |
None
|
enable_automatic_backups
|
Optional[bool]
|
Enable automatic backups. |
None
|
encrypted
|
Optional[bool]
|
Enable encryption. |
None
|
lifecycle_policy
|
Optional[LifecyclePolicy]
|
Lifecycle policy. |
None
|
out_of_infrequent_access_policy
|
Optional[OutOfInfrequentAccessPolicy]
|
Policy for moving files out of infrequent access. |
None
|
performance_mode
|
Optional[PerformanceMode]
|
Performance mode. |
None
|
removal_policy
|
RemovalPolicy
|
Removal policy. Defaults to DESTROY. |
DESTROY
|
throughput_mode
|
Optional[ThroughputMode]
|
Throughput mode. Defaults to BURSTING. |
BURSTING
|
**kwargs
|
Additional arguments passed to parent. |
{}
|
Source code in src/aibs_informatics_cdk_lib/constructs_/efs/file_system.py
file_system_name
property
¶Get the full file system name including environment prefix.
Returns:
| Type | Description |
|---|---|
str
|
The file system name. |
create_access_point
¶Create an EFS access point.
Uses CfnAccessPoint because the AccessPoint construct does not support tagging or naming. Tags are used to set the name.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
name
|
str
|
Name used for construct ID and as default Name tag. |
required |
path
|
str
|
Access point path within the file system. |
required |
*tags
|
Union[EFSTag, Tuple[str, str]]
|
Variable number of tags to add to the access point. |
()
|
Returns:
| Type | Description |
|---|---|
AccessPoint
|
The created access point. |
Source code in src/aibs_informatics_cdk_lib/constructs_/efs/file_system.py
as_lambda_file_system
¶Convert to a Lambda file system configuration.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
access_point
|
AccessPoint
|
The access point to use. |
required |
Returns:
| Type | Description |
|---|---|
FileSystem
|
Lambda FileSystem configured for the access point. |
Source code in src/aibs_informatics_cdk_lib/constructs_/efs/file_system.py
grant_lambda_access
¶Grant a Lambda function access to this file system.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
resource
|
Function
|
The Lambda function to grant access to. |
required |
Source code in src/aibs_informatics_cdk_lib/constructs_/efs/file_system.py
EFSEcosystem
¶
EFSEcosystem(
scope: Construct,
id: str | None,
env_base: EnvBase,
file_system_name: str,
vpc: Vpc,
efs_lifecycle_policy: LifecyclePolicy | None = None,
)
Bases: EnvBaseConstruct
Complete EFS ecosystem with predefined access points.
Creates an EFS file system with root, shared, scratch, and tmp access points.
Attributes:
| Name | Type | Description |
|---|---|---|
root_access_point |
Access point for the root directory. |
|
shared_access_point |
Access point for shared data. |
|
scratch_access_point |
Access point for scratch data. |
|
tmp_access_point |
Access point for temporary data. |
Initialize an EFS ecosystem.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
scope
|
Construct
|
The construct scope. |
required |
id
|
Optional[str]
|
The construct ID. |
required |
env_base
|
EnvBase
|
Environment base for resource naming. |
required |
file_system_name
|
str
|
Name for the file system. |
required |
vpc
|
Vpc
|
VPC for the file system. |
required |
efs_lifecycle_policy
|
Optional[LifecyclePolicy]
|
Lifecycle policy. |
None
|
Note
If the EFS filesystem is intended to be deployed in BURSTING throughput mode, it may be counterproductive to set an efs_lifecycle_policy other than None because EFS files in IA tier DO NOT count towards burst credit accumulation. See: https://docs.aws.amazon.com/efs/latest/ug/performance.html#bursting
Source code in src/aibs_informatics_cdk_lib/constructs_/efs/file_system.py
file_system
property
¶file_system: EnvBaseFileSystem
Get the underlying EFS file system.
Returns:
| Type | Description |
|---|---|
EnvBaseFileSystem
|
The EFS file system instance. |
as_lambda_file_system
property
¶Get the file system configured for Lambda.
Returns:
| Type | Description |
|---|---|
FileSystem
|
Lambda FileSystem using the root access point. |
MountPointConfiguration
dataclass
¶
MountPointConfiguration(
file_system: FileSystem | IFileSystem | None,
access_point: AccessPoint | IAccessPoint | None,
mount_point: str,
root_directory: str | None = None,
read_only: bool = False,
)
Configuration for mounting an EFS file system.
Attributes:
| Name | Type | Description |
|---|---|---|
file_system |
Optional[Union[FileSystem, IFileSystem]]
|
The EFS file system to mount. |
access_point |
Optional[Union[AccessPoint, IAccessPoint]]
|
The access point to use for mounting. |
mount_point |
str
|
The path where the file system will be mounted. |
root_directory |
Optional[str]
|
Root directory within the file system. |
read_only |
bool
|
Whether to mount as read-only. Defaults to False. |
Raises:
| Type | Description |
|---|---|
ValueError
|
If neither file system nor access point is provided, or if access point's file system doesn't match the provided file system. |
file_system_id
property
¶Get the file system ID.
Returns:
| Type | Description |
|---|---|
str
|
The EFS file system ID. |
Raises:
| Type | Description |
|---|---|
ValueError
|
If no file system or access point is configured. |
access_point_id
property
¶Get the access point ID.
Returns:
| Type | Description |
|---|---|
str | None
|
The access point ID, or None if using file system directly. |
from_file_system
classmethod
¶from_file_system(
file_system: FileSystem | IFileSystem,
root_directory: str | None = None,
mount_point: str | None = None,
read_only: bool = False,
) -> MountPointConfiguration
Create configuration from a file system.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
file_system
|
Union[FileSystem, IFileSystem]
|
The file system. |
required |
root_directory
|
Optional[str]
|
Root directory. Defaults to "/". |
None
|
mount_point
|
Optional[str]
|
Mount point path. Defaults to /opt/efs/{file_system_id}. |
None
|
read_only
|
bool
|
Mount as read-only. Defaults to False. |
False
|
Returns:
| Type | Description |
|---|---|
MountPointConfiguration
|
MountPointConfiguration for the file system. |
Source code in src/aibs_informatics_cdk_lib/constructs_/efs/file_system.py
from_access_point
classmethod
¶from_access_point(
access_point: AccessPoint | IAccessPoint,
mount_point: str | None = None,
read_only: bool = False,
) -> MountPointConfiguration
Create configuration from an access point.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
access_point
|
Union[AccessPoint, IAccessPoint]
|
The access point. |
required |
mount_point
|
Optional[str]
|
Mount point path. Defaults to /opt/efs/{access_point_id}. |
None
|
read_only
|
bool
|
Mount as read-only. Defaults to False. |
False
|
Returns:
| Type | Description |
|---|---|
MountPointConfiguration
|
MountPointConfiguration for the access point. |
Source code in src/aibs_informatics_cdk_lib/constructs_/efs/file_system.py
to_batch_mount_point
¶Convert to Batch mount point configuration.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
name
|
str
|
Name of the volume. |
required |
sfn_format
|
bool
|
Use Step Functions API case. Defaults to False. |
False
|
Returns:
| Type | Description |
|---|---|
dict[str, Any]
|
Dictionary containing the mount point configuration. |
Source code in src/aibs_informatics_cdk_lib/constructs_/efs/file_system.py
to_batch_volume
¶Convert to Batch volume configuration.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
name
|
str
|
Name of the volume. |
required |
sfn_format
|
bool
|
Use Step Functions API case. Defaults to False. |
False
|
Returns:
| Type | Description |
|---|---|
dict[str, Any]
|
Dictionary containing the volume configuration. |
Source code in src/aibs_informatics_cdk_lib/constructs_/efs/file_system.py
Functions¶
create_access_point
¶
create_access_point(
scope: Construct,
file_system: FileSystem | IFileSystem,
name: str,
path: str,
*tags: EFSTag | tuple[str, str]
) -> AccessPoint
Create an EFS access point.
Uses CfnAccessPoint because the AccessPoint construct does not support tagging or naming. Tags are used to set the name.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
scope
|
Construct
|
The construct scope. |
required |
file_system
|
Union[FileSystem, IFileSystem]
|
The file system. |
required |
name
|
str
|
Name used for construct ID and as default Name tag. |
required |
path
|
str
|
Access point path within the file system. |
required |
*tags
|
Union[EFSTag, Tuple[str, str]]
|
Variable number of tags. |
()
|
Returns:
| Type | Description |
|---|---|
AccessPoint
|
The created access point. |
Source code in src/aibs_informatics_cdk_lib/constructs_/efs/file_system.py
grant_connectable_file_system_access
¶
grant_connectable_file_system_access(
file_system: IFileSystem | FileSystem,
connectable: IConnectable,
permissions: Literal["r", "rw"] = "rw",
) -> None
Grant a connectable resource access to an EFS file system.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
file_system
|
Union[IFileSystem, FileSystem]
|
The file system. |
required |
connectable
|
IConnectable
|
The connectable resource. |
required |
permissions
|
Literal['r', 'rw']
|
Permission level. Defaults to "rw". |
'rw'
|
Source code in src/aibs_informatics_cdk_lib/constructs_/efs/file_system.py
grant_role_file_system_access
¶
grant_role_file_system_access(
file_system: IFileSystem | FileSystem,
role: IRole | None,
permissions: Literal["r", "rw"] = "rw",
) -> None
Grant an IAM role access to an EFS file system.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
file_system
|
Union[IFileSystem, FileSystem]
|
The file system. |
required |
role
|
Optional[IRole]
|
The IAM role to grant access to. |
required |
permissions
|
Literal['r', 'rw']
|
Permission level. Defaults to "rw". |
'rw'
|
Source code in src/aibs_informatics_cdk_lib/constructs_/efs/file_system.py
grant_grantable_file_system_access
¶
grant_grantable_file_system_access(
file_system: IFileSystem | FileSystem,
grantable: IGrantable,
permissions: Literal["r", "rw"] = "rw",
) -> None
Grant a grantable principal access to an EFS file system.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
file_system
|
Union[IFileSystem, FileSystem]
|
The file system. |
required |
grantable
|
IGrantable
|
The grantable principal. |
required |
permissions
|
Literal['r', 'rw']
|
Permission level. Defaults to "rw". |
'rw'
|
Source code in src/aibs_informatics_cdk_lib/constructs_/efs/file_system.py
grant_file_system_access
¶
Grant a Lambda function full access to an EFS file system.
Grants grantable, role, and connectable access.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
file_system
|
Union[IFileSystem, FileSystem]
|
The file system. |
required |
resource
|
Function
|
The Lambda function. |
required |
Source code in src/aibs_informatics_cdk_lib/constructs_/efs/file_system.py
repair_connectable_efs_dependency
¶
repair_connectable_efs_dependency(
file_system: IFileSystem | FileSystem,
connectable: IConnectable,
) -> None
Repair cyclical dependency between EFS and dependent connectable.
When an EFS filesystem is added to a Lambda Function (via the file_system= param) it automatically sets up networking access between the two by adding an ingress rule on the EFS security group. However, the ingress rule resource gets attached to whichever CDK Stack the EFS security group is defined on.
If the Lambda Function is defined on a different stack, it creates a circular dependency issue, where the EFS stack is dependent on the Lambda security group's ID and the Lambda stack is dependent on the EFS stack's file system object.
To resolve this, we manually remove the ingress rule that gets automatically created and recreate it on the Lambda's stack instead.
Based on: https://github.com/aws/aws-cdk/issues/18759#issuecomment-1268689132
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
file_system
|
Union[IFileSystem, FileSystem]
|
The EFS file system. |
required |
connectable
|
IConnectable
|
The connectable resource. |
required |
Raises:
| Type | Description |
|---|---|
RuntimeError
|
If unable to remove the child node. |