2016-05-27 53 views
5

Sono stato in grado di creare un bucket in un amazon S3 utilizzando questo link.Come creare una cartella in un secchio S3 amazzone usando terraform

ho usato il seguente codice per creare un secchio:

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

Ora volevo creare cartelle all'interno del secchio, dire Folder1.

Ho trovato link per la creazione di un oggetto S3. Ma questo ha un parametro obbligatorio source. Non sono sicuro di cosa debba fare questo valore, poiché il mio intento è creare una cartella all'interno del bucket S3.

risposta

6

S3 non supporta le cartelle. Gli oggetti possono avere nomi di prefissi con barre che assomigliano a cartelle, ma è solo una parte del nome dell'oggetto. Quindi non c'è modo di creare una cartella in terraform o qualsiasi altra cosa, perché non esiste una cartella in S3.

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

Se si vuole far finta, è possibile creare un oggetto di zero byte nel secchio denominato "Folder1 /", ma che non è necessaria. Puoi semplicemente creare oggetti con nomi di chiavi come "Cartella1/File1" e funzionerà.

+0

Grazie per l'informazione. Ma il mio dubbio è come creare un oggetto qualcosa come un oggetto a byte zero. Quale dovrebbe essere la fonte? –

+0

Conosci il tuo caso d'uso, ma il punto è, i bucket S3 sono totalmente piatti, non esistono cartelle S3 e se vuoi mettere un oggetto chiamato Folder1/File1 in S3, non devi "creare" "Prima cartella1. Se vuoi ancora per qualche ragione, crea un file a byte zero sul tuo filesystem locale e punta a terra come sorgente. –

+0

sì S3 non supporta le cartelle reali ma la domanda è come creare ciò che S3 considererebbe un oggetto che può essere visto come una cartella. La risposta per ciò che dovrebbe essere accettato è sotto. – Stephen

8

Per l'esecuzione Terraform su Mac o Linux, il seguente farà quello che vuoi

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

Se siete su Windows è possibile utilizzare un file vuoto.

Mentre la gente sarà saccente su s3 che non ha cartelle, ci sono un certo numero di operazioni in cui avere un segnaposto per un prefisso chiave (altrimenti chiamato cartella) rende la vita più facile. Ad esempio, sincronizzazione S3.

1

risposta vecchia, ma se si specifica la chiave con la cartella (che non esiste ancora) Terraform creerà automaticamente la cartella per voi

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