2016-05-27 3 views
5

J'ai été en mesure de créer un seau dans un Amazon S3 en utilisant ce link.Comment créer un dossier dans un seau amazon S3 en utilisant terraform

J'ai utilisé le code suivant pour créer un seau:

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

Maintenant, je voulais créer des dossiers dans le seau, dire Folder1.

J'ai trouvé le link pour créer un objet S3. Mais ceci a un paramètre obligatoire source. Je ne suis pas sûr de ce que cette valeur doit avoir, puisque mon intention est de créer un dossier à l'intérieur du seau S3.

Répondre

6

S3 ne prend pas en charge les dossiers. Les objets peuvent avoir des noms de préfixes avec des barres obliques qui ressemblent à des dossiers, mais ce n'est qu'une partie du nom de l'objet. Il n'y a donc aucun moyen de créer un dossier dans terraform ou quoi que ce soit d'autre, parce qu'il n'y a pas de dossier dans S3.

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

Si vous voulez faire semblant, vous pouvez créer un objet zéro octet dans le seau nommé « Dossier1/» mais ce n'est pas nécessaire. Vous pouvez simplement créer des objets avec des noms de clés comme "Folder1/File1" et cela fonctionnera.

+0

Merci pour l'information. Mais mon doute est de savoir comment créer un objet quelque chose comme un objet de zéro octet. Quelle devrait être la source? –

+0

Vous connaissez votre propre cas d'utilisation, mais le fait est que les compartiments S3 sont totalement plats, il n'y a pas de dossiers S3, et si vous voulez placer un objet appelé Dossier1/Fichier1 dans S3, vous n'avez pas besoin de créer "Dossier1 en premier. Si vous voulez vraiment, pour une raison quelconque, créer un fichier de zéro octet sur votre système de fichiers local et pointer la terraform comme source. –

+0

oui S3 ne supporte pas les dossiers réels mais la question est de savoir comment créer ce que S3 considérerait comme un objet pouvant être vu comme un dossier. La réponse à ce qui devrait être accepté est ci-dessous. – Stephen

8

Pour exécuter terraform sur Mac ou Linux, ce qui suit va faire ce que vous voulez

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

Si vous êtes sur Windows, vous pouvez utiliser un fichier vide.

Alors que les gens seront pédantesque à propos de s3 n'ayant pas de dossiers, il existe un certain nombre d'opérations où avoir un espace réservé d'objet pour un préfixe de clé (autrement appelé un dossier) facilite la vie. Comme s3 sync par exemple.

1

ancienne réponse, mais si vous spécifiez la clé avec le dossier (qui n'existe pas encore) terraform créerez le dossier automatiquement pour vous

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