如何通过AWS CloudFormation在S3存储桶中创建子文件夹?
在CloudFormation中为S3桶创建子文件夹的实现方法
首先要明确:AWS S3没有真正的文件夹结构,所谓的“子文件夹”是通过带/后缀的空对象模拟出来的。CloudFormation无法直接创建“文件夹”,但可以通过以下两种方式实现需求:
方案一:通过CloudFormation创建空对象模拟文件夹
直接在现有模板中添加AWS::S3::Object资源,创建以/结尾的空对象,S3控制台会将其识别为文件夹。
修改后的完整模板示例:
Resources: myS3Bucket: Type: AWS::S3::Bucket DeletionPolicy: Retain Properties: BucketName : Test1 PublicAccessBlockConfiguration: BlockPublicAcls: true IgnorePublicAcls: true BlockPublicPolicy: true RestrictPublicBuckets: true # 模拟创建subfolder1 Subfolder1: Type: AWS::S3::Object Properties: Bucket: !Ref myS3Bucket Key: subfolder1/ ContentLength: 0 # 模拟创建subfolder2 Subfolder2: Type: AWS::S3::Object Properties: Bucket: !Ref myS3Bucket Key: subfolder2/ ContentLength: 0
说明:
Key字段以/结尾是关键,这是S3识别为“文件夹”的标志ContentLength: 0表示创建的是空对象,不会占用额外存储
方案二:在CI/CD流水线中用AWS CLI创建
如果CloudFormation模板中不想添加额外资源,可以在CI/CD流水线的后续步骤中,通过AWS CLI命令创建这些模拟文件夹的空对象。
示例命令:
# 创建subfolder1 aws s3api put-object --bucket Test1 --key subfolder1/ # 创建subfolder2 aws s3api put-object --bucket Test1 --key subfolder2/
注意事项:
- 执行命令的CI/CD角色需要具备
S3:PutObject权限 - 如果桶名是动态生成的(而非硬编码Test1),可以从CloudFormation输出中获取桶名传入命令
内容的提问来源于stack exchange,提问作者Manika
相关产品推荐
相关产品推荐

