如何通过AWS CloudFormation在EFS中创建挂载前可用的初始文件夹
问题解答
可以实现该需求,原生CloudFormation没有直接在EFS根目录批量创建文件夹的参数,但可以通过两种成熟方案实现:
方案1:扩展你当前使用的EFS访问点(更简单,推荐带权限隔离的场景)
你模板中已经用到的AWS::EFS::AccessPoint资源本身就具备自动创建目录的能力:当你配置RootDirectory.Path和CreationInfo参数时,CloudFormation创建访问点的同时会自动在EFS中创建对应路径的文件夹,并且按配置设置所有者和权限。
如果需要创建多个初始文件夹,只需要新增多个AWS::EFS::AccessPoint资源,每个资源对应一个你要创建的目录路径即可。
你现有代码的修正点:
你当前模板中PosixUser的Uid和Gid参数需要填写数字ID,不能直接填用户名ec2-user,ec2-user的默认UID/GID为1000,对应修改为:
"PosixUser": { "Uid": "1000", "Gid": "1000" }
多文件夹创建示例:
比如你需要额外创建/ap2目录,只需要在Resources下新增第二个访问点资源:
"AccessPointResource2": { "Type": "AWS::EFS::AccessPoint", "Properties": { "FileSystemId": { "Ref": "FileSystem" }, "PosixUser": { "Uid": "1000", "Gid": "1000" }, "RootDirectory": { "CreationInfo": { "OwnerGid": "0", "OwnerUid": "0", "Permissions": "0744" }, "Path": "/ap2" } } }
方案2:Lambda-backed自定义资源(更灵活,适合无访问点绑定需求的场景)
如果你不需要创建访问点,只是要在EFS根目录下创建任意多个文件夹,可以通过CloudFormation自定义资源实现:
- 编写Lambda函数,配置VPC权限可以访问EFS,函数逻辑为挂载EFS后执行mkdir命令创建所有需要的初始文件夹
- 在CloudFormation模板中添加该Lambda作为自定义资源,设置依赖EFS、EFS挂载目标创建完成后再执行
- 该方案还支持额外的初始化操作,比如写入初始配置文件、修改全局权限等。
内容的提问来源于stack exchange,提问作者Chamila Wijayarathna
相关产品推荐
相关产品推荐

