2016-05-27 2 views
5

Мне удалось создать ведро на амазонке S3, используя этот link.Как создать папку в ведро Amazon S3 с использованием terraform

Я использовал следующий код для создания ведра:

resource "aws_s3_bucket" "b" { 
    bucket = "my_tf_test_bucket" 
    acl = "private" 
} 

Теперь я хотел создать папки внутри ведра, скажу Folder1.

Я нашел link для создания объекта S3. Но у этого есть обязательный параметр source. Я не уверен, что это за значение, поскольку я намерен создать папку внутри ведра S3.

ответ

6

S3 не поддерживает папки. Объекты могут иметь имена префикса с косой чертой, которые выглядят как папки, но это только часть имени объекта. Таким образом, нет возможности создать папку в terraform или что-нибудь еще, потому что в S3 нет такой вещи, как папка.

http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingMetadata.html http://docs.aws.amazon.com/AWSImportExport/latest/DG/ManipulatingS3KeyNames.html

Если вы хотите сделать вид, вы можете создать объект нулевых байт в ведре с именем «Folder1 /», но это не обязательно. Вы можете просто создавать объекты с такими именами ключей, как «Folder1/File1», и он будет работать.

+0

Спасибо за информацию. Но мое сомнение заключается в том, как создать объект как объект с нулевым байтом. Каким должен быть источник? –

+0

Вы знаете свой собственный вариант использования, но дело в том, что ведра S3 полностью плоские, нет таких вещей, как папки S3, и если вы хотите поместить объект под названием Folder1/File1 в S3, вам не нужно «создавать» Сначала «Folder1». Если вы по-прежнему действительно хотите по какой-то причине, просто создайте нулевой байтовый файл в вашей локальной файловой системе и укажите terraform на это как источник. –

+0

Да S3 не поддерживает реальные папки, но вопрос заключается в том, как создать то, что S3 рассмотрит объект, который можно рассматривать как папку. Ответ на тот вопрос, который должен быть принят, приведен ниже. – Stephen

8

Для запуска терраформировать на Mac или Linux, следующий будет делать то, что вы хотите

resource "aws_s3_bucket_object" "folder1" { 
    bucket = "${aws_s3_bucket.b.id}" 
    acl = "private" 
    key = "Folder1/" 
    source = "/dev/null" 
} 

Если вы на окнах вы можете использовать пустой файл.

В то время как люди будут педантичными в отношении того, что s3 не имеет папок, существует ряд операций, в которых наличие объекта-заполнителя для префикса ключа (иначе называемого папкой) облегчает жизнь. Например, как s3 sync.

1

старый ответ, но если вы укажете ключ с папкой (что еще не существует) Terraform будет автоматически создать папку для вас

terraform { 
    backend "s3" { 
    bucket = "mysql-staging" 
    key = "rds-mysql-state/terraform.tfstate" 
    region = "us-west-2" 
    encrypt = true 
    } 
} 
Смежные вопросы