You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用CDK在亚马逊S3桶中创建Amplify上传所需的文件夹

答案

完全可以通过CDK的相关模块实现该需求。
S3本身没有实体文件夹的概念,所有目录结构本质是对象的Key前缀,你要的三个Amplify规范目录,只需要在CDK中生成对应前缀的零字节占位对象即可,S3控制台会自动将这些前缀识别为文件夹。

实现步骤

你需要先引入CDK官方提供的s3-deployment模块,该模块用于向S3桶批量上传资源,无需额外第三方依赖。以下是完整代码示例:

import { BucketDeployment, Source } from 'aws-cdk-lib/aws-s3-deployment';
import * as cdk from 'aws-cdk-lib';
import * as s3 from 'aws-cdk-lib/aws-s3';

// 你原有桶的创建逻辑保持不变
const test_bucket = new s3.Bucket(this, 'assets-bucket-id', {
  bucketName: 'assets-bucket-name',
  cors: [
    {
      allowedHeaders: ["*"],
      allowedMethods: [
        s3.HttpMethods.POST,
        s3.HttpMethods.PUT,
        s3.HttpMethods.GET,
      ],
      allowedOrigins: ["*"],
      exposedHeaders: [
        'x-amz-server-side-encryption',
        'x-amz-request-id',
        'x-amz-id-2',
        'ETag'
      ],
    }
  ],
});

// 新增:创建Amplify要求的三个目录占位符
new BucketDeployment(this, 'AmplifyStorageFolders', {
  destinationBucket: test_bucket,
  // 上传三个零字节的占位文件,对应三个目录前缀
  sources: [
    Source.data('public/.keep', ''),
    Source.data('protected/.keep', ''),
    Source.data('private/.keep', '')
  ],
  // 可选配置:设置占位文件缓存策略,避免不必要的重复部署
  cacheControl: [cdk.aws_s3_deployment.CacheControl.maxAge(cdk.Duration.days(365))]
});

注意事项

  • 代码中的.keep是无实际业务作用的占位文件,你后续可以手动删除,只要桶内存在对应前缀的对象,S3就会显示对应的目录,不会影响Amplify的正常使用。
  • 如果你的业务场景中Amplify客户端会自动上传对应前缀的文件,也可以不用主动创建占位目录,只要桶的权限配置符合Amplify的要求即可,客户端首次上传时会自动生成对应前缀。
  • 如果你需要同时配置Cognito身份池对这三个目录的访问权限,也可以直接在CDK中编写IAM策略绑定到对应身份角色,无需手动操作控制台。

内容的提问来源于stack exchange,提问作者unacorn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 04:06:03