【问题标题】:Use Terraform to create folder and subfolder in s3 bucket使用 Terraform 在 s3 存储桶中创建文件夹和子文件夹
【发布时间】:2020-10-28 06:51:27
【问题描述】:

如何使用 Terraform 在 S3 存储桶中创建文件夹和子文件夹?

这就是我当前代码的样子。

resource "aws_s3_bucket_object" "Fruits" {
  bucket = "${aws_s3_bucket.s3_bucket_name.id}"
  key    = "${var.folder_fruits}/"
  content_type = "application/x-directory"
}

variable "folder_fruits" {
  type = string
}

我需要一个像 fruits/apples 这样的文件夹结构

【问题讨论】:

    标签: amazon-s3 terraform


    【解决方案1】:

    S3 中的文件夹只是以/ 字符结尾的对象。您应该能够使用以下 Terraform 代码创建 fruits/apples/ 文件夹:

    variable "folder_fruits" {
      type = string
    }
    
    resource "aws_s3_bucket_object" "fruits" {
      bucket       = "${aws_s3_bucket.s3_bucket_name.id}"
      key          = "${var.folder_fruits}/"
      content_type = "application/x-directory"
    }
    
    resource "aws_s3_bucket_object" "apples" {
      bucket       = "${aws_s3_bucket.s3_bucket_name.id}"
      key          = "${var.folder_fruits}/apples/"
      content_type = "application/x-directory"
    }
    

    如果没有fruits 文件夹,这很可能也可以工作。

    欲了解更多信息,请参阅https://docs.aws.amazon.com/AmazonS3/latest/user-guide/using-folders.html

    【讨论】:

    • 顺便说一下,上传对象之前,您不需要在存储桶中创建文件夹。在这方面,S3 的行为不像文件系统。在幕后,对象存储在“平面结构”中。
    • 这是一个要求,因为我们还必须区分其他文件。感谢您的回复。
    • 您发布的上述 Terraform 代码帮助我解决了我的问题。谢谢!
    【解决方案2】:

    您可以创建一个带有以“/”结尾的前缀的空对象。存储桶中的所有对象都处于同一层次结构级别,但 AWS 将其显示为使用“/”作为分隔符的文件夹。

        resource "aws_s3_bucket_object" "fruits" {
        bucket = "your-bucket"
        key    = "fruits/"
        source = "/dev/null"
    
        resource "aws_s3_bucket_object" "apples" {
        bucket = "your-bucket"
        key    = "fruits/apples/"
        source = "/dev/null"
    }
    

    它会创建以下类似结构的文件夹:

    s3://your-bucket/fruits/
    s3://your-bucket/fruits/apples/
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-02
      • 2016-09-26
      • 2016-08-23
      • 1970-01-01
      • 2018-04-19
      • 2016-12-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多