--- AWSTemplateFormatVersion: 2010-09-09 Description: Setting up EFS File System and Target mount points for each subnet Parameters: EncryptedBoolean: AllowedValues: - True - False Default: True Description: Create an encrypted Amazon EFS file system. Type: String Cmk: Description: An existing AWS KMS Customer Master Key (CMK) to encrypt file system Type: String NumberOfSubnets: AllowedValues: - 1 - 2 - 3 Default: 2 Description: Number of subnets. This must match your selections in the list of Subnets below. Type: String SecurityGroup: Description: Select the Amazon EFS security group. Type: AWS::EC2::SecurityGroup::Id Subnet: Description: Select existing subnets. Type: List ProjectName: AllowedPattern: ^([a-zA-Z0-9]*)$ Default: App Description: The Moodle Project Name Type: String Conditions: NumberOfSubnets1: !Equals [ 1, !Ref NumberOfSubnets ] NumberOfSubnets2: !Equals [ 2, !Ref NumberOfSubnets ] NumberOfSubnets3: !Equals [ 3, !Ref NumberOfSubnets ] Subnet0: !Or - !Condition NumberOfSubnets1 - !Condition NumberOfSubnets2 - !Condition NumberOfSubnets3 Subnet1: !Or - !Condition NumberOfSubnets2 - !Condition NumberOfSubnets3 Subnet2: !Condition NumberOfSubnets3 UseAWS-ManagedCMK: !Equals ['', !Ref Cmk] Resources: ElasticFileSystem: Type: AWS::EFS::FileSystem Properties: Encrypted: !Ref EncryptedBoolean KmsKeyId: !If [ UseAWS-ManagedCMK, !Ref 'AWS::NoValue', !Ref Cmk ] FileSystemTags: - Key: Name Value: !Join [ '-', [ !Ref ProjectName, 'FileSystem'] ] PerformanceMode: generalPurpose ThroughputMode: elastic ElasticFileSystemMountTarget0: Condition: Subnet0 Type: AWS::EFS::MountTarget Properties: FileSystemId: !Ref ElasticFileSystem SecurityGroups: - !Ref SecurityGroup SubnetId: !Select [ 0, !Ref Subnet ] ElasticFileSystemMountTarget1: Condition: Subnet1 Type: AWS::EFS::MountTarget Properties: FileSystemId: !Ref ElasticFileSystem SecurityGroups: - !Ref SecurityGroup SubnetId: !Select [ 1, !Ref Subnet ] ElasticFileSystemMountTarget2: Condition: Subnet2 Type: AWS::EFS::MountTarget Properties: FileSystemId: !Ref ElasticFileSystem SecurityGroups: - !Ref SecurityGroup SubnetId: !Select [ 2, !Ref Subnet ] ElasticFileSystemParam: Type: AWS::SSM::Parameter Properties: Name: !Join [ '', [ '/Moodle/',!Ref ProjectName, '/SharedFile/ElasticFileSystem' ] ] Type: String Value: !Ref ElasticFileSystem Description: SSM Parameter for Moodle EFS File System Id Outputs: ElasticFileSystem: Value: !Ref ElasticFileSystem ElasticFileSystemDnsName: Description: DNS name for the Amazon EFS file system. Value: !Join [ '.', [ !Ref ElasticFileSystem, 'efs', !Ref 'AWS::Region', 'amazonaws', 'com' ] ]