2016-05-27 9 views
5

Ich konnte einen Eimer in einem Amazon S3 mit dieser link erstellen.So erstellen Sie einen Ordner in einem Amazon S3-Eimer mit Terraform

ich den folgenden Code verwendet, um einen Eimer zu erstellen:

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

Nun wollte ich Ordner im Eimer, sagt Folder1 erstellen.

Ich habe die link zum Erstellen eines S3-Objekts gefunden. Aber dies hat einen obligatorischen Parameter source. Ich bin nicht sicher, was dieser Wert haben muss, da ich einen Ordner im S3-Bucket erstellen möchte.

Antwort

6

S3 unterstützt keine Ordner. Objekte können Präfixnamen mit Schrägstrichen haben, die wie Ordner aussehen, aber das ist nur ein Teil des Objektnamens. Es gibt also keine Möglichkeit, einen Ordner in Terraform oder irgendetwas anderes zu erstellen, da es in S3 keinen Ordner gibt.

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

Wenn Sie so zu tun mögen, können Sie ein Null-Byte-Objekt in dem heißen Stein namens „Folder1 /“ erstellen, aber das ist nicht erforderlich. Sie können einfach Objekte mit Schlüsselnamen wie "Folder1/File1" erstellen und es wird funktionieren.

+0

Vielen Dank für die Informationen erstellen. Aber mein Zweifel ist, wie man ein Objekt so etwas wie ein Null-Byte-Objekt erstellt. Was sollte die Quelle sein? –

+0

Sie kennen Ihren eigenen Anwendungsfall, aber der Punkt ist, S3-Buckets sind völlig flach, es gibt keine S3-Ordner, und wenn Sie ein Objekt namens Ordner1/Datei1 in S3 einfügen möchten, müssen Sie nicht erstellen "Ordner1 zuerst. Wenn Sie trotzdem aus irgendeinem Grund wirklich wollen, erstellen Sie einfach eine Null-Byte-Datei in Ihrem lokalen Dateisystem und verweisen Sie terraform auf diese als Quelle. –

+0

Ja S3 unterstützt keine echten Ordner, aber die Frage ist, wie man erstellt, was S3 als ein Objekt betrachten würde, das als ein Ordner angesehen werden kann. Die Antwort für das, was akzeptiert werden sollte, ist unten. – Stephen

8

Für Terraforming auf Mac oder Linux ausgeführt wird, wird Folgendes tun, was Sie

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

möchten Wenn Sie auf Fenster sind, können Sie eine leere Datei verwenden.

Während Leute pedantisch über s3 sind, keine Ordner zu haben, gibt es eine Anzahl von Betrieben, in denen ein Objektplatzhalter für ein Schlüsselpräfix (anders ein Ordner genannt) das Leben einfacher macht. Wie zum Beispiel s3 sync.

1

alte Antwort, aber wenn Sie die Taste mit dem Ordner angeben (das noch nicht existiert) Terraforming wird der Ordner automatisch für Sie

terraform { 
    backend "s3" { 
    bucket = "mysql-staging" 
    key = "rds-mysql-state/terraform.tfstate" 
    region = "us-west-2" 
    encrypt = true 
    } 
} 
Verwandte Themen