如何使用 aws cdk 创建 s3 子目录?

how do you create s3 subdirectories using aws cdk?

如果我想创建一个布局如下的桶:

bucket/
├─ subdir-1/
│  ├─ subsubdir-1/
├─ subdir-2/
├─ subdir-3/

我如何使用 cdk 执行此操作?甚至是 yml cf 模板?

如评论中所述,您不需要创建directories/template。当您使用 SDK/CLI 上传对象时,它会自动创建与上传对象时使用的密钥匹配的 folder/structure。您可以通过 CLI/SDK 创建空目录,但我认为 aws-cdk 不会这样做,因为它不应该管理 S3 的内容。

如果您真的想为存储桶维护特定布局,您可以使用存储桶策略在 SDK/CLI 将您的对象放入 S3 时仅允许特定目录。此政策可以添加到 aws-cdk(参考:aws-cdk-s3-docs-addPolicy)。策略示例如下。

{
  "Sid": "Layout",
  "Effect": "Deny",
  "Principal": "*",
  "Action": "s3:PutObject*",
  "NotResource": [
    "arn:aws:s3:::{BUCKET_NAME}/subdir-1/*",
    "arn:aws:s3:::{BUCKET_NAME}/subdir-1/subdir-1/*",
    "arn:aws:s3:::{BUCKET_NAME}/subdir-2/*",
    "arn:aws:s3:::{BUCKET_NAME}/subdir-3/*",
  ]
}

有关 s3 存储桶策略的更多详细信息:https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-bucket-policies.html