aws-cdk-lib
Version:
Version 2 of the AWS Cloud Development Kit library
555 lines (554 loc) • 19.3 kB
TypeScript
import { Construct, IDependable } from 'constructs';
import { AccessPoint, AccessPointOptions } from './access-point';
import { CfnFileSystem } from './efs.generated';
import * as ec2 from '../../aws-ec2';
import * as iam from '../../aws-iam';
import * as kms from '../../aws-kms';
import { RemovalPolicy, Resource, Size } from '../../core';
/**
* EFS Lifecycle Policy, if a file is not accessed for given days, it will move to EFS Infrequent Access
* or Archive storage.
*
* @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-efs-filesystem.html#cfn-elasticfilesystem-filesystem-lifecyclepolicies
*/
export declare enum LifecyclePolicy {
/**
* After 1 day of not being accessed.
*/
AFTER_1_DAY = "AFTER_1_DAY",
/**
* After 7 days of not being accessed.
*/
AFTER_7_DAYS = "AFTER_7_DAYS",
/**
* After 14 days of not being accessed.
*/
AFTER_14_DAYS = "AFTER_14_DAYS",
/**
* After 30 days of not being accessed.
*/
AFTER_30_DAYS = "AFTER_30_DAYS",
/**
* After 60 days of not being accessed.
*/
AFTER_60_DAYS = "AFTER_60_DAYS",
/**
* After 90 days of not being accessed.
*/
AFTER_90_DAYS = "AFTER_90_DAYS",
/**
* After 180 days of not being accessed.
*/
AFTER_180_DAYS = "AFTER_180_DAYS",
/**
* After 270 days of not being accessed.
*/
AFTER_270_DAYS = "AFTER_270_DAYS",
/**
* After 365 days of not being accessed.
*/
AFTER_365_DAYS = "AFTER_365_DAYS"
}
/**
* EFS Out Of Infrequent Access Policy, if a file is accessed given times, it will move back to primary
* storage class.
*
* @see https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-efs-filesystem-lifecyclepolicy.html#cfn-efs-filesystem-lifecyclepolicy-transitiontoprimarystorageclass
*/
export declare enum OutOfInfrequentAccessPolicy {
/**
* After 1 access
*/
AFTER_1_ACCESS = "AFTER_1_ACCESS"
}
/**
* EFS Performance mode.
*
* @see https://docs.aws.amazon.com/efs/latest/ug/performance.html#performancemodes
*/
export declare enum PerformanceMode {
/**
* General Purpose is ideal for latency-sensitive use cases, like web serving
* environments, content management systems, home directories, and general file serving.
* Recommended for the majority of Amazon EFS file systems.
*/
GENERAL_PURPOSE = "generalPurpose",
/**
* File systems in the Max I/O mode can scale to higher levels of aggregate
* throughput and operations per second. This scaling is done with a tradeoff
* of slightly higher latencies for file metadata operations.
* Highly parallelized applications and workloads, such as big data analysis,
* media processing, and genomics analysis, can benefit from this mode.
*/
MAX_IO = "maxIO"
}
/**
* EFS Throughput mode.
*
* @see https://docs.aws.amazon.com/efs/latest/ug/performance.html#throughput-modes
*/
export declare enum ThroughputMode {
/**
* This mode scales as the size of the file system in the standard storage class grows.
*/
BURSTING = "bursting",
/**
* This mode can instantly provision the throughput of the file system (in MiB/s) independent of the amount of data stored.
*/
PROVISIONED = "provisioned",
/**
* This mode scales the throughput automatically regardless of file system size.
*/
ELASTIC = "elastic"
}
/**
* The status of the file system's replication overwrite protection.
*
* @see https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-efs-filesystem-filesystemprotection.html
*/
export declare enum ReplicationOverwriteProtection {
/**
* Enable the filesystem's replication overwrite protection.
*/
ENABLED = "ENABLED",
/**
* Disable the filesystem's replication overwrite protection.
*/
DISABLED = "DISABLED"
}
/**
* Represents an Amazon EFS file system
*/
export interface IFileSystem extends ec2.IConnectable, iam.IResourceWithPolicy {
/**
* The ID of the file system, assigned by Amazon EFS.
*
* @attribute
*/
readonly fileSystemId: string;
/**
* The ARN of the file system.
*
* @attribute
*/
readonly fileSystemArn: string;
/**
* Dependable that can be depended upon to ensure the mount targets of the filesystem are ready
*/
readonly mountTargetsAvailable: IDependable;
/**
* Grant the actions defined in actions to the given grantee
* on this File System resource.
*/
grant(grantee: iam.IGrantable, ...actions: string[]): iam.Grant;
/**
* Grant read permissions for this file system to an IAM principal.
* @param grantee The principal to grant read to
*/
grantRead(grantee: iam.IGrantable): iam.Grant;
/**
* Grant read and write permissions for this file system to an IAM principal.
* @param grantee The principal to grant read and write to
*/
grantReadWrite(grantee: iam.IGrantable): iam.Grant;
/**
* As root user, grant read and write permissions for this file system to an IAM principal.
* @param grantee The principal to grant root access to
*/
grantRootAccess(grantee: iam.IGrantable): iam.Grant;
}
/**
* Properties of EFS FileSystem.
*/
export interface FileSystemProps {
/**
* VPC to launch the file system in.
*/
readonly vpc: ec2.IVpc;
/**
* Security Group to assign to this file system.
*
* @default - creates new security group which allows all outbound traffic
*/
readonly securityGroup?: ec2.ISecurityGroup;
/**
* Which subnets to place the mount target in the VPC.
*
* @default - the Vpc default strategy if not specified
*/
readonly vpcSubnets?: ec2.SubnetSelection;
/**
* Defines if the data at rest in the file system is encrypted or not.
*
* @default - If your application has the '@aws-cdk/aws-efs:defaultEncryptionAtRest' feature flag set, the default is true, otherwise, the default is false.
* @link https://docs.aws.amazon.com/cdk/latest/guide/featureflags.html
*/
readonly encrypted?: boolean;
/**
* The file system's name.
*
* @default - CDK generated name
*/
readonly fileSystemName?: string;
/**
* The KMS key used for encryption. This is required to encrypt the data at rest if @encrypted is set to true.
*
* @default - if 'encrypted' is true, the default key for EFS (/aws/elasticfilesystem) is used
*/
readonly kmsKey?: kms.IKey;
/**
* A policy used by EFS lifecycle management to transition files to the Infrequent Access (IA) storage class.
*
* @default - None. EFS will not transition files to the IA storage class.
*/
readonly lifecyclePolicy?: LifecyclePolicy;
/**
* A policy used by EFS lifecycle management to transition files from Infrequent Access (IA) storage class to
* primary storage class.
*
* @default - None. EFS will not transition files from IA storage to primary storage.
*/
readonly outOfInfrequentAccessPolicy?: OutOfInfrequentAccessPolicy;
/**
* The number of days after files were last accessed in primary storage (the Standard storage class) at which to move them to Archive storage.
* Metadata operations such as listing the contents of a directory don't count as file access events.
*
* @default - None. EFS will not transition files to Archive storage class.
*/
readonly transitionToArchivePolicy?: LifecyclePolicy;
/**
* The performance mode that the file system will operate under.
* 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.
*
* @default PerformanceMode.GENERAL_PURPOSE
*/
readonly performanceMode?: PerformanceMode;
/**
* Enum to mention the throughput mode of the file system.
*
* @default ThroughputMode.BURSTING
*/
readonly throughputMode?: ThroughputMode;
/**
* Provisioned throughput for the file system.
* This is a required property if the throughput mode is set to PROVISIONED.
* Must be at least 1MiB/s.
*
* @default - none, errors out
*/
readonly provisionedThroughputPerSecond?: Size;
/**
* The removal policy to apply to the file system.
*
* @default RemovalPolicy.RETAIN
*/
readonly removalPolicy?: RemovalPolicy;
/**
* Whether to enable automatic backups for the file system.
*
* @default false
*/
readonly enableAutomaticBackups?: boolean;
/**
* File system policy is an IAM resource policy used to control NFS access to an EFS file system.
*
* @default none
*/
readonly fileSystemPolicy?: iam.PolicyDocument;
/**
* Allow access from anonymous client that doesn't use IAM authentication.
*
* @default false when using `grantRead`, `grantWrite`, `grantRootAccess`
* or set `@aws-cdk/aws-efs:denyAnonymousAccess` feature flag, otherwise true
*/
readonly allowAnonymousAccess?: boolean;
/**
* Whether this is a One Zone file system.
* If enabled, `performanceMode` must be set to `GENERAL_PURPOSE` and `vpcSubnets` cannot be set.
*
* @default false
* @link https://docs.aws.amazon.com/efs/latest/ug/availability-durability.html#file-system-type
*/
readonly oneZone?: boolean;
/**
* Whether to enable the filesystem's replication overwrite protection or not.
* Set false if you want to create a read-only filesystem for use as a replication destination.
*
* @see https://docs.aws.amazon.com/efs/latest/ug/replication-use-cases.html#replicate-existing-destination
*
* @default ReplicationOverwriteProtection.ENABLED
*/
readonly replicationOverwriteProtection?: ReplicationOverwriteProtection;
/**
* Replication configuration for the file system.
*
* @default - no replication
*/
readonly replicationConfiguration?: ReplicationConfiguration;
}
/**
* Properties that describe an existing EFS file system.
*/
export interface FileSystemAttributes {
/**
* The security group of the file system
*/
readonly securityGroup: ec2.ISecurityGroup;
/**
* The File System's ID.
*
* @default - determined based on fileSystemArn
*/
readonly fileSystemId?: string;
/**
* The File System's Arn.
*
* @default - determined based on fileSystemId
*/
readonly fileSystemArn?: string;
}
/**
* Properties for the ReplicationConfiguration.
*/
export interface ReplicationConfigurationProps {
/**
* The existing destination file system for the replication.
*
* @default - None
*/
readonly destinationFileSystem?: IFileSystem;
/**
* AWS KMS key used to protect the encrypted file system.
*
* @default - use service-managed KMS key for Amazon EFS
*/
readonly kmsKey?: kms.IKey;
/**
* The AWS Region in which the destination file system is located.
*
* @default - the region of the stack
*/
readonly region?: string;
/**
* The availability zone name of the destination file system.
* One zone file system is used as the destination file system when this property is set.
*
* @default - no availability zone is set
*/
readonly availabilityZone?: string;
}
/**
* Properties for configuring ReplicationConfiguration to replicate
* to a new One Zone file system.
*/
export interface OneZoneFileSystemProps {
/**
* AWS KMS key used to protect the encrypted file system.
*
* @default - use service-managed KMS key for Amazon EFS
*/
readonly kmsKey?: kms.IKey;
/**
* The AWS Region in which the destination file system is located.
*/
readonly region: string;
/**
* The availability zone name of the destination file system.
* One zone file system is used as the destination file system when this property is set.
*/
readonly availabilityZone: string;
}
/**
* Properties for configuring ReplicationConfiguration to replicate
* to a new Regional file system.
*/
export interface RegionalFileSystemProps {
/**
* AWS KMS key used to protect the encrypted file system.
*
* @default - use service-managed KMS key for Amazon EFS
*/
readonly kmsKey?: kms.IKey;
/**
* The AWS Region in which the destination file system is located.
*
* @default - the region of the stack
*/
readonly region?: string;
}
/**
* Properties for configuring ReplicationConfiguration to replicate
* to an existing file system.
*/
export interface ExistingFileSystemProps {
/**
* The existing destination file system for the replication.
*/
readonly destinationFileSystem: IFileSystem;
}
/**
* EFS Replication Configuration
*/
export declare abstract class ReplicationConfiguration {
/**
* Specify the existing destination file system for the replication.
*
* @param destinationFileSystem The existing destination file system for the replication
*/
static existingFileSystem(destinationFileSystem: IFileSystem): ReplicationConfiguration;
/**
* Create a new regional destination file system for the replication.
*
* @param region The AWS Region in which the destination file system is located. Default is the region of the stack.
* @param kmsKey AWS KMS key used to protect the encrypted file system. Default is service-managed KMS key for Amazon EFS.
*/
static regionalFileSystem(region?: string, kmsKey?: kms.IKey): ReplicationConfiguration;
/**
* Create a new one zone destination file system for the replication.
*
* @param region The AWS Region in which the specified availability zone belongs to.
* @param availabilityZone The availability zone name of the destination file system.
* @param kmsKey AWS KMS key used to protect the encrypted file system. Default is service-managed KMS key for Amazon EFS.
*/
static oneZoneFileSystem(region: string, availabilityZone: string, kmsKey?: kms.IKey): ReplicationConfiguration;
/**
* The existing destination file system for the replication.
*/
readonly destinationFileSystem?: IFileSystem;
/**
* AWS KMS key used to protect the encrypted file system.
*/
readonly kmsKey?: kms.IKey;
/**
* The AWS Region in which the destination file system is located.
*/
readonly region?: string;
/**
* The availability zone name of the destination file system.
* One zone file system is used as the destination file system when this property is set.
*/
readonly availabilityZone?: string;
constructor(options: ReplicationConfigurationProps);
}
declare abstract class FileSystemBase extends Resource implements IFileSystem {
/**
* The security groups/rules used to allow network connections to the file system.
*/
abstract readonly connections: ec2.Connections;
/**
* @attribute
*/
abstract readonly fileSystemId: string;
/**
* @attribute
*/
abstract readonly fileSystemArn: string;
/**
* Dependable that can be depended upon to ensure the mount targets of the filesystem are ready
*/
abstract readonly mountTargetsAvailable: IDependable;
/**
* @internal
*/
protected _resource?: CfnFileSystem;
/**
* @internal
*/
protected _fileSystemPolicy?: iam.PolicyDocument;
/**
* @internal
*/
protected _grantedClient: boolean;
/**
* Grant the actions defined in actions to the given grantee
* on this File System resource.
*
* @param grantee Principal to grant right to
* @param actions The actions to grant
*/
grant(grantee: iam.IGrantable, ...actions: string[]): iam.Grant;
/**
* Grant the client actions defined in actions to the given grantee on this File System resource.
* If this method is used and the allowAnonymousAccess props are not specified,
* anonymous access to this file system is prohibited.
*
* @param grantee The principal to grant right to
* @param actions The client actions to grant
* @param conditions The conditions to grant
*/
private _grantClient;
/**
* Grant read permissions for this file system to an IAM principal.
* @param grantee The principal to grant read to
*/
grantRead(grantee: iam.IGrantable): iam.Grant;
/**
* Grant read and write permissions for this file system to an IAM principal.
* @param grantee The principal to grant read and write to
*/
grantReadWrite(grantee: iam.IGrantable): iam.Grant;
/**
* As root user, grant read and write permissions for this file system to an IAM principal.
* @param grantee The principal to grant root access to
*/
grantRootAccess(grantee: iam.IGrantable): iam.Grant;
/**
* Adds a statement to the resource policy associated with this file system.
* A resource policy will be automatically created upon the first call to `addToResourcePolicy`.
*
* Note that this does not work with imported file systems.
*
* @param statement The policy statement to add
*/
addToResourcePolicy(statement: iam.PolicyStatement): iam.AddToResourcePolicyResult;
}
/**
* The Elastic File System implementation of IFileSystem.
* It creates a new, empty file system in Amazon Elastic File System (Amazon EFS).
* It also creates mount target (AWS::EFS::MountTarget) implicitly to mount the
* EFS file system on an Amazon Elastic Compute Cloud (Amazon EC2) instance or another resource.
*
* @see https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-efs-filesystem.html
*
* @resource AWS::EFS::FileSystem
*/
export declare class FileSystem extends FileSystemBase {
/**
* Uniquely identifies this class.
*/
static readonly PROPERTY_INJECTION_ID: string;
/**
* The default port File System listens on.
*/
static readonly DEFAULT_PORT: number;
/**
* Import an existing File System from the given properties.
*/
static fromFileSystemAttributes(scope: Construct, id: string, attrs: FileSystemAttributes): IFileSystem;
/**
* The security groups/rules used to allow network connections to the file system.
*/
readonly connections: ec2.Connections;
/**
* @attribute
*/
readonly fileSystemId: string;
/**
* @attribute
*/
readonly fileSystemArn: string;
readonly mountTargetsAvailable: IDependable;
private readonly _mountTargetsAvailable;
private readonly props;
/**
* Constructor for creating a new EFS FileSystem.
*/
constructor(scope: Construct, id: string, props: FileSystemProps);
private oneZoneValidation;
/**
* create access point from this filesystem
*/
addAccessPoint(id: string, accessPointOptions?: AccessPointOptions): AccessPoint;
}
export {};