217 lines
6.8 KiB
TypeScript
217 lines
6.8 KiB
TypeScript
import { Construct } from 'constructs';
|
|
import * as ec2 from '../../../aws-ec2';
|
|
import * as iam from '../../../aws-iam';
|
|
import type * as kms from '../../../aws-kms';
|
|
import type { Size } from '../../../core';
|
|
import type { BaseMountPoint, ContainerDefinition } from '../container-definition';
|
|
/**
|
|
* Represents the Volume configuration for an ECS service.
|
|
*/
|
|
export interface ServiceManagedVolumeProps {
|
|
/**
|
|
* The name of the volume. This corresponds to the name provided in the ECS TaskDefinition.
|
|
*/
|
|
readonly name: string;
|
|
/**
|
|
* Configuration for an Amazon Elastic Block Store (EBS) volume managed by ECS.
|
|
*
|
|
* @default - undefined
|
|
*/
|
|
readonly managedEBSVolume?: ServiceManagedEBSVolumeConfiguration;
|
|
}
|
|
/**
|
|
* Represents the configuration for an ECS Service managed EBS volume.
|
|
*/
|
|
export interface ServiceManagedEBSVolumeConfiguration {
|
|
/**
|
|
* An IAM role that allows ECS to make calls to EBS APIs on your behalf.
|
|
* This role is required to create and manage the Amazon EBS volume.
|
|
*
|
|
* @default - automatically generated role.
|
|
*/
|
|
readonly role?: iam.IRole;
|
|
/**
|
|
* Indicates whether the volume should be encrypted.
|
|
*
|
|
* @default - Default Amazon EBS encryption.
|
|
*/
|
|
readonly encrypted?: boolean;
|
|
/**
|
|
* AWS Key Management Service key to use for Amazon EBS encryption.
|
|
*
|
|
* @default - When `encryption` is turned on and no `kmsKey` is specified,
|
|
* the default AWS managed key for Amazon EBS volumes is used.
|
|
*/
|
|
readonly kmsKeyId?: kms.IKey;
|
|
/**
|
|
* The volume type.
|
|
*
|
|
* @default - ec2.EbsDeviceVolumeType.GP2
|
|
*/
|
|
readonly volumeType?: ec2.EbsDeviceVolumeType;
|
|
/**
|
|
* The size of the volume in GiB.
|
|
*
|
|
* You must specify either `size` or `snapshotId`.
|
|
* You can optionally specify a volume size greater than or equal to the snapshot size.
|
|
*
|
|
* The following are the supported volume size values for each volume type.
|
|
* - gp2 and gp3: 1-16,384
|
|
* - io1 and io2: 4-16,384
|
|
* - st1 and sc1: 125-16,384
|
|
* - standard: 1-1,024
|
|
*
|
|
* @default - The snapshot size is used for the volume size if you specify `snapshotId`,
|
|
* otherwise this parameter is required.
|
|
*/
|
|
readonly size?: Size;
|
|
/**
|
|
* The snapshot that Amazon ECS uses to create the volume.
|
|
*
|
|
* You must specify either `size` or `snapshotId`.
|
|
*
|
|
* @default - No snapshot.
|
|
*/
|
|
readonly snapShotId?: string;
|
|
/**
|
|
* The number of I/O operations per second (IOPS).
|
|
*
|
|
* For gp3, io1, and io2 volumes, this represents the number of IOPS that are provisioned
|
|
* for the volume. For gp2 volumes, this represents the baseline performance of the volume
|
|
* and the rate at which the volume accumulates I/O credits for bursting.
|
|
*
|
|
* The following are the supported values for each volume type.
|
|
* - gp3: 3,000 - 16,000 IOPS
|
|
* - io1: 100 - 64,000 IOPS
|
|
* - io2: 100 - 256,000 IOPS
|
|
*
|
|
* This parameter is required for io1 and io2 volume types. The default for gp3 volumes is
|
|
* 3,000 IOPS. This parameter is not supported for st1, sc1, or standard volume types.
|
|
*
|
|
* @default - undefined
|
|
*/
|
|
readonly iops?: number;
|
|
/**
|
|
* The throughput to provision for a volume, in MiB/s, with a maximum of 1,000 MiB/s.
|
|
*
|
|
* This parameter is only supported for the gp3 volume type.
|
|
*
|
|
* @default - No throughput.
|
|
*/
|
|
readonly throughput?: number;
|
|
/**
|
|
* The Linux filesystem type for the volume.
|
|
*
|
|
* For volumes created from a snapshot, you must specify the same filesystem type that
|
|
* the volume was using when the snapshot was created.
|
|
* The available filesystem types are ext3, ext4, and xfs.
|
|
*
|
|
* @default - FileSystemType.XFS
|
|
*/
|
|
readonly fileSystemType?: FileSystemType;
|
|
/**
|
|
* Specifies the tags to apply to the volume and whether to propagate those tags to the volume.
|
|
*
|
|
* @default - No tags are specified.
|
|
*/
|
|
readonly tagSpecifications?: EBSTagSpecification[];
|
|
/**
|
|
* Specifies the Amazon EBS Provisioned Rate for Volume Initialization (volume initialization rate),
|
|
* at which to download the snapshot blocks from Amazon S3 to the volume.
|
|
*
|
|
* Valid range is between 100 and 300 MiB/s.
|
|
*
|
|
* @default undefined - The volume initialization rate is not set.
|
|
*/
|
|
readonly volumeInitializationRate?: Size;
|
|
}
|
|
/**
|
|
* Tag Specification for EBS volume.
|
|
*/
|
|
export interface EBSTagSpecification {
|
|
/**
|
|
* The tags to apply to the volume.
|
|
*
|
|
* @default - No tags
|
|
*/
|
|
readonly tags?: {
|
|
[key: string]: string;
|
|
};
|
|
/**
|
|
* Specifies whether to propagate the tags from the task definition or the service to the task.
|
|
* Valid values are: PropagatedTagSource.SERVICE, PropagatedTagSource.TASK_DEFINITION
|
|
*
|
|
* @default - undefined
|
|
*/
|
|
readonly propagateTags?: EbsPropagatedTagSource;
|
|
}
|
|
/**
|
|
* FileSystemType for Service Managed EBS Volume Configuration.
|
|
*/
|
|
export declare enum FileSystemType {
|
|
/**
|
|
* ext3 type
|
|
*/
|
|
EXT3 = "ext3",
|
|
/**
|
|
* ext4 type
|
|
*/
|
|
EXT4 = "ext4",
|
|
/**
|
|
* xfs type
|
|
*/
|
|
XFS = "xfs",
|
|
/**
|
|
* ntfs type
|
|
*/
|
|
NTFS = "ntfs"
|
|
}
|
|
/**
|
|
* Propagate tags for EBS Volume Configuration from either service or task definition.
|
|
*/
|
|
export declare enum EbsPropagatedTagSource {
|
|
/**
|
|
* SERVICE
|
|
*/
|
|
SERVICE = "SERVICE",
|
|
/**
|
|
* TASK_DEFINITION
|
|
*/
|
|
TASK_DEFINITION = "TASK_DEFINITION"
|
|
}
|
|
/**
|
|
* Defines the mount point details for attaching a volume to a container.
|
|
*/
|
|
export interface ContainerMountPoint extends BaseMountPoint {
|
|
}
|
|
/**
|
|
* Represents a service-managed volume and always configured at launch.
|
|
*/
|
|
export declare class ServiceManagedVolume extends Construct {
|
|
/**
|
|
* Name of the volume, referenced by task definition and mount point.
|
|
*/
|
|
readonly name: string;
|
|
/**
|
|
* Volume configuration
|
|
*/
|
|
readonly config?: ServiceManagedEBSVolumeConfiguration;
|
|
/**
|
|
* configuredAtLaunch indicates volume at launch time, referenced by taskdefinition volume.
|
|
*/
|
|
readonly configuredAtLaunch: boolean;
|
|
/**
|
|
* An IAM role that allows ECS to make calls to EBS APIs.
|
|
* If not provided, a new role with appropriate permissions will be created by default.
|
|
*/
|
|
readonly role: iam.IRole;
|
|
constructor(scope: Construct, id: string, props: ServiceManagedVolumeProps);
|
|
/**
|
|
* Mounts the service managed volume to a specified container at a defined mount point.
|
|
* @param container The container to mount the volume on.
|
|
* @param mountPoint The mounting point details within the container.
|
|
*/
|
|
mountIn(container: ContainerDefinition, mountPoint: ContainerMountPoint): void;
|
|
private validateEbsVolumeConfiguration;
|
|
}
|