Poniamo di aver creato un bucket S3 Glacier da console AWS e di avergli associato un utente IAM con policy di accesso pieno a S3 Glacier. Per questo utente dovremo avere una chiave key ID e una chiave secret.
Per caricare file archivio sul bucket, possiamo usare una libreria Python: boto. Questa libreria esiste in versione per Python2 e per Python3. Qui useremo quella relativa a Python3: https://github.com/boto/boto3
Sul sistema dovremmo avere, ovviamente, Python3 e useremo python3-pip (pip3).
pip3 install boto3
dentro .aws/config inseriamo le credenziali dell’utente AWS IAM e la regione a cui abbiamo associato il bucket.
[default]
aws_access_key_id= XXX
aws_secret_access_key=XXX
region=eu-west-1
Apriamo poi la shell python3 e usiamo:
import boto3
client = boto3.client(‘glacier’)
response = client.list_vaults()
print (response)
Questo stampa l’elenco dei vaults presenti, sotto forma di json. All’interno del Json troviamo una variabile VaultName, che è quella che dovremo usare per caricarci il file. In questo esempio vogliamo caricare il file “Immagini/foto-2016.zip” nel vault “Personale”.
file = open(‘Immagini/foto-2016.zip’,’rb’)
archive = client.upload_archive(vaultName=’Personale’,body=filearchive,Description=”NOMEFILE.ZIP”
print(archive)
Dovrebbe rispondere con la posizione dell’archivio, un checksum e l’id dell’archivio, che si può usare per recuperarlo. L’operazione è sincrona, quindi non avrete il prompt della shell finché non sarà terminata. Se non dà errori, il nostro file dovrebbe essere stato caricato su Glacier, anche se può volerci fino a qualche ora prima che sia visibile da console.
NOTA: direttamente su Glacier si possono uploadare solo file fino a 4GB. Se serve un file più grande, bisogna caricarlo prima su S3 come multivolume, e poi spostarlo su Glacier.
NOTA: Su S3 Glacier non viene memorizzato il nome del file! Bisogna memorizzare nel client l’ID dell’archivio per poterlo richiamare usando quello. Per questo nella descrizione archiveDescription va indicato di cosa si tratta.