jsonamazon-web-servicesaws-cloudformationamazon-efsmount-point

How to know how many Mount targets to create by Cloudformation


I create by cloudformation an EFS in a VPC, this VPC contains few EC2 instances.

I need to create as well mount targets for each subnet.

This cloudformation template can be executed in different AWS accounts. How to know how meny Mount targets resources to create?

I can have a vpc in account 1 with 3 subnets, another vpc in account 2 with 2 subnets...

How to make the template generic so that it's going according to every account environment ?

 "FileSystem" : {
       "Type" : "AWS::EFS::FileSystem",
       "Properties" : {
         "FileSystemTags" : [
           {
             "Key" : "Name",
             "Value" : "FileSystem"
           }
         ]
       }
     },

     "MountTarget1": {
       "Type": "AWS::EFS::MountTarget",
       "Properties": {
         "FileSystemId": { "Ref": "FileSystem" },
         "SubnetId": { "Ref": "Subnet1" },
         "SecurityGroups": [ { "Ref": "MountTargetSecurityGroup" } ]
       }
     },

     "MountTarget2": {
       "Type": "AWS::EFS::MountTarget",
       "Properties": {
         "FileSystemId": { "Ref": "FileSystem" },
         "SubnetId": { "Ref": "Subnet2" },
         "SecurityGroups": [ { "Ref": "MountTargetSecurityGroup" } ]
       }
     },

Solution

  • As I understand, you want to be able to re-use this same template across accounts and create the appropriate number of MountTargets based on the number of subnets required by an account.

    There are many variables and conditions that would apply depending on the number of subnets (ACL, Routetables, etc). You could perhaps accomplish it with a large number of conditions and parameters, but the template would get quite messy. Although that's not an elegant solution.

    The better approach would be creating your template using Troposphere. Here's an example for EFS to get you started. https://github.com/cloudtools/troposphere/blob/master/examples/EFS.py