diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-fsx/test/integ.lustre-file-system-storage-type.js.snapshot/FsxLustreStorageTypeStack.assets.json b/packages/@aws-cdk-testing/framework-integ/test/aws-fsx/test/integ.lustre-file-system-storage-type.js.snapshot/FsxLustreStorageTypeStack.assets.json new file mode 100644 index 0000000000000..09a12e886531d --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-fsx/test/integ.lustre-file-system-storage-type.js.snapshot/FsxLustreStorageTypeStack.assets.json @@ -0,0 +1,19 @@ +{ + "version": "36.0.0", + "files": { + "b70afe3fccbab7f6f454145285c729eb91a7254c797c5156812a783b8f6cefd9": { + "source": { + "path": "FsxLustreStorageTypeStack.template.json", + "packaging": "file" + }, + "destinations": { + "current_account-current_region": { + "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", + "objectKey": "b70afe3fccbab7f6f454145285c729eb91a7254c797c5156812a783b8f6cefd9.json", + "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" + } + } + } + }, + "dockerImages": {} +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-fsx/test/integ.lustre-file-system-storage-type.js.snapshot/FsxLustreStorageTypeStack.template.json b/packages/@aws-cdk-testing/framework-integ/test/aws-fsx/test/integ.lustre-file-system-storage-type.js.snapshot/FsxLustreStorageTypeStack.template.json new file mode 100644 index 0000000000000..5e83a4b07e5f2 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-fsx/test/integ.lustre-file-system-storage-type.js.snapshot/FsxLustreStorageTypeStack.template.json @@ -0,0 +1,801 @@ +{ + "Resources": { + "Vpc8378EB38": { + "Type": "AWS::EC2::VPC", + "Properties": { + "CidrBlock": "10.0.0.0/16", + "EnableDnsHostnames": true, + "EnableDnsSupport": true, + "InstanceTenancy": "default", + "Tags": [ + { + "Key": "Name", + "Value": "FsxLustreStorageTypeStack/Vpc" + } + ] + } + }, + "VpcPublicSubnet1Subnet5C2D37C4": { + "Type": "AWS::EC2::Subnet", + "Properties": { + "AvailabilityZone": { + "Fn::Select": [ + 0, + { + "Fn::GetAZs": "" + } + ] + }, + "CidrBlock": "10.0.0.0/18", + "MapPublicIpOnLaunch": true, + "Tags": [ + { + "Key": "aws-cdk:subnet-name", + "Value": "Public" + }, + { + "Key": "aws-cdk:subnet-type", + "Value": "Public" + }, + { + "Key": "Name", + "Value": "FsxLustreStorageTypeStack/Vpc/PublicSubnet1" + } + ], + "VpcId": { + "Ref": "Vpc8378EB38" + } + } + }, + "VpcPublicSubnet1RouteTable6C95E38E": { + "Type": "AWS::EC2::RouteTable", + "Properties": { + "Tags": [ + { + "Key": "Name", + "Value": "FsxLustreStorageTypeStack/Vpc/PublicSubnet1" + } + ], + "VpcId": { + "Ref": "Vpc8378EB38" + } + } + }, + "VpcPublicSubnet1RouteTableAssociation97140677": { + "Type": "AWS::EC2::SubnetRouteTableAssociation", + "Properties": { + "RouteTableId": { + "Ref": "VpcPublicSubnet1RouteTable6C95E38E" + }, + "SubnetId": { + "Ref": "VpcPublicSubnet1Subnet5C2D37C4" + } + } + }, + "VpcPublicSubnet1DefaultRoute3DA9E72A": { + "Type": "AWS::EC2::Route", + "Properties": { + "DestinationCidrBlock": "0.0.0.0/0", + "GatewayId": { + "Ref": "VpcIGWD7BA715C" + }, + "RouteTableId": { + "Ref": "VpcPublicSubnet1RouteTable6C95E38E" + } + }, + "DependsOn": [ + "VpcVPCGWBF912B6E" + ] + }, + "VpcPublicSubnet1EIPD7E02669": { + "Type": "AWS::EC2::EIP", + "Properties": { + "Domain": "vpc", + "Tags": [ + { + "Key": "Name", + "Value": "FsxLustreStorageTypeStack/Vpc/PublicSubnet1" + } + ] + } + }, + "VpcPublicSubnet1NATGateway4D7517AA": { + "Type": "AWS::EC2::NatGateway", + "Properties": { + "AllocationId": { + "Fn::GetAtt": [ + "VpcPublicSubnet1EIPD7E02669", + "AllocationId" + ] + }, + "SubnetId": { + "Ref": "VpcPublicSubnet1Subnet5C2D37C4" + }, + "Tags": [ + { + "Key": "Name", + "Value": "FsxLustreStorageTypeStack/Vpc/PublicSubnet1" + } + ] + }, + "DependsOn": [ + "VpcPublicSubnet1DefaultRoute3DA9E72A", + "VpcPublicSubnet1RouteTableAssociation97140677" + ] + }, + "VpcPublicSubnet2Subnet691E08A3": { + "Type": "AWS::EC2::Subnet", + "Properties": { + "AvailabilityZone": { + "Fn::Select": [ + 1, + { + "Fn::GetAZs": "" + } + ] + }, + "CidrBlock": "10.0.64.0/18", + "MapPublicIpOnLaunch": true, + "Tags": [ + { + "Key": "aws-cdk:subnet-name", + "Value": "Public" + }, + { + "Key": "aws-cdk:subnet-type", + "Value": "Public" + }, + { + "Key": "Name", + "Value": "FsxLustreStorageTypeStack/Vpc/PublicSubnet2" + } + ], + "VpcId": { + "Ref": "Vpc8378EB38" + } + } + }, + "VpcPublicSubnet2RouteTable94F7E489": { + "Type": "AWS::EC2::RouteTable", + "Properties": { + "Tags": [ + { + "Key": "Name", + "Value": "FsxLustreStorageTypeStack/Vpc/PublicSubnet2" + } + ], + "VpcId": { + "Ref": "Vpc8378EB38" + } + } + }, + "VpcPublicSubnet2RouteTableAssociationDD5762D8": { + "Type": "AWS::EC2::SubnetRouteTableAssociation", + "Properties": { + "RouteTableId": { + "Ref": "VpcPublicSubnet2RouteTable94F7E489" + }, + "SubnetId": { + "Ref": "VpcPublicSubnet2Subnet691E08A3" + } + } + }, + "VpcPublicSubnet2DefaultRoute97F91067": { + "Type": "AWS::EC2::Route", + "Properties": { + "DestinationCidrBlock": "0.0.0.0/0", + "GatewayId": { + "Ref": "VpcIGWD7BA715C" + }, + "RouteTableId": { + "Ref": "VpcPublicSubnet2RouteTable94F7E489" + } + }, + "DependsOn": [ + "VpcVPCGWBF912B6E" + ] + }, + "VpcPublicSubnet2EIP3C605A87": { + "Type": "AWS::EC2::EIP", + "Properties": { + "Domain": "vpc", + "Tags": [ + { + "Key": "Name", + "Value": "FsxLustreStorageTypeStack/Vpc/PublicSubnet2" + } + ] + } + }, + "VpcPublicSubnet2NATGateway9182C01D": { + "Type": "AWS::EC2::NatGateway", + "Properties": { + "AllocationId": { + "Fn::GetAtt": [ + "VpcPublicSubnet2EIP3C605A87", + "AllocationId" + ] + }, + "SubnetId": { + "Ref": "VpcPublicSubnet2Subnet691E08A3" + }, + "Tags": [ + { + "Key": "Name", + "Value": "FsxLustreStorageTypeStack/Vpc/PublicSubnet2" + } + ] + }, + "DependsOn": [ + "VpcPublicSubnet2DefaultRoute97F91067", + "VpcPublicSubnet2RouteTableAssociationDD5762D8" + ] + }, + "VpcPrivateSubnet1Subnet536B997A": { + "Type": "AWS::EC2::Subnet", + "Properties": { + "AvailabilityZone": { + "Fn::Select": [ + 0, + { + "Fn::GetAZs": "" + } + ] + }, + "CidrBlock": "10.0.128.0/18", + "MapPublicIpOnLaunch": false, + "Tags": [ + { + "Key": "aws-cdk:subnet-name", + "Value": "Private" + }, + { + "Key": "aws-cdk:subnet-type", + "Value": "Private" + }, + { + "Key": "Name", + "Value": "FsxLustreStorageTypeStack/Vpc/PrivateSubnet1" + } + ], + "VpcId": { + "Ref": "Vpc8378EB38" + } + } + }, + "VpcPrivateSubnet1RouteTableB2C5B500": { + "Type": "AWS::EC2::RouteTable", + "Properties": { + "Tags": [ + { + "Key": "Name", + "Value": "FsxLustreStorageTypeStack/Vpc/PrivateSubnet1" + } + ], + "VpcId": { + "Ref": "Vpc8378EB38" + } + } + }, + "VpcPrivateSubnet1RouteTableAssociation70C59FA6": { + "Type": "AWS::EC2::SubnetRouteTableAssociation", + "Properties": { + "RouteTableId": { + "Ref": "VpcPrivateSubnet1RouteTableB2C5B500" + }, + "SubnetId": { + "Ref": "VpcPrivateSubnet1Subnet536B997A" + } + } + }, + "VpcPrivateSubnet1DefaultRouteBE02A9ED": { + "Type": "AWS::EC2::Route", + "Properties": { + "DestinationCidrBlock": "0.0.0.0/0", + "NatGatewayId": { + "Ref": "VpcPublicSubnet1NATGateway4D7517AA" + }, + "RouteTableId": { + "Ref": "VpcPrivateSubnet1RouteTableB2C5B500" + } + } + }, + "VpcPrivateSubnet2Subnet3788AAA1": { + "Type": "AWS::EC2::Subnet", + "Properties": { + "AvailabilityZone": { + "Fn::Select": [ + 1, + { + "Fn::GetAZs": "" + } + ] + }, + "CidrBlock": "10.0.192.0/18", + "MapPublicIpOnLaunch": false, + "Tags": [ + { + "Key": "aws-cdk:subnet-name", + "Value": "Private" + }, + { + "Key": "aws-cdk:subnet-type", + "Value": "Private" + }, + { + "Key": "Name", + "Value": "FsxLustreStorageTypeStack/Vpc/PrivateSubnet2" + } + ], + "VpcId": { + "Ref": "Vpc8378EB38" + } + } + }, + "VpcPrivateSubnet2RouteTableA678073B": { + "Type": "AWS::EC2::RouteTable", + "Properties": { + "Tags": [ + { + "Key": "Name", + "Value": "FsxLustreStorageTypeStack/Vpc/PrivateSubnet2" + } + ], + "VpcId": { + "Ref": "Vpc8378EB38" + } + } + }, + "VpcPrivateSubnet2RouteTableAssociationA89CAD56": { + "Type": "AWS::EC2::SubnetRouteTableAssociation", + "Properties": { + "RouteTableId": { + "Ref": "VpcPrivateSubnet2RouteTableA678073B" + }, + "SubnetId": { + "Ref": "VpcPrivateSubnet2Subnet3788AAA1" + } + } + }, + "VpcPrivateSubnet2DefaultRoute060D2087": { + "Type": "AWS::EC2::Route", + "Properties": { + "DestinationCidrBlock": "0.0.0.0/0", + "NatGatewayId": { + "Ref": "VpcPublicSubnet2NATGateway9182C01D" + }, + "RouteTableId": { + "Ref": "VpcPrivateSubnet2RouteTableA678073B" + } + } + }, + "VpcIGWD7BA715C": { + "Type": "AWS::EC2::InternetGateway", + "Properties": { + "Tags": [ + { + "Key": "Name", + "Value": "FsxLustreStorageTypeStack/Vpc" + } + ] + } + }, + "VpcVPCGWBF912B6E": { + "Type": "AWS::EC2::VPCGatewayAttachment", + "Properties": { + "InternetGatewayId": { + "Ref": "VpcIGWD7BA715C" + }, + "VpcId": { + "Ref": "Vpc8378EB38" + } + } + }, + "FsxLustreFileSystemSsdStorageFsxLustreSecurityGroup14F696B3": { + "Type": "AWS::EC2::SecurityGroup", + "Properties": { + "GroupDescription": "FsxLustreStorageTypeStack/FsxLustreFileSystemSsdStorage/FsxLustreSecurityGroup", + "SecurityGroupEgress": [ + { + "CidrIp": "0.0.0.0/0", + "Description": "Allow all outbound traffic by default", + "IpProtocol": "-1" + } + ], + "VpcId": { + "Ref": "Vpc8378EB38" + } + } + }, + "FsxLustreFileSystemSsdStorageFsxLustreSecurityGroupfromFsxLustreStorageTypeStackFsxLustreFileSystemSsdStorageFsxLustreSecurityGroup900D4B37988102342FA56B2": { + "Type": "AWS::EC2::SecurityGroupIngress", + "Properties": { + "Description": "from FsxLustreStorageTypeStackFsxLustreFileSystemSsdStorageFsxLustreSecurityGroup900D4B37:988-1023", + "FromPort": 988, + "GroupId": { + "Fn::GetAtt": [ + "FsxLustreFileSystemSsdStorageFsxLustreSecurityGroup14F696B3", + "GroupId" + ] + }, + "IpProtocol": "tcp", + "SourceSecurityGroupId": { + "Fn::GetAtt": [ + "FsxLustreFileSystemSsdStorageFsxLustreSecurityGroup14F696B3", + "GroupId" + ] + }, + "ToPort": 1023 + } + }, + "FsxLustreFileSystemSsdStorageFsxLustreSecurityGroupfromFsxLustreStorageTypeStackSsdFsxInstanceInstanceSecurityGroupAC704ACF988102380D6A84E": { + "Type": "AWS::EC2::SecurityGroupIngress", + "Properties": { + "Description": "from FsxLustreStorageTypeStackSsdFsxInstanceInstanceSecurityGroupAC704ACF:988-1023", + "FromPort": 988, + "GroupId": { + "Fn::GetAtt": [ + "FsxLustreFileSystemSsdStorageFsxLustreSecurityGroup14F696B3", + "GroupId" + ] + }, + "IpProtocol": "tcp", + "SourceSecurityGroupId": { + "Fn::GetAtt": [ + "SsdFsxInstanceInstanceSecurityGroup6C5726B9", + "GroupId" + ] + }, + "ToPort": 1023 + } + }, + "FsxLustreFileSystemSsdStorage70256D99": { + "Type": "AWS::FSx::FileSystem", + "Properties": { + "FileSystemType": "LUSTRE", + "LustreConfiguration": { + "DataCompressionType": "LZ4", + "DeploymentType": "SCRATCH_2" + }, + "SecurityGroupIds": [ + { + "Fn::GetAtt": [ + "FsxLustreFileSystemSsdStorageFsxLustreSecurityGroup14F696B3", + "GroupId" + ] + } + ], + "StorageCapacity": 1200, + "StorageType": "SSD", + "SubnetIds": [ + { + "Ref": "VpcPrivateSubnet1Subnet536B997A" + } + ] + }, + "UpdateReplacePolicy": "Delete", + "DeletionPolicy": "Delete" + }, + "SsdFsxInstanceInstanceSecurityGroup6C5726B9": { + "Type": "AWS::EC2::SecurityGroup", + "Properties": { + "GroupDescription": "FsxLustreStorageTypeStack/SsdFsxInstance/InstanceSecurityGroup", + "SecurityGroupEgress": [ + { + "CidrIp": "0.0.0.0/0", + "Description": "Allow all outbound traffic by default", + "IpProtocol": "-1" + } + ], + "Tags": [ + { + "Key": "Name", + "Value": "FsxLustreStorageTypeStack/SsdFsxInstance" + } + ], + "VpcId": { + "Ref": "Vpc8378EB38" + } + } + }, + "SsdFsxInstanceInstanceRole933EE1D6": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "Service": "ec2.amazonaws.com" + } + } + ], + "Version": "2012-10-17" + }, + "Tags": [ + { + "Key": "Name", + "Value": "FsxLustreStorageTypeStack/SsdFsxInstance" + } + ] + } + }, + "SsdFsxInstanceInstanceProfile0AD53366": { + "Type": "AWS::IAM::InstanceProfile", + "Properties": { + "Roles": [ + { + "Ref": "SsdFsxInstanceInstanceRole933EE1D6" + } + ] + } + }, + "SsdFsxInstance09AA8DE7": { + "Type": "AWS::EC2::Instance", + "Properties": { + "AvailabilityZone": { + "Fn::Select": [ + 0, + { + "Fn::GetAZs": "" + } + ] + }, + "IamInstanceProfile": { + "Ref": "SsdFsxInstanceInstanceProfile0AD53366" + }, + "ImageId": { + "Ref": "SsmParameterValueawsserviceamiamazonlinuxlatestal2023amikernel61x8664C96584B6F00A464EAD1953AFF4B05118Parameter" + }, + "InstanceType": "t2.large", + "SecurityGroupIds": [ + { + "Fn::GetAtt": [ + "SsdFsxInstanceInstanceSecurityGroup6C5726B9", + "GroupId" + ] + } + ], + "SubnetId": { + "Ref": "VpcPublicSubnet1Subnet5C2D37C4" + }, + "Tags": [ + { + "Key": "Name", + "Value": "FsxLustreStorageTypeStack/SsdFsxInstance" + } + ], + "UserData": { + "Fn::Base64": "#!/bin/bash" + } + }, + "DependsOn": [ + "SsdFsxInstanceInstanceRole933EE1D6" + ] + }, + "FsxLustreFileSystemHddStorageFsxLustreSecurityGroupCB529CFC": { + "Type": "AWS::EC2::SecurityGroup", + "Properties": { + "GroupDescription": "FsxLustreStorageTypeStack/FsxLustreFileSystemHddStorage/FsxLustreSecurityGroup", + "SecurityGroupEgress": [ + { + "CidrIp": "0.0.0.0/0", + "Description": "Allow all outbound traffic by default", + "IpProtocol": "-1" + } + ], + "VpcId": { + "Ref": "Vpc8378EB38" + } + } + }, + "FsxLustreFileSystemHddStorageFsxLustreSecurityGroupfromFsxLustreStorageTypeStackFsxLustreFileSystemHddStorageFsxLustreSecurityGroup36EAA88E9881023C048CB34": { + "Type": "AWS::EC2::SecurityGroupIngress", + "Properties": { + "Description": "from FsxLustreStorageTypeStackFsxLustreFileSystemHddStorageFsxLustreSecurityGroup36EAA88E:988-1023", + "FromPort": 988, + "GroupId": { + "Fn::GetAtt": [ + "FsxLustreFileSystemHddStorageFsxLustreSecurityGroupCB529CFC", + "GroupId" + ] + }, + "IpProtocol": "tcp", + "SourceSecurityGroupId": { + "Fn::GetAtt": [ + "FsxLustreFileSystemHddStorageFsxLustreSecurityGroupCB529CFC", + "GroupId" + ] + }, + "ToPort": 1023 + } + }, + "FsxLustreFileSystemHddStorageFsxLustreSecurityGroupfromFsxLustreStorageTypeStackHddFsxInstanceInstanceSecurityGroup83E545BE98810231EFC35B6": { + "Type": "AWS::EC2::SecurityGroupIngress", + "Properties": { + "Description": "from FsxLustreStorageTypeStackHddFsxInstanceInstanceSecurityGroup83E545BE:988-1023", + "FromPort": 988, + "GroupId": { + "Fn::GetAtt": [ + "FsxLustreFileSystemHddStorageFsxLustreSecurityGroupCB529CFC", + "GroupId" + ] + }, + "IpProtocol": "tcp", + "SourceSecurityGroupId": { + "Fn::GetAtt": [ + "HddFsxInstanceInstanceSecurityGroupFF15A567", + "GroupId" + ] + }, + "ToPort": 1023 + } + }, + "FsxLustreFileSystemHddStorage85B422B8": { + "Type": "AWS::FSx::FileSystem", + "Properties": { + "FileSystemType": "LUSTRE", + "LustreConfiguration": { + "DataCompressionType": "LZ4", + "DeploymentType": "PERSISTENT_1", + "DriveCacheType": "READ", + "PerUnitStorageThroughput": 12 + }, + "SecurityGroupIds": [ + { + "Fn::GetAtt": [ + "FsxLustreFileSystemHddStorageFsxLustreSecurityGroupCB529CFC", + "GroupId" + ] + } + ], + "StorageCapacity": 6000, + "StorageType": "HDD", + "SubnetIds": [ + { + "Ref": "VpcPrivateSubnet2Subnet3788AAA1" + } + ] + }, + "UpdateReplacePolicy": "Delete", + "DeletionPolicy": "Delete" + }, + "HddFsxInstanceInstanceSecurityGroupFF15A567": { + "Type": "AWS::EC2::SecurityGroup", + "Properties": { + "GroupDescription": "FsxLustreStorageTypeStack/HddFsxInstance/InstanceSecurityGroup", + "SecurityGroupEgress": [ + { + "CidrIp": "0.0.0.0/0", + "Description": "Allow all outbound traffic by default", + "IpProtocol": "-1" + } + ], + "Tags": [ + { + "Key": "Name", + "Value": "FsxLustreStorageTypeStack/HddFsxInstance" + } + ], + "VpcId": { + "Ref": "Vpc8378EB38" + } + } + }, + "HddFsxInstanceInstanceRole7B336CC9": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "Service": "ec2.amazonaws.com" + } + } + ], + "Version": "2012-10-17" + }, + "Tags": [ + { + "Key": "Name", + "Value": "FsxLustreStorageTypeStack/HddFsxInstance" + } + ] + } + }, + "HddFsxInstanceInstanceProfile0833AA40": { + "Type": "AWS::IAM::InstanceProfile", + "Properties": { + "Roles": [ + { + "Ref": "HddFsxInstanceInstanceRole7B336CC9" + } + ] + } + }, + "HddFsxInstance019A1F6D": { + "Type": "AWS::EC2::Instance", + "Properties": { + "AvailabilityZone": { + "Fn::Select": [ + 0, + { + "Fn::GetAZs": "" + } + ] + }, + "IamInstanceProfile": { + "Ref": "HddFsxInstanceInstanceProfile0833AA40" + }, + "ImageId": { + "Ref": "SsmParameterValueawsserviceamiamazonlinuxlatestal2023amikernel61x8664C96584B6F00A464EAD1953AFF4B05118Parameter" + }, + "InstanceType": "t2.large", + "SecurityGroupIds": [ + { + "Fn::GetAtt": [ + "HddFsxInstanceInstanceSecurityGroupFF15A567", + "GroupId" + ] + } + ], + "SubnetId": { + "Ref": "VpcPublicSubnet1Subnet5C2D37C4" + }, + "Tags": [ + { + "Key": "Name", + "Value": "FsxLustreStorageTypeStack/HddFsxInstance" + } + ], + "UserData": { + "Fn::Base64": "#!/bin/bash" + } + }, + "DependsOn": [ + "HddFsxInstanceInstanceRole7B336CC9" + ] + } + }, + "Parameters": { + "SsmParameterValueawsserviceamiamazonlinuxlatestal2023amikernel61x8664C96584B6F00A464EAD1953AFF4B05118Parameter": { + "Type": "AWS::SSM::Parameter::Value", + "Default": "/aws/service/ami-amazon-linux-latest/al2023-ami-kernel-6.1-x86_64" + }, + "BootstrapVersion": { + "Type": "AWS::SSM::Parameter::Value", + "Default": "/cdk-bootstrap/hnb659fds/version", + "Description": "Version of the CDK Bootstrap resources in this environment, automatically retrieved from SSM Parameter Store. [cdk:skip]" + } + }, + "Rules": { + "CheckBootstrapVersion": { + "Assertions": [ + { + "Assert": { + "Fn::Not": [ + { + "Fn::Contains": [ + [ + "1", + "2", + "3", + "4", + "5" + ], + { + "Ref": "BootstrapVersion" + } + ] + } + ] + }, + "AssertDescription": "CDK bootstrap stack version 6 required. Please run 'cdk bootstrap' with a recent version of the CDK CLI." + } + ] + } + } +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-fsx/test/integ.lustre-file-system-storage-type.js.snapshot/FsxLustreStorageTypeTestDefaultTestDeployAssert50B0FE3D.assets.json b/packages/@aws-cdk-testing/framework-integ/test/aws-fsx/test/integ.lustre-file-system-storage-type.js.snapshot/FsxLustreStorageTypeTestDefaultTestDeployAssert50B0FE3D.assets.json new file mode 100644 index 0000000000000..52725461bcef7 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-fsx/test/integ.lustre-file-system-storage-type.js.snapshot/FsxLustreStorageTypeTestDefaultTestDeployAssert50B0FE3D.assets.json @@ -0,0 +1,19 @@ +{ + "version": "36.0.0", + "files": { + "21fbb51d7b23f6a6c262b46a9caee79d744a3ac019fd45422d988b96d44b2a22": { + "source": { + "path": "FsxLustreStorageTypeTestDefaultTestDeployAssert50B0FE3D.template.json", + "packaging": "file" + }, + "destinations": { + "current_account-current_region": { + "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", + "objectKey": "21fbb51d7b23f6a6c262b46a9caee79d744a3ac019fd45422d988b96d44b2a22.json", + "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" + } + } + } + }, + "dockerImages": {} +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-fsx/test/integ.lustre-file-system-storage-type.js.snapshot/FsxLustreStorageTypeTestDefaultTestDeployAssert50B0FE3D.template.json b/packages/@aws-cdk-testing/framework-integ/test/aws-fsx/test/integ.lustre-file-system-storage-type.js.snapshot/FsxLustreStorageTypeTestDefaultTestDeployAssert50B0FE3D.template.json new file mode 100644 index 0000000000000..ad9d0fb73d1dd --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-fsx/test/integ.lustre-file-system-storage-type.js.snapshot/FsxLustreStorageTypeTestDefaultTestDeployAssert50B0FE3D.template.json @@ -0,0 +1,36 @@ +{ + "Parameters": { + "BootstrapVersion": { + "Type": "AWS::SSM::Parameter::Value", + "Default": "/cdk-bootstrap/hnb659fds/version", + "Description": "Version of the CDK Bootstrap resources in this environment, automatically retrieved from SSM Parameter Store. [cdk:skip]" + } + }, + "Rules": { + "CheckBootstrapVersion": { + "Assertions": [ + { + "Assert": { + "Fn::Not": [ + { + "Fn::Contains": [ + [ + "1", + "2", + "3", + "4", + "5" + ], + { + "Ref": "BootstrapVersion" + } + ] + } + ] + }, + "AssertDescription": "CDK bootstrap stack version 6 required. Please run 'cdk bootstrap' with a recent version of the CDK CLI." + } + ] + } + } +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-fsx/test/integ.lustre-file-system-storage-type.js.snapshot/cdk.out b/packages/@aws-cdk-testing/framework-integ/test/aws-fsx/test/integ.lustre-file-system-storage-type.js.snapshot/cdk.out new file mode 100644 index 0000000000000..1f0068d32659a --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-fsx/test/integ.lustre-file-system-storage-type.js.snapshot/cdk.out @@ -0,0 +1 @@ +{"version":"36.0.0"} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-fsx/test/integ.lustre-file-system-storage-type.js.snapshot/integ.json b/packages/@aws-cdk-testing/framework-integ/test/aws-fsx/test/integ.lustre-file-system-storage-type.js.snapshot/integ.json new file mode 100644 index 0000000000000..5fe2606728a96 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-fsx/test/integ.lustre-file-system-storage-type.js.snapshot/integ.json @@ -0,0 +1,12 @@ +{ + "version": "36.0.0", + "testCases": { + "FsxLustreStorageTypeTest/DefaultTest": { + "stacks": [ + "FsxLustreStorageTypeStack" + ], + "assertionStack": "FsxLustreStorageTypeTest/DefaultTest/DeployAssert", + "assertionStackName": "FsxLustreStorageTypeTestDefaultTestDeployAssert50B0FE3D" + } + } +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-fsx/test/integ.lustre-file-system-storage-type.js.snapshot/manifest.json b/packages/@aws-cdk-testing/framework-integ/test/aws-fsx/test/integ.lustre-file-system-storage-type.js.snapshot/manifest.json new file mode 100644 index 0000000000000..15026c9a5a72d --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-fsx/test/integ.lustre-file-system-storage-type.js.snapshot/manifest.json @@ -0,0 +1,347 @@ +{ + "version": "36.0.0", + "artifacts": { + "FsxLustreStorageTypeStack.assets": { + "type": "cdk:asset-manifest", + "properties": { + "file": "FsxLustreStorageTypeStack.assets.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version" + } + }, + "FsxLustreStorageTypeStack": { + "type": "aws:cloudformation:stack", + "environment": "aws://unknown-account/unknown-region", + "properties": { + "templateFile": "FsxLustreStorageTypeStack.template.json", + "terminationProtection": false, + "validateOnSynth": false, + "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-deploy-role-${AWS::AccountId}-${AWS::Region}", + "cloudFormationExecutionRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-cfn-exec-role-${AWS::AccountId}-${AWS::Region}", + "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/b70afe3fccbab7f6f454145285c729eb91a7254c797c5156812a783b8f6cefd9.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", + "additionalDependencies": [ + "FsxLustreStorageTypeStack.assets" + ], + "lookupRole": { + "arn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-lookup-role-${AWS::AccountId}-${AWS::Region}", + "requiresBootstrapStackVersion": 8, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version" + } + }, + "dependencies": [ + "FsxLustreStorageTypeStack.assets" + ], + "metadata": { + "/FsxLustreStorageTypeStack/Vpc/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "Vpc8378EB38" + } + ], + "/FsxLustreStorageTypeStack/Vpc/PublicSubnet1/Subnet": [ + { + "type": "aws:cdk:logicalId", + "data": "VpcPublicSubnet1Subnet5C2D37C4" + } + ], + "/FsxLustreStorageTypeStack/Vpc/PublicSubnet1/RouteTable": [ + { + "type": "aws:cdk:logicalId", + "data": "VpcPublicSubnet1RouteTable6C95E38E" + } + ], + "/FsxLustreStorageTypeStack/Vpc/PublicSubnet1/RouteTableAssociation": [ + { + "type": "aws:cdk:logicalId", + "data": "VpcPublicSubnet1RouteTableAssociation97140677" + } + ], + "/FsxLustreStorageTypeStack/Vpc/PublicSubnet1/DefaultRoute": [ + { + "type": "aws:cdk:logicalId", + "data": "VpcPublicSubnet1DefaultRoute3DA9E72A" + } + ], + "/FsxLustreStorageTypeStack/Vpc/PublicSubnet1/EIP": [ + { + "type": "aws:cdk:logicalId", + "data": "VpcPublicSubnet1EIPD7E02669" + } + ], + "/FsxLustreStorageTypeStack/Vpc/PublicSubnet1/NATGateway": [ + { + "type": "aws:cdk:logicalId", + "data": "VpcPublicSubnet1NATGateway4D7517AA" + } + ], + "/FsxLustreStorageTypeStack/Vpc/PublicSubnet2/Subnet": [ + { + "type": "aws:cdk:logicalId", + "data": "VpcPublicSubnet2Subnet691E08A3" + } + ], + "/FsxLustreStorageTypeStack/Vpc/PublicSubnet2/RouteTable": [ + { + "type": "aws:cdk:logicalId", + "data": "VpcPublicSubnet2RouteTable94F7E489" + } + ], + "/FsxLustreStorageTypeStack/Vpc/PublicSubnet2/RouteTableAssociation": [ + { + "type": "aws:cdk:logicalId", + "data": "VpcPublicSubnet2RouteTableAssociationDD5762D8" + } + ], + "/FsxLustreStorageTypeStack/Vpc/PublicSubnet2/DefaultRoute": [ + { + "type": "aws:cdk:logicalId", + "data": "VpcPublicSubnet2DefaultRoute97F91067" + } + ], + "/FsxLustreStorageTypeStack/Vpc/PublicSubnet2/EIP": [ + { + "type": "aws:cdk:logicalId", + "data": "VpcPublicSubnet2EIP3C605A87" + } + ], + "/FsxLustreStorageTypeStack/Vpc/PublicSubnet2/NATGateway": [ + { + "type": "aws:cdk:logicalId", + "data": "VpcPublicSubnet2NATGateway9182C01D" + } + ], + "/FsxLustreStorageTypeStack/Vpc/PrivateSubnet1/Subnet": [ + { + "type": "aws:cdk:logicalId", + "data": "VpcPrivateSubnet1Subnet536B997A" + } + ], + "/FsxLustreStorageTypeStack/Vpc/PrivateSubnet1/RouteTable": [ + { + "type": "aws:cdk:logicalId", + "data": "VpcPrivateSubnet1RouteTableB2C5B500" + } + ], + "/FsxLustreStorageTypeStack/Vpc/PrivateSubnet1/RouteTableAssociation": [ + { + "type": "aws:cdk:logicalId", + "data": "VpcPrivateSubnet1RouteTableAssociation70C59FA6" + } + ], + "/FsxLustreStorageTypeStack/Vpc/PrivateSubnet1/DefaultRoute": [ + { + "type": "aws:cdk:logicalId", + "data": "VpcPrivateSubnet1DefaultRouteBE02A9ED" + } + ], + "/FsxLustreStorageTypeStack/Vpc/PrivateSubnet2/Subnet": [ + { + "type": "aws:cdk:logicalId", + "data": "VpcPrivateSubnet2Subnet3788AAA1" + } + ], + "/FsxLustreStorageTypeStack/Vpc/PrivateSubnet2/RouteTable": [ + { + "type": "aws:cdk:logicalId", + "data": "VpcPrivateSubnet2RouteTableA678073B" + } + ], + "/FsxLustreStorageTypeStack/Vpc/PrivateSubnet2/RouteTableAssociation": [ + { + "type": "aws:cdk:logicalId", + "data": "VpcPrivateSubnet2RouteTableAssociationA89CAD56" + } + ], + "/FsxLustreStorageTypeStack/Vpc/PrivateSubnet2/DefaultRoute": [ + { + "type": "aws:cdk:logicalId", + "data": "VpcPrivateSubnet2DefaultRoute060D2087" + } + ], + "/FsxLustreStorageTypeStack/Vpc/IGW": [ + { + "type": "aws:cdk:logicalId", + "data": "VpcIGWD7BA715C" + } + ], + "/FsxLustreStorageTypeStack/Vpc/VPCGW": [ + { + "type": "aws:cdk:logicalId", + "data": "VpcVPCGWBF912B6E" + } + ], + "/FsxLustreStorageTypeStack/FsxLustreFileSystemSsdStorage/FsxLustreSecurityGroup/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "FsxLustreFileSystemSsdStorageFsxLustreSecurityGroup14F696B3" + } + ], + "/FsxLustreStorageTypeStack/FsxLustreFileSystemSsdStorage/FsxLustreSecurityGroup/from FsxLustreStorageTypeStackFsxLustreFileSystemSsdStorageFsxLustreSecurityGroup900D4B37:988-1023": [ + { + "type": "aws:cdk:logicalId", + "data": "FsxLustreFileSystemSsdStorageFsxLustreSecurityGroupfromFsxLustreStorageTypeStackFsxLustreFileSystemSsdStorageFsxLustreSecurityGroup900D4B37988102342FA56B2" + } + ], + "/FsxLustreStorageTypeStack/FsxLustreFileSystemSsdStorage/FsxLustreSecurityGroup/from FsxLustreStorageTypeStackSsdFsxInstanceInstanceSecurityGroupAC704ACF:988-1023": [ + { + "type": "aws:cdk:logicalId", + "data": "FsxLustreFileSystemSsdStorageFsxLustreSecurityGroupfromFsxLustreStorageTypeStackSsdFsxInstanceInstanceSecurityGroupAC704ACF988102380D6A84E" + } + ], + "/FsxLustreStorageTypeStack/FsxLustreFileSystemSsdStorage/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "FsxLustreFileSystemSsdStorage70256D99" + } + ], + "/FsxLustreStorageTypeStack/SsdFsxInstance/InstanceSecurityGroup/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "SsdFsxInstanceInstanceSecurityGroup6C5726B9" + } + ], + "/FsxLustreStorageTypeStack/SsdFsxInstance/InstanceRole/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "SsdFsxInstanceInstanceRole933EE1D6" + } + ], + "/FsxLustreStorageTypeStack/SsdFsxInstance/InstanceProfile": [ + { + "type": "aws:cdk:logicalId", + "data": "SsdFsxInstanceInstanceProfile0AD53366" + } + ], + "/FsxLustreStorageTypeStack/SsdFsxInstance/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "SsdFsxInstance09AA8DE7" + } + ], + "/FsxLustreStorageTypeStack/SsmParameterValue:--aws--service--ami-amazon-linux-latest--al2023-ami-kernel-6.1-x86_64:C96584B6-F00A-464E-AD19-53AFF4B05118.Parameter": [ + { + "type": "aws:cdk:logicalId", + "data": "SsmParameterValueawsserviceamiamazonlinuxlatestal2023amikernel61x8664C96584B6F00A464EAD1953AFF4B05118Parameter" + } + ], + "/FsxLustreStorageTypeStack/FsxLustreFileSystemHddStorage/FsxLustreSecurityGroup/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "FsxLustreFileSystemHddStorageFsxLustreSecurityGroupCB529CFC" + } + ], + "/FsxLustreStorageTypeStack/FsxLustreFileSystemHddStorage/FsxLustreSecurityGroup/from FsxLustreStorageTypeStackFsxLustreFileSystemHddStorageFsxLustreSecurityGroup36EAA88E:988-1023": [ + { + "type": "aws:cdk:logicalId", + "data": "FsxLustreFileSystemHddStorageFsxLustreSecurityGroupfromFsxLustreStorageTypeStackFsxLustreFileSystemHddStorageFsxLustreSecurityGroup36EAA88E9881023C048CB34" + } + ], + "/FsxLustreStorageTypeStack/FsxLustreFileSystemHddStorage/FsxLustreSecurityGroup/from FsxLustreStorageTypeStackHddFsxInstanceInstanceSecurityGroup83E545BE:988-1023": [ + { + "type": "aws:cdk:logicalId", + "data": "FsxLustreFileSystemHddStorageFsxLustreSecurityGroupfromFsxLustreStorageTypeStackHddFsxInstanceInstanceSecurityGroup83E545BE98810231EFC35B6" + } + ], + "/FsxLustreStorageTypeStack/FsxLustreFileSystemHddStorage/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "FsxLustreFileSystemHddStorage85B422B8" + } + ], + "/FsxLustreStorageTypeStack/HddFsxInstance/InstanceSecurityGroup/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "HddFsxInstanceInstanceSecurityGroupFF15A567" + } + ], + "/FsxLustreStorageTypeStack/HddFsxInstance/InstanceRole/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "HddFsxInstanceInstanceRole7B336CC9" + } + ], + "/FsxLustreStorageTypeStack/HddFsxInstance/InstanceProfile": [ + { + "type": "aws:cdk:logicalId", + "data": "HddFsxInstanceInstanceProfile0833AA40" + } + ], + "/FsxLustreStorageTypeStack/HddFsxInstance/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "HddFsxInstance019A1F6D" + } + ], + "/FsxLustreStorageTypeStack/BootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "BootstrapVersion" + } + ], + "/FsxLustreStorageTypeStack/CheckBootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "CheckBootstrapVersion" + } + ] + }, + "displayName": "FsxLustreStorageTypeStack" + }, + "FsxLustreStorageTypeTestDefaultTestDeployAssert50B0FE3D.assets": { + "type": "cdk:asset-manifest", + "properties": { + "file": "FsxLustreStorageTypeTestDefaultTestDeployAssert50B0FE3D.assets.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version" + } + }, + "FsxLustreStorageTypeTestDefaultTestDeployAssert50B0FE3D": { + "type": "aws:cloudformation:stack", + "environment": "aws://unknown-account/unknown-region", + "properties": { + "templateFile": "FsxLustreStorageTypeTestDefaultTestDeployAssert50B0FE3D.template.json", + "terminationProtection": false, + "validateOnSynth": false, + "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-deploy-role-${AWS::AccountId}-${AWS::Region}", + "cloudFormationExecutionRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-cfn-exec-role-${AWS::AccountId}-${AWS::Region}", + "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/21fbb51d7b23f6a6c262b46a9caee79d744a3ac019fd45422d988b96d44b2a22.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", + "additionalDependencies": [ + "FsxLustreStorageTypeTestDefaultTestDeployAssert50B0FE3D.assets" + ], + "lookupRole": { + "arn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-lookup-role-${AWS::AccountId}-${AWS::Region}", + "requiresBootstrapStackVersion": 8, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version" + } + }, + "dependencies": [ + "FsxLustreStorageTypeTestDefaultTestDeployAssert50B0FE3D.assets" + ], + "metadata": { + "/FsxLustreStorageTypeTest/DefaultTest/DeployAssert/BootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "BootstrapVersion" + } + ], + "/FsxLustreStorageTypeTest/DefaultTest/DeployAssert/CheckBootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "CheckBootstrapVersion" + } + ] + }, + "displayName": "FsxLustreStorageTypeTest/DefaultTest/DeployAssert" + }, + "Tree": { + "type": "cdk:tree", + "properties": { + "file": "tree.json" + } + } + } +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-fsx/test/integ.lustre-file-system-storage-type.js.snapshot/tree.json b/packages/@aws-cdk-testing/framework-integ/test/aws-fsx/test/integ.lustre-file-system-storage-type.js.snapshot/tree.json new file mode 100644 index 0000000000000..fd749c10093d3 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-fsx/test/integ.lustre-file-system-storage-type.js.snapshot/tree.json @@ -0,0 +1,1362 @@ +{ + "version": "tree-0.1", + "tree": { + "id": "App", + "path": "", + "children": { + "FsxLustreStorageTypeStack": { + "id": "FsxLustreStorageTypeStack", + "path": "FsxLustreStorageTypeStack", + "children": { + "Vpc": { + "id": "Vpc", + "path": "FsxLustreStorageTypeStack/Vpc", + "children": { + "Resource": { + "id": "Resource", + "path": "FsxLustreStorageTypeStack/Vpc/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::EC2::VPC", + "aws:cdk:cloudformation:props": { + "cidrBlock": "10.0.0.0/16", + "enableDnsHostnames": true, + "enableDnsSupport": true, + "instanceTenancy": "default", + "tags": [ + { + "key": "Name", + "value": "FsxLustreStorageTypeStack/Vpc" + } + ] + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.CfnVPC", + "version": "0.0.0" + } + }, + "PublicSubnet1": { + "id": "PublicSubnet1", + "path": "FsxLustreStorageTypeStack/Vpc/PublicSubnet1", + "children": { + "Subnet": { + "id": "Subnet", + "path": "FsxLustreStorageTypeStack/Vpc/PublicSubnet1/Subnet", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::EC2::Subnet", + "aws:cdk:cloudformation:props": { + "availabilityZone": { + "Fn::Select": [ + 0, + { + "Fn::GetAZs": "" + } + ] + }, + "cidrBlock": "10.0.0.0/18", + "mapPublicIpOnLaunch": true, + "tags": [ + { + "key": "aws-cdk:subnet-name", + "value": "Public" + }, + { + "key": "aws-cdk:subnet-type", + "value": "Public" + }, + { + "key": "Name", + "value": "FsxLustreStorageTypeStack/Vpc/PublicSubnet1" + } + ], + "vpcId": { + "Ref": "Vpc8378EB38" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.CfnSubnet", + "version": "0.0.0" + } + }, + "Acl": { + "id": "Acl", + "path": "FsxLustreStorageTypeStack/Vpc/PublicSubnet1/Acl", + "constructInfo": { + "fqn": "aws-cdk-lib.Resource", + "version": "0.0.0" + } + }, + "RouteTable": { + "id": "RouteTable", + "path": "FsxLustreStorageTypeStack/Vpc/PublicSubnet1/RouteTable", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::EC2::RouteTable", + "aws:cdk:cloudformation:props": { + "tags": [ + { + "key": "Name", + "value": "FsxLustreStorageTypeStack/Vpc/PublicSubnet1" + } + ], + "vpcId": { + "Ref": "Vpc8378EB38" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.CfnRouteTable", + "version": "0.0.0" + } + }, + "RouteTableAssociation": { + "id": "RouteTableAssociation", + "path": "FsxLustreStorageTypeStack/Vpc/PublicSubnet1/RouteTableAssociation", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::EC2::SubnetRouteTableAssociation", + "aws:cdk:cloudformation:props": { + "routeTableId": { + "Ref": "VpcPublicSubnet1RouteTable6C95E38E" + }, + "subnetId": { + "Ref": "VpcPublicSubnet1Subnet5C2D37C4" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.CfnSubnetRouteTableAssociation", + "version": "0.0.0" + } + }, + "DefaultRoute": { + "id": "DefaultRoute", + "path": "FsxLustreStorageTypeStack/Vpc/PublicSubnet1/DefaultRoute", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::EC2::Route", + "aws:cdk:cloudformation:props": { + "destinationCidrBlock": "0.0.0.0/0", + "gatewayId": { + "Ref": "VpcIGWD7BA715C" + }, + "routeTableId": { + "Ref": "VpcPublicSubnet1RouteTable6C95E38E" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.CfnRoute", + "version": "0.0.0" + } + }, + "EIP": { + "id": "EIP", + "path": "FsxLustreStorageTypeStack/Vpc/PublicSubnet1/EIP", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::EC2::EIP", + "aws:cdk:cloudformation:props": { + "domain": "vpc", + "tags": [ + { + "key": "Name", + "value": "FsxLustreStorageTypeStack/Vpc/PublicSubnet1" + } + ] + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.CfnEIP", + "version": "0.0.0" + } + }, + "NATGateway": { + "id": "NATGateway", + "path": "FsxLustreStorageTypeStack/Vpc/PublicSubnet1/NATGateway", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::EC2::NatGateway", + "aws:cdk:cloudformation:props": { + "allocationId": { + "Fn::GetAtt": [ + "VpcPublicSubnet1EIPD7E02669", + "AllocationId" + ] + }, + "subnetId": { + "Ref": "VpcPublicSubnet1Subnet5C2D37C4" + }, + "tags": [ + { + "key": "Name", + "value": "FsxLustreStorageTypeStack/Vpc/PublicSubnet1" + } + ] + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.CfnNatGateway", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.PublicSubnet", + "version": "0.0.0" + } + }, + "PublicSubnet2": { + "id": "PublicSubnet2", + "path": "FsxLustreStorageTypeStack/Vpc/PublicSubnet2", + "children": { + "Subnet": { + "id": "Subnet", + "path": "FsxLustreStorageTypeStack/Vpc/PublicSubnet2/Subnet", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::EC2::Subnet", + "aws:cdk:cloudformation:props": { + "availabilityZone": { + "Fn::Select": [ + 1, + { + "Fn::GetAZs": "" + } + ] + }, + "cidrBlock": "10.0.64.0/18", + "mapPublicIpOnLaunch": true, + "tags": [ + { + "key": "aws-cdk:subnet-name", + "value": "Public" + }, + { + "key": "aws-cdk:subnet-type", + "value": "Public" + }, + { + "key": "Name", + "value": "FsxLustreStorageTypeStack/Vpc/PublicSubnet2" + } + ], + "vpcId": { + "Ref": "Vpc8378EB38" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.CfnSubnet", + "version": "0.0.0" + } + }, + "Acl": { + "id": "Acl", + "path": "FsxLustreStorageTypeStack/Vpc/PublicSubnet2/Acl", + "constructInfo": { + "fqn": "aws-cdk-lib.Resource", + "version": "0.0.0" + } + }, + "RouteTable": { + "id": "RouteTable", + "path": "FsxLustreStorageTypeStack/Vpc/PublicSubnet2/RouteTable", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::EC2::RouteTable", + "aws:cdk:cloudformation:props": { + "tags": [ + { + "key": "Name", + "value": "FsxLustreStorageTypeStack/Vpc/PublicSubnet2" + } + ], + "vpcId": { + "Ref": "Vpc8378EB38" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.CfnRouteTable", + "version": "0.0.0" + } + }, + "RouteTableAssociation": { + "id": "RouteTableAssociation", + "path": "FsxLustreStorageTypeStack/Vpc/PublicSubnet2/RouteTableAssociation", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::EC2::SubnetRouteTableAssociation", + "aws:cdk:cloudformation:props": { + "routeTableId": { + "Ref": "VpcPublicSubnet2RouteTable94F7E489" + }, + "subnetId": { + "Ref": "VpcPublicSubnet2Subnet691E08A3" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.CfnSubnetRouteTableAssociation", + "version": "0.0.0" + } + }, + "DefaultRoute": { + "id": "DefaultRoute", + "path": "FsxLustreStorageTypeStack/Vpc/PublicSubnet2/DefaultRoute", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::EC2::Route", + "aws:cdk:cloudformation:props": { + "destinationCidrBlock": "0.0.0.0/0", + "gatewayId": { + "Ref": "VpcIGWD7BA715C" + }, + "routeTableId": { + "Ref": "VpcPublicSubnet2RouteTable94F7E489" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.CfnRoute", + "version": "0.0.0" + } + }, + "EIP": { + "id": "EIP", + "path": "FsxLustreStorageTypeStack/Vpc/PublicSubnet2/EIP", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::EC2::EIP", + "aws:cdk:cloudformation:props": { + "domain": "vpc", + "tags": [ + { + "key": "Name", + "value": "FsxLustreStorageTypeStack/Vpc/PublicSubnet2" + } + ] + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.CfnEIP", + "version": "0.0.0" + } + }, + "NATGateway": { + "id": "NATGateway", + "path": "FsxLustreStorageTypeStack/Vpc/PublicSubnet2/NATGateway", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::EC2::NatGateway", + "aws:cdk:cloudformation:props": { + "allocationId": { + "Fn::GetAtt": [ + "VpcPublicSubnet2EIP3C605A87", + "AllocationId" + ] + }, + "subnetId": { + "Ref": "VpcPublicSubnet2Subnet691E08A3" + }, + "tags": [ + { + "key": "Name", + "value": "FsxLustreStorageTypeStack/Vpc/PublicSubnet2" + } + ] + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.CfnNatGateway", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.PublicSubnet", + "version": "0.0.0" + } + }, + "PrivateSubnet1": { + "id": "PrivateSubnet1", + "path": "FsxLustreStorageTypeStack/Vpc/PrivateSubnet1", + "children": { + "Subnet": { + "id": "Subnet", + "path": "FsxLustreStorageTypeStack/Vpc/PrivateSubnet1/Subnet", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::EC2::Subnet", + "aws:cdk:cloudformation:props": { + "availabilityZone": { + "Fn::Select": [ + 0, + { + "Fn::GetAZs": "" + } + ] + }, + "cidrBlock": "10.0.128.0/18", + "mapPublicIpOnLaunch": false, + "tags": [ + { + "key": "aws-cdk:subnet-name", + "value": "Private" + }, + { + "key": "aws-cdk:subnet-type", + "value": "Private" + }, + { + "key": "Name", + "value": "FsxLustreStorageTypeStack/Vpc/PrivateSubnet1" + } + ], + "vpcId": { + "Ref": "Vpc8378EB38" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.CfnSubnet", + "version": "0.0.0" + } + }, + "Acl": { + "id": "Acl", + "path": "FsxLustreStorageTypeStack/Vpc/PrivateSubnet1/Acl", + "constructInfo": { + "fqn": "aws-cdk-lib.Resource", + "version": "0.0.0" + } + }, + "RouteTable": { + "id": "RouteTable", + "path": "FsxLustreStorageTypeStack/Vpc/PrivateSubnet1/RouteTable", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::EC2::RouteTable", + "aws:cdk:cloudformation:props": { + "tags": [ + { + "key": "Name", + "value": "FsxLustreStorageTypeStack/Vpc/PrivateSubnet1" + } + ], + "vpcId": { + "Ref": "Vpc8378EB38" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.CfnRouteTable", + "version": "0.0.0" + } + }, + "RouteTableAssociation": { + "id": "RouteTableAssociation", + "path": "FsxLustreStorageTypeStack/Vpc/PrivateSubnet1/RouteTableAssociation", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::EC2::SubnetRouteTableAssociation", + "aws:cdk:cloudformation:props": { + "routeTableId": { + "Ref": "VpcPrivateSubnet1RouteTableB2C5B500" + }, + "subnetId": { + "Ref": "VpcPrivateSubnet1Subnet536B997A" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.CfnSubnetRouteTableAssociation", + "version": "0.0.0" + } + }, + "DefaultRoute": { + "id": "DefaultRoute", + "path": "FsxLustreStorageTypeStack/Vpc/PrivateSubnet1/DefaultRoute", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::EC2::Route", + "aws:cdk:cloudformation:props": { + "destinationCidrBlock": "0.0.0.0/0", + "natGatewayId": { + "Ref": "VpcPublicSubnet1NATGateway4D7517AA" + }, + "routeTableId": { + "Ref": "VpcPrivateSubnet1RouteTableB2C5B500" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.CfnRoute", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.PrivateSubnet", + "version": "0.0.0" + } + }, + "PrivateSubnet2": { + "id": "PrivateSubnet2", + "path": "FsxLustreStorageTypeStack/Vpc/PrivateSubnet2", + "children": { + "Subnet": { + "id": "Subnet", + "path": "FsxLustreStorageTypeStack/Vpc/PrivateSubnet2/Subnet", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::EC2::Subnet", + "aws:cdk:cloudformation:props": { + "availabilityZone": { + "Fn::Select": [ + 1, + { + "Fn::GetAZs": "" + } + ] + }, + "cidrBlock": "10.0.192.0/18", + "mapPublicIpOnLaunch": false, + "tags": [ + { + "key": "aws-cdk:subnet-name", + "value": "Private" + }, + { + "key": "aws-cdk:subnet-type", + "value": "Private" + }, + { + "key": "Name", + "value": "FsxLustreStorageTypeStack/Vpc/PrivateSubnet2" + } + ], + "vpcId": { + "Ref": "Vpc8378EB38" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.CfnSubnet", + "version": "0.0.0" + } + }, + "Acl": { + "id": "Acl", + "path": "FsxLustreStorageTypeStack/Vpc/PrivateSubnet2/Acl", + "constructInfo": { + "fqn": "aws-cdk-lib.Resource", + "version": "0.0.0" + } + }, + "RouteTable": { + "id": "RouteTable", + "path": "FsxLustreStorageTypeStack/Vpc/PrivateSubnet2/RouteTable", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::EC2::RouteTable", + "aws:cdk:cloudformation:props": { + "tags": [ + { + "key": "Name", + "value": "FsxLustreStorageTypeStack/Vpc/PrivateSubnet2" + } + ], + "vpcId": { + "Ref": "Vpc8378EB38" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.CfnRouteTable", + "version": "0.0.0" + } + }, + "RouteTableAssociation": { + "id": "RouteTableAssociation", + "path": "FsxLustreStorageTypeStack/Vpc/PrivateSubnet2/RouteTableAssociation", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::EC2::SubnetRouteTableAssociation", + "aws:cdk:cloudformation:props": { + "routeTableId": { + "Ref": "VpcPrivateSubnet2RouteTableA678073B" + }, + "subnetId": { + "Ref": "VpcPrivateSubnet2Subnet3788AAA1" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.CfnSubnetRouteTableAssociation", + "version": "0.0.0" + } + }, + "DefaultRoute": { + "id": "DefaultRoute", + "path": "FsxLustreStorageTypeStack/Vpc/PrivateSubnet2/DefaultRoute", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::EC2::Route", + "aws:cdk:cloudformation:props": { + "destinationCidrBlock": "0.0.0.0/0", + "natGatewayId": { + "Ref": "VpcPublicSubnet2NATGateway9182C01D" + }, + "routeTableId": { + "Ref": "VpcPrivateSubnet2RouteTableA678073B" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.CfnRoute", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.PrivateSubnet", + "version": "0.0.0" + } + }, + "IGW": { + "id": "IGW", + "path": "FsxLustreStorageTypeStack/Vpc/IGW", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::EC2::InternetGateway", + "aws:cdk:cloudformation:props": { + "tags": [ + { + "key": "Name", + "value": "FsxLustreStorageTypeStack/Vpc" + } + ] + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.CfnInternetGateway", + "version": "0.0.0" + } + }, + "VPCGW": { + "id": "VPCGW", + "path": "FsxLustreStorageTypeStack/Vpc/VPCGW", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::EC2::VPCGatewayAttachment", + "aws:cdk:cloudformation:props": { + "internetGatewayId": { + "Ref": "VpcIGWD7BA715C" + }, + "vpcId": { + "Ref": "Vpc8378EB38" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.CfnVPCGatewayAttachment", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.Vpc", + "version": "0.0.0" + } + }, + "FsxLustreFileSystemSsdStorage": { + "id": "FsxLustreFileSystemSsdStorage", + "path": "FsxLustreStorageTypeStack/FsxLustreFileSystemSsdStorage", + "children": { + "FsxLustreSecurityGroup": { + "id": "FsxLustreSecurityGroup", + "path": "FsxLustreStorageTypeStack/FsxLustreFileSystemSsdStorage/FsxLustreSecurityGroup", + "children": { + "Resource": { + "id": "Resource", + "path": "FsxLustreStorageTypeStack/FsxLustreFileSystemSsdStorage/FsxLustreSecurityGroup/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::EC2::SecurityGroup", + "aws:cdk:cloudformation:props": { + "groupDescription": "FsxLustreStorageTypeStack/FsxLustreFileSystemSsdStorage/FsxLustreSecurityGroup", + "securityGroupEgress": [ + { + "cidrIp": "0.0.0.0/0", + "description": "Allow all outbound traffic by default", + "ipProtocol": "-1" + } + ], + "vpcId": { + "Ref": "Vpc8378EB38" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.CfnSecurityGroup", + "version": "0.0.0" + } + }, + "from FsxLustreStorageTypeStackFsxLustreFileSystemSsdStorageFsxLustreSecurityGroup900D4B37:988-1023": { + "id": "from FsxLustreStorageTypeStackFsxLustreFileSystemSsdStorageFsxLustreSecurityGroup900D4B37:988-1023", + "path": "FsxLustreStorageTypeStack/FsxLustreFileSystemSsdStorage/FsxLustreSecurityGroup/from FsxLustreStorageTypeStackFsxLustreFileSystemSsdStorageFsxLustreSecurityGroup900D4B37:988-1023", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::EC2::SecurityGroupIngress", + "aws:cdk:cloudformation:props": { + "description": "from FsxLustreStorageTypeStackFsxLustreFileSystemSsdStorageFsxLustreSecurityGroup900D4B37:988-1023", + "fromPort": 988, + "groupId": { + "Fn::GetAtt": [ + "FsxLustreFileSystemSsdStorageFsxLustreSecurityGroup14F696B3", + "GroupId" + ] + }, + "ipProtocol": "tcp", + "sourceSecurityGroupId": { + "Fn::GetAtt": [ + "FsxLustreFileSystemSsdStorageFsxLustreSecurityGroup14F696B3", + "GroupId" + ] + }, + "toPort": 1023 + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.CfnSecurityGroupIngress", + "version": "0.0.0" + } + }, + "from FsxLustreStorageTypeStackSsdFsxInstanceInstanceSecurityGroupAC704ACF:988-1023": { + "id": "from FsxLustreStorageTypeStackSsdFsxInstanceInstanceSecurityGroupAC704ACF:988-1023", + "path": "FsxLustreStorageTypeStack/FsxLustreFileSystemSsdStorage/FsxLustreSecurityGroup/from FsxLustreStorageTypeStackSsdFsxInstanceInstanceSecurityGroupAC704ACF:988-1023", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::EC2::SecurityGroupIngress", + "aws:cdk:cloudformation:props": { + "description": "from FsxLustreStorageTypeStackSsdFsxInstanceInstanceSecurityGroupAC704ACF:988-1023", + "fromPort": 988, + "groupId": { + "Fn::GetAtt": [ + "FsxLustreFileSystemSsdStorageFsxLustreSecurityGroup14F696B3", + "GroupId" + ] + }, + "ipProtocol": "tcp", + "sourceSecurityGroupId": { + "Fn::GetAtt": [ + "SsdFsxInstanceInstanceSecurityGroup6C5726B9", + "GroupId" + ] + }, + "toPort": 1023 + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.CfnSecurityGroupIngress", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.SecurityGroup", + "version": "0.0.0" + } + }, + "Resource": { + "id": "Resource", + "path": "FsxLustreStorageTypeStack/FsxLustreFileSystemSsdStorage/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::FSx::FileSystem", + "aws:cdk:cloudformation:props": { + "fileSystemType": "LUSTRE", + "lustreConfiguration": { + "deploymentType": "SCRATCH_2", + "dataCompressionType": "LZ4" + }, + "securityGroupIds": [ + { + "Fn::GetAtt": [ + "FsxLustreFileSystemSsdStorageFsxLustreSecurityGroup14F696B3", + "GroupId" + ] + } + ], + "storageCapacity": 1200, + "storageType": "SSD", + "subnetIds": [ + { + "Ref": "VpcPrivateSubnet1Subnet536B997A" + } + ] + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_fsx.CfnFileSystem", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_fsx.LustreFileSystem", + "version": "0.0.0" + } + }, + "SsdFsxInstance": { + "id": "SsdFsxInstance", + "path": "FsxLustreStorageTypeStack/SsdFsxInstance", + "children": { + "InstanceSecurityGroup": { + "id": "InstanceSecurityGroup", + "path": "FsxLustreStorageTypeStack/SsdFsxInstance/InstanceSecurityGroup", + "children": { + "Resource": { + "id": "Resource", + "path": "FsxLustreStorageTypeStack/SsdFsxInstance/InstanceSecurityGroup/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::EC2::SecurityGroup", + "aws:cdk:cloudformation:props": { + "groupDescription": "FsxLustreStorageTypeStack/SsdFsxInstance/InstanceSecurityGroup", + "securityGroupEgress": [ + { + "cidrIp": "0.0.0.0/0", + "description": "Allow all outbound traffic by default", + "ipProtocol": "-1" + } + ], + "tags": [ + { + "key": "Name", + "value": "FsxLustreStorageTypeStack/SsdFsxInstance" + } + ], + "vpcId": { + "Ref": "Vpc8378EB38" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.CfnSecurityGroup", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.SecurityGroup", + "version": "0.0.0" + } + }, + "InstanceRole": { + "id": "InstanceRole", + "path": "FsxLustreStorageTypeStack/SsdFsxInstance/InstanceRole", + "children": { + "ImportInstanceRole": { + "id": "ImportInstanceRole", + "path": "FsxLustreStorageTypeStack/SsdFsxInstance/InstanceRole/ImportInstanceRole", + "constructInfo": { + "fqn": "aws-cdk-lib.Resource", + "version": "0.0.0" + } + }, + "Resource": { + "id": "Resource", + "path": "FsxLustreStorageTypeStack/SsdFsxInstance/InstanceRole/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::IAM::Role", + "aws:cdk:cloudformation:props": { + "assumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "Service": "ec2.amazonaws.com" + } + } + ], + "Version": "2012-10-17" + }, + "tags": [ + { + "key": "Name", + "value": "FsxLustreStorageTypeStack/SsdFsxInstance" + } + ] + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_iam.CfnRole", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_iam.Role", + "version": "0.0.0" + } + }, + "InstanceProfile": { + "id": "InstanceProfile", + "path": "FsxLustreStorageTypeStack/SsdFsxInstance/InstanceProfile", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::IAM::InstanceProfile", + "aws:cdk:cloudformation:props": { + "roles": [ + { + "Ref": "SsdFsxInstanceInstanceRole933EE1D6" + } + ] + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_iam.CfnInstanceProfile", + "version": "0.0.0" + } + }, + "Resource": { + "id": "Resource", + "path": "FsxLustreStorageTypeStack/SsdFsxInstance/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::EC2::Instance", + "aws:cdk:cloudformation:props": { + "availabilityZone": { + "Fn::Select": [ + 0, + { + "Fn::GetAZs": "" + } + ] + }, + "iamInstanceProfile": { + "Ref": "SsdFsxInstanceInstanceProfile0AD53366" + }, + "imageId": { + "Ref": "SsmParameterValueawsserviceamiamazonlinuxlatestal2023amikernel61x8664C96584B6F00A464EAD1953AFF4B05118Parameter" + }, + "instanceType": "t2.large", + "securityGroupIds": [ + { + "Fn::GetAtt": [ + "SsdFsxInstanceInstanceSecurityGroup6C5726B9", + "GroupId" + ] + } + ], + "subnetId": { + "Ref": "VpcPublicSubnet1Subnet5C2D37C4" + }, + "tags": [ + { + "key": "Name", + "value": "FsxLustreStorageTypeStack/SsdFsxInstance" + } + ], + "userData": { + "Fn::Base64": "#!/bin/bash" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.CfnInstance", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.Instance", + "version": "0.0.0" + } + }, + "SsmParameterValue:--aws--service--ami-amazon-linux-latest--al2023-ami-kernel-6.1-x86_64:C96584B6-F00A-464E-AD19-53AFF4B05118.Parameter": { + "id": "SsmParameterValue:--aws--service--ami-amazon-linux-latest--al2023-ami-kernel-6.1-x86_64:C96584B6-F00A-464E-AD19-53AFF4B05118.Parameter", + "path": "FsxLustreStorageTypeStack/SsmParameterValue:--aws--service--ami-amazon-linux-latest--al2023-ami-kernel-6.1-x86_64:C96584B6-F00A-464E-AD19-53AFF4B05118.Parameter", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnParameter", + "version": "0.0.0" + } + }, + "SsmParameterValue:--aws--service--ami-amazon-linux-latest--al2023-ami-kernel-6.1-x86_64:C96584B6-F00A-464E-AD19-53AFF4B05118": { + "id": "SsmParameterValue:--aws--service--ami-amazon-linux-latest--al2023-ami-kernel-6.1-x86_64:C96584B6-F00A-464E-AD19-53AFF4B05118", + "path": "FsxLustreStorageTypeStack/SsmParameterValue:--aws--service--ami-amazon-linux-latest--al2023-ami-kernel-6.1-x86_64:C96584B6-F00A-464E-AD19-53AFF4B05118", + "constructInfo": { + "fqn": "aws-cdk-lib.Resource", + "version": "0.0.0" + } + }, + "FsxLustreFileSystemHddStorage": { + "id": "FsxLustreFileSystemHddStorage", + "path": "FsxLustreStorageTypeStack/FsxLustreFileSystemHddStorage", + "children": { + "FsxLustreSecurityGroup": { + "id": "FsxLustreSecurityGroup", + "path": "FsxLustreStorageTypeStack/FsxLustreFileSystemHddStorage/FsxLustreSecurityGroup", + "children": { + "Resource": { + "id": "Resource", + "path": "FsxLustreStorageTypeStack/FsxLustreFileSystemHddStorage/FsxLustreSecurityGroup/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::EC2::SecurityGroup", + "aws:cdk:cloudformation:props": { + "groupDescription": "FsxLustreStorageTypeStack/FsxLustreFileSystemHddStorage/FsxLustreSecurityGroup", + "securityGroupEgress": [ + { + "cidrIp": "0.0.0.0/0", + "description": "Allow all outbound traffic by default", + "ipProtocol": "-1" + } + ], + "vpcId": { + "Ref": "Vpc8378EB38" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.CfnSecurityGroup", + "version": "0.0.0" + } + }, + "from FsxLustreStorageTypeStackFsxLustreFileSystemHddStorageFsxLustreSecurityGroup36EAA88E:988-1023": { + "id": "from FsxLustreStorageTypeStackFsxLustreFileSystemHddStorageFsxLustreSecurityGroup36EAA88E:988-1023", + "path": "FsxLustreStorageTypeStack/FsxLustreFileSystemHddStorage/FsxLustreSecurityGroup/from FsxLustreStorageTypeStackFsxLustreFileSystemHddStorageFsxLustreSecurityGroup36EAA88E:988-1023", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::EC2::SecurityGroupIngress", + "aws:cdk:cloudformation:props": { + "description": "from FsxLustreStorageTypeStackFsxLustreFileSystemHddStorageFsxLustreSecurityGroup36EAA88E:988-1023", + "fromPort": 988, + "groupId": { + "Fn::GetAtt": [ + "FsxLustreFileSystemHddStorageFsxLustreSecurityGroupCB529CFC", + "GroupId" + ] + }, + "ipProtocol": "tcp", + "sourceSecurityGroupId": { + "Fn::GetAtt": [ + "FsxLustreFileSystemHddStorageFsxLustreSecurityGroupCB529CFC", + "GroupId" + ] + }, + "toPort": 1023 + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.CfnSecurityGroupIngress", + "version": "0.0.0" + } + }, + "from FsxLustreStorageTypeStackHddFsxInstanceInstanceSecurityGroup83E545BE:988-1023": { + "id": "from FsxLustreStorageTypeStackHddFsxInstanceInstanceSecurityGroup83E545BE:988-1023", + "path": "FsxLustreStorageTypeStack/FsxLustreFileSystemHddStorage/FsxLustreSecurityGroup/from FsxLustreStorageTypeStackHddFsxInstanceInstanceSecurityGroup83E545BE:988-1023", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::EC2::SecurityGroupIngress", + "aws:cdk:cloudformation:props": { + "description": "from FsxLustreStorageTypeStackHddFsxInstanceInstanceSecurityGroup83E545BE:988-1023", + "fromPort": 988, + "groupId": { + "Fn::GetAtt": [ + "FsxLustreFileSystemHddStorageFsxLustreSecurityGroupCB529CFC", + "GroupId" + ] + }, + "ipProtocol": "tcp", + "sourceSecurityGroupId": { + "Fn::GetAtt": [ + "HddFsxInstanceInstanceSecurityGroupFF15A567", + "GroupId" + ] + }, + "toPort": 1023 + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.CfnSecurityGroupIngress", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.SecurityGroup", + "version": "0.0.0" + } + }, + "Resource": { + "id": "Resource", + "path": "FsxLustreStorageTypeStack/FsxLustreFileSystemHddStorage/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::FSx::FileSystem", + "aws:cdk:cloudformation:props": { + "fileSystemType": "LUSTRE", + "lustreConfiguration": { + "deploymentType": "PERSISTENT_1", + "dataCompressionType": "LZ4", + "perUnitStorageThroughput": 12, + "driveCacheType": "READ" + }, + "securityGroupIds": [ + { + "Fn::GetAtt": [ + "FsxLustreFileSystemHddStorageFsxLustreSecurityGroupCB529CFC", + "GroupId" + ] + } + ], + "storageCapacity": 6000, + "storageType": "HDD", + "subnetIds": [ + { + "Ref": "VpcPrivateSubnet2Subnet3788AAA1" + } + ] + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_fsx.CfnFileSystem", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_fsx.LustreFileSystem", + "version": "0.0.0" + } + }, + "HddFsxInstance": { + "id": "HddFsxInstance", + "path": "FsxLustreStorageTypeStack/HddFsxInstance", + "children": { + "InstanceSecurityGroup": { + "id": "InstanceSecurityGroup", + "path": "FsxLustreStorageTypeStack/HddFsxInstance/InstanceSecurityGroup", + "children": { + "Resource": { + "id": "Resource", + "path": "FsxLustreStorageTypeStack/HddFsxInstance/InstanceSecurityGroup/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::EC2::SecurityGroup", + "aws:cdk:cloudformation:props": { + "groupDescription": "FsxLustreStorageTypeStack/HddFsxInstance/InstanceSecurityGroup", + "securityGroupEgress": [ + { + "cidrIp": "0.0.0.0/0", + "description": "Allow all outbound traffic by default", + "ipProtocol": "-1" + } + ], + "tags": [ + { + "key": "Name", + "value": "FsxLustreStorageTypeStack/HddFsxInstance" + } + ], + "vpcId": { + "Ref": "Vpc8378EB38" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.CfnSecurityGroup", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.SecurityGroup", + "version": "0.0.0" + } + }, + "InstanceRole": { + "id": "InstanceRole", + "path": "FsxLustreStorageTypeStack/HddFsxInstance/InstanceRole", + "children": { + "ImportInstanceRole": { + "id": "ImportInstanceRole", + "path": "FsxLustreStorageTypeStack/HddFsxInstance/InstanceRole/ImportInstanceRole", + "constructInfo": { + "fqn": "aws-cdk-lib.Resource", + "version": "0.0.0" + } + }, + "Resource": { + "id": "Resource", + "path": "FsxLustreStorageTypeStack/HddFsxInstance/InstanceRole/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::IAM::Role", + "aws:cdk:cloudformation:props": { + "assumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "Service": "ec2.amazonaws.com" + } + } + ], + "Version": "2012-10-17" + }, + "tags": [ + { + "key": "Name", + "value": "FsxLustreStorageTypeStack/HddFsxInstance" + } + ] + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_iam.CfnRole", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_iam.Role", + "version": "0.0.0" + } + }, + "InstanceProfile": { + "id": "InstanceProfile", + "path": "FsxLustreStorageTypeStack/HddFsxInstance/InstanceProfile", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::IAM::InstanceProfile", + "aws:cdk:cloudformation:props": { + "roles": [ + { + "Ref": "HddFsxInstanceInstanceRole7B336CC9" + } + ] + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_iam.CfnInstanceProfile", + "version": "0.0.0" + } + }, + "Resource": { + "id": "Resource", + "path": "FsxLustreStorageTypeStack/HddFsxInstance/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::EC2::Instance", + "aws:cdk:cloudformation:props": { + "availabilityZone": { + "Fn::Select": [ + 0, + { + "Fn::GetAZs": "" + } + ] + }, + "iamInstanceProfile": { + "Ref": "HddFsxInstanceInstanceProfile0833AA40" + }, + "imageId": { + "Ref": "SsmParameterValueawsserviceamiamazonlinuxlatestal2023amikernel61x8664C96584B6F00A464EAD1953AFF4B05118Parameter" + }, + "instanceType": "t2.large", + "securityGroupIds": [ + { + "Fn::GetAtt": [ + "HddFsxInstanceInstanceSecurityGroupFF15A567", + "GroupId" + ] + } + ], + "subnetId": { + "Ref": "VpcPublicSubnet1Subnet5C2D37C4" + }, + "tags": [ + { + "key": "Name", + "value": "FsxLustreStorageTypeStack/HddFsxInstance" + } + ], + "userData": { + "Fn::Base64": "#!/bin/bash" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.CfnInstance", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.Instance", + "version": "0.0.0" + } + }, + "BootstrapVersion": { + "id": "BootstrapVersion", + "path": "FsxLustreStorageTypeStack/BootstrapVersion", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnParameter", + "version": "0.0.0" + } + }, + "CheckBootstrapVersion": { + "id": "CheckBootstrapVersion", + "path": "FsxLustreStorageTypeStack/CheckBootstrapVersion", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnRule", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.Stack", + "version": "0.0.0" + } + }, + "FsxLustreStorageTypeTest": { + "id": "FsxLustreStorageTypeTest", + "path": "FsxLustreStorageTypeTest", + "children": { + "DefaultTest": { + "id": "DefaultTest", + "path": "FsxLustreStorageTypeTest/DefaultTest", + "children": { + "Default": { + "id": "Default", + "path": "FsxLustreStorageTypeTest/DefaultTest/Default", + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.3.0" + } + }, + "DeployAssert": { + "id": "DeployAssert", + "path": "FsxLustreStorageTypeTest/DefaultTest/DeployAssert", + "children": { + "BootstrapVersion": { + "id": "BootstrapVersion", + "path": "FsxLustreStorageTypeTest/DefaultTest/DeployAssert/BootstrapVersion", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnParameter", + "version": "0.0.0" + } + }, + "CheckBootstrapVersion": { + "id": "CheckBootstrapVersion", + "path": "FsxLustreStorageTypeTest/DefaultTest/DeployAssert/CheckBootstrapVersion", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnRule", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.Stack", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/integ-tests-alpha.IntegTestCase", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/integ-tests-alpha.IntegTest", + "version": "0.0.0" + } + }, + "Tree": { + "id": "Tree", + "path": "Tree", + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.3.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.App", + "version": "0.0.0" + } + } +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-fsx/test/integ.lustre-file-system-storage-type.ts b/packages/@aws-cdk-testing/framework-integ/test/aws-fsx/test/integ.lustre-file-system-storage-type.ts new file mode 100644 index 0000000000000..73cb8dc44253b --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-fsx/test/integ.lustre-file-system-storage-type.ts @@ -0,0 +1,73 @@ +import { + AmazonLinuxGeneration, + AmazonLinuxImage, + Instance, + InstanceClass, + InstanceSize, + InstanceType, + SubnetType, + Vpc, +} from 'aws-cdk-lib/aws-ec2'; +import { App, RemovalPolicy, Stack } from 'aws-cdk-lib'; +import { LustreDeploymentType, LustreFileSystem, LustreDataCompressionType, StorageType, DriveCacheType } from 'aws-cdk-lib/aws-fsx'; +import * as integ from '@aws-cdk/integ-tests-alpha'; + +const app = new App(); + +const stack = new Stack(app, 'FsxLustreStorageTypeStack'); + +const vpc = new Vpc(stack, 'Vpc', { restrictDefaultSecurityGroup: false }); + +const ssdFileSystem = new LustreFileSystem(stack, 'FsxLustreFileSystemSsdStorage', { + lustreConfiguration: { + deploymentType: LustreDeploymentType.SCRATCH_2, + dataCompressionType: LustreDataCompressionType.LZ4, + }, + storageCapacityGiB: 1200, + vpc, + vpcSubnet: vpc.privateSubnets[0], + removalPolicy: RemovalPolicy.DESTROY, + storageType: StorageType.SSD, +}); + +const ssdFsxInstance = new Instance(stack, 'SsdFsxInstance', { + instanceType: InstanceType.of(InstanceClass.T2, InstanceSize.LARGE), + machineImage: new AmazonLinuxImage({ + generation: AmazonLinuxGeneration.AMAZON_LINUX_2023, + }), + vpc, + vpcSubnets: { + subnetType: SubnetType.PUBLIC, + }, +}); +ssdFileSystem.connections.allowDefaultPortFrom(ssdFsxInstance); + +const hddFileSystem = new LustreFileSystem(stack, 'FsxLustreFileSystemHddStorage', { + lustreConfiguration: { + deploymentType: LustreDeploymentType.PERSISTENT_1, + dataCompressionType: LustreDataCompressionType.LZ4, + perUnitStorageThroughput: 12, + driveCacheType: DriveCacheType.READ, + }, + storageCapacityGiB: 6000, + vpc, + vpcSubnet: vpc.privateSubnets[1], + removalPolicy: RemovalPolicy.DESTROY, + storageType: StorageType.HDD, +}); + +const hddFsxInstance = new Instance(stack, 'HddFsxInstance', { + instanceType: InstanceType.of(InstanceClass.T2, InstanceSize.LARGE), + machineImage: new AmazonLinuxImage({ + generation: AmazonLinuxGeneration.AMAZON_LINUX_2023, + }), + vpc, + vpcSubnets: { + subnetType: SubnetType.PUBLIC, + }, +}); +hddFileSystem.connections.allowDefaultPortFrom(hddFsxInstance); + +new integ.IntegTest(app, 'FsxLustreStorageTypeTest', { + testCases: [stack], +}); diff --git a/packages/aws-cdk-lib/aws-fsx/README.md b/packages/aws-cdk-lib/aws-fsx/README.md index 61cd2951ef22b..3f5a8db7eb325 100644 --- a/packages/aws-cdk-lib/aws-fsx/README.md +++ b/packages/aws-cdk-lib/aws-fsx/README.md @@ -196,8 +196,8 @@ const lustreConfiguration = { When you turn data compression on for an existing file system, only newly written files are compressed. Existing files are not compressed. For more information, see [Compressing previously written files](https://docs.aws.amazon.com/fsx/latest/LustreGuide/data-compression.html#migrate-compression). - ### Backups + You can take daily automatic backups by setting `automaticBackupRetention` to a non-zero day in the `lustreConfiguration`. Additionally, you can set the backup window by specifying the `dailyAutomaticBackupStartTime`. @@ -217,6 +217,41 @@ const lustreConfiguration = { For more information, see [Working with backups ](https://docs.aws.amazon.com/fsx/latest/LustreGuide/using-backups-fsx.html). +### Storage Type + +By default, FSx for Lustre uses SSD storage. To use HDD storage, specify `storageType`: + +```ts +declare const vpc: ec2.Vpc; + +const fileSystem = new fsx.LustreFileSystem(this, 'FsxLustreFileSystem', { + lustreConfiguration: { deploymentType: fsx.LustreDeploymentType.PERSISTENT_1 }, + storageCapacityGiB: 1200, + vpc, + vpcSubnet: vpc.privateSubnets[0], + storageType: fsx.StorageType.HDD, +}); +``` + +**Note:** The HDD storage type is only supported for `PERSISTENT_1` deployment types. + +To improve the performance of frequently accessed files by caching up to 20% of the total storage capacity of the file system, set `driveCacheType` to `READ`: + +```ts +declare const vpc: ec2.Vpc; + +const fileSystem = new fsx.LustreFileSystem(this, 'FsxLustreFileSystem', { + lustreConfiguration: { + deploymentType: fsx.LustreDeploymentType.PERSISTENT_1, + driveCacheType: fsx.DriveCacheType.READ, + }, + storageCapacityGiB: 1200, + vpc, + vpcSubnet: vpc.privateSubnets[0], + storageType: fsx.StorageType.HDD, +}); +``` + ## FSx for Windows File Server The L2 construct for the FSx for Windows File Server has not yet been implemented. To instantiate an FSx for Windows diff --git a/packages/aws-cdk-lib/aws-fsx/lib/file-system.ts b/packages/aws-cdk-lib/aws-fsx/lib/file-system.ts index a6c1f5c5eaf23..92085a4e708d8 100644 --- a/packages/aws-cdk-lib/aws-fsx/lib/file-system.ts +++ b/packages/aws-cdk-lib/aws-fsx/lib/file-system.ts @@ -2,6 +2,20 @@ import { Connections, IConnectable, ISecurityGroup, IVpc } from '../../aws-ec2'; import { IKey } from '../../aws-kms'; import { RemovalPolicy, Resource } from '../../core'; +/** + * The storage type for the file system. + */ +export enum StorageType { + /** + * Solid State Drive storage + */ + SSD = 'SSD', + /** + * Hard Disk Drive storage + */ + HDD = 'HDD', +} + /** * Interface to implement FSx File Systems. */ @@ -47,9 +61,11 @@ export interface FileSystemProps { /** * The storage capacity of the file system being created. + * * For Windows file systems, valid values are 32 GiB to 65,536 GiB. * For SCRATCH_1 deployment types, valid values are 1,200, 2,400, 3,600, then continuing in increments of 3,600 GiB. - * For SCRATCH_2 and PERSISTENT_1 types, valid values are 1,200, 2,400, then continuing in increments of 2,400 GiB. + * For SCRATCH_2, PERSISTENT_2 and PERSISTENT_1 deployment types using SSD storage type, the valid values are 1200 GiB, 2400 GiB, and increments of 2400 GiB. + * For PERSISTENT_1 HDD file systems, valid values are increments of 6000 GiB for 12 MB/s/TiB file systems and increments of 1800 GiB for 40 MB/s/TiB file systems. */ readonly storageCapacityGiB: number; @@ -59,6 +75,15 @@ export interface FileSystemProps { * @default RemovalPolicy.RETAIN */ readonly removalPolicy?: RemovalPolicy; + + /** + * The storage type for the file system that you're creating. + * + * @see https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-fsx-filesystem.html#cfn-fsx-filesystem-storagetype + * + * @default StorageType.SSD + */ + readonly storageType?: StorageType; } /** diff --git a/packages/aws-cdk-lib/aws-fsx/lib/lustre-file-system.ts b/packages/aws-cdk-lib/aws-fsx/lib/lustre-file-system.ts index 58803107856d5..b25d3f0f157f9 100644 --- a/packages/aws-cdk-lib/aws-fsx/lib/lustre-file-system.ts +++ b/packages/aws-cdk-lib/aws-fsx/lib/lustre-file-system.ts @@ -1,6 +1,6 @@ import { Construct } from 'constructs'; import { DailyAutomaticBackupStartTime } from './daily-automatic-backup-start-time'; -import { FileSystemAttributes, FileSystemBase, FileSystemProps, IFileSystem } from './file-system'; +import { FileSystemAttributes, FileSystemBase, FileSystemProps, IFileSystem, StorageType } from './file-system'; import { CfnFileSystem } from './fsx.generated'; import { LustreMaintenanceTime } from './maintenance-time'; import { Connections, ISecurityGroup, ISubnet, Port, SecurityGroup } from '../../aws-ec2'; @@ -51,6 +51,20 @@ export enum LustreAutoImportPolicy { NEW_CHANGED_DELETED = 'NEW_CHANGED_DELETED', } +/** + * The type of drive cache used by PERSISTENT_1 file systems that are provisioned with HDD storage devices. + */ +export enum DriveCacheType { + /** + * The Lustre file system is configured with no data cache. + */ + NONE = 'NONE', + /** + * The Lustre file system is configured with a read cache. + */ + READ = 'READ', +} + /** * The permitted Lustre data compression algorithms */ @@ -129,10 +143,15 @@ export interface LustreConfiguration { readonly dataCompressionType?: LustreDataCompressionType; /** - * Required for the PERSISTENT_1 deployment type, describes the amount of read and write throughput for each 1 - * tebibyte of storage, in MB/s/TiB. Valid values are 50, 100, 200. + * Provisions the amount of read and write throughput for each 1 tebibyte (TiB) of file system storage capacity, in MB/s/TiB. + * Required with PERSISTENT_1 and PERSISTENT_2 deployment types. * - * @default - no default, conditionally required for PERSISTENT_1 deployment type + * Valid values: + * - For PERSISTENT_1 SSD storage: 50, 100, 200 MB/s/TiB. + * - For PERSISTENT_1 HDD storage: 12, 40 MB/s/TiB. + * - For PERSISTENT_2 SSD storage: 125, 250, 500, 1000 MB/s/TiB. + * + * @default - no default, conditionally required for PERSISTENT_1 and PERSISTENT_2 deployment type */ readonly perUnitStorageThroughput?: number; @@ -170,6 +189,12 @@ export interface LustreConfiguration { */ readonly dailyAutomaticBackupStartTime?: DailyAutomaticBackupStartTime; + /** + * The type of drive cache used by PERSISTENT_1 file systems that are provisioned with HDD storage devices. + * + * @default - no drive cache + */ + readonly driveCacheType?: DriveCacheType; } /** @@ -270,6 +295,7 @@ export class LustreFileSystem extends FileSystemBase { weeklyMaintenanceStartTime: props.lustreConfiguration.weeklyMaintenanceStartTime?.toTimestamp(), automaticBackupRetentionDays: props.lustreConfiguration.automaticBackupRetention?.toDays(), dailyAutomaticBackupStartTime: props.lustreConfiguration.dailyAutomaticBackupStartTime?.toTimestamp(), + driveCacheType: props.lustreConfiguration.driveCacheType ?? (props.storageType === StorageType.HDD ? DriveCacheType.NONE : undefined), }; const lustreConfiguration = Object.assign({}, props.lustreConfiguration, updatedLustureProps); @@ -289,6 +315,7 @@ export class LustreFileSystem extends FileSystemBase { lustreConfiguration, securityGroupIds: [securityGroup.securityGroupId], storageCapacity: props.storageCapacityGiB, + storageType: props.storageType, }); this.fileSystem.applyRemovalPolicy(props.removalPolicy); @@ -303,6 +330,7 @@ export class LustreFileSystem extends FileSystemBase { private validateProps(props: LustreFileSystemProps) { const lustreConfiguration = props.lustreConfiguration; const deploymentType = lustreConfiguration.deploymentType; + const perUnitStorageThroughput = lustreConfiguration.perUnitStorageThroughput; // Make sure the import path is valid before validating the export path this.validateImportPath(lustreConfiguration.importPath); @@ -310,12 +338,36 @@ export class LustreFileSystem extends FileSystemBase { this.validateImportedFileChunkSize(lustreConfiguration.importedFileChunkSizeMiB); this.validateAutoImportPolicy(deploymentType, lustreConfiguration.importPath, lustreConfiguration.autoImportPolicy); - this.validatePerUnitStorageThroughput(deploymentType, lustreConfiguration.perUnitStorageThroughput); - this.validateStorageCapacity(deploymentType, props.storageCapacityGiB); this.validateAutomaticBackupRetention(deploymentType, lustreConfiguration.automaticBackupRetention); this.validateDailyAutomaticBackupStartTime(lustreConfiguration.automaticBackupRetention, lustreConfiguration.dailyAutomaticBackupStartTime); + this.validatePerUnitStorageThroughput(deploymentType, perUnitStorageThroughput, props.storageType); + this.validateStorageCapacity(deploymentType, props.storageCapacityGiB, props.storageType, perUnitStorageThroughput); + this.validateStorageType(deploymentType, props.storageType); + this.validateDriveCacheType(deploymentType, props.storageType, lustreConfiguration.driveCacheType); + } + + /** + * Validates the drive cache type is only set for the PERSISTENT_1 deployment type and HDD storage type. + */ + private validateDriveCacheType(deploymentType: LustreDeploymentType, storageType?: StorageType, driveCacheType?: DriveCacheType): void { + if (!driveCacheType) return; + + if (deploymentType !== LustreDeploymentType.PERSISTENT_1 || storageType !== StorageType.HDD) { + throw new Error(`driveCacheType can only be set for PERSISTENT_1 HDD storage type, got: ${deploymentType} and ${storageType}`); + } + } + + /** + * Validates if the storage type corresponds to the appropriate deployment type. + */ + private validateStorageType(deploymentType: LustreDeploymentType, storageType?: StorageType): void { + if (!storageType) return; + + if (storageType === StorageType.HDD && deploymentType !== LustreDeploymentType.PERSISTENT_1) { + throw new Error(`Storage type HDD is only supported for PERSISTENT_1 deployment type, got: ${deploymentType}`); + } } /** @@ -383,8 +435,14 @@ export class LustreFileSystem extends FileSystemBase { /** * Validates the perUnitStorageThroughput is defined correctly for the given deploymentType. + * + * @see https://docs.aws.amazon.com/fsx/latest/LustreGuide/managing-throughput-capacity.html */ - private validatePerUnitStorageThroughput(deploymentType: LustreDeploymentType, perUnitStorageThroughput?: number) { + private validatePerUnitStorageThroughput( + deploymentType: LustreDeploymentType, + perUnitStorageThroughput?: number, + storageType?: StorageType, + ): void { if (perUnitStorageThroughput === undefined) { return; } if (deploymentType !== LustreDeploymentType.PERSISTENT_1 && deploymentType !== LustreDeploymentType.PERSISTENT_2) { @@ -392,29 +450,59 @@ export class LustreFileSystem extends FileSystemBase { } if (deploymentType === LustreDeploymentType.PERSISTENT_1) { - if (![50, 100, 200].includes(perUnitStorageThroughput)) { - throw new Error('perUnitStorageThroughput must be 50, 100, or 200 MB/s/TiB for PERSISTENT_1 deployment type, got: ' + perUnitStorageThroughput); + if (storageType === StorageType.HDD && ![12, 40].includes(perUnitStorageThroughput)) { + throw new Error(`perUnitStorageThroughput must be 12 or 40 MB/s/TiB for PERSISTENT_1 HDD storage, got: ${perUnitStorageThroughput}`); + } + if ((storageType === undefined || storageType === StorageType.SSD) && ![50, 100, 200].includes(perUnitStorageThroughput)) { + throw new Error('perUnitStorageThroughput must be 50, 100, or 200 MB/s/TiB for PERSISTENT_1 SSD storage, got: ' + perUnitStorageThroughput); } } if (deploymentType === LustreDeploymentType.PERSISTENT_2) { if (![125, 250, 500, 1000].includes(perUnitStorageThroughput)) { - throw new Error('perUnitStorageThroughput must be 125, 250, 500 or 1000 MB/s/TiB for PERSISTENT_2 deployment type, got: ' + perUnitStorageThroughput); + throw new Error(`perUnitStorageThroughput must be 125, 250, 500 or 1000 MB/s/TiB for PERSISTENT_2 deployment type, got: ${perUnitStorageThroughput}`); } } } /** * Validates the storage capacity is an acceptable value for the deployment type. - */ - private validateStorageCapacity(deploymentType: LustreDeploymentType, storageCapacity: number): void { + * + * @see https://docs.aws.amazon.com/fsx/latest/LustreGuide/increase-storage-capacity.html + */ + private validateStorageCapacity( + deploymentType: LustreDeploymentType, + storageCapacity: number, + storageType?: StorageType, + perUnitStorageThroughput?: number, + ): void { if (deploymentType === LustreDeploymentType.SCRATCH_1) { if (![1200, 2400, 3600].includes(storageCapacity) && storageCapacity % 3600 !== 0) { - throw new Error('storageCapacity must be 1,200, 2,400, 3,600, or a multiple of 3,600'); + throw new Error(`storageCapacity must be 1,200, 2,400, 3,600, or a multiple of 3,600 for SCRATCH_1 deployment type, got ${storageCapacity}.`); } - } else { + } + + if ( + deploymentType === LustreDeploymentType.PERSISTENT_2 + || deploymentType === LustreDeploymentType.SCRATCH_2 + ) { if (![1200, 2400].includes(storageCapacity) && storageCapacity % 2400 !== 0) { - throw new Error('storageCapacity must be 1,200, 2,400, or a multiple of 2,400'); + throw new Error(`storageCapacity must be 1,200, 2,400, or a multiple of 2,400 for SCRATCH_2 and PERSISTENT_2 deployment types, got ${storageCapacity}`); + } + } + + if (deploymentType === LustreDeploymentType.PERSISTENT_1) { + if (storageType === StorageType.HDD) { + if (perUnitStorageThroughput === 12 && storageCapacity % 6000 !== 0) { + throw new Error(`storageCapacity must be a multiple of 6,000 for PERSISTENT_1 HDD storage with 12 MB/s/TiB throughput, got ${storageCapacity}`); + } + if (perUnitStorageThroughput === 40 && storageCapacity % 1800 !== 0) { + throw new Error(`storageCapacity must be a multiple of 1,800 for PERSISTENT_1 HDD storage with 40 MB/s/TiB throughput, got ${storageCapacity}`); + } + } else { + if (![1200, 2400].includes(storageCapacity) && storageCapacity % 2400 !== 0) { + throw new Error(`storageCapacity must be 1,200, 2,400, or a multiple of 2,400 for PERSISTENT_1 SSD storage, got ${storageCapacity}`); + } } } } diff --git a/packages/aws-cdk-lib/aws-fsx/test/lustre-file-system.test.ts b/packages/aws-cdk-lib/aws-fsx/test/lustre-file-system.test.ts index 00aeaf10a2d6d..a0decddad2880 100644 --- a/packages/aws-cdk-lib/aws-fsx/test/lustre-file-system.test.ts +++ b/packages/aws-cdk-lib/aws-fsx/test/lustre-file-system.test.ts @@ -3,7 +3,18 @@ import { Template } from '../../assertions'; import { ISubnet, Port, SecurityGroup, Subnet, Vpc } from '../../aws-ec2'; import { Key } from '../../aws-kms'; import { Aws, Duration, Stack, Token } from '../../core'; -import { LustreConfiguration, LustreDeploymentType, LustreAutoImportPolicy, LustreFileSystem, LustreMaintenanceTime, Weekday, LustreDataCompressionType, DailyAutomaticBackupStartTime } from '../lib'; +import { + LustreConfiguration, + LustreDeploymentType, + LustreAutoImportPolicy, + LustreFileSystem, + LustreMaintenanceTime, + Weekday, + LustreDataCompressionType, + DailyAutomaticBackupStartTime, + StorageType, + DriveCacheType, +} from '../lib'; describe('FSx for Lustre File System', () => { let lustreConfiguration: LustreConfiguration; @@ -502,12 +513,12 @@ describe('FSx for Lustre File System', () => { }); }); - describe('perUnitStorageThroughput', () => { + describe('perUnitStorageThroughput_PERSISTENT_1', () => { test.each([ 50, 100, 200, - ])('valid perUnitStorageThroughput of %d', (throughput: number) => { + ])('valid perUnitStorageThroughput of %d for SSD storage', (throughput: number) => { lustreConfiguration = { deploymentType: LustreDeploymentType.PERSISTENT_1, perUnitStorageThroughput: throughput, @@ -534,7 +545,7 @@ describe('FSx for Lustre File System', () => { 250, 500, 1000, - ])('invalid perUnitStorageThroughput', (invalidValue: number) => { + ])('invalid perUnitStorageThroughput for SSD storage', (invalidValue: number) => { lustreConfiguration = { deploymentType: LustreDeploymentType.PERSISTENT_1, perUnitStorageThroughput: invalidValue, @@ -547,7 +558,48 @@ describe('FSx for Lustre File System', () => { vpc, vpcSubnet, }); - }).toThrowError('perUnitStorageThroughput must be 50, 100, or 200 MB/s/TiB for PERSISTENT_1 deployment type, got: ' + invalidValue); + }).toThrowError('perUnitStorageThroughput must be 50, 100, or 200 MB/s/TiB for PERSISTENT_1 SSD storage, got: ' + invalidValue); + }); + + test.each([12, 40])('valid perUnitStorageThroughput of %d for HDD storage', (validValue: number) => { + lustreConfiguration = { + deploymentType: LustreDeploymentType.PERSISTENT_1, + perUnitStorageThroughput: validValue, + }; + storageCapacity = 18000; + + new LustreFileSystem(stack, 'FsxFileSystem', { + lustreConfiguration, + storageCapacityGiB: storageCapacity, + vpc, + vpcSubnet, + storageType: StorageType.HDD, + }); + + Template.fromStack(stack).hasResourceProperties('AWS::FSx::FileSystem', { + LustreConfiguration: { + DeploymentType: LustreDeploymentType.PERSISTENT_1, + PerUnitStorageThroughput: validValue, + }, + StorageType: StorageType.HDD, + }); + }); + + test.each([1, 50, 100, 125, 200, 250, 500, 1000])('invalid perUnitStorageThroughput of %d for HDD storage', (invalidValue: number) => { + lustreConfiguration = { + deploymentType: LustreDeploymentType.PERSISTENT_1, + perUnitStorageThroughput: invalidValue, + }; + + expect(() => { + new LustreFileSystem(stack, 'FsxFileSystem', { + lustreConfiguration, + storageCapacityGiB: storageCapacity, + vpc, + vpcSubnet, + storageType: StorageType.HDD, + }); + }).toThrow('perUnitStorageThroughput must be 12 or 40 MB/s/TiB for PERSISTENT_1 HDD storage, got: ' + invalidValue); }); test('setting perUnitStorageThroughput on wrong deploymentType', () => { @@ -704,6 +756,69 @@ describe('FSx for Lustre File System', () => { }); }).toThrowError(/storageCapacity must be 1,200, 2,400, 3,600, or a multiple of 3,600/); }); + + test.each([ + [6000, 12], + [12000, 12], + [1800, 40], + [3600, 40], + ])('proper multiple for storage capacity using %d with PERSISTENT_1 HDD', (validValue: number, throughput: number) => { + lustreConfiguration = { + deploymentType: LustreDeploymentType.PERSISTENT_1, + perUnitStorageThroughput: throughput, + }; + + new LustreFileSystem(stack, 'FsxFileSystem', { + lustreConfiguration, + storageCapacityGiB: validValue, + vpc, + vpcSubnet, + storageType: StorageType.HDD, + }); + + Template.fromStack(stack).hasResourceProperties('AWS::FSx::FileSystem', { + LustreConfiguration: { + DeploymentType: LustreDeploymentType.PERSISTENT_1, + PerUnitStorageThroughput: throughput, + }, + StorageCapacity: validValue, + StorageType: StorageType.HDD, + }); + }); + + test.each([1, 6001])('invalid value of %d for storage capacity with PERSISTENT_1 HDD with 12 MB/s/TiB throughput', (invalidValue: number) => { + lustreConfiguration = { + deploymentType: LustreDeploymentType.PERSISTENT_1, + perUnitStorageThroughput: 12, + }; + + expect(() => { + new LustreFileSystem(stack, 'FsxFileSystem', { + lustreConfiguration, + storageCapacityGiB: invalidValue, + vpc, + vpcSubnet, + storageType: StorageType.HDD, + }); + }).toThrow('storageCapacity must be a multiple of 6,000 for PERSISTENT_1 HDD storage with 12 MB/s/TiB throughput'); + }); + + test.each([1, 1801])('invalid value of %d for storage capacity with PERSISTENT_1 HDD with 40 MB/s/TiB throughput', (invalidValue: number) => { + lustreConfiguration = { + deploymentType: LustreDeploymentType.PERSISTENT_1, + perUnitStorageThroughput: 40, + }; + + expect(() => { + new LustreFileSystem(stack, 'FsxFileSystem', { + lustreConfiguration, + storageCapacityGiB: invalidValue, + vpc, + vpcSubnet, + storageType: StorageType.HDD, + }); + }).toThrow('storageCapacity must be a multiple of 1,800 for PERSISTENT_1 HDD storage with 40 MB/s/TiB throughput'); + }); }); describe('automaticBackupRetention', () => { @@ -794,6 +909,84 @@ describe('FSx for Lustre File System', () => { }); }).toThrow('automaticBackupRetention period must be set a non-zero day when dailyAutomaticBackupStartTime is set'); }); + + test.each([ + LustreDeploymentType.PERSISTENT_2, + LustreDeploymentType.SCRATCH_1, + LustreDeploymentType.SCRATCH_2, + ])('HDD storage type is not supported for %s', (deploymentType: LustreDeploymentType) => { + lustreConfiguration = { + deploymentType, + }; + + expect(() => { + new LustreFileSystem(stack, 'FsxFileSystem', { + lustreConfiguration, + storageCapacityGiB: storageCapacity, + vpc, + vpcSubnet, + storageType: StorageType.HDD, + }); + }).toThrow(`Storage type HDD is only supported for PERSISTENT_1 deployment type, got: ${deploymentType}`); + }); + + test.each([{ + deploymentType: LustreDeploymentType.PERSISTENT_1, + storageType: StorageType.SSD, + driveCacheType: DriveCacheType.READ, + }, + { + deploymentType: LustreDeploymentType.PERSISTENT_1, + storageType: StorageType.SSD, + driveCacheType: DriveCacheType.NONE, + }, + { + deploymentType: LustreDeploymentType.PERSISTENT_2, + storageType: StorageType.SSD, + driveCacheType: DriveCacheType.READ, + }, + { + deploymentType: LustreDeploymentType.PERSISTENT_2, + storageType: StorageType.SSD, + driveCacheType: DriveCacheType.NONE, + }])('throw error for invalid drive cache type', (props) => { + lustreConfiguration = { + deploymentType: props.deploymentType, + driveCacheType: props.driveCacheType, + }; + + expect(() => { + new LustreFileSystem(stack, 'FsxFileSystem', { + lustreConfiguration, + storageCapacityGiB: storageCapacity, + vpc, + vpcSubnet, + storageType: props.storageType, + }); + }).toThrow(`driveCacheType can only be set for PERSISTENT_1 HDD storage type, got: ${props.deploymentType} and ${props.storageType}`); + }); + }); + }); + + test.each([StorageType.SSD, StorageType.HDD])('specify storage type %s', (storageType: StorageType) => { + lustreConfiguration = { + deploymentType: LustreDeploymentType.PERSISTENT_1, + }; + + new LustreFileSystem(stack, 'FsxFileSystem', { + lustreConfiguration, + storageCapacityGiB: storageCapacity, + vpc, + vpcSubnet, + storageType, + }); + + Template.fromStack(stack).hasResourceProperties('AWS::FSx::FileSystem', { + LustreConfiguration: { + DeploymentType: LustreDeploymentType.PERSISTENT_1, + ...( storageType === StorageType.HDD ? { DriveCacheType: 'NONE' } : undefined ), + }, + StorageType: storageType, }); }); @@ -834,4 +1027,4 @@ describe('FSx for Lustre File System', () => { }, }); }); -}); \ No newline at end of file +});