Home» Blog» Amazon AWS – Servizio S3 (Sviluppatori – objects)
Buckets S3

Dopo aver visto le caratteristiche generali che riguardano il Sevizio S3, aver accennato i passi da eseguire per l’autenticazione e analizzato come creare e gestire un bucket S3 adesso vedremo come gestire gli oggetti che possiamo memorizzare nel nostro ambiente S3. Come già detto in precedenti articoli il numero degli oggetti e il loro formato da poter memorizzare è praticamente illimitato con la sola restrizione che un oggetto singolo non può superare i 5TB di dimensione.

In questo articolo vedremo le caratteristiche che identificano un oggetto e le operazioni che possiamo eseguire su di esso una volta memorizzato nel nostro bucket, dato che questa guida specifica è stata scritta per gli sviluppatori le operazioni saranno spiegate con il supporto di esempi di programmazione (in questo caso PHP).

Object Key and Metadata: Ogni oggetto che memorizziamo dentro un bucket oltre ad avere una parte dati binari che sarebbe il contenuto vero è proprio dell’oggetto sia che sia un file di testo, un’immagine o un video, ha una chiave e un metadato, la chiave specifica il nome unico dell’oggetto in riferimento al bucket di memorizzazione mentre il metadato è rappresentato da una copia di nome=valore, ci sono metadati di sistema che vengono aggiornati automaticamente da amazon come la data di modifica o la dimensione dell’oggetto e ci possono essere dei metadati utente che possiamo personalizzare in base alle nostre esigenze es: backup_version=3.

Object Subresources: Un oggetto memorizzato su Amazon S3 può contenere degli oggetti di informazioni secondari per l’utilizzo con altre applicazioni, ad esempio è possibile memorizzare una sotto-risorsa ACL per la gestione delle autorizzazioni o una sotto-risorsa BitTorrent per controllare le informazioni quando vogliamo distribuire l’oggetto tramite questo protocollo.

Object Versioning: Questa funzione non è attivata di default quando creiamo un bucket, quindi le operazioni sulla memorizzazione dell’oggetto sono simili a quelle che facciamo su un semplice PC, se copiamo l’oggetto su un nome esistente questo sarà sovrascritto, se lo cancelliamo non lo avremo più disponibile nella nostra cartella, se però attiviamo questa feature le cose cambiamo, in quanto ogni operazione che viene fatta manterrà un numero di versione, quindi se io memorizzo ad esempio un’immagine chiamata “pluto.jpg” amazon memorizzerà il mio oggetto assegnandogli un numero di versione ad esempio (11111) , se subito dopo faccio un’altra richiesta di memorizzazione con “pluto.jpg” il nuovo oggetto avrà un nuovo numero di versione (22222) ma l’altro continuerà ad esistere, questo per salvaguardare la memorizzazione di un oggetto non valido e perdersi l’informazione precedente, la stessa cosa se eseguo l’operazione di cancellazione questa sarà eseguita solo sull’ultima versione e non su tutte. ( vedi disegno per chiarezza ).

Object Expiration: Questa opzione permette di specificare una scadenza al proprio oggetto, in maniera tale che dopo un periodo di tempo stabilito l’oggetto venga cancellato in automatico dal sistema di amazon, molto utile per esempio per i files di log e anche per i backup incrementali che potrebbero occupare con il passar del tempo molto spazio, se vuoi sapere ulteriori informazioni su questa particolarità leggi l’articolo Object Expiration S3 per scadenza oggetto.

Operazione sull’oggetto: Le operazioni che si possono fare sugli oggetti S3 sono quelle classiche di creazione oggetto (upload), lettura (retrieve), copia e cancellazione.  Però ci sono delle particolarità: ad esempio se gestisco le versioni quando leggo l’oggetto posso specificare la versione che desidero, se l’oggetto è molto grande ne potrei leggere una sola parte, anche in fase di upload per grandi dimensioni si può utilizzare il “Multi Part Uploader”, l’operazione di copia avviene direttamente lato server di amazon quindi senza traffico andata e ritorno.

Codice di programmazione: Adesso passiamo agli esempi di codice, come già detto in precedenti articoli io uso SDK PHP, ma potete anche usare JAVA, .NET ed altro ancora.

Nel primo esempio riportato dalla documentazione ufficiale di amazon vediamo come leggere un oggetto, ricordarsi che si può leggere tutto o anche una sola parte di esso.

$s3 = new AmazonS3();

// Get object.
$response = $s3->get_object($bucket, $keyname);

// Get a range of bytes.
$response = $s3->get_object($bucket,$keyname,array('range'=> '0-10'));

// Save object to a file.
$response = $s3->get_object($bucket,$keyname,array('fileDownload'=> $filepath));

Quando si scarica un’oggetto si posso modificare anche gli header di risposta:

$response = $s3->get_object(
  $bucket,
  $keyname,
  array(
    'response' => array(
    'content-type' => 'text/plain',
    'content-language' => 'en-US',
    'content-disposition' => 'attachment; filename=testing.txt',
    'cache-control' => 'No-cache',
    'expires' => gmdate(DATE_RFC2822, strtotime('1 January 1980'))
  )
));

Qui vi riporto sempre dalla documentazione ufficiale l’esempio per leggere un oggetto memorizzato su S3 e trasferirlo ad un browser che ha eseguito la richiesta:

$s3 = new AmazonS3();

$response = $s3->get_object($bucket,$keyname);

if($response->isOK()) {
  header('Content-Type: ' . $response->header['content-type']);
  echo $response->body;
}

Qui invece vediamo un esempio di come fare l’upload dell’oggetto in una singola operazione, se invece siete interessati al metodo “Multi Part Uploader” leggete ( questo articolo ).

$s3 = new AmazonS3();

$response = $s3->create_object(
  $bucket,
  $keyname,
  array(
    'fileUpload' => $filePath,
    'acl' => AmazonS3::ACL_PUBLIC,
    'contentType' => 'text/plain',
    'storage' => AmazonS3::STORAGE_REDUCED,
    'headers' => array( // raw headers
      'Cache-Control' => 'max-age',
      'Content-Encoding' => 'gzip',
      'Content-Language' => 'en-US',
      'Expires' => 'Thu, 01 Dec 1994 16:00:00 GMT',
    ),
    'meta' => array(
      'param1' => 'value 1',
      'param2' => 'value 2'
    ))
);

Esempio di cancellazione oggetto, questa operazione può essere eseguita per un singolo oggetto o per un’elenco di oggetti differenti presenti dentro un array:

// Cancellazione singola
$s3 = new AmazonS3();
$response = $s3->delete_object($bucket, $keyname);

// Cancellazione con gestione versione
$s3 = new AmazonS3();
$response =
   $s3->delete_object($bucket, $keyname, array('versionId'=>$versionId));

// Cancellazione multipla
$s3 = new AmazonS3();
$response = $s3->delete_objects($bucket, array(
  'objects' => array(
    array('key' => $keyname1),
    array('key' => $keyname2)
  )
));
Autore:
Articoli:
57
Website:
http://startbyzero.com/
Nato a Roma nel 1968, appassionato di informatica da subito con il primo acquisto di un Sinclair ZX Spectrum, programmatore e sistemista su sistemi IBM iSeries, sviluppatore di procedure web con PHP e MySQL, grande utilizzatore e stimatore dei prodotti Google ed Amazon AWS. Attualmente vive in Perù nella città di Lima, da dove porta avanti il suo progetto favorito riguardante il blog multitematico di startbyzero.com.

Condividi

Commenti

Scrivi un tuo commento o qualche consiglio